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.