MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Argumento em Function se torna clone

    Compartilhe

    DaviSilva
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 21
    Registrado : 26/09/2013

    [Resolvido]Argumento em Function se torna clone

    Mensagem  DaviSilva em Ter 20 Set 2016, 02:36

    Bom, apesar do titulo do tópico ser estranho, vou explicar.

    Tenho duas funções onde cada uma faz uma verificação de  arquivos no sistema.

    Código:
    Function instalacaoMws(strCam As String) As Boolean
        
        strCam = strCam & "\MWSPlay.exe"

    End Function
    _______________________________________________

    Function versaoMws(caminho As String) As String
        
        caminho = caminho & "\MagicWorkstation.exe"

    End Function
    _______________________________________________

    Sub testeArg()

        Dim bln As Boolean
        Dim arg As String, str As String

        arg = "Teste"

        bln = instalacaoMws(arg)
        str = versaoMws(arg)

        MsgBox arg
        
    End Sub

    As duas estão em um modulo de formulário.
    Chamo uma depois da outra em um botão.

    O valor de [strCam] que foi manipulado na função 1, fica armazenado na variavel [arg]. Quando chamo a segunda função o valor já não é mais ["Teste"] e sim ["Teste\MWSPlay.exe"].

    O Nome dos argumentos em cada função eram os mesmo. Então imaginei que o problema seria este. Troquei os nomes, mas o valor manipulado ainda esta retornando o seu valor para a variavel [arg].

    Eu até sei que se eu fizer [arg = "Teste"] antes de chamar cada função, resolve meu problema. Mas como sou daquelas pessoas que gostam de entender o porque das coisas, eis a questão.

    Alguém sabe me dizer porque a minha variável [arg] esta recebendo um valor que eu NÂO setei dentro da primeira função?

    Acredito que [Arg] e [strCam] da primeira função se tornaram um só. Se é que isso é possível e eu não esteja falando besteira.

    Gabriel Brunichaki
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 11/12/2015

    Re: [Resolvido]Argumento em Function se torna clone

    Mensagem  Gabriel Brunichaki em Ter 27 Set 2016, 15:37

    Bom dia,

    Tente acrescentar ByVal antes dos parâmetros. Ex:

    Function instalacaoMws(ByVal strCam As String) As Boolean
       
       strCam = strCam & "\MWSPlay.exe"

    End Function
    _______________________________________________

    Function versaoMws(ByVal caminho As String) As String
       
       caminho = caminho & "\MagicWorkstation.exe"

    End Function


    .................................................................................
    “Não podemos solucionar problemas usando a mesma forma de raciocínio que usamos quando os criamos.”
    – Albert Einstein

    DaviSilva
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 21
    Registrado : 26/09/2013

    Resolvido!

    Mensagem  DaviSilva em Ter 27 Set 2016, 20:14

    Mais uma vez muito obrigado pelo retorno. Funcionou perfeitamente e ainda entendi o porque.

    Após testar a sintaxe que o Gabriel Brunichaki me passou, fui buscar no ajuda do próprio Access para tentar entender o funcionamento. Eis que obtive isto:

    ByVal
    Uma forma de passar o valor de um argumento a um procedimento em vez de passar o endereço. Permite que o procedimento acesse uma cópia da variável. Como resultado, o valor real da variável não pode ser alterado pelo procedimento ao qual é passado.

    ByRef
    Uma forma de passar o endereço de um argumento a um procedimento em vez de passar o valor. Isso permite que o procedimento acesse a variável real. Como resultado, o valor real da variável pode ser alterado pelo procedimento ao qual é passado. A menos que especificado o contrário, os argumentos são passados por referência.

    Optional
    Opcional. Indica que um argumento não é obrigatório. Se usado, todos os argumentos subseqüentes em arglist deverão ser opcionais e declarados através da palavra-chave Optional. Optional não pode ser usado para qualquer argumento se ParamArray for usado.

    ParamArray
    Opcional. Usada apenas como o último argumento em arglist para indicar que o argumento final é uma matriz Optional de elementos Variant. A palavra-chave ParamArray permite que você forneça um número arbitrário de argumentos. Ela não pode ser usada com ByVal, ByRef ou Optional.

    Muito obrigado, espero que essa informação possa ajudar outras pesoas.

      Data/hora atual: Dom 04 Dez 2016, 01:53