Passando argumentos com eficiência

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 o mesmo tempo para serem passados e a mesma quantidade de espaço (4 bytes) dentro de um procedimento, independentemente do tipo de dados do argumento.

Você pode passar um argumento por valor se incluir a palavra-chave ByVal na declaração do procedimento. Os argumentos passados pelo 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. Devido a 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 à 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 S. 
S = 5 
Print Factorial(S) ' Displays 120 (the factorial of 5) 
Print S ' Displays 5. 

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

Como o ByVal faz uma cópia do argumento, ele permite que você passe uma variante para a função Factorial . Não é possível 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.