¿Cuál es la diferencia entre los argumentos ByRef y ByVal? - Pregunta de la entrevista de VBA

Esta es una de las preguntas más frecuentes en las entrevistas de VBA. En este artículo aprenderemos cuál es la diferencia entre los argumentos ByVal y ByRef en Excel VBA.

Definiciones:

Argumento ByRef: Es la forma abreviada literal de por referencia. Cuando se pasa un argumento como argumento ByRef a una función o sub diferente, se envía la referencia de la variable real. Cualquier cambio realizado en la copia de la variable se reflejará en el argumento original.
Podemos decir que, en lugar de valor, la ubicación del valor se envía a la función usando ByRef a una función.
Este es el argumento predeterminado en VBA. No es necesario escribir ByRef antes del argumento.
Sintaxis:

Sub x (a como variante)

'O

Sub x (ByRef a como variante)

Argumento ByVal: Es una forma literal corta de por valor. Cuando se pasa un argumento como argumento ByVal a una función o sub diferente, solo se envía el valor del argumento. El argumento original se deja intacto. Cualquier cambio realizado en la función externa o sub no se reflejará en el argumento original.
Para declarar un argumento como ByVal, debe utilizar la palabra clave ByVal antes del argumento.
Sintaxis:
Sub x (ByVal a como variante)
Ahora conocemos las definiciones. Veamos un ejemplo y acabemos con eso.

Ejemplo de ByRef

Aquí tienes un programa simple.

Sub X (ByRef a como variante) a = 20 Debug.Print "en valor sub X de a =" & a End Sub Sub Y () a = 10 Llame a X (a) Debug.Print "en valor sub Y de a =" & a End Sub 

Entonces, aquí tenemos dos subrutinas. El primer sub es X que toma un argumento variante como ByRef.
(Puede omitir la palabra clave ByRef. Es la predeterminada).
A continuación, establece el valor de a = 20 end luego imprime el valor de a.

Sub Y es la subrutina principal que llama a la subrutina X. Establece el valor de a = 10 luego llama a la subrutina X y pasaa como argumento. Luego imprime el valor de a en Y.

Ahora, cuando ejecuta Sub Y, esta es la salida que obtiene.
en sub X valor de a = 20

en valor sub Y de a = 20

Conclusión: el valor del original a se cambia por sub X y se establece en 20 para ambos subwoofers.
puede ver que cuando se ejecuta Sub Y, el valor inicial de a era 10. Y llama a X (a). X establece el valor de a = 20. Imprime “en valor sub X de a = 20”. El control vuelve ay e imprime un valor sub Y de a = 20.
Este es el efecto del argumento ByRef.

Ejemplo de ByVal:

Este es un ejemplo de ByVal

Sub X (ByVal a como variante) a = 20 Debug.Print "en valor sub X de a =" & a End Sub Sub Y () a = 10 Llame a X (a) Debug.Print "en valor sub Y de a =" & a End Sub

Ambos ejemplos son iguales con la única diferencia de pasar argumentos. Aquí en X, los argumentos se declaran como ByVal. Cuando ejecuta la subrutina Y esta vez, la salida es:

en sub X valor de a = 20
en valor sub Y de a = 10


Conclusión: El valor de a original NO se cambia por sub X. Es 20 para X y 10 para Y.

Cuando Y llama a X con a, solo envía el valor de a, no la dirección de a. Por tanto, cualquier cambio realizado en a no se refleja en la variable original.

Para la prueba, si imprime el valor de a en X antes de establecerlo en 20, imprimirá 10. Porque el 10 se pasa a a en X usando byVal. Usando ByRef enviaste a de Y para a de X.

Es una pregunta fácil, pero muchos de nosotros confundimos esto, en la pregunta de la entrevista vba. La razón es que no lo usamos mucho. La mayoría de las veces copiamos el valor en diferentes variables..

Así que sí, chicos, esta es la diferencia entre los argumentos ByRef y ByVal en Excel VBA. Avíseme, si tiene alguna duda con respecto a este tema o cualquier otro tema de VBA o Excel. La sección de comentarios es toda tuya.

Agregar y guardar un nuevo libro de trabajo usando VBA en Microsoft Excel 2016

Mostrar un mensaje en la barra de estado de Excel VBA

Desactive los mensajes de advertencia con VBA en Microsoft Excel 2016

Articulos populares:

La función BUSCARV en Excel

CONTAR.SI en Excel 2016

Cómo usar la función SUMIF en Excel

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave