Las variables en VBA son una parte esencial de la programación. Como alguien me dijo hace mucho tiempo, las palabras pequeñas en programación son las más importantes… de las largas se acuerda todo el mundo.
Introducción a las variables estáticas en VBA
Las variables estáticas en VBA se declaran de manera similar a las variables no estáticas. Su comportamiento es diferente.
Las variables normales que declaramos empezando por Dim (más sobre declarar variables) se guardan en la memoria de Excel hasta que terminamos el procedimiento (qué es una macro?) o cerramos el formulario que estamos utilizando.
En cambio, las variables estáticas se guardan en memoria siempre que mantengamos el libro de Excel abierto o no demos al botón de Resetear de la cinta de opciones.
Declarar variables estáticas
Declarar variables estáticas en VBA es muy sencillo, siemplemente antes de escribir nuestra variable y en vez de escribir la palabra Dim escribiremos la palabra Static.
Por ejemplo, si queremos declarar la variable “x” como variable estática usaremos el siguiente código:
Static x as Integer
Ejemplos de variables estáticas en VBA
En el siguiente pedacito de código, cada vez que lo ejecutemos tendremos el mismo valor, es decir 1, porque la variable no la estamos declarando como estática:
Sub Ejemplo1() Dim x As Integer x = x + 1 MsgBox x End Sub
En cambio, en el siguiente ejemplo, cada vez que ejecutemos la macro obtendremos resultados correlativos, primero el 1, luego el 2, luego el 3… y así sucesivamente.
Sub Ejemplo2() Static x As Integer x = x + 1 MsgBox x End Sub
Bonus track: Ejercicio propuesto
Crear una pequeña macro que cada vez que se ejecute agregue un nuevo caracter a una cadena de texto y que se visualice en pantalla.
La solución a este ejercicio no es muy compleja pero deberemos usar la función CHAR que nos devuelva un caracter y la función RANDBETWEEN para generar números aleatorios en VBA.
La macro resultante sería la siguiente:
Sub Generar_Cadena_Aleatorio() Dim x As Integer Static Texto As String x = WorksheetFunction.RandBetween(100, 200) Texto = Texto & Chr(x) MsgBox Texto End Sub
En el ejemplo anterior hemos declarado dos variables, una como variable normal (la variable x) y otra como variable estática (la variable Texto). En la variable x simplemente generamos un valor aleatorio cada vez que se ejecuta la macro y en la variable Texto vamos guardando los diferentes resultados que vamos obteniendo y añadiéndole un caracter cada vez que ejecutamos la macro.