Cuando programamos en VBA, frecuentemente necesitamos un repositorio para almacenar el resultado de alguna operación. 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. Una Variable es un nombre que sirve para guardar algún dato de forma temporal para que sea utilizado por un procedimiento, módulo o libro (macro). Una Variable nos va a servir para almacenar ya sea un texto, un número, una fecha, etc.
“Declarar una variable” significa avisar a Excel sobre la existencia de dicho repositorio para guardar información. Se declara una variable para especificar su nombre y características.
Declaración de Variables con la Instrucción Dim
En este apartado aprenderemos cómo declarar nuestras Variables en VBA. La instrucción de declaración de las variables es la instrucción Dim. Al declarar variables, normalmente se utiliza una instrucción Dim.
La cláusula As de la instrucción de declaración permite definir el tipo de datos o el tipo de objeto de la variable que declara. Por ejemplo, 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.
Para la declaración, sigue el nombre de la variable, y para precisar el tipo de datos que contendrá la variable, se utiliza la cláusula As. Puede declarar varias variables en una instrucción sin tener que repetir el tipo de datos. Por ejemplo, en una misma instrucción, l y m pueden ser Long, mientras que x e y son Single.
Lea también: IVA 21% Excel
Declaración Explícita e Implícita
Se puede declarar una variable en Visual Basic implícitamente al utilizarla en una instrucción de asignación. Todas las variables declaradas implícitamente son del tipo Variant. Sin embargo, las variables de tipo Variant necesitan más recursos de memoria que la mayoría de las otras variables. La aplicación será más eficaz si se declaran las variables explícitamente y con un tipo de datos específico.
Si no desea que Visual Basic realice declaraciones implícitas, puede colocar la instrucción Option Explicit en un módulo antes de cualquier procedimiento. Esta instrucción requiere declarar explícitamente todas las variables en el módulo.
Tipos de Datos para Variables en VBA
En VBA existen variables de tipo entero que almacenan números, variables de tipo doble que también almacenan números pero con decimales, variables de tipo texto para guardar una cadena de caracteres entre algunos otros tipos de variables. Se pueden declarar variables como uno de los siguientes tipos de datos: Booleano, Byte, Entero, Long, Moneda, Single, Double, Fecha, Cadena (para cadenas de longitud variable), longitud de cadena * (para cadenas de longitud fija), Objeto o Variant.
Si no se especifica un tipo de datos, el tipo de datos Variant se asigna de forma predeterminada.
Tipos de Datos Comunes y sus Características
- Variables de tipo entero: utilizadas para guardar números enteros. Por ejemplo, una variable Byte puede almacenar un valor entero entre 0 y 255. Un Entero (Integer) puede almacenar un valor entero entre -32 768 y 32 767, y un Long hasta 2 147 483 647.
- Variables de tipo doble: pueden almacenar números con el doble de precisión incluyendo números decimales. Aunque las variables de tipo doble pueden almacenar números enteros sin problema, no es recomendable hacerlo porque estaremos desperdiciando espacio en la memoria del ordenador. Es decir, el tamaño reservado para una variable doble es el adecuado para guardar números decimales; si solo guardamos un número entero, quedará espacio sin utilizar.
- Variables de tipo texto (String): se declara con la palabra clave String, para guardar una cadena de caracteres.
- Variables de tipo lógico (Boolean): es aquella que puede almacenar solamente dos valores: falso o verdadero.
- Variables de tipo Single: pueden almacenar valores como 3.402823E38 para valores positivos.
- Variables de tipo Variant: Si no se declara el Tipo de dato, VBA lo asigna automáticamente como un tipo de dato Variant. En la siguiente instrucción, intX y intY se declaran como tipo Variant.
Ámbito de las Variables en VBA
Aquí hacemos referencia a la manera en la que los valores de las variables pueden ser accedidos. El ámbito de una variable es el conjunto de todo el código que puede hacer referencia a ella sin calificar su nombre. El ámbito de una variable viene determinado por dónde se declara.
Lea también: Guía IVA reducido
El nivel de acceso de una variable es la extensión del código que tiene permiso para acceder a ella. Esto viene determinado por el modificador de acceso (como Público o Privado) que se usa en la instrucción Dim.
Variables Locales (Nivel de Procedimiento)
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. Una variable local es una que se declara dentro de un procedimiento. Si aparece esta declaración dentro de un procedimiento, la variable podrá utilizarse solo en ese procedimiento.
Por ejemplo, si ejecutamos una macro que intenta acceder a una variable local declarada en otra macro, nos aparecerá un mensaje que dice que la variable no ha sido definida.
Variables a Nivel de Módulo
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. 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. Las variables declaradas a nivel de módulo pueden ser utilizadas por todos los procedimientos dentro de ese módulo.
Variables Públicas (Nivel de Proyecto)
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 declarar una variable pública, tienes que colocar tu variable en la sección de Declaraciones de tu código VBA debajo de la sentencia Option Explicit, fuera de cualquiera de tus subprocedimientos o funciones y también tienes que usar la palabra clave Public. Cuando declaras una variable como pública, también estás infiriendo el alcance de esa variable.
Lea también: ¿Cómo localizar tus XML del SAT?
En el siguiente código VBA, declaramos la variable como PUBLIC y le definimos el tipo. Las variables públicas pueden usarse en cualquier procedimiento del proyecto. Ya vimos que, si declaramos variables públicas, sus valores se pueden reutilizar en otras macros.
Duración de las Variables: Variables Estáticas
La duración de una variable es el período de tiempo durante el cual está disponible para su uso. En general, existe una variable siempre que el elemento que lo declare (por ejemplo, un procedimiento o una clase) continúe existiendo. Si la variable no necesita continuar existente más allá de la duración de su elemento contenedor, no es necesario hacer nada especial en la declaración. Sin embargo, los valores de las variables pueden conservarse incluso después de terminar la ejecución de las macros.
¿Qué sucede si deseamos tener una variable en un procedimiento que su valor permanezca vivo aún después de terminar la macro? Aquí es donde entra el término Variables estáticas. 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".
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 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. Si la variable necesita seguir existiendo más tiempo que su elemento contenedor, puede incluir la palabra clave Static o Shared en su instrucción Dim.
Declaración de Constantes en VBA
Así como hay variables públicas, también tenemos constantes públicas. En esencia es lo mismo que una variable, tener un valor que pueda ser reutilizado en otras macros, la diferencia es que las constantes no podrán cambiar su valor. Para declarar constantes se utiliza la palabra clave Const. No se puede asignar otro valor a una constante.
Cuando se necesita el mismo valor en varios lugares del programa, declarando una constante, solo tendrá que modificarlo en un lugar. Puede declarar varias constantes en una misma instrucción.
Consideraciones Adicionales y Buenas Prácticas
- No puede haber dos Variables con el mismo Nombre.
- El tamaño máximo para el nombre de la Variable es de 255 caracteres.
- Es recomendable darle un nombre a la variable que haga explícito su uso.
- Para un control más específico de objetos de otras aplicaciones, al usar una aplicación para controlar los objetos de otra, debe establecer una referencia a la biblioteca de tipos de la otra aplicación. Cuando se establece una referencia, se pueden declarar variables de objeto según el tipo más específico. También puede usar la palabra clave New para crear una nueva instancia de un objeto automáticamente. Sin embargo, puede que tenga que indicar que se trata de un objeto de Microsoft Access, por ejemplo, al declarar una variable de objeto para representar un formulario de Access dentro de Visual Basic. El siguiente ejemplo muestra cómo declarar una variable para representar una instancia del objeto Aplicación de Access desde una aplicación que no reconoce los tipos de objeto de Access.
