Transmitir argumentos de forma eficiente
Todos os argumentos são transmitidos aos procedimentos por referência, a menos que especifique o contrário. Isto é eficiente porque todos os argumentos transmitidos por referência demoram o mesmo tempo a passar e a mesma quantidade de espaço (4 bytes) dentro de um procedimento, independentemente do tipo de dados do argumento.
Pode transmitir um argumento por valor se incluir o palavra-chave ByVal na declaração do procedimento. Os argumentos transmitidos pelo valor consomem de 2 a 16 bytes no procedimento, consoante o tipo de dados do argumento. Os tipos de dados maiores demoram um pouco mais tempo a passar pelo valor do que os mais pequenos. Por este motivo, geralmente, os tipos de dados Cadeia e Variante não devem ser transmitidos por valor.
Transmitir um argumento por valor copia a variável original. As alterações ao argumento no procedimento não são refletidas na 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 apresentariam 1 e 0. Isto acontece porque MyVar
, em seguida, se refere à variável S
, que é reduzida em 1 até ser igual a 0.
Uma vez que o ByVal faz uma cópia do argumento, permite-lhe transmitir uma variante para a função Factorial . Não pode transmitir 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.