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.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function.png.webp)
¿Cómo pasar un argumento usando VBA ByRef Argument?
Ejemplo 1
Por ejemplo, mire el siguiente código VBA.
Código1:
Sub Procedimiento1 () Dim k As Integer k = 50 Procedimiento2 k MsgBox k End Sub
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_2.png.webp)
Código2:
Sub Procedimiento2 (ByRef k como entero) k = k + 10 End Sub
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_3.png.webp)
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, agregué una nueva línea, es decir
Procedimiento2 k
Este es el segundo nombre del 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.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_4.png.webp)
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_5.png.webp)
Presione la tecla F8 dos veces más y coloque un cursor en la variable "k" para ver el valor de la variable "k".
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_6.png.webp)
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, saldrá del procedimiento actual y pasará al segundo procedimiento.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_7.png.webp)
Ahora que hemos utilizado la palabra ByRef, lleva el valor de la variable "k" del procedimiento anterior.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_8.png.webp)
Presione la tecla F8 dos veces. Volverá al subprocedimiento anterior. Si observa 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 a eso, es decir, 60 en total.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_9.png.webp)
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.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_10.png.webp)
Obtuvimos el resultado como 60 en lugar del valor predeterminado de 50 en este procedimiento.
La razón por la que obtuvimos 60 porque, en el segundo procedimiento, aplicamos “ByRef”, por lo que 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
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_12.png.webp)
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.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_13.png.webp)