ByRef y ByVal

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

Deja un comentario