Ya hemos vistos en los anteriores post de esta serie ¿Qué es una variable en VBA para Excel? , ¿Cómo declarar variables de datos en VBA para Excel? y ¿Cómo declarar variables de objetos en VBA para Excel?.
Para finalizar la serie, vamos a abordar la siguientes dudas que se le pueden presentar a un lector:
- ¿Hasta cuando es válida una variable?
- ¿Puedo utilizar en un módulo determinado, una variable declarada en otro módulo distinto?
- ¿Cómo puedo decidir y controlar la vida de una variable (su duración o permanencia) y su ámbito de validez (en qué módulos o procedimientos será válida)?
Ámbito de validez de una variable
Hasta ahora, hemos visto cómo declarar variables dentro de un procedimiento o macro. Esas variables podrán ser utilizadas en ese mismo procedimiento (llamadas variables de procedimiento o locales), pero no en otros. Si deseamos crear una variable que pueda ser reconocida por varios procedimientos dentro de un mismo módulo (llamadas variables de módulo), debemos declararla al principio del módulo:
Cuando al principio de un módulo declaramos variables y a continuación escribimos los procedimientos, el editor de VBA establece automáticamente una separación mediante una línea. Si situamos el cursor en la zona de declaraciones, en el desplegable de la derecha leeremos "(Declaraciones)".
Una vez sabido todo esto, debemos conocer que también es posible hacer que una variable tenga un ámbito de actuación a nivel de todo el proyecto o libro de Excel. Para ello, debemos declararla como variable pública de la siguiente forma (sin "Dim"):
¿Cuanto dura el efecto de declarar una variable?
Las variables declaradas a nivel de proyecto (las variables públicas) almacenan el valor asignado* de forma permanente aun habiendo sido ejecutado algún procedimiento.
(*) Hay que recordar y tener muy claros los conceptos "declarar" y "asignar valor" a una variable. En este artículo, en todo momento, estamos hablando de "declarar" variables. Es decir, comunicar su existencia y forma. Otra cosa es asignar el valor a las variables... esto se hace siempre dentro de los procedimientos "Sub". Por lo tanto, una variable declarada como "pública" y a la cual asignamos un valor dentro de cualquier procedimiento, mantendrá permanentemente el valor asignado en dicho procedimiento.
Las variables declaradas a nivel de módulo o a nivel de procedimiento vuelven a quedarse sin valor asignado cuando se termina de ejecutar el procedimiento que le dio el valor. Si queremos evitar que una variable de módulo o que una variable de procedimiento pierda el valor al ejecutarse el procedimiento que se lo asignó, debemos declararla como "Static". de esta forma:
En la imagen anterior vemos un ejemplo en el que conseguimos que la variable "MiVariable3" no sea pública (es decir, que sólo tenga un ámbito local o de procedimiento), pero que SÍ mantenga el valor que se le asigne a continuación en ese procedimiento, de forma permanente*.
(*)Permanente, excepto:
En la imagen siguiente, vemos un ejemplo de declaraciones de variables de distinto tipo en la zona de declaraciones. Podemos utilizar indistintamente las palabras Dim o Private para variables que NO queremos que tengan un ámbito de actuación más allá del módulo y junto a ellas, declarar otras variables que SÍ queremos que tengan un ámbito de proyecto (anteponiendo la palabra "Public"):
- Si la macro genera un error
- Si salimos de Excel
- Si VBA ejecuta código en otro módulo distinto
En la imagen siguiente, vemos un ejemplo de declaraciones de variables de distinto tipo en la zona de declaraciones. Podemos utilizar indistintamente las palabras Dim o Private para variables que NO queremos que tengan un ámbito de actuación más allá del módulo y junto a ellas, declarar otras variables que SÍ queremos que tengan un ámbito de proyecto (anteponiendo la palabra "Public"):
También podrían interesarte los siguientes artículos relacionados:
¿Qué es una variable en VBA para Excel?
¿Cómo declarar variables de datos en VBA para Excel?
¿Cómo declarar variables de objetos en VBA para Excel?.
No hay comentarios:
Publicar un comentario