Excel VBA ByRef y ByVal
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.
-
Abra el Editor de Visual Basic y haga clic en Insertar, Módulo.
-
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:
-
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:
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).