VBA – Pasar variables entre macros

Hola Freaks!! Si alguna vez has tenido que realizar un proyecto gordo en Excel o simplemente has desarrollado macros con mucho código, seguro que has pensado en definir macros pequeñas e ir haciendo llamadas entre sí para tener el código mejor estructurado y mejor organizado. Pero… ¿Cuál es el problema con el que te encuentras al desarrollarlas de esta manera? Que si quieres usar una variable definida en otra macro debes saber pasar variables entre macros.

Como pasar variables entre macros VBA usando ByVal

En Excel se pueden pasar variables entre macros durante la ejecución de las mismas.

Que es ByVal VBA

Especifica que una argumento se pasa de manera que la propiedad o procedimiento llamado no puede modificar el valor de una variable subyacente del argumento en el código de llamada.

El siguiente es un ejemplo de como se debe representar la macro que hereda la variable definida en otra definida con anterioridad:

Sub UsarVariable (ByVal Fila as Integer) 

La información entre los paréntesis se conoce como un argumento.

Debe haber dos procedimientos, un procedimiento de llamada y un procedimiento llamado. El Procedimiento de Llamada es aquel del cuál se obtiene la variable y el Procedimiento Llamado es al que se le pasa la variable.

Ejemplo de pasar un parametro entre macros en VBA

El siguiente es un ejemplo muy simple de pasar un parámetro entre un procedimiento de llamada al procedimiento llamado (el procedimiento con los argumentos):

   Sub ObtenerValor1() 'VBA Procedimiento de Llamada.
     Dim Fila As Integer
     Fila=1
     Call  UsarVariable (Fila)
   End Sub

   Sub  UsarVariable (ByVal Fila as Integer)  'VBA Procedimiento Llamado   
     Dim rango As Range
     Set rango=Row( Fila )
     rango.Copy 
   End Sub  

En el ejemplo anterior hay un solo argumento y es un entero. Un punto importante es que el tipo de argumentos debe coincidir.

Entonces, si la variable se declara como un entero, no se puede pasar como una cadena, por ejemplo.

Ejemplo de pasar dos variables entre macros en VBA

El siguiente es un ejemplo de un procedimiento VBA que pasa dos variables:

En el ejemplo anterior, la variable Anio se transferirá de Procedimiento de Llamada al primer argumento del procedimiento Generar_Ficheros y la variable Mes se transferirá al segundo argumento del procedimiento Generar_Ficheros.

Diferencias entre ByVal y ByRef

Hay una gran diferencia a la hora de pasar variables entre macros mediante ByVal y ByRef que se tiene que tener en cuenta a la hora de programar una función.

Pasar el argumento mediante ByVal crea una copia de la variable original, por lo que cualquier modificación hecha a dicha variable no afectará a la variable original.

El paso de argumento tipo ByRef hace una referencia de la variable original, por lo que cualquier modificación hecha a dicha variable si afectará a la variable original.

Si tienes alguna duda, realízanos la pregunta en el foro excel

<< Clase 8.5.5: Macro para incluir valor o fórmula en una celda (VBA) Clase 8.5.7: VBA identificar día de la semana – Función WeekDay en VBA
<< Regresar al índice de Curso de Excel Online Avanzado

Autor entrada: Javi de Excelfreak

Deja un comentario