Partilhar via


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.