Variables y constantes
Definiciones
En la programación VBA, para almacenar la información que se utilizará en sus programas, se usan contenedores llamados variables o constantes. Una constante tiene un valor único que nunca será cambiado, mientras que una variable puede tener valores diferentes durante la ejecución de su programa.
Para manipular variables es necesario conocer dos atributos:
-
el nombre de la variable, que puede elegir en función de sus necesidades, respetando algunas reglas mencionadas en el apartado Convención de nomenclatura,
-
el tipo de datos que se almacenarán en la variable.
Declarar variables
Para poder utilizar una variable, primero hay que declararla con objeto de indicarle al programa que se utilizará posteriormente. Por lo tanto, las declaraciones suelen hacerse al principio del programa y deben realizarse siempre antes del primer uso de estas variables.
La sintaxis general para declarar una variable es la siguiente:
Dim NombreDeLaVariable As TipoDeVariable
Por ejemplo, la siguiente línea permite declarar la variable dtFechaPresupuesto, que contendrá una fecha.
Dim dtFechaPresupuesto As Date
Ejemplo 1: declarar una variable de tipo Date
La palabra clave Dim se utiliza para indicar la declaración de una variable. Luego sigue el nombre de la variable. A continuación, encontrará la palabra clave As, que permite precisar el tipo de datos que contendrá la variable. Por último, se halla el tipo de datos, cuyos principales tipos verá en la siguiente sección.
En el ejemplo 1, el tipo de datos es Date, lo que permite almacenar una fecha y una hora en la variable.
Tipos de datos
Existen centenares de tipos de datos, pero aquí verá los más comunes y básicos, que siempre necesitará.
Tipos numéricos
Existen varios tipos de datos para gestionar los valores numéricos, dependiendo de si necesita almacenar valores pequeños o grandes, enteros o decimales.
Valores enteros - Byte, Integer y Long
El tipo Byte permite almacenar un valor entero entre 0 y 255. El término Byte son 8 bits.
Dim b As Byte
b = 12
Ejemplo 2: declarar una variable de tipo Byte
El tipo Integer permite almacenar un valor entero entre -32 768 y 32 767. Se almacena en 16 bits (2 bytes).
Dim i As Integer
i = 2390
Ejemplo 3: declarar una variable de tipo Integer
El tipo Long permite almacenar un valor entero entre -2 147 483 648 y 2 147 483 647. Se almacena en 32 bits (4 bytes).
Dim l As Long
l = 45678
Ejemplo 4: declarar una variable de tipo Long
Si utiliza una variable entera y le asigna un valor decimal (por ejemplo, i = 1,23), el valor final asignado a la variable i será 1. Si este es el caso, debe utilizar una variable de tipo decimal.
Valores decimales - Single, Double y Currency
Cuando los valores numéricos que desea manipular son decimales (como 3,14, 2,50 o 0,75), también dispone de varios tipos de datos que le permiten almacenar dichos valores. Tenga en cuenta que el separador decimal en la programación VBA es el punto (.).
El tipo Single permite almacenar números decimales, para valores entre -3.402823E38 y -1.401298E-45 (E38 significa 10 a la 38 potencia, esto es: un 1 seguido de treinta y ocho 0) para valores negativos y entre 1.401298E-45 y 3.402823E38 para valores positivos. Este tipo usa 32 bits (4 bytes).
Dim s As Single
s=4E-2
'es equivalente a
s=0.04
Ejemplo 5: declarar una variable de tipo Single
El tipo Double le permite almacenar números en el rango más amplio posible de valores, que van desde -1,79769313486231E308 (1 seguido de trescientos ocho 0) hasta -4,94065645841247E-324 para...
Hacer una declaración múltiple
Si tiene varias variables para utilizar en su programa (por ejemplo, una variable dtFechaPresupuesto de tipo Date, así como una variable strTituloProyecto de tipo String, y otra strDespacho, también de tipo String), tiene varias formas de declararlas.str
'Declaraciones separadas por comas (la más común)
Dim dtFechaPresupuesto As Date, strTituloProyecto As String, strDespacho As String
'Declaraciones en varias líneas (1 línea por tipo de dato)
Dim dtFechaPresupuesto As Date
Dim strTituloProyecto As String, strDespacho As String
'Declaraciones en una sola línea (poco frecuente)
Dim dtFechaPresupuesto As Date : Dim strTituloProyecto As String : Dim strDespacho As String
Ejemplo 12: diferentes formas de efectuar declaraciones múltiples
Como cada una de las formas de declarar variables es equivalente a las otras, utilice la que le parezca más fácil.
Tenga cuidado de especificar, para cada variable, el tipo de datos que le corresponde; de lo contrario, se arriesga a utilizar la Variant predefinida.
Dim dtFechaPresupuesto, strTituloProyecto As String
Ejemplo 13: una declaración incompleta
En el ejemplo anterior, tendrá una variable de tipo Variant dtFechaPresupuesto y otra de tipo String strTituloProyecto. Aunque este código sea operativo, favorezca siempre una buena sintaxis.
En caso de que su línea de instrucciones...
Asignar un valor a una variable
Una vez sus variables declaradas, llega la hora de utilizarlas. Como pudo ver en los ejemplos anteriores, la sintaxis para asignar un valor a una variable es la siguiente:
NombreDeSuVariable = valor_asignado
Como en el siguiente caso:
Dim X As Integer
X = 28
Ejemplo 14: declarar y asignar un valor a una variable
La asignación se realiza a través del carácter igual =. El valor asignado está a la derecha del signo, mientras que la variable está a la izquierda. El cálculo se realiza de derecha a izquierda para la asignación. Tras la ejecución de la línea, la variable X contiene el valor 28.
Leer el valor de una variable
Del mismo modo que el signo = se utiliza para asignar un valor a una variable, este signo también se utiliza para leer el valor de una variable. En lugar de colocarla a la izquierda del signo =, se colocará a su derecha.
Dim i As Integer, j As Integer
i = 1
j = i + 3
Ejemplo 15: lectura y asignación de una variable
En el código anterior, se asigna el valor 1 a la variable i, luego se suma el valor de la variable i y 3, para, finalmente, asignarlo a la variable j. Después de ejecutar las instrucciones, tendrá el valor 1 en la variable i y el valor 4 en la variable j.
Convertir un tipo de dato en otro
Como verá durante la lectura de este libro, a veces puede ser útil transformar un tipo de datos en otro tipo para poder manipularlos más fácilmente.
Ya sea que se trate de convertir un valor numérico en texto, de transformar un texto en una fecha o de transformar una fecha en un valor numérico, existen varias funciones que permiten estas conversiones.
Por ejemplo, para convertir una cadena en un valor entero, puede utilizar la función CInt(), o para convertir un valor numérico en un valor booleano, puede utilizar la función CBool().
?CInt("456")
456
?CBool(-1)
Verdadero
Para que se produzca una conversión, el valor convertido debe estar, por supuesto, dentro del rango de valores permitidos por su tipo convertido. Las conversiones entre valores numéricos son relativamente infrecuentes, mientras que las conversiones entre cadenas o fechas a valores numéricos, y viceversa, son bastante comunes.
He aquí una tabla de las funciones de conversión existentes:
Tipo de datos de destino |
Función de conversión |
Ejemplo |
Boolean |
CBool |
CBool(-1) =>Verdadero |
Byte |
CByte |
CByte("12")=>12 |
Currency |
CCur |
CCur("14")=>14 |
Date |
CDate |
CDate(45000) => 15/03/2023 |
Double |
CDbl |
CDbl("9.876")=>9.876 |
Decimal |
CDec |
CDec("10.2")=>10.2 |
Integer |
CInt |
CInt("2.3")=>2 |
Long |
CLng |
Clng("12345")=>12345... |
Matrices
Concepto de matriz
Cuando se desean manipular grupos de datos del mismo tipo, se pueden ordenar en una matriz. Al igual que se manipulan los datos en Excel, es posible acceder a los datos de una matriz utilizando su índice dentro de ella.
Una matriz puede tener una o varias dimensiones. En los siguientes párrafos verá ejemplos de matrices con 2 o incluso 3 dimensiones. Al declarar la matriz, se puede especificar un tamaño fijo, o definirlo como una matriz de tamaño dinámico (su tamaño se definirá más adelante en el programa).
Todos los tipos de datos pueden ser objeto de una matriz.
Declarar una matriz
Del mismo modo que hay que declarar una variable para poder utilizarla, las matrices de datos deben declararse.
Matriz de tamaño fijo
Para declarar una matriz de tamaño fijo, la sintaxis general de la declaración será la siguiente:
Dim NombreDeLaMatriz(TamañoDeLaMatriz) As TipoDeDatos
'ejemplo
Dim TabString(7) As String
Ejemplo 16: declarar una matriz de tamaño fijo
El índice 7 corresponde al tamaño de la matriz. Para apuntar sobre los elementos de la matriz, tendrá que pasar por su índice.
El índice inferior de la matriz puede empezar en 0 o en 1, dependiendo del valor que se especifique en la instrucción Option Base en la parte superior del módulo. Esto se abordará en la siguiente sección. El recuento comienza con el valor 0 de forma predefinida.
He aquí un ejemplo de cómo declarar y alimentar una matriz de cadenas de caracteres.
Option Base 0
Dim Semana(6) As String
Semana(0)="Lunes"
Semana(1)="Martes"
Semana(2)="Miércoles"
Semana(3)="Jueves"
Semana(4)="Viernes"
Semana(5)="Sábado"
emana(6)="Domingo"
Ejemplo 17: alimentar una matriz de tamaño fijo
Matriz de tamaño dinámico
Cuando...
Constantes
Cuando quiera mantener los valores sin cambios durante los programas, tiene la posibilidad de hacerlo a través de constantes. También hay constantes disponibles directamente en Office, que ya ha visto por ejemplo en el capítulo Comunicarse con el usuario: MsgBox e InputBox.
Constantes de usuario
Si, como desarrollador, desea almacenar un valor que no debe modificarse, puede declarar una constante con la palabra clave Const. La sintaxis general para declarar una constante es la siguiente:
Const NombreDeSuConstante [As TipoDeSuConstante]= ValorConstante
Por ejemplo, para declarar una constante Mayor_Edad de tipo numérico entero y con un valor de 18, la declaración sería la siguiente:
Const Mayor_Edad As Integer = 18
Ejemplo 29: declarar una constante
Una vez efectuada la declaración, no se puede asignar otro valor a una constante. En el siguiente ejemplo, cuando se ejecute el código, aparecerá un mensaje de error en la pantalla.
Const Mayor_Edad As Integer = 18
Mayor_Edad = 19
Ejemplo 30: tentativa de modificar el valor de una constante
Es interesante utilizar constantes cuando se necesita el mismo valor en varios lugares del programa. Cuando por alguna razón haya que cambiar el valor de la constante, solo tendrá que hacerlo en un lugar. ¿Cuándo ocurrirá esto? Probablemente no sea tan frecuente, pero ¡piense en un cambio de tipo de IVA!
Constantes de Office
Además...
Convención de nomenclatura
Para facilitarle el trabajo, pero también porque VBA pone límites, la forma de nombrar las variables y las constantes no es totalmente libre. Aunque cada empresa puede tener su propia convención de nomenclatura, estas son las reglas más comúnmente aceptadas y seguidas cuando se desarrollan herramientas VBA.
Nombre único para las variables
Para empezar, no es posible tener dos variables con el mismo nombre dentro del mismo ámbito (esta noción se trata con más detalle en el capítulo Procedimientos, funciones y macros). Así, un código como el siguiente generará un error.
Dim a As Integer
Dim a As Date
Ejemplo 31: prohibido tener dos variables con el mismo nombre
El error que aparecerá en la pantalla será el siguiente:
Reglas generales de nomenclatura
Ya sea que se trate de variables, de constantes o de cualquier otro objeto en sus programas VBA, estas son las principales reglas que debe respetar:
-
El nombre debe comenzar por una letra.
-
Por lo tanto, los nombres _ABC y 8Titulo no están permitidos.
-
El nombre está limitado a 255 caracteres.
-
El nombre debe estar compuesto por letras, números y el carácter de subrayado (_).
-
No se permiten A-BC y dt%.
-
El nombre no puede contener caracteres de puntuación ni espacios.
-
El nombre no puede corresponder a una palabra clave de VBA.
-
Dim, As o For, por lo tanto, no están permitidos.
He aquí hay una serie de nombres de variables válidos:
-
Texto08,
-
Txt08Nombre,
-
Nombre_8_txt.
Aunque no está prohibido por las reglas impuestas por VBA, no se recomienda utilizar caracteres acentuados (é, à, ù) o diacríticos (ç, ø) en la denominación de sus variables. Esto se debe a que la configuración de su teclado no es necesariamente la misma que la de los compañeros a los que se les pedirá que se hagan cargo de su trabajo.
' Por ejemplo, es posible que prefiera utilizar
Dim dtAccion As Date
'A
Dim dtAcción As Date
Ejemplo 32: priorizar caracteres no acentuados
Convención de nomenclatura de variables y constantes
Nombre explícito
Cuando se nombra una variable, es interesante darle un nombre que haga explícito su uso. Por lo tanto, es preferible un nombre como dtFechaNacimiento para almacenar una fecha de nacimiento...
Ejercicios
Para cada capítulo se le pedirá que escriba sus propios programas. Las soluciones están disponibles en el capítulo Correcciones de los ejercicios.
Para este capítulo, cree un módulo con el nombre/número del capítulo y, en este módulo, cree una macro para cada ejercicio Private Sub TituloEjercicio() en la que colocará sus instrucciones.
Para mostrar un valor al usuario, puede utilizar la instrucción MsgBox seguida de la variable que desea mostrar.
Termine el ejercicio ejecutando la macro con la tecla F5. Los resultados esperados en la pantalla se mostrarán entre paréntesis. No debería producirse ningún error durante la compilación o la ejecución.
Declaraciones simples de variables
Entre las dos líneas siguientes:
Private Sub DeclaracionesSimples()
End Sub
A-Declare una variable que pueda tomar un nombre de Proyecto y llámela NombreProyecto.
B-Declare una variable que acepte valores enteros y llámela NumeroPresupuesto.
C-Declare una variable que pueda contener Verdadero o Falso y llámela Prioritaria.
D-Declare una constante que contenga el 1 de enero de 1950, que nombrará FECHA_LIMITE.
E-Declare una variable que pueda almacenar el valor 3.14 (hay varias soluciones posibles) y llámela Pi.
Declaraciones múltiples de variables
Después haber declarado variables o constantes simples...