Las variables son fundamentales en la programación VBA, permitiendo almacenar y manipular datos durante la ejecución de nuestros programas. En este tutorial, daremos un repaso al concepto mismo de variable, resaltando también algunas de las ventajas de su utilización.
¿Qué es una Variable en VBA?
Comenzamos por definir qué es una variable. Esta es un contenedor virtual polivalente que alberga valores que pueden variar, es decir, que no necesariamente tienen que ser fijos, y también las variables pueden albergar objetos.
Tenemos que decir que el contenido de una variable se almacena en la memoria RAM del ordenador. Otra cuestión es que los datos se gestionan de forma mucho más rápida en la RAM.
Tenemos que decir que si utilizamos variables, el código se hace más corto y legible.
Ventajas y Necesidad de la Declaración de Variables
Aunque en VBA, como ya sabemos, no es obligatorio dimensionar una variable, si nuestros programas son extensos y complejos, sí es muy recomendable en la mayoría de ocasiones e incluso en algunas de ellas es imprescindible. Por último, comentar que aunque en Visual Basic for Applications, las variables no son de obligada utilización, sí es cierto que es muy conveniente usarlas.
Lea también: Diferencias entre los regímenes jurídicos y fiscales de las empresas
Incluso, en algunos casos, se hacen imprescindibles, como es el caso de la utilización de las variables en bucles.
La aplicación será más eficaz si se declaran las variables explícitamente y con un tipo de datos específico.
Una vez que nos decidimos a utilizar una variable en nuestro código VBA, aunque no es obligatorio, lo ortodoxo es declararla previamente.
Tipos de Datos y su Impacto
Pero qué tipo de datos podemos introducir en una variable. 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.
Tenemos que recordar que además de todos los tipos de datos que podemos ver, las variables también son capaces de albergar objetos como, por ejemplo, puede ser un rango de celdas, una tabla, un gráfico, etc.
Lea también: Guía de Presentaciones Contables
Dependiendo del tipo de datos que asignemos a la variable, esta ocupará en memoria más o menos. También tenemos que tener en cuenta que dependiendo del tipo de dato utilizado, podremos albergar unos valores u otros.
Por ejemplo, el tipo Byte tan solo es capaz de albergar valores entre 0 y 255. En el otro extremo nos encontramos los tipos Double y Currency que pueden albergar decimales hasta 16 dígitos en el primero de los casos, y 15 dígitos a la izquierda de la coma decimal y cuatro dígitos a la derecha en el caso de Currency, es decir, moneda.
Por otra parte, también tenemos que señalar que el tipo de dato más pesado, por decirlo de alguna forma, es el tipo Variant. Si no se especifica un tipo de datos, el tipo de datos Variant se asigna de forma predeterminada.
Tabla de Tipos de Datos Comunes en VBA
| Tipo de Dato | Descripción / Rango | Tamaño Aproximado |
|---|---|---|
| Byte | Números enteros entre 0 y 255. | 1 byte |
| Boolean | Valores lógicos (True/False). | 2 bytes |
| Integer | Números enteros. | 2 bytes |
| Long | Números enteros largos. | 4 bytes |
| Single | Números de punto flotante de precisión simple. | 4 bytes |
| Double | Números de punto flotante de precisión doble, desde +/- 5E-324 hasta 1.8E308. | 8 bytes |
| Currency | Valores monetarios con 15 dígitos a la izquierda y 4 a la derecha del punto decimal. | 8 bytes |
| Date | Valores de fecha y hora. | 8 bytes |
| String | Cadenas de texto de longitud variable o fija. | 10 bytes + longitud de la cadena |
| Object | Referencia a cualquier objeto. | 4 bytes |
| Variant | Puede contener cualquier tipo de datos; el tipo más pesado. | 16 bytes (números) / 22 bytes + longitud de la cadena (caracteres) |
Cómo Declarar Variables
El proceso para trabajar con variables es claro: son dos fases. Primero tenemos que dimensionar o declarar esa variable y después tenemos que asignar el valor o el objeto. Vamos con el primero de los pasos, dimensionar o declarar una variable. Tenemos varios métodos.
La Instrucción Dim
Comenzamos por explicar el método extendido, esto es, utilizar una línea para cada declaración de variable. Tenemos que anteponer al nombre que elijamos como el nombre de la variable la instrucción Dim, que significa dimensionado. Así que Dim miVariable As Integer, por ejemplo, en el caso de que queramos asignar este tipo de dato.
Lea también: Plantillas gratuitas de PowerPoint para contabilidad
Al declarar variables, normalmente se utiliza una instrucción Dim. No es necesario que proporcione el tipo de datos de la variable en la instrucción de declaración. También puede usar un carácter de tipo de identificador para especificar el tipo de datos. Cuando se usan en el nivel del módulo, la instrucción Dim equivale a la instrucción Private.
Declaración Implícita vs. Explícita: La Importancia de Option Explicit
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. Las variables de tipo Variant necesitan más recursos de memoria que la mayoría de las otras variables.
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. Es muy importante para evitar que nuestra macro sea difícil de interpretar para otros usuarios que puedan necesitar leer el código VBA (incluso para nosotros mismos).
Puede establecer una opción en su entorno de programación Visual Basic para incluir automáticamente la instrucción Option Explicit en todos los módulos nuevos.
Declaraciones con Public, Private o Static
Puede usar la instrucción Dim o una de las demás instrucciones de declaración (Public, Private o Static) para declarar una variable.
La otra forma de definir una variable local de Procedimiento es declarar la variable como Static. Una variable local declarada con la instrucción Static sigue existiendo todo el tiempo que se ejecuta en Visual Basic.
Muy Importante!!: En nuestro procedimiento Estatica, la variable 'Acum' conserva su valor cada vez que se ejecuta. Por ejemplo, la primera vez que se ejecuta el módulo, introducimos en el cuadro el valor 10, el MsgBox mostrará el valor 10 (lógicamente)... si la siguiente vez que se ejecuta el módulo, introducimos el valor 20, el MsgBox mostrará el valor de 30 (10+20...) !!
Ámbito de las Variables en VBA
En definitiva hablaremos hoy del ámbito de las variables, es decir, dónde aplican nuestras variables una vez definidas. En VBA para Excel, los tres ámbitos existentes para las variables son: Públicas, Módulo y Procedimiento.
La forma por medio de la cual se declara una variable depende de varios factores. Uno de ellos es dónde la vamos a utilizar posteriormente (sólo en la macro actual o en otras macros).
Ámbito de Procedimiento (Local)
Cuando definimos o declaramos una variable local con la instrucción Dim, la variable permanece en memoria sólo mientras se ejecuta el procedimiento en el que la hemos declarado. Y por tanto, normalmente, cuando termina el procedimiento de ejecución, no se conservan los valores de las variables locales del procedimiento y se libera la memoria asignada a esas variables.
La próxima vez que se ejecute el procedimiento, se reinicializarán todas las variables locales declaradas. Muy importante!!: Cada variable X es independiente del otro procedimiento, sólo se reconoce la variable dentro de su propio procedimiento respectivo (Local1 ó Local2).
Puede colocar una instrucción de declaración dentro de un procedimiento para crear una variable de nivel de procedimiento. Si aparece esta declaración dentro de un procedimiento, la variable strName puede utilizarse solo en ese procedimiento.
Ámbito de Módulo
Una variable que es reconocida en todos los procedimientos en un módulo se denomina una variable de Módulo. En el ámbito de módulo, no hay ninguna diferencia entre Dim y Private.
Muy importante!!!: En un ejemplo, se pueden declarar dos variables A y B de ámbito de módulo (antes de todos los procedimientos!!), por tanto estarán disponibles para cualquiera de los procedimientos de dicho módulo.
Variables Públicas
Las variables públicas - Public - tienen el ámbito más amplio de todas las variables. Una variable pública se declara igual que una variable de ámbito de módulo, es decir, en la parte superior del módulo, encima de la primera definición de procedimiento. NO se puede declarar una variable pública dentro de un procedimiento.
Las variables públicas pueden usarse en cualquier procedimiento del proyecto. 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.
Declaración de Variables de Objeto
Hasta ahora, las variables a las que nos hemos referido albergan valores (de un tipo u otro, pero valores), pero también las variables pueden representar a objetos, como por ejemplo, celdas, hojas, etc.
Una variable que hace referencia a un objeto debe ser Variant, Object o un tipo específico de objeto. Puede tratar una variable de objeto exactamente de la misma manera que el objeto al que hace referencia.
Declaración de Tipo Específico vs. Object Genérico
Puede declarar una variable de objeto con el tipo de datos Object cuando el tipo de objeto específico no se conoce hasta que se ejecuta el procedimiento. Si conoce el tipo de objeto específico, debe declarar la variable de objeto como ese tipo de objeto.
- Dim MyObject As Object ' Declarado como objeto genérico.
- Dim MyObject As Sample ' Declarado solo como objeto Sample.
- Dim MyObject As Variant ' Declarar MyObject como tipo de datos Variant.
- Dim MyObject As Font ' Declarar MyObject como tipo Font.
Asignación de Objetos: La Instrucción Set
Use la instrucción Set para asignar un objeto a una variable de objeto. Puede asignar una expresión de objeto o Nothing.
- Set MyObject = YourObject ' Asignar referencia de objeto.
- Set MyObject = Nothing ' Discontinuar asociación.
La configuración de una variable de objeto igual a Nothing interrumpe la asociación de la variable de objeto con cualquier objeto específico. Esto evita que cambie de manera accidental el objeto cambiando la variable. Una variable de objeto siempre se establece en Nothing después de cerrar el objeto asociado para que pueda probar si la variable de objeto apunta a un objeto válido.
La Palabra Clave New
Puede combinar la declaración de una variable de objeto con la asignación de un objeto a la misma usando la palabra clave New con la instrucción Set. También puede usar la palabra clave New para crear una nueva instancia de un objeto automáticamente.
La Palabra Clave Me
Use la palabra clave Me para hacer referencia a la instancia actual del objeto donde se ejecuta el código. Todos los procedimientos asociados al objeto actual tienen acceso al objeto de referencia como Me. El uso de Me es particularmente útil para pasar información acerca de la instancia actual de un objeto a un procedimiento en otro módulo.
Trabajando con 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.
Si usa otra aplicación para controlar los objetos de Microsoft Access, en la mayoría de los casos se pueden declarar variables de objeto según el tipo más específico. 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, debe distinguir el objeto Formulario de Access de un objeto Formulario de Visual Basic.
Algunas aplicaciones no reconocen los tipos de objeto individuales de Access. Incluso si configura una referencia a la biblioteca de tipos de Access desde estas aplicaciones, debe declarar todas las variables de objeto de Access como tipo Object. 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.
tags: #PowerPoint #VBA #declaración #de #variables
