VBA ByVal - ¿Cómo utilizar el argumento de la función ByVal? (Ejemplos)

Argumento de la función ByVal de Excel VBA

ByVal es una declaración en VBA. ByVal significa By Value, es decir, cuando el subprocedimiento llamado desde el procedimiento, el valor de las variables se restablece al nuevo valor del nuevo procedimiento llamado.

En VBA, cuando trabajamos con funciones que se llaman en diferentes funciones, hay ciertas circunstancias en las que el valor del argumento original cambia cuando se llama a la función; la declaración byval prohíbe que el procedimiento o el código cambien el valor del argumento.

Sé que no es fácil de entender leyendo la explicación, pero con ejemplos prácticos de función, podemos entender mejor.

¿Cómo usar ByVal Argument en VBA?

Ejemplo 1

Por ejemplo, mire los códigos VBA a continuación.

Código:

Sub Macro1 () Dim k As Integer k = 50 Macro2 k MsgBox k End Sub
Sub Macro2 (ByVal k como entero) k = k + 5 End Sub

En los dos procedimientos macro anteriores, tenemos una variable común "k" en todos los procedimientos. Déjame explicarte esto en detalle antes de ver el resultado.

En la primera macro, hemos asignado el valor de 50 a la variable "k".

Dim k As Integer k = 50

A continuación, hemos llamado al segundo procedimiento de macro desde la primera macro.

Macro2 k

En Macro2, hemos restablecido el valor de la variable a k = k + 5. En esta macro, hemos utilizado el argumento ByVal para asignar el valor a la variable "k".

Ahora para entender "ByVal", ejecutemos el código VBA línea por línea presionando la tecla F8.

# 1 - Al presionar la tecla F8 primero, resaltará la primera línea del Macro1.

En este momento, coloque un cursor en la variable "k" y debería mostrar el valor de la variable "k".

Por el momento, el valor de "k" es cero.

# 2: presione la tecla F8 una vez más y saltará a la tercera línea.

Incluso ahora, el valor de "k" sigue siendo cero.

# 3 - Presione la tecla F8 ahora y vea el valor de k.

Dado que el valor "k" se establece en 50 y el código se ejecuta, el valor se muestra como 50.

# 4 - Ahora, la línea resaltada es "Macro2 k", es decir, presionando la tecla F8, saltará al segundo procedimiento, Macro2.

# 5 - Incluso ahora, el valor de la variable "k" en este procedimiento también se muestra como 50. Pero dentro de esta macro, estamos restableciendo el valor de la variable "k" como k = k + 5 es decir, 55. Ahora presione el Tecla F8 dos veces más.

Como puede ver arriba, el valor de “k” es 55 ahora.

# 6: presione la tecla F8 y volverá al procedimiento Macro1.

Cuando la macro saltó de nuevo al procedimiento original Macro1, nuestro valor de variable “k” ya no es 55 en lugar del valor original en este procedimiento, es decir, 50.

Cuando presiona la tecla F8, podemos ver solo 50 en el cuadro de mensaje en VBA.

Entonces, como hemos dicho al comienzo del artículo, el argumento "ByVal" no lleva valores de un procedimiento a otro, aunque lleva el valor de la variable de la primera macro a la segunda en el momento en que encuentra la línea " ByVal ”cuando vuelve a la macro original, restablece el valor al valor original solo en el procedimiento.

Ejemplo # 2

Ahora eche un vistazo a las dos macros siguientes.

Código:

Sub P1 () Dim k As Integer: k = 10 Llamar P2 (k) MsgBox k End Sub
Sub P2 (ByVal k como entero) k = 15 End Sub
  • Esto es similar al primer ejemplo. En la macro “P1” le hemos asignado el valor de 10 a la variable “k”, y en la misma macro “P1” hemos llamado a la segunda macro “P2” con la variable “k”.
  • En la segunda macro "P2" , hemos utilizado el argumento ByVal, y esta vez, el valor de la variable "k" es 15.

Esta macro lleva el valor de la variable "k" como diez de la macro "P1" a la macro "P2", y en esta macro, el valor se restablecerá a 15, pero en el momento en que regrese para finalizar la macro a la primera macro "P1" el valor de "k" de nuevo a 10, no a 15.

Cosas para recordar

El argumento ByVal no afecta el valor de la variable incluso después de ejecutar la macro, pero con el argumento By Ref, podemos llevar el valor de la variable de una macro a otra.

Articulos interesantes...