Puede pasar argumentos a un procedimiento (función o sub) por referencia o por valor. De manera predeterminada, Excel VBA pasa argumentos por referencia. Como siempre, vamos a utilizar un ejemplo fácil de hacer las cosas más claras.

Coloque un botón de comando en la hoja de trabajo y añadir las líneas de código siguientes:

Dim x As Integer

x = 10

MsgBox Triple(x)

MsgBox x

El código llama a la función triple. Es el resultado de la segunda MsgBox nos interesa. Funciones necesitan ser colocados en un módulo.

  1. Abra el Editor de Visual Basic y haga clic en Insertar, Módulo.

  2. Añadir las siguientes líneas de código:

Function Triple(ByRef x As Integer) As Integer

x = x  3

Triple = x

End Function

Como resultado al hacer clic en el botón de comando en la hoja:

ByRef Result

ByRef Result

  1. Sustituir ByRef con ByVal.

Function Triple(ByVal x As Integer) As Integer

x = x  3

Triple = x

End Function

Como resultado al hacer clic en el botón de comando en la hoja:

ByVal Result

ByVal Result

Explicación: Al pasar argumentos por referencia que hacen referencia al valor original. El valor de x (el valor original) se cambia en la función. Como resultado, el segundo MsgBox muestra un valor de 30. Al pasar argumentos por valor estamos pasando una copia a la función. El valor original no se cambia. Como resultado, los MsgBox segunda muestra un valor de 10 (el valor original).