Excel VBA ByRef y ByVal
Puede pasar argumentos a un procedimiento (función o sub) por referencia o por valor. Por defecto, Excel VBA Pasa argumentos por referencia. Como siempre, usaremos un ejemplo fácil para aclarar las cosas.
Coloque un botón de comando en su hoja de trabajo y agregue las siguientes líneas de código:
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 deben colocarse en un módulo.
1. Abra el Editor de Visual Basic y haga clic en Insertar, Módulo.
2. Agregue las siguientes líneas de código:
x = x * 3
Triple = x
End Function
Resultado al hacer clic en el botón de comando en la hoja:
3. Reemplace ByRef con ByVal.
x = x * 3
Triple = x
End Function
Resultado al hacer clic en el botón de comando en la hoja:
Explicación: Al pasar argumentos por referencia, estamos haciendo 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, le 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).