¿Cuál es la diferencia entre ByRef y ByVal argumentos? | VBA Pregunta De la Entrevista
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 literal corta de byRef. 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 necesitamos 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 by value. 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í hay un programa simple.
Sub X(ByRef a As Variant) a = 20 Debug.Print "in sub X value of a = " & a End Sub Sub Y() a = 10 Call X(a) Debug.Print "in sub Y value of 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 y 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 pasa a como argumento.
Luego imprime el valor de a en Y.
Ahora, cuando ejecuta Sub Y, esta es la salida que obtiene.
en valor sub X 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.
ByVal Ejemplo:
Este es un ejemplo de ByVal
Sub X(ByVal a As Variant) a = 20 Debug.Print "in sub X value of a = " & a End Sub Sub Y() a = 10 Call X(a) Debug.Print "in sub Y value of 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 valor sub X de a = 20 en valor sub Y de a = 10
Conclusión: El valor de a original NO es cambiado 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 una de Y a una 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 una variable diferente. * 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.
Artículos relacionados:
link: / files-workbook-and-worksheets-in-vba-delete-sheets-without-confirm-prompts-using-vba-in-microsoft-excel [Eliminar hojas sin mensajes de confirmación usando VBA en Microsoft Excel]
link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Add And Save New Workbook Using VBA In Microsoft Excel 2016]
link: / menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Mostrar un mensaje en la barra de estado de Excel VBA]
link: / general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Desactivar mensajes de advertencia usando VBA en Microsoft Excel 2016]
Artículos populares:
enlace: / fórmulas-y-funciones-introducción-de-vlookup-function [La función VLOOKUP en Excel]
enlace: / tips-countif-in-microsoft-excel [COUNTIF en Excel 2016]
link: / excel-formula-and-function-excel-sumif-function [Cómo usar la función SUMIF en Excel]