En Excel VBA, a menudo se le pedirá que use variables y constantes.
Cuando se trabaja con VBA, una variable es una ubicación en la memoria de su computadora donde puede almacenar datos. El tipo de datos que puede almacenar en una variable dependerá del tipo de datos de la variable.
Por ejemplo, si desea almacenar números enteros en una variable, su tipo de datos sería "Entero" y si desea almacenar texto, su tipo de datos sería "Cadena".
Más sobre los tipos de datos más adelante en este tutorial.
Mientras que el valor de una variable cambia cuando el código está en progreso, una constante contiene un valor que nunca cambia. Como buena práctica de codificación, debe definir el tipo de datos de ambos: variable y constante.
¿Por qué utilizar variables en VBA?
Cuando codifica en VBA, necesitará variables que pueda usar para mantener un valor.
El beneficio de usar una variable es que puede cambiar el valor de la variable dentro del código y continuar usándolo en el código.
Por ejemplo, a continuación se muestra un código que agrega los primeros 10 números positivos y luego muestra el resultado en un cuadro de mensaje:
Sub AddFirstTenNumbers () Dim Var As Integer Dim i As Integer Dim k as Integer For i = 1 To 10 k = k + i Next i MsgBox k End Sub
Hay tres variables en el código anterior: Var, I, y k.
El código anterior usa un bucle For Next en el que estas tres variables se cambian a medida que se completan los bucles.
La utilidad de una variable radica en el hecho de que se puede cambiar mientras su código está en progreso.
A continuación se muestran algunas reglas a tener en cuenta al nombrar las variables en VBA:
- Puede usar alfabetos, números y signos de puntuación, pero el primer número debe ser un alfabeto.
- No puede usar espacio o punto en el nombre de la variable. Sin embargo, puede utilizar un carácter de subrayado para hacer que los nombres de las variables sean más legibles (como Tasa de interés)
- No puede utilizar caracteres especiales (#, $,%, & o!) En los nombres de las variables
- VBA no distingue entre mayúsculas y minúsculas en el nombre de la variable. Por lo tanto, "Tasa de interés" y "tasa de interés" son lo mismo para VBA. Puede usar mayúsculas y minúsculas para que las variables sean más legibles.
- VBA tiene algunos nombres reservados que puede usar para un nombre de variable. Por ejemplo, no puede utilizar la palabra "Siguiente" como nombre de variable, ya que es un nombre reservado para el ciclo For Next.
- El nombre de la variable puede tener hasta 254 caracteres.
Tipo de datos de variables
Para aprovechar al máximo las variables, es una buena práctica especificar el tipo de datos de la variable.
El tipo de datos que asigne a una variable dependerá del tipo de datos que desee que contenga esa variable.
A continuación se muestra una tabla que muestra todos los tipos de datos disponibles que puede usar en Excel VBA:
Tipo de datos | Bytes utilizados | Rango de valores |
Byte | 1 byte | 0 hasta 255 |
Booleano | 2 bytes | Verdadero o falso |
Entero | 2 bytes | -32.768 hasta 32.767 |
Long (entero largo) | 4 bytes | -2,147,483,648 a 2,147,483,647 |
Único | 4 bytes | -3,402823E38 a -1,401298E-45 para valores negativos; 1.401298E-45 a 3.402823E38 para valores positivos |
Doble | 8 bytes | -1.79769313486231E308 a-4.94065645841247E-324 para valores negativos; 4.94065645841247E-324 a 1.79769313486232E308 para valores positivos |
Divisa | 8 bytes | -922,337,203,685,477.5808 a 922,337,203,685,477.5807 |
Decimal | 14 bytes | +/- 79,228,162,514,264,337,593,543,950,335 sin punto decimal; +/- 7.9228162514264337593543950335 con 28 lugares a la derecha del decimal |
Fecha | 8 bytes | 1 de enero de 100 al 31 de diciembre de 9999 |
Objeto | 4 bytes | Cualquier referencia de objeto |
Cadena (longitud variable) | 10 bytes + longitud de la cadena | 0 a aproximadamente 2 mil millones |
Cadena (longitud fija) | Longitud de la cuerda | 1 a aproximadamente 65,400 |
Variante (con números) | 16 bytes | Cualquier valor numérico hasta el rango de un Double |
Variante (con personajes) | 22 bytes + longitud de la cadena | Mismo rango que para String de longitud variable |
Usuario definido | Varía | El rango de cada elemento es el mismo que el rango de su tipo de datos. |
Cuando especifica un tipo de datos para una variable en su código, le dice a VBA cómo almacenar esta variable y cuánto espacio asignarle.
Por ejemplo, si necesita usar una variable que debe contener el número del mes, puede usar el tipo de datos BYTE (que puede acomodar valores de 0 a 255). Dado que el número del mes no va a estar por encima de 12, esto funcionará bien y también reservará menos memoria para esta variable.
Por el contrario, si necesita una variable para almacenar los números de fila en Excel, debe usar un tipo de datos que pueda acomodar un número hasta 1048756. Por lo tanto, es mejor usar el tipo de datos Long.
Declaración de tipos de datos variables
Como buena práctica de codificación, debe declarar el tipo de datos de las variables (o constantes) al escribir el código. Hacer esto asegura que VBA asigne solo la memoria especificada a la variable y esto puede hacer que su código se ejecute más rápido.
A continuación se muestra un ejemplo en el que he declarado diferentes tipos de datos para diferentes variables:
Sub DeclaringVariables () Dim X como entero Dim Correo electrónico como cadena Dim Nombre como cadena Dim RowCount Tan largo Dim Hoy Fecha como fecha Fin Sub
Para declarar un tipo de datos variable, debe usar la declaración DIM (que es la abreviatura de Dimension).
En 'Dim X como entero", He declarado la variable X como tipo de datos Integer.
Ahora, cuando lo uso en mi código, VBA sabría que X solo puede contener tipos de datos enteros.
Si trato de asignarle un valor que no sea un número entero, obtendré un error (como se muestra a continuación):
Nota: También puede optar por no declarar el tipo de datos, en cuyo caso, VBA considera automáticamente la variable del tipo de datos variante. Un tipo de datos variante puede acomodar cualquier tipo de datos. Si bien esto puede parecer conveniente, no se recomienda utilizar el tipo de datos de variante. Tiende a ocupar más memoria y puede hacer que su código VBA se ejecute más lento.Hacer obligatoria la declaración de variables (opción explícita)
Si bien puede codificar sin tener que declarar variables, es una buena práctica hacerlo.
Además de ahorrar memoria y hacer que su código sea más eficiente, la declaración de variables tiene otro beneficio importante: ayuda a atrapar errores causados por nombres de variables mal escritos.
Para asegurarse de estar obligado a declarar variables, agregue la siguiente línea en la parte superior de su módulo.
Opción explícita
Cuando agrega "Option Explicit", se le pedirá que declare todas las variables antes de ejecutar el código. Si hay alguna variable que no ha sido declarada, VBA mostraría un error.
Hay un gran beneficio en el uso de Option Explicit.
A veces, puede terminar cometiendo un error de escritura e ingresar un nombre de variable que es incorrecto.
Normalmente, VBA no tiene forma de saber si es un error o es intencional. Sin embargo, cuando usa "Option Explicit", VBA verá el nombre de la variable mal escrito como una nueva variable que no ha sido declarada y le mostrará un error. Esto le ayudará a identificar estos nombres de variables mal escritos, que pueden ser bastante difíciles de detectar en un código largo.
A continuación, se muestra un ejemplo en el que el uso de "Opción explícita" identifica el error (que no podría haberse detectado si no hubiera utilizado "Opción explícita")
Sub CommissionCalc () Dim CommissionRate As Double If Range ("A1"). Value> 10000 Then CommissionRate = 0.1 Else CommissionRtae = 0.05 End If MsgBox "Total Commission:" & Range ("A1"). Valor * CommissionRate End Sub
Tenga en cuenta que escribí mal la palabra "CommissionRate" una vez en este código.
Si no uso Option Explicit, este código se ejecutaría y me daría un valor de comisión total incorrecto (en caso de que el valor en la celda A1 sea menor que 10000).
Pero si uso Option Explicit en la parte superior del módulo, no me permitirá ejecutar este código antes de corregir la palabra mal escrita o declararla como otra variable. Mostrará un error como se muestra a continuación:
Si bien puede insertar la línea "Option Explicit" cada vez que codifica, estos son los pasos para que aparezca de forma predeterminada:
- En la barra de herramientas de VB Editor, haga clic en Herramientas.
- Haga clic en Opciones.
- En el cuadro de diálogo Opciones, haga clic en la pestaña Editor.
- Marque la opción - "Requerir declaración de variable".
- Haga clic en Aceptar.
Una vez que haya habilitado esta opción, cada vez que abra un nuevo módulo, VBA agregaría automáticamente la línea "Opción explícita".
Nota: Esta opción solo afectará a cualquier módulo que cree después de que esta opción esté habilitada. Todos los módulos existentes no se ven afectados.
Alcance de las variables
Hasta ahora, hemos visto cómo declarar una variable y asignarle tipos de datos.
En esta sección, cubriré el alcance de las variables y cómo se puede declarar una variable para usarla solo en una subrutina, en un módulo completo o en todos los módulos.
El alcance de una variable determina dónde se puede usar la variable en VBA,
Hay tres formas de determinar el alcance de una variable en Excel VBA:
- Dentro de una sola subrutina (variables locales)
- Dentro de un módulo (variables a nivel de módulo)
- En todos los módulos (variables públicas)
Veamos cada uno de estos en detalle.
Dentro de una sola subrutina (variables locales)
Cuando declara una variable dentro de una subrutina / procedimiento, esa variable está disponible solo para esa subrutina.
No puede utilizarlo en otras subrutinas del módulo.
Tan pronto como finaliza la subrutina, la variable se elimina y se libera la memoria utilizada por ella.
En el siguiente ejemplo, las variables se declaran dentro de la subrutina y se eliminarán cuando finalice esta subrutina.
Dentro de un módulo (variables a nivel de módulo)
Cuando desee que una variable esté disponible para todos los procedimientos de un módulo, debe declararla en la parte superior del módulo (y no en ninguna subrutina).
Una vez que la declare en la parte superior del módulo, puede usar esa variable en todos los procedimientos de ese módulo.
En el ejemplo anterior, la variable "i" se declara en la parte superior del módulo y está disponible para ser utilizada por todos los módulos.
Tenga en cuenta que cuando finaliza la subrutina, las variables de nivel de módulo no se eliminan (conserva su valor).
A continuación se muestra un ejemplo, donde tengo dos códigos. Cuando ejecuto el primer procedimiento y luego ejecuto el segundo, el valor de "i" se convierte en 30 (ya que lleva el valor de 10 del primer procedimiento)
En todos los módulos (variables públicas)
Si desea que una variable esté disponible en todo el procedimiento en el libro de trabajo, debe declararla con la palabra clave Public (en lugar de DIM).
La siguiente línea de código en la parte superior del módulo haría que la variable "CommissionRate" esté disponible en todos los módulos del libro de trabajo.
Comisión Pública Tasa Como Doble
Puede insertar la declaración de variable (usando la palabra clave Public), en cualquiera de los módulos (en la parte superior antes de cualquier procedimiento).
Variables estáticas (que retiene el valor)
Cuando trabaja con variables locales, tan pronto como finaliza el procedimiento, la variable perderá su valor y se eliminará de la memoria de VBA.
En caso de que desee que la variable conserve el valor, debe utilizar el Estático palabra clave.
Primero, déjame mostrarte lo que sucede en un caso normal.
En el siguiente código, cuando ejecuto el procedimiento varias veces, mostrará el valor 10 cada vez.
Sub Procedimiento1 () Dim i As Integer i = i + 10 MsgBox i End Sub
Ahora bien, si utilizo la palabra clave Static en lugar de DIM y ejecuto el procedimiento varias veces, seguirá mostrando valores en incrementos de 10. Esto sucede cuando la variable "i" retiene su valor y lo usa en el cálculo.
Sub Procedimiento1 () Estático i Como entero i = i + 10 MsgBox i End Sub
Declaración de constantes en Excel VBA
Si bien las variables pueden cambiar durante la ejecución del código, si desea tener valores fijos, puede usar constantes.
Una constante le permite asignar un valor a una cadena con nombre que puede usar en su código.
El beneficio de usar una constante es que facilita la escritura y la comprensión del código, y también le permite controlar todos los valores fijos desde un solo lugar.
Por ejemplo, si está calculando comisiones y la tasa de comisión es del 10%, puede crear una constante (CommissionRate) y asignarle el valor 0.1.
En el futuro, si la tasa de comisión cambia, solo necesita realizar el cambio en un lugar en lugar de cambiarlo manualmente en el código en todas partes.
A continuación se muestra un ejemplo de código en el que le he asignado un valor a la constante:
Sub CalculateCommission () Dim CommissionValue As Double Const CommissionRate As Double = 0.1 CommissionValue = Rango ("A1") * CommissionRate MsgBox CommissionValue End Sub
La siguiente línea se utiliza para declarar la constante:
Tasa de comisión constante como doble = 0,1
Al declarar constantes, debe comenzar con la palabra clave "Const‘, Seguido del nombre de la constante.
Tenga en cuenta que he especificado el tipo de datos de la constante como Double en este ejemplo. Nuevamente, es una buena práctica especificar el tipo de datos para que su código se ejecute más rápido y sea más eficiente.
Si no declara el tipo de datos, se considerará como un tipo de datos variante.
Al igual que las variables, las constantes también pueden tener un alcance basado en dónde y cómo se declaran:
- Dentro de una sola subrutina (constantes locales): Están disponibles en la subrutina / procedimiento en el que se declaran. Cuando finaliza el procedimiento, estas constantes se eliminan de la memoria del sistema.
- Dentro de un módulo (constantes a nivel de módulo): Estos se declaran en la parte superior del módulo (antes de cualquier procedimiento). Están disponibles para todos los procedimientos del módulo.
- En todos los módulos (constantes públicas): Estos se declaran utilizando la palabra clave "Público", en la parte superior de cualquier módulo (antes de cualquier procedimiento). Están disponibles para todos los procedimientos en todos los módulos.
También te pueden gustar los siguientes tutoriales de VBA:
- Cómo grabar una macro en Excel
- Trabajar con celdas y rangos en Excel VBA
- Trabajar con hojas de trabajo usando Excel VBA
- Trabajar con libros de trabajo en Excel VBA
- Eventos de VBA
- Bucles de Excel VBA
- Cómo ejecutar una macro en Excel
- If Then Else Statement en Excel VBA.