VBA ByRef

Argumento de la función ByRef de Excel VBA

ByRef en VBA es una función llamada como por referencia donde proporcionamos una referencia a cualquier argumento en nuestro código, cuando hacemos funciones personalizadas y queremos usar el valor de cualquier variable que esté definida anteriormente antes de la función que usamos la función ByRef, la La sintaxis a utilizar es simple como Función Nombre de función (Variable ByRef como Tipo de datos).

Al usar Byref podemos apuntar al valor de la variable original sin alterar el valor de la variable. Esto es como pasar el valor de la variable directamente al subprocedimiento de VBA o la función de VBA.

¿Cómo pasar un argumento usando VBA ByRef Argument?

Puede descargar esta plantilla de Excel de VBA ByRef aquí - Plantilla de Excel de VBA ByRef

Ejemplo 1

Para ver un ejemplo, mire el siguiente código VBA.

Código1:

 Sub Procedimiento1 () Dim k As Integer k = 50 Procedimiento2 k MsgBox k End Sub 

Código2:

 Sub Procedimiento2 (ByRef k como entero) k = k + 10 End Sub 

En el primer procedimiento, he declarado la variable "k" como Integer.

Luego le he asignado el valor a esta variable como 50.

Después de eso, he agregado una nueva línea, es decir

Procedimiento2 k

Este es el nombre del segundo procedimiento. En este procedimiento, he declarado la variable entre paréntesis como String en VBA pero he usado la palabra "ByRef".

 ByRef k como entero 

Aquí he asignado el valor de la variable "k" como

k = k + 10

Ok, ahora ejecutaré el código paso a paso presionando la tecla F8.

Presione la tecla F8 dos veces más y coloque un cursor en la variable "k" para ver el valor de la variable "k".

Como hemos asignado el valor como 50, muestra el valor como 50. Ahora ha resaltado la línea Procedimiento2 k, que es el segundo nombre del procedimiento.

Si presiono la tecla F8 ahora saltará del procedimiento actual y pasará al segundo procedimiento.

Ahora que hemos usado la palabra ByRef, lleva el valor de la variable “k” del procedimiento anterior.

Presione la tecla F8 dos veces para volver al subprocedimiento anterior. Si observa que en el segundo procedimiento he aplicado la fórmula como k = k + 10. es decir, el valor de "k" es 50 y luego agrega 10 más, es decir, 60 en total.

Ahora el código se está ejecutando en el primer procedimiento y en este procedimiento el valor de la variable “k” es 50. Pero presione la tecla F8 y vea el resultado en un cuadro de mensaje.

Obtuvimos el resultado como 60 en lugar del valor predeterminado de 50 en este procedimiento.

La razón por la que obtuvimos 60 es porque en el segundo procedimiento hemos aplicado “ByRef” entonces, llevó el resultado de la ecuación (k = k + 10) al procedimiento actual.

Aquí el valor de la primera variable “k” es 50 y en el segundo procedimiento el valor de la variable “k” es k + 10, es decir, 60 que se lleva al primer procedimiento.

En el primer procedimiento, el valor original de la variable “k” era 50, por lo que By Ref ha cambiado el valor original de 50 a 60 ejecutando la ecuación k = k + 10, es decir, k = 50 +10 = 60.

Ejemplo # 2

Ahora eche un vistazo a un ejemplo más.

Codigo 1:

 Sub P1 () Dim MyNumber As Long MyNumber = 1 Call Change_ByRef (MyNumber) 'MyNumber se cambia mediante el procedimiento Change_ByRef MsgBox "Mi número es ahora:" & MyNumber End Sub 

Codigo 2:

 Sub Change_ByRef (ByRef NewNumber tan largo) NewNumber = 14 End Sub 

Esto funciona exactamente igual que el código anterior.

Inicialmente, el valor de la variable "MyNumber" es 1. Luego llamamos al procedimiento siguiente por su nombre

 Llamar Change_ByRef (MyNumber)

En ese procedimiento, el valor de la variable es 14.

Entonces, cuando regrese al procedimiento anterior, asignará el nuevo valor a la variable como 14.