Se pueden pasar argumentos a un procedimiento (función o sub) por referencia o por valor . Por defecto, Excel VBA pasa los argumentos por referencia. Como siempre, utilizaremos un ejemplo sencillo para aclarar las cosas.
Coloca un botón de comando en tu hoja de trabajo y añade las siguientes líneas de código:
Dim x Como Entero x = 10 MsgBox Triple(x) MsgBox x
El código llama a la función Triple. Es el resultado del segundo MsgBox en el que estamos interesados. Las funciones necesitan ser colocadas en un módulo.
1. Abra el Editor de Visual Basic y haga clic en Insertar, Módulo.
2. Añade las siguientes líneas de código:
Función Triple(ByRef x como entero) como entero x = x * 3 Triple = x Fin de la función
Resultado cuando se hace clic en el botón de comando de la hoja:
3. Reemplaza ByRef por ByVal.
Función Triple(ByVal x como entero) como entero x = x * 3 Triple = x Fin de la función
Resultado cuando se hace clic en el botón de comando de la hoja:
Explicación: Al pasar los argumentos por referencia nos referimos 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 los argumentos por valor estamos pasando una copia a la función. El valor original no se cambia. Como resultado, el segundo MsgBox muestra un valor de 10 (el valor original).