Texto Consulta Excel VBA
Texto Consulta Excel VBA
Texto Consulta Excel VBA
Aunque las macros son un tema avanzado de Excel puedes consultar los siguientes
artículos para comenzar a familiarizarte con este tema.
Introducción
Principios básicos
Programando en VBA
El Editor de Visual Basic
Tu primera macro con VBA
Utilizar comentarios en VBA
Objetos, propiedades y métodos en VBA
Navegando el modelo de objetos
El objeto Workbook y Worksheet
El objeto Application
El libro de macros personal
Tipos de errores en VBA
Depurar macros
Programación
Variables en VBA
Cadenas de texto en VBA
La declaración If-Then en VBA
Acceder celdas con VBA
El bucle For-Next en VBA
Operadores lógicos en VBA
Eventos en VBA
Arreglos en VBA
Fecha y hora en VBA
Funciones en VBA
Crear una función en VBA
Controles
Controles de formulario
Controles ActiveX
Cuadro de texto
Cuadro de lista
Cuadro combinado
Casilla de verificación
Botón de opción
Formularios en VBA
Una vez que hayas dado los primeros pasos en el mundo de las macros y la
programación en VBA descubrirás que Excel se convierte en una herramienta muy
poderosa para solucionar cualquier problema que afrontes en el manejo de
información.
Por ejemplo, si todas las mañanas creas un reporte de ventas y en ese reporte
siempre das el mismo formato a los textos, se podría crear una macro para que lo
haga automáticamente por ti. Las macros se utilizan principalmente para eliminar
la necesidad de repetir los pasos de aquellas tareas que realizas una y otra vez.
Un lenguaje de programación
¿Para qué sirve una macro en Excel? Una macro nos ayuda a automatizar
aquellas tareas que hacemos repetidamente. Una macro es una serie de
instrucciones que son guardadas dentro de un archivo de Excel para poder ser
ejecutadas cuando lo necesitemos.
Automatización de tareas
De la misma manera las macros nos ayudan a eliminar esas tareas repetitivas de
nuestro trabajo cotidiano al permitirnos utilizar mejor nuestro tiempo en el análisis
de los datos y en la toma de decisiones.
Las macros son escritas en un lenguaje de computadora conocido como VBA por
sus siglas en inglés (Visual Basic for Applications). Como cualquier otro lenguaje de
computadora debemos aprender a utilizar los comandos que nos ayudarán a indicar
a Excel lo que deseamos hacer con nuestros datos.
Las macros se crean con el Editor de Visual Basic el cual nos permitirá introducir el
código con las instrucciones que serán ejecutadas por la macro.
Existe otro método que es utilizar la Grabadora de macros la cual irá grabando todas
las acciones que realicemos en Excel hasta que detengamos la grabación. Una vez
grabada la macro podremos “reproducir” de nuevo las acciones con tan solo un clic.
Ahora que ya sabes para qué sirve una macro en Excel puedes dar los primeros
pasos en este camino utilizando el tutorial Introducción a las macros.
Si quieres escribir una nueva macro o ejecutar una macro previamente creada,
entonces debes habilitar la ficha Programador dentro de la cinta de opciones.
Para mostrar esta ficha sigue los siguientes pasos.
El grupo Código tienes los comandos necesarios para iniciar el Editor de Visual
Basic donde se puede escribir directamente código VBA. También nos permitirá ver
la lista de macros disponibles para poder ejecutarlas o eliminarlas. Y no podríamos
olvidar mencionar que en este grupo se encuentra el comando Grabar macro el
cual nos permite crear una macro sin necesidad de saber sobre programación en
VBA.
El grupo XML permite importar datos de un archivo XML así como opciones útiles
para codificar archivos XML. Finalmente el grupo Modificar solamente contiene el
comando Panel de documentos.
La grabadora de macros
La grabadora de macros almacena cada acción que se realiza en Excel, por eso
es conveniente planear con antelación los pasos a seguir de manera que no se
realicen acciones innecesarias mientras se realiza la grabación. Para utilizar la
grabadora de macros debes ir a la ficha Programador y seleccionar el comando
Grabar macro.
También puedes colocar una Descripción para la macro que vas a crear. Finalmente
debes pulsar el botón Aceptar para iniciar con la grabación de la macro. Al terminar
de ejecutar las acciones planeadas deberás pulsar el botón Detener grabación
para completar la macro.
En esta ocasión mostraré cómo crear una macro en Excel utilizando la grabadora
de macros. La macro será un ejemplo muy sencillo pero permitirá ilustrar el proceso
básico de creación.
Voy a crear una macro que siempre introduzca el nombre de tres departamentos
de una empresa y posteriormente aplique un formato especial al texto. Para iniciar
la grabación debes ir al comando Grabar macro que se encuentra en la ficha
Programador lo cual mostrará el siguiente cuadro de diálogo.
Una manera muy interesante de descubrir y aprender más sobre código VBA es
analizar el código generado por la Grabadora de macros. Para este ejemplo
grabaremos una macro muy sencilla que solamente cambie el color de la fuente de
la celda actual.
Pulsa el botón Aceptar y se comenzarán a grabar todas las acciones, así que debes
actuar con cuidado porque se grabará absolutamente todo. Para la macro que estoy
grabando solo haré lo siguiente: iré a la ficha Inicio y pulsaré el comando Color de
fuente y seleccionaré el color rojo para la celda activa.
Una vez hecho esto debo detener la grabación de la macro y una alternativa para
hacerlo es pulsar el icono que se muestra en la barra de estado.
Ahora que ya hemos generado la macro, pulsa el botón Macros que se encuentra
en el grupo Código de la ficha Programador. Se mostrará el cuadro de
diálogo Macro que enlista todas las macros que hemos creado.
Selecciona la macro recién creada y pulsa el botón Modificar. Esto abrirá el Editor
de Visual Basic y mostrará el código generado para la macro.
Aunque este ha sido un ejercicio muy sencillo, cuando tengas curiosidad o duda
sobre qué objetos utilizar al programar en VBA considera utilizar la Grabadora de
macros para darte una idea del camino a seguir.
Sin embargo, si estás creando tus propias macros y deseas remover esta protección
porque sabes que no existe código malicioso, entonces puedes modificar la
configuración para habilitar todas las macros. Para hacerlo debes seguir los
siguientes pasos.
Una vez seleccionada la opción deseada se debe pulsar el botón Aceptar para hacer
los cambios permanentes.
Programando en VBA
Excel 2013 es una de las herramientas de software más poderosas para el manejo,
análisis y presentación de datos. Aun y con todas sus bondades, en ocasiones Excel
no llega a suplir algunas necesidades específicas de los usuarios.
Principios fundamentales
El segundo concepto importante a entender es que cada uno de estos objetos tiene
propiedades y métodos. Para explicar mejor este concepto utilizaré una analogía.
Propiedades y Métodos
Supongamos que tenemos el objeto auto. Así es, un auto como el que manejamos
todos los días para ir al trabajo. Este auto tiene varias propiedades como son:
marca, modelo, color, tipo de transmisión las cuales ayudan a describir mejor al
auto. También hay propiedades que indican su estado actual como por ejemplo
gasolina disponible, temperatura del aceite, velocidad, kilómetros recorridos entre
otras propiedades más. Podemos decir que las propiedades de un objeto nos
ayudan a describirlo mejor en todo momento.
Por otro lado tenemos los métodos de un objeto que en resumen son las acciones
que podemos realizar con dicho objeto. Por ejemplo, con nuestro auto podemos
hacer lo siguiente: encenderlo, avanzar, vuelta a la izquierda, vuelta a la derecha,
reversa, detener, apagar, etc. Todas las acciones que se pueden llevar a cabo con
un objeto son conocidas como métodos.
Será difícil mencionar todos los objetos de Excel y sus propiedades en esta
publicación, pero lo importante a recordar en esta ocasión es que cada elemento de
Excel está siempre representado por un objeto en VBA y cada objeto tiene a su vez
propiedades y métodos que nos permitirán trabajar con nuestros datos.
Existen al menos dos alternativas para abrir este editor, la primera de ellas es a
través del botón Visual Basic de la ficha Programador.
El segundo método para abrir este programa es, en mi opinión, el más sencillo y
rápido y que es a través del atajo de teclado: ALT + F11. El Editor de Visual Basic
contiene varias ventanas y barras de herramientas.
Dentro del Editor de Visual Basic puedes observar una ventana llamada Inmediato
que está en la parte inferior. Esta ventana es de mucha ayuda al momento de
escribir código VBA porque permite introducir instrucciones y observar el resultado
inmediato. Además, desde el código VBA podemos imprimir mensajes hacia la
ventana Inmediato con el comando Debug.Print de manera que podamos depurar
nuestro código. Si no puedes observar esta ventana puedes mostrarla también
desde el menú Ver.
Ahora que ya sabes lo que es el Editor de Visual Basic para Aplicaciones puedo
mostrarte un ejemplo muy sencillo para crear una macro. Lo primero que debes
hacer es ir a la ficha Programador y hacer clic en el botón Visual Basic.
Creación de un módulo
Una vez dentro del Editor debes hacer clic derecho sobre el título del proyecto y
dentro del menú seleccionar la opción Insertar y posteriormente Módulo.
Si el módulo no está abierto solamente deberás hacer doble clic sobre él.
Posiciónate en el área de código e introduce las siguientes instrucciones:
Subrutinas en VBA
Las subrutinas nos ayudan a agrupar varias instrucciones de manera que podamos
organizar adecuadamente nuestro código. Una subrutina siempre tiene un nombre
el cual debe ser especificado justo después de la instrucción Sub y seguido por
paréntesis.
La subrutina que acabamos de crear para este ejemplo solamente tiene una
instrucción dentro la cual hace uso de la función MsgBox. Esta función nos ayuda
a mostrar una ventana de mensaje de manera que podamos estar comunicados con
el usuario sobre cualquier error o advertencia que necesitamos darle a conocer.
Para este ejemplo he utilizado la forma más sencilla de la función MsgBox la cual
solamente tiene un solo argumento que es precisamente el mensaje que
necesitamos mostrar en pantalla al usuario.
Ejecutar macro
Para probar nuestro código bastará con pulsar el botón Ejecutar que se encuentra
dentro de la barra de herramientas.
Listo, has creado tu primera macro la cual muestra una ventana de mensajes y
despliega el texto especificado en la función MsgBox. Para guardar la macro
recuerda que debes guardar el archivo como Libro de Excel habilitado para
macros, de lo contrario perderás el código del módulo creado.
Utilizar comentarios dentro del código VBA es una de las mejores prácticas que
debes adoptar desde que inicias en el mundo de la programación en Excel. Los
comentarios harán que tu código sea fácil de entender.
Un comentario en VBA es una línea dentro del código que no será tomada en
cuenta al momento de realizar la ejecución. Los comentarios serán solo visibles por
ti al momento de editar el código dentro del Editor de Visual Basic.
Para agregar un comentario será suficiente con colocar una comilla sencilla (‘) al
inicio de la línea. Después de colocar la comilla sencilla debes escribir el comentario
y al terminar de insertar la línea Excel colocará automáticamente el texto en color
verde indicando que ha reconocido la línea como un comentario en VBA.
He visto en más de una ocasión que muchas personas no tienen esta buena práctica
al programar en VBA y el problema se presentará cuando pase el tiempo y tengan
que modificar el código pero ya no recuerden la lógica implementada ni lo que
significa cada una de las variables.
Aunque pareciera una actividad aburrida, créeme que te ahorrará mucho tiempo
cuando te veas en la necesidad de modificar tu código. Además, si por alguna razón
necesitas que otra persona haga modificaciones al código le serán de gran ayuda
los comentarios que hayas agregado.
Para comentar varias líneas de código en una macro, sin la necesidad de estar
colocando la comilla sencilla al principio de cada una de las líneas, puedes seguir
los siguientes pasos. En primer lugar selecciona todas las líneas de código que
deseas convertir en comentarios y posteriormente oprime el botón Bloque con
comentarios de manera que Excel coloque todas las comillas sencillas (‘) a cada
línea de código seleccionada.
De la misma manera puedes remover las comillas sencillas si pulsas el botón Bloque
sin comentarios que se encuentra justo al lado derecho del botón Bloque con
comentarios.
Los objetos en Excel (VBA) son cosas. Una celda es un objeto, una hoja es un
objeto, un libro es un objeto y de esta manera existen muchos más objetos en Excel.
A esto lo conocemos como el modelo de objetos de Excel.
Cada uno de los objetos de Excel tiene propiedades y métodos. Las propiedades
son las características del objeto y los métodos son las acciones que el objeto puede
hacer.
Propiedades de un objeto
Si una persona fuera un objeto de Excel sus propiedades serían el color de sus ojos,
el color de su cabello, su estatura, su peso. De la misma manera, un objeto de Excel
tiene propiedades por ejemplos, una celda (Range) tiene las propiedades valor
(Value) y dirección (Address) entre muchas otras. Estas propiedades describen
mejor al objeto.
Métodos de un objeto
Siguiendo con el ejemplo de una persona, si fuera un objeto de Excel sus métodos
serían correr, caminar, hablar, dormir. Los métodos son las actividades o acciones
que el objeto puede realizar. Los objetos de Excel se comportan de la misma
manera que el ejemplo de una persona. Una celda (Range) tiene los métodos
activar (Activate), calcular (Calculate), borrar (Clear) entre muchos más.
Range("A1").Value = "Hola"
De esta manera asignamos una cadena de texto al valor de la celda A1. Ahora bien,
si queremos borrar ese valor que acabamos de colocar en la celda podemos utilizar
el método Clear de la siguiente manera:
Range("A1").Clear
Los objetos tienen muchas propiedades y métodos y a veces es difícil pensar que
los llegaremos a memorizar todos por completo. Sin embargo, el Editor de Visual
Basic es de gran ayuda porque justamente al momento de escribir nuestro código
nos proporciona la lista completa de propiedades y métodos para un objeto.
Esto sucede al momento de introducir el punto después del nombre del objeto.
Puedes distinguir entre las propiedades y métodos porque tienen iconos diferentes.
En la imagen de arriba los métodos son los que tienen el icono de color verde.
Recuerda, los objetos son cosas en Excel y sus características las llamamos
propiedades las cuales nos ayudan a definir al objeto. Los métodos son las
acciones que cada objeto puede realizar.
Excel tiene un modelo de objetos el cual es una jerarquía de todos los objetos que
podemos utilizar desde el lenguaje VBA. En la parte superior de la jerarquía se
encuentra el objeto Application y todos los demás objetos estarán por debajo de él.
Para tener acceso a los objetos que están por debajo del objeto Application
podemos utilizar el punto. El punto nos ayuda a navegar por la jerarquía hacia un
nivel inferior. Observa lo que se muestra en el Editor de Visual Basic al colocar un
punto después del objeto Application:
Objetos predeterminados
A algunas personas les gusta utilizar las referencias completas a los objetos, es
decir, especificar toda la ruta completa hasta llegar al objeto deseado. Una razón
para hacer esto es porque da una claridad absoluta sobre la ubicación exacta de
cada objeto lo cual ayudará a evitar cualquier mala interpretación del código.
Si decides no hacer uso de los objetos predeterminados sino que deseas utilizar las
referencias completas hacia cada objeto aún hay una manera de ahorrar algunas
líneas de código. Supongamos las siguientes instrucciones en VBA:
Podemos ahorrar algunas palabras de este código haciendo uso del bloque With de
la siguiente manera.
Un objeto en VBA puede contener otro objeto y ese objeto a su vez puede contener
otro objeto y así sucesivamente. La raíz de todos los objetos en VBA se encuentra
en el objeto Application el cual a su vez contiene las colecciones de objetos
Workbooks y Worksheets.
de una hoja lo cual significa que un objeto Workbook puede contener más de un
objeto Worksheet.
Ya que no hay límite en el número de hojas que puede tener un libro, se volvería
complicado organizar esta relación entre los objetos Workbook y Worksheet y por
esta razón se crearon las colecciones de objetos. De esta manera un objeto
Workbook tiene asociada una colección de objetos Worksheets la cual contiene los
objetos Worksheet que representan las hojas de ese libro de Excel. De la misma
manera, el objeto Application no tiene asignados directamente todos los libros de
Excel sino que tiene una colección de objetos Workbooks la cual incluirá todos los
objetos Workbook de los libros de Excel que abramos en nuestro código VBA.
Para abrir un libro de Excel en VBA podemos utilizar el método Open del objeto
Workbooks de la siguiente manera:
Application.Workbooks.Open Filename:="C:Libro1.xlsx"
Una vez que hemos abierto los archivos que necesitamos podremos hacer
referencia a cada uno de ellos a través de la colección de objetos Workbooks de la
siguiente manera:
Application.Workbooks(1).Activate
El número que observas dentro de los paréntesis indica el índice del objeto
Workbook dentro de la colección de objetos Workbooks. De manera predeterminada
el índice 1 será para el libro de Excel que contiene el código VBA y a partir de ahí
la numeración será de acuerdo al orden en que hayamos abierto otros archivos. Si
conocemos el nombre del libro podemos utilizarlo en lugar del índice y tener una
instrucción como la siguiente:
Application.Workbooks("Libro1.xlsx").Activate
La colección de objetos Workbooks nos permitirá acceder a todos los libros que
hayamos abierto dentro de nuestra aplicación VBA.
Application.Workbooks(1).Worksheets(1).Range("A1").Value = "Hola"
Esta instrucción accede a la hoja con el índice 1 y coloca el valor “Hola Mundo” en
la celda A1. También podemos acceder a una hoja a través de su nombre en caso
de que lo conozcamos:
Application.Workbooks(1).Worksheets("Hoja1").Range("A1").Value = "Hola"
Worksheets.Add
Application.Workbooks("Libro1.xlsx").Worksheets.Add
Ahora ya sabemos que VBA tiene un objeto para representar los libros de Excel
(Workbook) y otro objeto para representar las hojas de un libro (Worksheet). Ambos
tipos de objetos son almacenados dentro de colecciones de objetos que son
conocidas como Workbooks, que se refiere a la colección de libros que se han
abierto y Worksheets que es la colección de hojas que pertenecen a un determinado
libro.
Cuando escribimos macros con VBA trabajamos con múltiples objetos que pueden
ejecutar nuestras instrucciones adecuadamente, pero el objeto Application está en
el nivel más alto de la jerarquía del modelo de objetos de Excel.
Ya que el objeto Application es el objeto principal dentro de VBA todos los demás
objetos derivan de él. Es por ello que encontrarás frecuentemente instrucciones que
comienzan especificando el objeto Application:
Sin embargo, VBA nos permite, en la mayoría de los casos, omitir la escritura del
objeto Application ya que supone que todos los demás objetos provienen de él. De
esta manera la siguiente instrucción también es válida.
El objeto Application tiene algunas colecciones que son de mucha utilidad como
Sheets, Columns y Rows. La colección Sheets nos permite acceder a todas las
hojas de un libro:
Application.Sheets.Count
Application.Columns(5).Select
Application.Rows(5).Select
Uno de los métodos más utilizados del objeto Application es el método InputBox
que nos ayuda a mostrar un cuadro de diálogo que solicita al usuario el ingreso de
algún valor. Observa la siguiente línea de código:
Esta instrucción hará que Excel muestre un cuadro de diálogo pidiendo al usuario
que ingrese el número de impresiones que desea realizar. El número ingresado por
el usuario se guardará en la variable Impresiones.
C:Usuarios[Usuario]AppDataRoamingMicrosoftExcelXLSTART
El libro de macros personal se crea la primera vez que se guarda una macro en él.
Para hacerlo, crea una macro y especifica que deseas guardarla en el Libro de
macros personal.
Una vez que el libro de macros personal ha sido creado lo podrás ver dentro del
Editor de Visual Basic:
Un error de sintaxis ocurre cuando tenemos un error con el lenguaje VBA, es decir,
cuando intentamos hacer algo que no está permitido. Este tipo de errores son los
más fáciles de localizar porque el Editor de Visual Basic está configurado para
avisarnos en el momento en que encuentra un error de este tipo en nuestro código.
Los errores de sintaxis en VBA surgen cuando intentamos insertar algún operador
o alguna instrucción de VBA en un lugar que no le corresponde. Observa la siguiente
imagen:
En este ejemplo he intentado utilizar la palabra Next en lugar del tipo de dato de la
variable. Es por eso que el Editor de Visual Basic muestra un mensaje de error de
compilación. La palabra Next es parte del lenguaje VBA pero la he utilizado en el
lugar inapropiado y por eso obtengo el error.
De igual manera el Editor de Visual Basic notará si hemos utilizado una palabra que
no pertenece al lenguaje VBA. En el siguiente ejemplo he confundido la instrucción
Mod (módulo) y he colocado la palabra Mud.
Estos son solo unos ejemplos de errores de sintaxis que podemos cometer pero
como lo he mencionado antes, el Editor de Visual Basic nos alertará sobre dichos
errores y podremos detectarlos y corregirlos.
Este tipo de errores son mas difíciles de encontrar pero aun así se podrán encontrar
algunos de ellos al hacer pruebas y depuración de nuestra aplicación. Algunos
ejemplos de este tipo de errores son los siguientes:
Existen muchas otras razones por las que podemos tener un error en tiempo de
ejecución. La mejor manera de prevenir estos errores será haciendo una
depuración de nuestro código pero eso será tema de otro artículo.
Lo importante por ahora es estar consiente de estos dos tipos de errores en VBA
y saber que debemos estar atentos para corregir todos los errores de sintaxis de
nuestro código y minimizar al máximo los posibles errores de ejecución.
Para iniciar con la depuración del código podemos seleccionar la opción de menú
Depuración > Paso a paso por instrucciones o simplemente pulsar la tecla F8.
Esto hará que se inicie la ejecución en la primera línea, la cual se mostrará con un
fondo amarillo indicando que esa instrucción es la que está por ejecutarse.
Para continuar con la depuración debemos pulsar de nuevo la tecla F8 hasta llegar
al final del código. Cada vez que pulsamos la techa F8 suceden las siguientes
cosas:
De esta manera podemos ejecutar cada una de las líneas de nuestro código VBA y
validar que no exista error alguno. Regresando a nuestro ejemplo, al momento de
llegar a la tercera instrucción y pulsar la tecla F8, Excel enviará el siguiente mensaje
de error:
El mensaje nos advierte que el objeto no admite esa propiedad o método y se está
refiriendo al objeto Range en donde el método Value no está escrito de manera
correcta y por lo tanto el depurador de VBA no reconoce dicha propiedad. Pulsa el
botón Aceptar para cerrar el cuadro de diálogo y poder corregir el error en el código.
Ya hemos hablado sobre los diferentes tipos de errores en VBA y la depuración nos
ayudará a probar nuestro código y a encontrar la gran mayoría de los errores que
podamos tener. Es probable que al principio veas a la depuración como un trabajo
muy exhaustivo pero cuando tus programas y macros comiencen a crecer entonces
verás todos los beneficios que nos da la depuración de macros en Excel.
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. A
continuación haremos una revisión de cada uno de estos tipos.
Las variables de tipo entero son utilizadas para guardar números enteros. Debemos
utilizar la palabra clave Integer para declarar una variable de este tipo.
Dim x As Integer
x=6
Las variables de tipo doble pueden almacenar números con el doble de precisión
incluyendo números decimales. La palabra clave para este tipo de variables es
Double.
Dim x As Double
x = 3.1416
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á especio sin utilizar. Por lo tanto es recomendable utilizar siempre el
tipo de variable adecuado para cualquier número.
Una variable de tipo texto se declara con la palabra clave String. En el siguiente
código declararé la variable libro y posteriormente le asignaré un valor.
Una variable de tipo lógico es aquella que puede almacenar solamente dos valores:
falso o verdadero. La palabra clave para definir estas variables es Boolean.
Estos son los tipos de variables básicos en VBA. Existen algunos más que iré
tratando en artículo posteriores. Mientras tanto es indispensable que aprendas a
declarar adecuadamente las variables en VBA porque será inevitable hacer uso de
ellas dentro de nuestros programas.
Existen varias funciones en VBA que podemos utilizar para manipular cadenas de
texto. A continuación revisaremos algunas de estas funciones VBA y observaremos
el resultados de cada una de ellas.
Para iniciar con esta revisión, debes colocar un botón de comando dentro de una
hoja de Excel y después hacer doble clic sobre él para introducir el código.
Para unir dos (o más) cadenas de texto podemos utilizar el operador &. Observa el
siguiente código:
La función Left
La función Right
La función Len
La función Len nos ayuda a conocer la longitud de una cadena de texto, es decir, la
cantidad de caracteres que conforman a una cadena.
La función InStr
La función Mid
Con la función Mid podemos extraer una subcadena de otra cadena de texto con
tan solo especificar la posición inicial de la subcadena y su longitud. Observa el
siguiente ejemplo:
La declaración If-Then-Else
Parece que todo funciona muy bien en el código anterior pero aún lo podemos
mejorar agregando la declaración Else de manera que tengamos una declaración
de la forma If-Then-Else. Esta variante nos permite hacer la siguiente evaluación:
Si se cumple la condición Entonces haz esto De lo contrario haz otra cosa.
La declaración Else en VBA nos permite indicar otro bloque de instrucciones que se
deben ejecutar en caso de que la condición sea falsa. De esta manera podemos
tomar una acción determinada en caso de que la condición se cumpla o en caso de
que no se cumpla. Ahora modificaré el ejemplo anterior para asegurarme de que en
caso de que la condición de calificación mayor o igual a 60 no se cumpla se
despliegue el resultado “reprobado”. Observa el siguiente código.
Por último quiero que observes que en este segundo ejemplo la declaración If-
Then-Else termina con la declaración End If. Siempre que utilicemos la declaración
If-Then o la declaración If-Then-Else debemos terminar con End If.
Existe un par de maneras para acceder las celdas de nuestras hojas utilizando VBA.
Podemos utilizar el objeto Range y también podemos utilizar el objeto Cells. A
continuación revisaremos ambos objetos.
Range("B5").Select
Cells(5, 2).Select
El objeto Cells tiene como primer argumento el número de fila y como segundo
argumento el número de columna.
Seleccionar un rango
Range("A1:D5").Select
Para establecer el valor de una celda podemos utilizar alguna de las siguientes
instrucciones:
Range("B5").Value = 500
Cells(5, 2).Value = 600
Es mucho más común encontrarse el objeto Range en las aplicaciones VBA, sin
embargo el objeto Cells ofrece una ventaja que debemos considerar cuando
necesitamos hacer un recorrido programático por varias celdas ya que será muy
sencillo especificar las filas y columnas utilizando una variable numérica.
For i = 1 To 10
For j = 1 To 5
Cells(i, j).Value = i * j
Next j
Next i
La instrucción For-Next
cuenta para incrementar su valor en uno. Así podemos terminar el bucle con
la instrucción Next i.
Con este bucle provocaremos que se muestre una ventana de diálogo 5 veces y en
cada una de ellas se mostrará el valor actual de la variable i que comenzará con 1
y terminará con 5. Observa el resultado:
Los operadores lógicos más comunes en VBA son: And y Or. Cada uno de estos
operadores es de mucha utilidad para evaluar condiciones y tomar decisiones
adecuadas sobre el código que será ejecutado.
De esta manera comprobamos que el operador lógico And nos ayuda a forzar que
ambas condiciones se cumplan. En cambio, si el valor de una de las celdas es
menor a 70, entonces tendremos un resultado diferente:
El operador lógico Or
La única manera en que el operador lógico Or nos devuelva un valor falso es que
ninguna de las condiciones se cumpla. En nuestro ejemplo, el alumno estará
reprobado solamente cuando ambas calificaciones sean menores a 70:
Eventos en VBA
Los eventos en VBA nos ayudan a monitorear las acciones que realizan los
usuarios en Excel de manera que podamos controlar la acción a tomar cuando el
usuario hace algo específico como el activar una hoja o hacer clic en alguna celda.
Para descubrir los eventos que tiene un objeto es suficiente con abrir el Editor de
Visual Basic y posteriormente el Examinador de objetos (F2). En el panel izquierdo
se mostrarán los objetos y en el panel derecho las propiedades, métodos y eventos
de dicho objeto. Podrás distinguir los eventos porque tienen un icono en forma de
rayo (color amarillo):
El ejemplo que crearemos en esta ocasión es para activar un cuadro de diálogo con
el mensaje “Bienvenido a la Hoja 2” y que se mostrará cuando activemos la Hoja2
de nuestro libro. Para comenzar, debes seleccionar el objeto Hoja2 del panel
izquierdo del Editor de Visual Basic y posteriormente seleccionar la opción
Worksheet:
Una vez creada la subrutina para el evento Activate solamente insertaré el código
para que se muestre el mensaje dentro del cuadro de diálogo:
Ahora que hemos definido una acción asociada al evento Activate de la Hoja2, el
mensaje se mostrará cada vez que actives la Hoja2.
Los eventos en VBA son de mucha utilidad porque nos ayudan a controlar el
momento exacto en que deseamos ejecutar algún bloque de código al iniciarse
alguna acción por el usuario.
Arreglos en VBA
Con este código estamos creando el arreglo llamado Paises que tendrá 5 elementos
y estamos indicando que cada uno de los elementos será del tipo String, es decir,
cadenas de texto. Una vez que ha sido creado el arreglo podemos asignar sus
valores de la siguiente manera.
Paises(1) = "Argentina"
Paises(2) = "Colombia"
Paises(3) = "España"
Paises(4) = "México"
Paises(5) = "Perú"
Para acceder cualquier elemento del arreglo simplemente colocamos el nombre del
arreglo seguido por paréntesis y el número de índice del elemento que necesitamos.
Por ejemplo, para desplegar un mensaje con el nombre de país España puedo
utilizar la siguiente instrucción:
MsgBox Paises(3)
Los valores de fecha y hora en VBA pueden ser manipulados de diversas maneras.
En esta ocasión aprenderemos cómo obtener el año, mes y día en VBA y cómo
hacer operaciones básicas con fechas.
Para realizar estos ejemplos debes colocar un control de botón en una hoja de Excel
y colocar las líneas de código mostradas.
Para obtener la fecha actual en VBA utilizamos la función Date y para obtener la
hora actual usamos Now.
Al trabajar con fechas podremos obtener el mes utilizando la función Month y para
obtener el día la función Day.
El resultado es el siguiente:
Ya hemos visto que la función Date nos devuelve la fecha actual, pero podemos
utilizar otra función que nos permitirá convertir una cadena de texto en una fecha.
La función que utilizaremos para este será la función DateValue.
Para sumar días a una fecha en VBA utilizaremos la función DateAdd. Esta función
nos permite especificar la cantidad exacta de días a sumar:
Las fechas y horas son un tipo de dato muy común con el que seguramente tendrás
que trabajar al crear tus macros. Es importante que aprendas a utilizar las funciones
VBA que nos permitirán manipular adecuadamente la información.
Funciones VBA
La siguiente tabla provee una descripción breve de algunas de las funciones VBA
más utilizadas.
FUNCIÓN DESCRIPCIÓN
Como hemos visto en el artículo Tu primera macro con VBA, una subrutina nos
ayuda a organizar y agrupar las instrucciones en nuestro código. El día de hoy te
mostraré cómo crear una función VBA, la cual es similar a una subrutina excepto
por una cosa.
A diferencia de las subrutinas, las funciones VBA fueron diseñadas para retornar un
valor. A través de una función podemos agrupar código que nos ayudará a hacer
algún cálculo específico y obtener un resultado de regreso. Una función VBA
también es conocida como Función Definida por el Usuario, UDF por sus siglas en
inglés, y una vez creada puede ser utilizada de la misma manera que las funciones
incluidas en Excel como la función SUMAR o la función BUSCARV. Esto hace que
las funciones VBA sean una herramienta muy poderosa.
A continuación mostraré una función que toma un rango y regresa la suma de cada
una de sus celdas. Es importante insertar el código dentro de un Módulo tal como
se muestra en el artículo Tu primera macro con VBA. Posteriormente iré explicando
el detalle de la función.
La primera línea de código comienza con la palabra Function la cual define el inicio
de la función. Observa también cómo la última línea de código es End Function
que está especificando el término de la función.
Un parámetro no es más que una variable y por lo tanto puedes observar que en el
ejemplo he definido la variable rango que será del tipo Range.
Valor de retorno
Una vez definida la función se pueden especificar todas las instrucciones que serán
ejecutas. En el ejemplo he comenzado por definir un par de variables, la variable
celda que será del tipo Range y la variable resultado del tipo Double. En ésta última
variable es donde se irá acumulando la suma de todas las celdas.
Retornando el valor
Una vez que se han hecho los cálculos necesarios, es importante regresar el valor.
Para hacerlo es indispensable igualar el nombre de la función al valor o variable que
contiene el valor que se desea regresar. En nuestro ejemplo, la variable resultado
es la que contiene la suma de todas las celdas por lo que se iguala con el nombre
de la función en la línea MiSuma = resultado.
Finalmente probaré la funciónVBA recién creada dentro de una hoja de Excel. Tal
como lo definimos en el código, el único parámetro de la función debe ser un rango
del cual me regresará la suma de los valores de la celda. Observa el siguiente
ejemplo.
Aunque la función MiSuma hace lo mismo que la función de Excel SUMAR, nos ha
servido de ejemplo para introducir el tema de las funciones en VBA. Con este
ejemplo tan sencillo hemos creado nuestra primera función VBA.
Los controles de formulario en Excel son objetos que podemos colocar dentro de
una hoja de nuestro libro, o dentro de un formulario de usuario en VBA, y nos darán
funcionalidad adicional para interactuar mejor con los usuarios y tener un mejor
control sobre la información.
Podemos utilizar estos controles para ayudar a los usuarios a seleccionar elementos
de una lista predefinida o permitir que el usuario inicie una macro con tan solo pulsar
un botón. Los controles de formulario en Excel se encuentran dentro de la ficha
Programador dentro del grupo Controles. Solamente pulsa el botón Insertar y
observarás cada uno de ellos:
Para insertar cualquiera de los controles de formulario debes seleccionarlo del menú
desplegable y hacer clic sobre la hoja de Excel arrastrando el borde para “dibujar”
el contorno del control. Observa este procedimiento.
Los controles de formulario han estado presentes por varias versiones de Excel, sin
embargo a partir de Excel 2013 existen algunos controles que ya no pueden ser
utilizados dentro de las hojas como lo son el Campo de texto, el Cuadro combinado
de lista y el Cuadro combinado desplegable, sin embargo podremos alcanzar
funcionalidad similar utilizando controles ActiveX.
Los controles ActiveX son un tipo de controles que nos permiten agregar
funcionalidad de formularios a nuestros libros de Excel. Existe otro tipo de controles
que es conocido como Controles de formulario y que tienen una funcionalidad
similar, sin embargo existen algunas diferencias entre ambos tipos.
A diferencia de los controles de formulario, los controles ActiveX tienen una serie de
propiedades que podemos configurar pulsando el botón Propiedades que se
encuentra dentro del grupo Controles de la ficha Programador.
Antes de poder ver las propiedades de un control ActiveX debemos pulsar el botón
Modo Diseño el cual nos permitirá seleccionar el control y posteriormente ver sus
propiedades. Cada tipo de control ActiveX mostrará una ventana de Propiedades
con sus propias características. A continuación un ejemplo de la ventana
Propiedades para un botón de comando ActiveX:
Otra diferencia entre los controles de formulario y los controles ActiveX es que los
primeros pueden tener asignada una macro y al hacer clic sobre el control de
formulario se iniciará la ejecución de dicha macro.
Los controles ActiveX no tienen asignada una macro explícitamente sino que
podemos asignar código VBA para cada evento del control. Un evento de un control
ActiveX puede ser el evento de hacer clic sobre el control, el evento de hacer doble
clic, el evento de obtener el foco sobre el control ActiveX, entre otros eventos más.
Para asignar código a uno de los eventos de un control ActiveX solamente debemos
hacer clic derecho sobre él y seleccionar la opción Ver código.
Esto mostrará el Editor de Visual Basic con una subrutina para el evento Click()
donde podremos escribir nuestro código.
El puntero del ratón se convertirá en una cruz la cual nos permitirá dibujar el cuadro
de texto sobre la hoja de Excel. Una vez dibujado el cuadro de texto podrás hacer
clic derecho sobre él y seleccionar la opción Propiedades para conocer el nombre
que la ha sido asignado.
Si deseas colocar un texto dentro del cuadro de texto desde VBA puedes utilizar
una instrucción como la siguiente:
Si quieres leer el valor del cuadro de texto y colocarlo en una celda podemos utilizar
la siguiente instrucción:
Range("A1").Value = TextBox1.Text
TextBox1.Text = ""
El cuadro de lista es un control ActiveX que nos permite desplegar una serie de
opciones de las cuales el usuario puede realizar una selección. Podemos configurar
el cuadro de lista para permitir seleccionar uno o varios elementos de la lista.
En este ejemplo he especificado que los valores sean tomados del rango A1:A6, lo
cual da como resultado un cuadro de lista con los valores especificados en dicho
rango:
De esta manera, cada vez que hagamos una selección de alguna de las opciones
del cuadro de lista se verá reflejado su valor en la celda asociada:
Excel tiene un control ActiveX conocido como Cuadro combinado el cual también
es llamado comúnmente por su nombre en inglés: Combo Box. Este control nos
permite crear listas desplegables en nuestros formularios.
Si quiero que el Cuadro combinado muestre los valores del rango A1:A5, puedo
utilizar la propiedad ListFillRange donde puedo indicar este rango:
Como resultado obtendré los valores de las celdas como elementos del Cuadro
combinado:
Si quieres evitar que el usuario introduzca sus propios valores existen dos opciones:
Al igual que con otros controles ActiveX, podemos asocias una celda al cuadro
combinado de manera que muestre el elemento de la lista que haya sido
seleccionado. Esta configuración la hacemos en la propiedad LinkedCell:
Una casilla de verificación es un control ActiveX que podemos utilizar para permitir
que un usuario marque una opción y por lo tanto poder conocer sus preferencias al
verificar dicho valor en código VBA.
La otra propiedad de una casilla de verificación que tal vez quieras modificar será
la propiedad Value que de manera predeterminada tendrá el valor False lo cual
indica que el control se mostrará desmarcado. Si deseas que el control se muestre
marcado de manera predeterminada, debes poner el valor True en la propiedad
Value:
Una casilla de verificación nos dirá su ha sido seleccionada o no, es decir, nos
devolverá un valor FALSO o VERDADERO. Para leer este valor debemos acceder
a la propiedad Value del control de la siguiente manera:
La primera línea valida si el control ActiveX tiene un valor verdadero y de ser así
coloca el número 1 en la celda C4. Si la casilla de verificación no ha sido
seleccionada (falso) entonces colocará el número cero en la celda C4.
Un botón de opción es un control ActiveX que nos permitirá seleccionar una sola
opción dentro de un grupo de botones de opción. A diferencia de las casillas de
verificación, los botones de opción dependen uno del otro.
Un solo botón de opción no hace mucho sentido, así que siempre agregamos dos o
más botones de opción para permitir que usuario haga una selección de cualquiera
de ellos.
Una vez que se ha agregado un segundo botón de opción podrás notar que al
seleccionar uno de ellos se desmarcarán todos los demás.
La propiedad Caption
Formularios en VBA
Los formularios en VBA no son más que un cuadro de diálogo de Excel donde
podremos colocar controles que nos ayudarán a solicitar información del usuario.
Podremos colocar cajas de texto, etiquetas, cuadros combinados, botones de
comando, etc.
Los formularios de Excel son creados desde el Editor de Visual Basic donde
debemos seleccionar la opción de menú Insertar y posteriormente la opción
UserForm.
Para agregar este código puedes hacer doble clic sobre el control. La sentencia
“Unload Me” cerrará el formulario.
A diferencia del botón Cancelar, el botón Aceptar colocará los datos de las cajas de
texto en las celdas A1, B1 y C1. El código utilizado es el siguiente:
Al pulsar el botón Aceptar se transferirán los valores de los controles TextBox hacia
las celdas de la Hoja1.
Para facilitar la apertura del formulario puedes colocar un botón ActiveX en la hoja
con el siguiente código:
Probar el formulario
Observa cómo cada uno de los botones realiza la acción correcta al pulsarlos: