Transferir argumentos eficientemente

Microsoft VBA

Transferir argumentos eficientemente

   

Todos los argumentos se pasan a los procedimientos por referencia, a menos que se especifique lo contrario. Esta forma de actuar es eficiente ya que se consume el mismo tiempo y el mismo espacio de almacenamiento dentro del procedimiento (4 bytes) para pasar todos los argumentos, sea cual sea su tipo de datos.

Se puede pasar un argumento por valor si se incluye la palabra clave ByVal en la declaración del procedimiento. Los argumentos que se pasan por valor consumen entre 2 y 16 bytes de almacenamiento del procedimiento, dependiendo del tipo de datos del argumento. Los tipos de datos más largos consumen más tiempo al pasar por valor que los tipos más pequeños. Por esta razón, los tipos de datos String y Variant no deberían pasarse normalmente por valor.

Al pasar un argumento por valor se copia la variable original. Los cambios que pueda sufrir el argumento dentro del procedimiento no tienen ningún efecto sobre la variable original. Por ejemplo:

Function Factorial (ByVal MiVar As Integer)    ' Function declaration.
    MiVar = MiVar - 1
    If MiVar = 0 Then 
        Factorial = 1
        Exit Function
    End If
    Factorial = Factorial(MiVar) * (MiVar + 1)
End Function

' Llama a Factorial con una variable S.
S = 5
Print Factorial(S)    ' Muestra en pantalla 120 (factorial de 5)
Print S                    ' Muestra en pantalla 5.

Si no se incluye ByVal en la declaración de la función, las instrucciones Print presentarían en pantalla los valores 1 y 0. La causa es que MiVar haría referencia entonces a la variable S, que baja de valor de 1 en 1 hasta que vale 0.

Dado que ByVal hace una copia del argumento, permite pasar una variante a la función Factorial del ejemplo anterior. No se puede pasar una variante por referencia si el procedimiento que declara el argumento es de un tipo de datos distinto.