/ / Excel VBA ByRef y ByVal

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:

Dim x As Integer
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:

Function Triple(ByRef x As Integer) As Integer

x = x * 3
Triple = x

End Function

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

ByRef Resultado

ByRef Resultado

3. Reemplace ByRef con ByVal.

Function Triple(ByVal x As Integer) As Integer

x = x * 3
Triple = x

End Function

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

Por resultado de

Por resultado de

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).

Lea también: