Curso Excel VBA y Macros – Cap. 16 – Ámbito de las variable, tiempo de vida y variables estáticas
Hasta este momento hemos visto que las variables las podemos utilizar para guardar valores e irlos cambiando según se requiera durante la ejecución de la macro. En este tutorial y video veremos que podemos acceder a las variables de 3 maneras desde un ámbito en particular hasta el general. Incluso veremos los valores de las variables pueden conservarse incluso después de terminar la ejecución de las macros. Los temas que veremos en este capítulo son:
- Ámbito de las variables.
- Constantes públicas.
- Tiempo de vida de las variables.
- Variables estáticas.
Ver video Capítulo 16 Excel VBA & Macros
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Ámbito de las variables
Aquí hacemos referencia a la manera en la que los valores de las variables pueden ser accedidos. Existen 3 maneras en la que podemos almacenar variables, y todo dependerá de qué tanto necesitemos que los valores almacenados puedan ser reutilizados.
A nivel de procedimiento (macro)
En este nivel los valores de las variables permanecerán vivos solo durante la ejecución de la macro, al finalizar la macro los valores se perderán.
En el siguiente ejemplo creamos una macro llamada Prueba y con la instrucción DIM vamos a declarar la variable Nombre de tipo String o cadena de texto. Noten que el valor de la celda B1 de la segunda hoja es guardado en la varible Nombre.
Option Explicit
Sub Prueba()
Dim Nombre as String
Nombre = ThisWorkbook.Sheets(2).Range(“B1”).Value
MsgBox Nombre
End Sub
Figura 1. Variables a nivel procedimiento.
Ahora tenemos la macro Prueba2 donde deseamos mostrar el valor de la variable Nombre de la macro anterior.
Sub Prueba2()
MsgBox Nombre
End Sub
Al mostrar ejecutar la macro Prueba2 nos aparece un mensaje que dice que la variable no ha sido definida. Esto es porque la variable Nombre sólo está definida a nivel de Procedimiento, por lo que no podemos ver su valor desde otra macro.
Figura 2. Se muestra Variable no definida cuando decimos de qué tipo de variable se trata.
A nivel de Módulo
Ahora bien, si lo que deseamos es ver los valores de las Variables desde otras macros, deberemos declarar nuestras variables a nivel de Módulo. Debajo de la línea Option Explicit debemos hacer la declaración de las variables usando la instrucción DIM. Con esto, cuando se ejecute una macro que contenga una variable a nivel Módulo, su valor seguirá vivo para poder ser usando desde otra macro.
Usamos las siguientes macros donde reutilizaremos la variable Nombre.
Option Explicit
Dim Nombre As String
Sub Prueba()
Nombre = ThisWorkbook.Sheets(2).Range(“B1”).Value
MsgBox Nombre
End SubSub Prueba2()
MsgBox Nombre
End Sub
Figura 3. Ejecutamos una macro con una variable definida a nivel Módulo.
A nivel de proyecto
Supongamos que hacemos las cosas como se deben y tenemos diferentes Módulos en nuestro proyecto VBA. Si queremos reutilizar una variable que se asignó en un Módulo y usarla en macro de otro Módulo, debemos declarar la variable como Pública.
En el siguiente código VBA declaramos la variable como PUBLIC e igual le definimos el tipo de la variable. Posteriormente en la macro Prueba3 de otro Módulo mandamos llamar a la variable Nombre.
Option Explicit
Public Nombre As String
Sub Prueba()
Nombre = ThisWorkbook.Sheets(2).Range(“B1”).Value
MsgBox Nombre
End SubSub Prueba2()
MsgBox Nombre
End Sub
En otro Módulo usamos la siguiente macro.
Option Explicit
Sub Prueba3()
‘La varible nombre es Pública y se define en el Módulo1
MsgBox Nombre
End Sub
Figura 4. Uso de variables públicas en VBA.
Constantes públicas
Así como hay variables públicas, también tenemos constantes públicas. En esencia es lo mismo, tener un valor que pueda ser reutilizado en otras macros, la diferencia es que las constantes no podrán cambiar su valor. Como su nombre lo dice, se mantendrá constante, fijo.
Usamos el siguiente código para declarar una constante llamada Titulo, como pública.
Public Const Titulo = “Curso de macros”
Tiempo de vida de las variables
Ya vimos que, si declaramos variables públicas, sus valores se pueden reutilizar en otras macros. Si se declaran a nivel Procedimiento, las variables pierden sus valores al terminar la macro, pero si son públicas, incluso después de terminar la macro, sus valores siguen vivos.
Variables estáticas
¿Qué sucede si deseamos tener una variable en un procedimiento que su valor permanezca vivo aún después de terminar la macro? Y poder reutilizar su valor cuando se ejecuta de nuevo la macro.
Aquí es donde entra el término Variables estáticas. Tenemos la siguiente macro donde usamos la variable Conteo y le definimos el valor de Conteo = Conteo +1. Como el valor inicial de Conteo es 0, cuando termina la macro, el valor queda en 1. Si corremos nuevo la macro, Conteo se resetea ya que esta variable fue declarada a nivel de Procedimiento.
Si deseamos que después de terminada la macro Conteo conserve el valor de 1 y al correr de nuevo la macro, ahora Conteo valdrá 2. Los hacemos de la siguiente manera usando la instrucción STATIC.
Sub VariableEstatica()
Static Conteo As Byte
Conteo = Conteo + 1
MsgBox Conteo
End Sub
La primera vez que se ejecuta la macro, Conteo es 1.
Si la volver a correr, Conteo ahora valdrá 2.
Descarga el archivo de ejemplo
016 – Ámbito de las variables, tiempo de vida y variables estáticas.zip
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.