El propósito principal de VBA es manipular datos. Algunos residen en objetos tales como rangos de hojas de cálculo. Otros se guardan en las variables que se crean.
- Una variable es una localización de almacenamiento con nombre, dentro de la memoria del ordenador.
- Las variables deben ser asignadas a un tipo de dato. Pero VBA no lo exige, si no declaramos el tipo de dato lo asume como Variant.
- Cuanto más grande sea el tipo de dato más lento ira VBA. Debemos declarar las variables sin sobredimensionarlas.
Para asignar un nombre a una constante, deberemos tener en cuenta:
- Podemos usar caracteres alfabéticos, números y algún carácter de puntuación.
- El primer carácter debe ser alfabético.
- Prohibido los siguientes símbolos: #, $, %, !
- El nombre puede contener hasta 254 caracteres.
Para declarar una variable se usa la sentencia DIM. Esta declaración se coloca al principio de las secciones o módulos.
Dim NombreDeVariable As TipoDeDatos
O también:
Dim NombreVar1, NombreVar2, … Dim TipoDeDatos
Los valores de los datos de una variable pueden ser:
Tipo de dato | Tamaño almacenamiento | Intervalo |
---|---|---|
Byte | 1 byte | 0 a 255. |
Boolean | 2 byte | True o False. |
Integer | 2 byte | -32.768 a 32.767. |
Long(entero o largo) | 4 byte | -2.147.483.648 a 2.147.483.647. |
Single (coma flotante/precisión simple) | 4 byte | -3,402823E38 a -1,401298E-45 para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos. |
Double (coma flotante/precisión doble) | 8 byte | -1,79769313486232E308 a -4,94065645841247E-324 para valores negativos; 1,79769313486232E308 para valores positivos. |
Currency (entero a escala) | 8 byte | -922.337.203.685.477,5808 a 922.337.203.685.477,5807. |
Decimal | 14 byte | +/- 79.228.162.514.264.337.593.543.950.335 sin punto decimal; +/- 7,9228162514264337593543950335 con 28 posiciones a la derecha del signo decimal; el número más pequeño distinto de cero es +/- 0,0000000000000000000000000001 (27 ceros). |
Date | 8 byte | 1 de enero de 100 a 31 de diciembre de 9999. |
Object | 5 byte | Cualquier referencia a tipo Object. |
String (longitud variable) | 10 byte + longitud de la cadena | Desde 0 a 2.000 millones. |
String (longitud fija) | Longitud de la cadena | Desde 1 a 65.400 aproximadamente. |
Variant (con números) | 16 byte | Cualquier valor numérico hasta el intervalo de un tipo Double. |
Variant (con caracteres) | 22 byte + longitud de cadena | El mismo intervalo que para un tipo String de longitud variable. |
Definido por el usuario (utilizando Type) | Número requerido por los elementos | El intervalo de cada elemento es el mismo que el intervalo de su tipo de datos. |
El ámbito de una variable determina el módulo y el procedimiento en el que se puede usar una constante.
Ámbito | Cómo se declara una variable en este ámbito |
---|---|
Un procedimiento | Incluye instrucciones Dim, Static o Private dentro del procedimiento. |
Al nivel de módulo | Incluye instrucciones Dim antes del primer procedimiento de un módulo. |
Todos los módulos | Incluye instrucciones Public antes del primer procedimiento de un módulo. |
Descargar el Archivo de texto con los procedimientos para la práctica, copiar y pegar en el editor VB.
Según donde utilicemos la variable podemos declararla como diferentes tipos:
Variable declarada dentro de un procedimiento.
Solo se usan dentro del procedimiento y cuando este acaba la variable deja de existir y Excel libera memoria.
Sub Ejemplo()
Dim InteresAnual As Long
' Código del procedimiento
End Sub
Donde:
- Nombre de la variable: InteresAnual.
- Long: Tipo de datos de la variable.
Para que una variable esté disponible para todos los procedimientos de un proyecto de Vba, se declara la variable a nivel de módulo con el uso de la palabra Public.
Sub Ejemplo()
Public InteresAnual As Long
' Código del procedimiento
End Sub
Donde:
- Public: Tipo de Variable
- Nombre de la variable: InteresAnual.
- Long: Tipo de datos de la variable.
Las variables estáticas son un caso especial. Se declaran a nivel de procedimiento y retienen su valor después de que el procedimiento finaliza.
Sub Ejemplo()
Static InteresAnual As Integer
' Código del procedimiento
End Sub
Donde:
- Static: Tipo de Variable.
- Nombre de la variable: InteresAnual.
- Long: Tipo de datos de la variable.
La sentencia Option Explicit permite que el programa se detenga cada vez que VBA encuentre una variable que no ha sido definida. Esto es de gran utilidad cuando se usan muchas variables ya que nos permite identificar rápidamente errores o uso no deseado en el nombre de la variable. Esta sentencia se debe escribir al comienzo del módulo.
Algunas veces se deseará que una variable esté disponible para todos los procedimientos de un módulo. Para ello, se declara la variable antes del primer procedimiento del módulo (fuera de cualquier procedimiento o función).
Dim InteresAnual As Integer
Sub Ejemplo1()
' Código del procedimiento1
End Sub
Sub Ejemplo2()
' Código del procedimiento2
End Sub
Una variable objeto sirve para hacer referencia a un objeto, esto significa que podremos acceder a las propiedades de un objeto (como puede ser un rango o una hoja de cálculo) e invocar a sus métodos a través de la variable en lugar de hacerlo directamente a través del objeto. Se declara la variable como:
Sub MiVariableObjeto()
Dim NombreVariable As Objeto
' Contenido del código del procedimiento
End Sub
Donde:
- Dim: Declaración de una variable.
- Nombre de la variable: NombreVariable.
- Objeto: En lugar de Tipo de Dato.
- Contenido del código del procedimiento: Código para el procedimiento a realizar.
Las variables de objeto son importantes por dos razones:
- Pueden simplificar el código
- Pueden hacer que el código se ejecute más de prisa.
Cuando disponemos de varias variables, las podemos declarar en el proceso como:
Sub MiVariable()
Dim Variable1 As Integer
Dim Variable2 As Long
Dim Variable3 As Date
' Contenido del código del procedimiento
End Sub
O también como:
Sub MiVariable()
Dim Variable1 As Integer, Variable2 As Long, Variable3 As Date
' Contenido del código del procedimiento
End Sub
Deseamos crear un procedimiento para que nos inserte en la celda C1 de nuestra hoja el resultado de una suma de dos variables.
1. Ir a: Cinta de opciones Ficha: Archivo
Nuevo. Mostrará las plantillas disponibles.
1.1. Ir a: Libro en blanco
Pulsar el botón crear; O también, doble clic en botón libro en blanco. Creará un libro nuevo.
2. Ir a: Cinta de opciones Ficha: Programador
Grupo: Código
Visual Basic; O también pulsar la tecla Alt y mantenerla pulsada
Pulsar la tecla F11
Soltar las teclas. Abrirá el editor de Visual Basic.
Insertaremos un módulo donde escribiremos nuestro procedimiento.
3. Ir a: Barra de MenúInsertar
Módulo; O Ir a: Panel de Proyecto
Pulsar sobre VBAProject(Libro1)
Botón derecho del ratón
Insertar
Módulo; O Ir a: Barra de Herramientas: Estándar
Pulsar Sobre la flecha del Botón Insertar
Módulo. Insertará en el Panel de Proyecto una rama con la carpeta de Módulos y el módulo creado como Módulo1.
4. Ir a: Ventana de EdiciónEscribir el procedimiento:
Sub Sumar()
Dim Numero1 As Integer
Dim Numero2 As Integer
Numero1 = 5
Numero2 = 8ActiveSheet.Range("C1").Value = Numero1 + Numero2
End Sub
Donde:
Instrucción Descripción Sub Principio del procedimiento. Sumar() Nombre asignado al procedimiento o macro. Dim Numero1 As Integer Dim Numero2 As Integer Definimos el tipo de datos de las variables como Integer. Numero1 = 5 Numero2 = 8 Declara el valor de las 2 variables, el valor de las celdas se lo indicamos. ActiveSheet.Range(" C1").Value = Numero1 + Numero2: Procedimiento con las variables, muestra en " C1” el valor de la suma de las variables. End Sub Fin del procedimiento.
La depuración del módulo nos permite optimizarlo y detectar algunas anomalías que impiden su ejecución.
5. Ir a: Barra de MenúDepuración
Compilar VBAProject; Si el código presenta alguna anomalía nos indicará un mensaje de aviso para su corrección.
Si el comando no se encuentra activo, nos indica que el proyecto no requiere su depuración.
Según la función del procedimiento escrito, podremos reproducirlo para ejecutar las órdenes
6.1. Ir a: Barra de MenúEjecutar
Ejecutar Sub/UserForm; O Ir a: Barra de Herramientas
Depuración
Ejecutar Sub/UserForm
; O pulsar la tecla F5. Mostrará ventana de Macros.
6.2. Ir a: Nombre de macroPulsar sobre Sumar. O la macro deseada.
6.3. Pulsar Botón Ejecutar. Ejecutará la macro que incluye el procedimiento.
7.1. CERRAR EDITOR VB. Ir a: Barra de MenúArchivo
Cerrar y volver a Microsoft Excel; O atajo de teclado: Alt+Q; O cerrar el Editor de Visual Basic (no precisa guardar, ya que los datos insertados se almacenan en tiempo real); O Ir a: Barra de Menú
Ver
Microsoft Excel (Cambia a Excel sin cerrar el editor); O atajo de teclado: Alt+F11; O Ir a: Barra de Herramientas Estándar
Botón: Ver Microsoft Excel
.
7.2. DESDE EXCEL. Ir a: Cinta de opciones Ficha: Vistas
Grupo: Macros
Macros
Ver macros; O también, Cinta de opciones
Ficha: Programador
Grupo: Código
Macros. Mostrará la ventana de macros.
7.3. SELECCIONAR LA MACRO. Ir a: Nombre de la MacroPulsar sobre: Sumar. Macro deseada.
7.4. EJECUTAR LA MACRO. Pulsar en Botón: Ejecutar.
8.1. Ir a: Celda C1Verificar como inserta 13, como el valor de la suma de las variables: Numero1 = 5 + Numero2 = 8.
Deseamos crear un procedimiento para que nos sume los valores de las celdas de A1 y A2 de nuestra hoja de Excel.
9.1. ABRIR EL EDITOR VB (EXCEL). Pulsar Alt+F11.
9.2. Insertar el procedimiento en el módulo:
Sub Sumar2()
Dim Numero1 As Integer, Numero2 As Integer
Numero1 = Range("A1")
Numero2 = Range("A2")
ActiveSheet.Range("C1").Value = Numero1 + Numero2
End Sub
Donde:
Instrucción Descripción Sub Principio del procedimiento. Sumar2() Nombre asignado al procedimiento o macro. Dim Numero1 As Integer Dim Numero2 As Integer Definimos el tipo de datos de las variables como Integer. Numero1 = Range("A1") Numero2 = Range("A2") Declara el valor de las 2 variables, el valor de las celdas " A1” y " A2”. ActiveSheet.Range(" C1").Value = Numero1 + Numero2: Procedimiento con las variables, muestra en " C1” el valor de la suma de las variables. End Sub Fin del procedimiento.
Se puede escribir el procedimiento sin definir el tipo de datos, aunque formalmente no se debe. En algunas ocasiones nos podría producir algún tipo de error.
Sub Sumar2a()
Numero1 = Range("A1")
Numero2 = Range("A2")
ActiveSheet.Range("C1").Value = Numero1 + Numero2
End Sub
Donde:
Instrucción | Descripción |
---|---|
Dim Numero1 As Integer Dim Numero2 As Integer | Eliminamos la instrucción que define el tipo de datos de las variables como Integer. Tomando Número1 y Número2 como las variables declaradas por su valor " A1" y "A2". |
10.1. Ir a: Microsoft Excel. Escribir los siguientes datos de prueba.
10.2. Ir a: Celda A1Escribir: 100. Primer valor a sumar.
10.3. Ir a: Celda A2Escribir: 500. Segundo valor a sumar.
10.4. EJECUTAR LA MACRO. Pulsar Alt+F8Seleccionar la macro
Pulsar Botón Ejecutar.
10.5. Ir a: Celda C1Verificar como inserta 600, como el valor de la suma de las variables: Numero1 + Numero2.
En C1 se inserta el valor de la suma, pero no la fórmula, por lo que si modificamos el valor de A1 y A2 no actualiza el resultado.
11.1. Ir a: Celda A1Escribir: CIEN. Primer valor a sumar.
11.2. Ejecutar la macro: Sumar2. Mostrará mensaje de error al haber definido las dos variables como Integer y una de ellas es texto.
11.3. Pulsar Botón: Finalizar. Para cerrar el aviso.
Deseamos crear un procedimiento para que nos divida 1000 entre 2 y nos muestre el resultado en una ventana de mensaje (MsgBox).
12.1. ABRIR EL EDITOR VB. Pulsar Alt+F11.
12.2. Insertar el procedimiento en el módulo:
Sub Variable1()
Dim MiVariable As String
MiVariable = "1000"
MiVariable= MiVariable/2MiVariable = "Resultado: " & MiVariable
MsgBox MiVariable
End Sub
Donde
Instrucción | Descripción |
---|---|
Sub | Principio del procedimiento. |
Variable1() | Nombre asignado al procedimiento o macro. |
Dim MiVariable As String | Definimos el tipo de datos de las variables como String. |
MiVariable = "1000" | Asignamos el valor de "1000" a la variable. |
MiVariable= MiVariable/2 | Se declara el valor de la variable (1000) como 500 (1000 / 2). |
MsgBox MiVariable | Evoca mostrar el MsgBox |
End Sub | Fin del procedimiento. |
12.3. Ir a: Microsoft Excel. Escribir los siguientes datos de prueba.
12.4. EJECUTAR LA MACRO. Pulsar Alt+F8Seleccionar la macro
Pulsar Botón Ejecutar.
La práctica es considerada como una aproximación al MsgBox, ya que no tiene ninguna finalidad el obtener siempre un mismo resultado.
Deseamos crear un procedimiento para que nos divida 1000 entre 2 y nos muestre el resultado en un cuadro de mensaje y después en la celda B1.
13.1. ABRIR EL EDITOR VB. Pulsar Alt+F11.
13.2. Insertar el procedimiento en el módulo:
Sub Variable2()
MiVariable = "1000"
MiVariable= MiVariable/2MiVariable = "Resultado: " & MiVariable
MsgBox MiVariableActiveSheet.Range("B1").Value = MiVariable
End Sub
Donde:
Instrucción Descripción Sub Principio del procedimiento. Variable2() Nombre asignado al procedimiento o macro. MiVariable = " 1000” Declaramos la variable y asignamos el valor " 1000”. MiVariable= MiVariable/2 Se declara el procedimiento para el valor que tomará la variable. 1000/2. MiVariable = " Resultado: " La variable MiVariable se declara como un texto literal a mostrar: "Resultado: ". & MiVariable Concatena el literal al valor de la variable. MsgBox MiVariable Evoca mostrar el MsgBox. ActiveSheet.Range("B1").Value = MiVariable Situamos la celda activa en B1 y la pasamos el valor de la variable "MiVariable". End Sub Fin del procedimiento.
13.3. Ir a: Microsoft Excel. Escribir los siguientes datos de prueba.
13.4. EJECUTAR LA MACRO. Pulsar Alt+F8Seleccionar la macro
Pulsar Botón Ejecutar.
Mostrará el Mensaje con el resultado personalizado con nuestro literal y el valor de la variable.
13.5. Pulsar en Botón Aceptar.
13.6. Insertará en la celda B1 el valor de la variable: Resultado: 500.
Indicar que al ejecutar el código se va leyendo línea a línea, como hemos indicado que primero nos muestre el mensaje y posteriormente nos muestre en B1 el valor, lo ejecuta en el mismo orden. Podemos invertir la posición de la línea para ver como cambia el proceso.
Deseamos crear un procedimiento con variables de objeto que inserte un texto en un rango de nuestra hoja de Excel.
14.1. ABRIR EL EDITOR VB. Pulsar Alt+F11.
14.2. Insertar el procedimiento en el módulo:
Sub VariableObjeto()
Dim MiVariable As Range
Set MiVariable = ActiveSheet.Range("E2:E10")
MiVariable.Value="Excel"
MiVariable.Font.Bold=True
End Sub
Donde:
Instrucción Descripción Sub Principio del procedimiento. VariableObjeto() Nombre asignado al procedimiento o macro. Dim Declaración de una variable de objeto, Nombre y Objeto. Range Indicamos que la variable es un rango. Set Instrucción Set asigna un objeto a una variable. MiVariable Declaramos la variable y asignamos que active el rango E2:E10. MiVariable.Value Se declara el valor de la variable. MiVariable.Font.Bold Propiedad del objeto Font como negrita.
14.3. Ir a: Microsoft Excel. Escribir los siguientes datos de prueba.
14.4. EJECUTAR LA MACRO. Pulsar Alt+F8Seleccionar la macro
Pulsar Botón Ejecutar.
Verificar E2:E10, como inserta el valor del texto, con el formato de fuente en negrita.