Passando argumentos de forma eficiente

Todos os argumentos são passados para procedimentospor referência, a menos que você especifique o contrário. Isso é eficiente porque todos os argumentos passados por referência levam a mesma quantidade de tempo para passar e a mesma quantidade de espaço (4 bytes) dentro de um procedimento, independentemente do tipo de dados do argumento.

Você poderá passar um argumento por valor se incluir a palavra-chave ByVal na declaração do procedimento. Os argumentos passados por valor consomem de 2 a 16 bytes dentro do procedimento, dependendo do tipo de dados do argumento. Tipos de dados maiores demoram um pouco mais para passar por valor do que os menores. Por isso, os tipos de dados String e Variant geralmente não devem ser passados por valor.

Passar um argumento por valor copia a variável original. As alterações no argumento dentro do procedimento não são refletidas de volta para a variável original. Por exemplo:

Function Factorial(ByVal MyVar As Integer) ' Function declaration. 
    MyVar = MyVar - 1 
    If MyVar = 0 Then 
        Factorial = 1 
        Exit Function 
    End If 
    Factorial = Factorial(MyVar) * (MyVar + 1) 
End Function 
 
' Call Factorial with a variable N.
Sub Test()
    N = 5 
    Debug.Print Factorial(N) ' Displays 120 (the factorial of 5) 
    Debug.Print N ' Displays 5. 
End Sub

Sem incluir ByVal na declaração de função, as instruções Print anteriores exibiriam 1 e 0. Isso ocorre porque MyVar então se refere à variável S, que é reduzida em 1 até ser igual a 0.

Como ByVal faz uma cópia do argumento, ele permite que você passe uma variante para a função Factorial . Você não poderá passar uma variante por referência se o procedimento que declara o argumento for outro tipo de dados.

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.