¿Qué es ByRef en VBA?

Byref en VBA significa "Por referencia". Con la ayuda de VBA Byref, podemos apuntar al valor original sin cambiar el valor almacenado en las variables. En otras palabras, pasaremos directamente el valor a los procedimientos Sub en lugar de pasar por los métodos regulares de definición y asignación de los valores a las variables.

En VBA ByRef, definimos el subprocedimiento después de establecer la regla para ByRef. Esto podría hacerse debajo del subprocedimiento donde queremos escribir el código. En ByRef, redefinimos la variable que se usa en el procedimiento Sub. Y solo funciona correctamente cuando llamamos a la condición ByRef en nuestro subprocedimiento.

¿Cómo usar la función ByRef en Excel VBA?

A continuación se muestran los diferentes ejemplos para usar la función ByRef en Excel usando el código VBA.

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

Excel VBA ByRef - Ejemplo # 1

Primero, aprendamos cómo insertar un ByRef en VBA, para esto siga los pasos a continuación. En este ejemplo, veremos cómo usar VBA ByRef para un trabajo de resta matemática simple. Para esto, necesitaríamos un módulo.

Paso 1: Entonces, vaya a VBA y abra un módulo desde la opción de menú Insertar como se muestra a continuación.

Paso 2: en el módulo recién abierto, escriba la subcategoría de VBA ByRef como se muestra a continuación.

Código:

 Sub VBA_ByRef1 () End Sub 

Paso 3: Ahora defina una variable, digamos que es una A como Entero.

Código:

 Sub VBA_ByRef1 () Dim A como número entero Sub Sub 

Paso 4: Dé cualquier número a la variable A. Deje que ese número sea 1000.

Código:

 Sub VBA_ByRef1 () Dim A como entero A = 1000 End Sub 

Paso 5: Para imprimir el valor almacenado en la variable A, usaríamos Msgbox.

Código:

 Sub VBA_ByRef1 () Dim A como entero A = 1000 MsgBox A End Sub 

Paso 6: Ahora compilamos y ejecutamos este código haciendo clic en el botón Reproducir como se muestra a continuación. Obtendremos un cuadro de mensaje con el valor almacenado en la variable A como 1000 .

Ahora aplique VBA ByRef, cree otra subcategoría debajo de la primera y asigne la variable definida de la primera subcategoría con ByRef.

Paso 7: Con esto, permitiremos que la segunda subcategoría use los valores almacenados en la variable A.

Código:

 Sub VBA_ByRef1 () Dim A como entero A = 1000 MsgBox A End Sub Sub VBA_ByRef2 (ByRef A como entero) End Sub 

Paso 8: Ahora llame a la variable A aquí nuevamente y reste cualquier valor de la variable A, para obtener el valor de salida en la misma variable. Restemos 100 del valor de la variable A para obtener un número medible.

Código:

 Sub VBA_ByRef1 () Dim A como entero A = 1000 MsgBox A End Sub Sub VBA_ByRef2 (ByRef A como entero) A = A - 100 End Sub 

Paso 9: Ahora, si compilamos cada paso del código, notaremos que cuando el cursor alcanza la variable A, veremos que solo tiene 0 almacenado.

Paso 10: Cuando el cursor llegó a End Sub, la salida se obtendrá como 1000 en el cuadro de mensaje.

Paso 11: es porque no hemos asignado ByRef a la primera subcategoría. Ahora asignaremos el nombre de la subcategoría antes de la función de cuadro de mensaje de la primera subcategoría y veremos qué sucederá.

Código:

 Sub VBA_ByRef1 () Dim A como entero A = 1000 VBA_ByRef2 A MsgBox A End Sub Sub VBA_ByRef2 (ByRef A como entero) A = A - 100 End Sub 

Paso 12: Y ahora, vuelva a ejecutar el código completo. Veremos que el segundo valor que se almacena en la variable A como 100 se resta del primer valor 1000. Como resultado, obtuvimos el mensaje de salida como 900.

Paso 13: esta es la principal ventaja de usar ByRef. No necesitamos definir múltiples variables para un solo trabajo. Solo una variable es suficiente para realizar toda la tarea de diferentes maneras. Podemos usar más de un ByRef en un solo módulo.

Para justificar, lo que hemos entendido, agreguemos otro ByRef en el mismo Módulo.

Código:

 Sub VBA_ByRef1 () Dim A como entero A = 1000 VBA_ByRef2 A MsgBox A End Sub Sub VBA_ByRef2 (ByRef A como entero) A = A - 100 End Sub Sub VBA_ByRef3 (ByRef A como entero) End Sub 

Paso 14: en esta subcategoría, usemos la multiplicación.

Código:

 Sub VBA_ByRef1 () Dim A como entero A = 1000 VBA_ByRef2 A MsgBox A End Sub Sub VBA_ByRef2 (ByRef A como entero) A = A - 100 End Sub Sub VBA_ByRef3 (ByRef A como entero) A = A * 2 End Sub 

Paso 15: Compile nuevamente y ejecute el código nuevamente. Veremos que el valor obtenido de los pasos anteriores como 900 ahora se multiplica por 2 para obtener 1800 como salida.

Excel VBA ByRef - Ejemplo # 2

En este ejemplo, veremos cómo ByRef funciona con otro tipo de enteros.

Paso 1: abra un módulo y escriba la subcategoría como se muestra a continuación.

Código:

 Sub VBA_ByRef4 () End Sub 

Paso 2: Ahora defina una variable A como Doble. Esto nos permitirá usar valores decimales.

Código:

 Sub VBA_ByRef4 () Dim A como Sub doble final 

Paso 3: Asigne cualquier valor decimal a la variable A.

Código:

 Sub VBA_ByRef4 () Dim A As Double A = 1.23 End Sub 

Paso 4: Ahora use nuevamente el cuadro de mensaje para ver el valor almacenado en la variable A.

Código:

 Sub VBA_ByRef4 () Dim A As Double A = 1.23 MsgBox A End Sub 

Ahora, si ejecutamos el código, obtendríamos 1.23 como salida.

Paso 5: de manera diferente, usaremos Function para definir ByRef como Double con la variable A.

Código:

 Sub VBA_ByRef4 () Dim A como Double A = 1.23 MsgBox A End Sub Function AddTwo (ByRef A As Double) como Double End Function 

Paso 6: Ahora agregue cualquier número a la variable A. Digamos que es 10.

Código:

 Sub VBA_ByRef4 () Dim A como Double A = 1.23 MsgBox A End Sub Function AddTwo (ByRef A As Double) Como Double A = A + 10 End Function 

Paso 7: Y nuevamente use esta función ByRef definida en la primera subcategoría. Aquí veremos dos cuadros de mensaje, uno para la variable A y otro para ByRef.

Código:

 Sub VBA_ByRef4 () Dim A como Double A = 1.23 MsgBox AddTwo (A) MsgBox A End Sub Function AddTwo (ByRef A As Double) As Double A = A + 10 End Function 

Paso 8: Lo mismo se reflejaría también en el cuadro de mensaje.

Paso 9: Y en la próxima ejecución, dará el valor agregado de 10 en el valor variable original de 1.23 como se muestra a continuación.

Así es como VBA Byref toma la referencia del valor definido una vez y luego completa la salida según la nueva condición.

Pros y contras de VBA ByRef

  • Al escribir códigos grandes, ahorra mucho tiempo al considerar la variable ya definida, de modo que su valor se puede usar una y otra vez.
  • No tenemos que definir muchas variables según la fórmula que queremos aplicar.
  • Podemos aplicar muchas condiciones ByRef en un solo módulo sin perturbar el proceso.
  • No podemos usar VBA Byref en una estructura de código compleja.

Cosas para recordar

  • Al considerar más de una condición ByRef, la salida se basará en el último subprocedimiento ByRef que definimos, pero también considera todas las condiciones ByRef utilizadas anteriormente.
  • La salida final tendrá salida procesada secuencialmente. No solo el último.
  • Este proceso no puede hacerse grabando la macro.
  • Podemos ver el valor almacenado en cada etapa de la variable compilando el código.
  • Una vez hecho esto, guarde el archivo de Excel como formato de Excel Macro Enabled, para que no perdamos código en el futuro.

Artículos recomendados

Esta es una guía de VBA ByRef. Aquí discutimos cómo usar la función ByRef en Excel usando el código VBA junto con ejemplos prácticos y una plantilla de Excel descargable. También puede consultar los siguientes artículos para obtener más información:

  1. Guía de la función VBA UBound
  2. Función de Excel OFFSET (Ejemplo, Usos)
  3. Crear hipervínculo en Excel VBA
  4. ¿Cómo utilizar Excel Fill Handle?

Categoría: