Macro
Macro
Si utilizas Excel frecuentemente es posible que en alguna ocasión te hayas encontrado ejecutando
una misma serie de acciones una y otra vez. Esas acciones que haces repetidas veces se podrían
automatizar con una macro.
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
Las macros se escriben en un lenguaje de computadora especial que es conocido como Visual
Basic for Applications (VBA). Este lenguaje permite acceder a prácticamente todas las
funcionalidades de Excel y con ello también ampliar la funcionalidad del programa.
Verás que crear una macro en Excel no es tan complicado y será una manera fácil y rápida de
eliminar esas tareas repetitivas que todos los días te quitan minutos preciados de tu tiempo.
¿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.
Aprender el lenguaje VBA no es nada complicado y se puede lograr fácilmente. Lo que toma un
poco más de tiempo es pulir nuestras habilidades de programación. Lo que quiero decir con esto
es que para ser un buen programador de macros debes dedicar tiempo en resolver múltiples
problemas en donde puedas llevar al límite el lenguaje VBA.
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é sire una macro en Excel puedes dar los primeros pasos en este
camino utilizando el tutor
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.
Haz clic en la ficha Archivo y elige la sección Opciones. Se mostrará el cuadro de diálogo
Opciones de Excel donde deberás seleccionar la opción Personalizar cinta de opciones.
En el panel de la derecha deberás asegurarte de seleccionar la ficha Programador.
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 Controles incluye funcionalidad para agregar controles especiales a las hojas de Excel
como los controles de formulario que son botones, casillas de verificación, botones de opción entre
otros más que serán de gran utilidad para ampliar la funcionalidad de Excel.
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.
Aunque pueden parecer intimidantes los comandos de la ficha Programador con el paso del tiempo
te irás familiarizando poco a poco con cada uno de ellos.
4) LA GRABADORA DE MACROS
Puedes crear una macro utilizando el lenguaje de programación VBA, pero el método más sencillo
es utilizar la grabadora de macros que guardará todos los pasos realizados para ejecutarlos
posteriormente.
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.
En el cuadro de texto Nombre de la macro deberás colocar el nombre que identificará de manera
única a la macro que estamos por crear. De manera opcional puedes asignar un método abreviado
de teclado el cual permitirá ejecutar la macro con la combinación de teclas especificadas.
Libro nuevo. La macro se guarda en un libro nuevo y que pueden ser ejecutadas en cualquier libro
creado durante la sesión actual de Excel.
Libro de macros personal. Esta opción permite utilizar la macro en cualquier momento sin
importar el libro de Excel que se esté utilizando.
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.
Al pulsar el comando Macros se mostrará la lista de todas las macros existentes y de las cuales
podrás elegir la más conveniente. Al hacer clic sobre el comando Ejecutar se realizarán todas las
acciones almacenadas en la macro y obtendrás el resultado esperado. Por supuesto que si utilizas
el método abreviado de teclado de la macro entonces se omitirá este último 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.
Para comenzar debemos ir a la ficha Programador y pulsar el comando Grabar macro lo cual
mostrará el cuadro de diálogo donde asignaré un nombre a la macro que estoy por crear.
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
Observando este código podemos aprender varias cosas. Para empezar observamos que el objeto
Selection tiene una propiedad llamada Font que es la que hace referencia a la fuente de la celda o
rango seleccionado. A su vez, la propiedad Font tiene otra propiedad llamada Color que es
precisamente la que define el color rojo de nuestra celda.
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.
La seguridad es un tema importante al hablar de macros en Excel. Si abres algún archivo que
contenga una macro maliciosa puedes causar algún tipo de daño al equipo. De manera
predeterminada Excel no permite ejecutar macros automáticamente.
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: Haz clic en la ficha Archivo y
posteriormente en Opciones. Dentro del cuadro de diálogo mostrado selecciona la opción Centro
de confianza y posteriormente pulsa el botón Configuración del centro de confianza. Se
mostrará el cuadro de diálogo Centro de confianza.
Deshabilitar todas las macros sin notificación. Deshabilita las macros y permite ejecutar
solamente aquellas que estén almacenadas en un lugar confiable. Los lugares confiables se
configuran en la sección Ubicaciones de confianza del mismo cuadro de diálogo.
Deshabilitar todas las macros con notificación. Muestra una alerta de seguridad advirtiendo
sobre la intención de ejecutar una macro de manera que se pueda decidir si se desea ejecutar.
Esta es la opción predeterminada de Excel.
Deshabilitar todas las macros excepto las firmadas digitalmente. Solamente se podrán
ejecutar las macros que están firmadas digitalmente.
Habilitar todas las macros. Permite ejecutar todas las macros sin enviar alguna notificación al
usuario. Esta opción es útil si se ejecutan múltiples macros totalmente confiables. Esta opción es la
que corre los mayores riesgos al ejecutar una macro de una fuente desconocida.
7) PROGRAMANDO EN VBA
Excel 2010 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.
Afortunadamente Excel cuenta con VBA que es un lenguaje de programación que permite
extender las habilidades del programa para cubrir nuestros requerimientos. Utilizando VBA se
pueden desarrollar nuevos algoritmos para analizar la información o para integrar a Excel con
alguna otra aplicación como Microsoft Access.
PRINCIPIOS FUNDAMENTALES
La programación en VBA puede ser un tanto misteriosa para la mayoría de los usuarios de Excel,
sin embargo una vez que se comprenden los principios básicos de programación en VBA se
comenzarán a crear soluciones robustas y efectivas.
El primer concepto importante a entender es que cada elemento de Excel es representado en VBA
como un objeto. Por ejemplo, existe el objeto Workbook que representa a un libro de Excel.
También existe el objeto Sheet que representa una hoja y el objeto Chart para un gráfico.
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.
Volviendo al terreno de Excel, el objeto Workbook tiene propiedades como ActiveSheet (Hoja
activa), Name (Nombre), ReadOnly (Solo Lectura), Saved (Guardado) y algunos de sus métodos
son Save (Guardar), Close (Cerrar), PrintOut (Imprimir), Protect (Proteger), Unprotect
(Desproteger).
Será dificil mencionar todos los objetos de Excel y sus propiedades en esta publicación, pero lo
importante a recordar en este 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.
El Editor de Visual Basic, VBE por sus siglas en inglés, es un programa independiente a Excel
pero fuertemente relacionado a él porque es el programa que nos permite escribir código VBA que
estará asociado a las macros.
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.
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 [Link] de manera que
podamos depurar nuestro código. Si no puedes observar esta ventana puedes mostrarla también
desde el menú Ver.
El área más grande en blanco es donde escribiremos el código VBA. Es en esa ventana en donde
escribimos y editamos las instrucciones VBA que dan forma a nuestras macros.
Es importante familiarizarnos con el Editor de Visual Basic antes de iniciar con la creación de
macros.
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.
Se creará la sección Módulos y dentro de la misma se mostrará el módulo recién creado. Puedes
saber que el módulo está abierto porque su nombre se muestra en el título entre corchetes.
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:
Antes de avanzar explicaré con detalle las instrucciones mostradas.
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.
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.
10) COMENTAR VARÍAS LÍNEAS DE CÓDIGO
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.
Si no puedes ver los botones anteriores en el Editor de Visual Basic es porque seguramente tienes
oculta la barra de herramientas de Edición. Para mostrarla, haz clic derecho sobre un área libre del
menú superior y seleccionar la opción Edición.
11) OBJETOS, PROPIEDADES Y MÉTODOS
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.
Para acceder a las propiedades y métodos de un objeto lo hacemos a través de una nomenclatura
especial. Justo después del nombre del objeto colocamos un punto seguido del nombre de la
propiedad o del método. Observa este ejemplo donde hacemos uso de la propiedad Value para la
celda A1:
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
Ver todas las propiedades y métodos
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:
Por ejemplo, si deseamos poner en negritas el texto de la celda A1 debemos llegar al objeto Range
el cual nos dará acceso a modificar la propiedad Bold de la siguiente manera:
Aunque esta línea de código puede tomarnos un poco de tiempo en escribirla, pero describe por
completo la jerarquía de los objetos.
Objetos predeterminados
Existe una funcionalidad intrínseca de VBA conocida como objetos predeterminados la cual nos
permite omitir la escritura de algunos objetos y aun así tener un código funcional. Por ejemplo, en
la sentencia mostrada previamente podemos omitir el objeto Application y tener nuestro código
funcionando correctamente
Inclusive podemos omitir los objetos ActiveWorkbook y ActiveSheet sabiendo que el código se
ejecutará siempre sobre el libro activo y la hoja que esté activa al momento de la ejecución:
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.
El objeto Workbook representa un libro de Excel y el objeto Worksheet representa una hoja
de un libro de Excel. Como sabemos, un libro de Excel puede tener más 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:
[Link] Filename:="C:[Link]"
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:
[Link](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:
podemos utilizarlo en lugar del índice y tener una instrucción como la siguiente:
[Link]("[Link]").Activate
La colección de objetos Workbooks nos permitirá acceder a todos los libros que hayamos
abierto dentro de nuestra aplicación VBA.
De igual manera podemos acceder las hojas de cualquier libro a través de su colección de
objetos Worksheets. Esta colección también puede ser accedida por el índice de cada una de las
hojas del libro:
[Link](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:
[Link](1).Worksheets("Hoja1").Range("A1").Value = "Hola"
A través de la colección de objetos Worksheets podemos crear nuevas hojas en un libro. Observa
la siguiente instrucción:
[Link]
Observa que no he iniciado la instrucción anterior con el objeto Application, ni tampoco está
precedida por el objeto Workbooks. Esta es una sintaxis aceptable dentro de VBA e indica que se
agregará una nueva hoja al libro que esté activo en ese momento. Este es un método abreviado
que podemos utilizar si estamos seguros de que el libro activo es el libro al que deseamos agregar
una nueva hoja. De lo contrario, podemos especificar tota la ruta completa:
[Link]("[Link]").[Link]
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:
[Link] = "Reporte de Ventas"
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:
[Link]
Es muy importante mencionar que la colección Sheets se referirá al libro de Excel que se
encuentre activo en el momento de ejecutar esta instrucción. Las colecciones Columns y Rows nos
permitirán acceder a las columnas y filas de la hoja activa.
[Link](5).Select
[Link](5).Select
El objeto Application tiene muchas propiedades como para mencionarles todas en esta ocasión,
pero algunas de las más importantes son las siguientes:
ActiveSheet. Regresa un objeto Worksheet que representa a la hoja que esté actualmente
seleccionada (activa).
ActiveCell. Devuelve un objeto Range que representa la celda activa dentro de la hoja activa en el
libro de Excel activo.
ThisWorkbook. Esta propiedad devolverá un objeto Workbook que representará el libro que
contiene la macro que está siendo ejecutada.
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 ingresar el
número de impresiones que desea realizar. El número ingresado por el usuario se guardará en la
variable Impresiones.
15) El libro de macros personal en Excel
Cuando creamos una macro en Excel podemos guardarla en el libro actual o podemos guardarla
en el libro de macros personal. La ventaja de guardar una macro en el libro de macros
personal es que nuestra macro estará disponible para cualquier libro.
C:\Usuarios\[Usuario]\App\Data\Roaming\Microsoft\Excel\XLSTART
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.
Cuando guardes el archivo Excel verás un mensaje preguntando si deseas guardar los cambios
realizados al libro de macros personal, para lo cual deberás pulsar el botón Guardar.
El libro de macros personal en el Editor de Visual Basic
Una vez que el libro de macros personal ha sido creado lo podrás ver dentro del Editor de Visual
Basic:
Por debajo del nombre VBAProject ([Link]) encontrarás la carpeta Módulos y dentro
de ella encontrarás todas las macros que se hayan guardado en el libro de macros personal
organizadas en módulos.
Si deseas eliminar algún módulo solamente deberás hacer clic derecho sobre él y seleccionar la
opción Quitar Módulo.
No todas las cosas funcionan bien a la primera y seguramente te encontrarás con errores al
programar en Excel. Existen dos tipos de errores en VBA: errores de sintaxis y errores en tiempo
de ejecución.
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.
Un error en tiempo de ejecución ocurre cuando nuestra aplicación ya está siendo ejecutada e
intenta hacer alguna acción que no está permitida por Excel o por Windows. Esto ocasionará que
nuestra aplicación colapse o que Excel deje de responder.
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:
Intentar realizar una operación no permitida por el ordenador. Por ejemplo una división entre cero o
intentar sumar una cadena de texto y un valor Double.
Intentar utilizar una librería de código que no está accesible en ese momento.
Tratar de asignar un valor que está fuera de los límites de una variable.
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.
Cuando nos encontramos con errores en nuestras macros podemos depurar el código utilizando el
Editor de Visual Basic para encontrar fácilmente los errores que pueda contener nuestro código
VBA. Considera la siguiente macro:
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 esta 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:
Por el contrario, si no hubo error en dicha instrucción, entonces Excel marcará en amarillo la
siguiente instrucción a ejecutar.
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.
18) 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
En la primera instrucción estoy declarando la variable con el nombre “x” y estoy indicando que será
del tipo Integer. “Declarar una variable” significa avisar a Excel sobre la existencia de dicho
repositorio para guardar información. En la segunda instrucción asigno el valor 6 a la variable “x”.
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 título 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:
El resultado de este código es el siguiente:
La función Left
La función Left en VBA nos ayuda a extraer un número determinado de caracteres a la izquierda de
la cadena de texto.
La función Right
La función Right nos permite extraer caracteres a la derecha de una cadena de texto. Observa el
siguiente código:
En esta función la cuenta de caracteres se hace de derecha a izquierda siendo el último carácter
de la cadena de texto el primero que extraerá la función Right. Para este ejemplo he pedido los
últimos 5 caracteres a la derecha de la cadena de texto:
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 Len contará cada uno de los caracteres de la cadena y regresará un número:
La función InStr
La función InStr devuelve la posición de un carácter dentro de la cadena. Supongamos que quiero
encontrar la posición de la letra “M” dentro de la cadena que contiene el valor “Hola Mundo”.
Es importante resaltar que la función InStr es sensible a mayúsculas y minúsculas. Observa cómo
he especificado buscar la letra “M” (mayúscula) y el resultado de la función es el siguiente:
La función InStr encontró la letra “M” en la posición número 6 comenzando desde la izquierda. Si
en lugar de la letra “M” busco la letra “m” (minúscula), la función InStr devolverá el valor 0 (cero)
indicando que no ha encontrado dicha letra.
Además de indicar letras individuales en la función InStr, también podemos especificar palabras
completas por ejemplo:
Por ejemplo, al buscar la palabra “Mundo” dentro de la cadena de texto obtendremos como
resultado la posición número 6 ya que en esa posición comienza la palabra “Mundo”.
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 función Mid se moverá a la posición 15 de la cadena y a partir de ahí contará 7 caracteres y
devolverá como resultado la cadena comprendida entre ambas posiciones. En nuestro ejemplo, la
palabra “funcion” es la que se encuentra entre dichas posiciones.
Las funciones de texto en VBA nos ayudarán a manipular adecuadamente las cadenas de texto y
podremos obtener los resultados que necesitamos.
En ocasiones necesitamos ejecutar algunas líneas de código de nuestra macro solamente cuando
alguna condición se haya cumplido. La declaración If-Then nos permite validar una condición para
tomar una decisión adecuada.
La declaración If-Then en VBA es la más básica de todas las declaraciones de control de flujo
que son aquellas declaraciones que nos permiten tomar decisiones en base a una condición. Esta
declaración la podemos traducir como Si-Entonces y la utilizaremos en situaciones donde
necesitamos realizar la siguiente evaluación: Si se cumple la condición Entonces haz esto.
En el primer paso se hace la declaración de las variables que utilizaré en el resto del código.
La declaración 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.
En el tercer paso puedes observar la declaración If-Then-Else. Ahora observa el efecto de este
cambio al momento de ejecutar el 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.
La única ocasión donde no se termina con End If es cuando la declaración If-Then se puede
colocar en una sola línea como es el caso del primer ejemplo de este artículo
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
Para seleccionar un rango de celdas lo más conveniente es utilizar el objeto Range de la siguiente
manera:
Range("A1:D5").Select
El objeto Cells no nos permite seleccionar un rango porque solamente podemos especificar una
celda a la vez.
Para establecer el valor de una celda podemos utilizar alguna de las siguientes instrucciones:
Range("B5").Value = 500
Cells(5, 2).Value = 600
Ventaja del objeto Cells
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
El bucle For-Next es una de las instrucciones más útiles al programar en VBA. La sintaxis de esta
instrucción es la siguiente:
Límite: Además de inicializar la variable que llevará la cuenta de las repeticiones, debemos
especificar un límite donde se detendrá el ciclo. Este límite es indicado con la instrucción To. De
esta manera, si deseamos hacer un bucle que vaya desde 1 hasta 5 la instrucción la escribiremos
como For i = 1 To 5.
Incrementar variable: El final del conjunto de instrucciones se indica con la instrucción Next y que
va seguida del nombre de la variable que lleva la cuenta para incrementar su valor en uno. Así
podemos terminar el bucle con la instrucción Next i.
A continuación un ejemplo muy sencillo de un bucle For-Next donde la única instrucción que se
repite es la de mostrar una ventana de diálogo con el valor de la variable 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:
Ya que la variable i comienza con el valor 1, el primer cuadro de diálogo muestra el mensaje “i = 1”,
después “i = 2” y así sucesivamente hasta llegar al límite.
El bucle For-Next en VBA nos ayudará a crear ciclos que ejecutarán un conjunto de instrucciones
hasta alcanzar el límite que hayamos especificado.
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.
El operador lógico And es el operador que nos ayuda a forzar el cumplimiento de dos
condiciones. Este operador lo traducimos como “Y” de manera que para ejecutar un bloque de
código se debe cumplir la condición1 Y la condición2.
Al ejecutar este código obtendremos el resultado “Aprobado” ya que ambos exámenes tienen una
calificación mayor a 70
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 And devolverá el valor verdadero solamente cuando ambas condiciones se
cumplan y será suficiente con que una de ellas no se cumpla para obtener un resultado negativo.
El operador lógico Or
El operador lógico Or lo traducimos como “O” y nos permitirá saber si al menos una de las
condiciones se cumple, es decir, si la condición1 O la condición2 se cumplen.
Si cambiamos un poco el ejemplo anterior y decimos que es suficiente que alguna de las dos
calificaciones sea mayor a 70 para que el estudiante sea aprobado, entonces podemos modificar el
código de la siguiente manera:
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:
Podemos concluir que al evaluar dos condiciones, los operadores And y Or se comportarán de la
siguiente manera:
24) 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):
Un ejemplo de eventos en VBA
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.
Los arreglos en VBA pueden ser entendidos como un grupo de variables contenidas dentro de
otro repositorio. Dentro de un arreglo podemos referirnos a un valor específico (elemento)
utilizando su posición (índice).
Un arreglo es una colección de “casillas” que contendrán variables individuales. Casa casilla tendrá
un número de índice el cual nos permitirá asignar u obtener el valor que contiene.
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.
En este ejemplo las variables fechaActual y horaActual contienen la fecha y horas actuales
respectivamente.
En el ejemplo anterior he obtenido la fecha actual en la variable fechaActual, sin embargo, si deseo
mostrar solamente el año puedo utilizar la función Year.
El resultado de este código es el siguiente:
Al trabajar con fechas podremos obtener el mes utilizando la función Month y para obtener el día la
función Day.
Para obtener la hora de la variable horaActual utilizaremos la función Hour de la siguiente manera:
El resultado es el siguiente:
Para obtener el minuto y el segundo podremos utilizar las funciones Minute y Second.
Convertir una cadena de texto en fecha
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:
Observa el resultado de sumar 5 días a la fecha original:
El primer argumento de la función DateAdd determina la unidad de tiempo que será sumada. En
este ejemplo especifiqué “d” para indicar días, pero podemos utilizar otras medidas de tiempo:
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.
27) Funciones VBA
FUNCIÓN DESCRIPCIÓN
Asc Obtiene el valor ASCII del primer caracter de una cadena de texto
InStrRev Regresa la pocisión de una cadena de texto dentro de otra cadena pero empezando desde el final
Join Regresa una cadena de texto creada al unir las cadenas contenidas en un arrreglo
Split Regresa un arreglo formado for cadenas de texto que formaban una sola cadena
Trim Remueve los espacios en blanco al inicio y final de una cadena de texto
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 regresar un valor. Así es,
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 CONSULTAV. 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. 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.
Los parámetros son el medio por el cual pasamos información de entrada a la función. Algunas
funciones necesitarán de dichas entradas para realizar algún cálculo y algunas otras no, es por ello
que los parámetros de una función son opcionales. Puedes incluir tantos parámetros como sean
necesarios y solamente debes recordar separarlos por una coma.
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
Como mencioné al principio, la característica principal de una función es que puede regresar un
valor. Es por eso que al definir una función se debe indicar el tipo del valor de retorno que tendrá
dicha función. En este caso el valor de retorno será de tipo Double y se está especificado por las
palabras As Double que aparecen después de los paréntesis.
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.
La parte central de la función se encuentra en la instrucción For Each ya que realiza un recorrido
por todas las celdas del rango que fue especificado como parámetro. Para cada celda que se
encuentra se va sumando su contenido en la variable resultado.
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 y
que 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:
Justo por debajo de los controles de formulario podrás observar el grupo de controles ActiveX
pero sus diferencias y similitudes las discutiremos en otro artículo. Por ahora nos enfocaremos
solamente en los controles de formulario.
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.
Existen diferentes tipos de controles de formulario en Excel que ofrecen diversos tipos de
funcionalidad e interacción con el usuario. Desde una simple etiqueta hasta controles que permiten
una selección múltiple de sus opciones. A continuación una breve descripción de cada uno de
ellos.
Botón. El botón nos permite ejecutar una macro al momento de hacer clic sobre él.
Botón de opción. Nos permite una única selección dentro de un conjunto de opciones.
Casilla de verificación. Permite la selección o no selección de una opción.
Cuadro de lista. Muestra una lista de valores de los cuales podemos elegir una sola opción o
múltiples opciones de acuerdo a la configuración del control.
Los controles de formulario han estado presentes por varias versiones de Excel, sin embargo
existen algunos controles que ya no pueden ser utilizados en Excel 2010 como lo son el Campo de
texto, el Cuadro combinado de lista y el Cuadro combinado desplegable. Sin embargo podemos
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.
Los controles de formulario fueron introducidos desde la versión 4 de Excel y por lo tanto han
estado presentes en la aplicación por más tiempo que los controles ActiveX los cuales
comenzaron a ser utilizados a partir de Excel 97. Ya que los controles ActiveX fueron introducidos
posteriormente ofrecen más posibilidades de configuración y formato que los controles de
formulario. Ambos tipos de controles se encuentran en la ficha Programador.
La diferencia más significativa entre ambos es la manera en como podemos obtener información
de los controles al momento de interactuar con el usuario. Los controles de formulario solamente
responderán después de que el usuario ha interactuado con ellos, como después de haber pulsado
el botón. Por el contrario, los controles ActiveX responden de manera continua a las acciones del
usuario lo cual nos permite realizar acciones como cambiar el tipo de puntero del mouse que se
muestra al colocar el puntero del ratón sobre el botón.
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:
Controles ActiveX con subrutinas VBA
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()
En la versión de Excel 2010 algunos controles de formulario han dejado de ser soportados y no
podemos utilizarlos más. Ese es el caso del control de formulario conocido como campo de texto.
Sin embargo, dentro de la lista de controles ActiveXtenemos disponibles un control
llamado Cuadro de texto lo cual puede hacer atractiva la opción de utilizar controles ActiveXen
lugar de controles de formulario.
El cuadro de texto es un control ActiveX que muestra un campo vacío donde el usuario puede
introducir cualquier texto. En esta ocasión revisaremos cómo incrustar un cuadro de texto y hacer
referencia al mismo desde código VBA.
Insertar un cuadro de texto en Excel
Para insertar un cuadro de texto en una hoja de Excel debes ir a la ficha Programador y hacer clic
en el botón Insertar y entonces hacer clic sobre la opción Cuadro de texto de la sección Controles
ActiveX.
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.
También puedes ver las propiedades de cualquier control seleccionándolo primero y pulsando el
botón Propiedades que se encuentra dentro del grupo Controles de la ficha Programador.
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 = [Link]
[Link] = ""
El cuadro de texto es un control ActiveX que muestra un campo vacío donde el usuario puede
introducir cualquier texto. En esta ocasión revisaremos cómo incrustar un cuadro de texto y hacer
referencia al mismo desde código VBA.
Para insertar un cuadro de texto en una hoja de Excel debes ir a la ficha Programador y hacer clic
en el botón Insertar y entonces hacer clic sobre la opción Cuadro de texto de la sección Controles
ActiveX.
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.
También puedes ver las propiedades de cualquier control seleccionándolo primero y pulsando el
botón Propiedades que se encuentra dentro del grupo Controles de la ficha Programador.
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 = [Link]
[Link] = ""
Esto hará que el cuadro de texto se vea de la siguiente manera:
Si quieres leer el valor del cuadro de texto y colocarlo en una celda podemos utilizar la siguiente
instrucción
Range("A1").Value = [Link]
[Link] = ""
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.
Para insertar un cuadro de lista en una hoja de Excel debemos ir a la ficha Programador y pulsar
el botón Insertar para seleccionar la opción Cuadro de lista (control ActiveX).
Especificar los elementos del cuadro de lista
Una alternativa para indicar los elementos de un cuadro de lista es a través de la propiedad
llamada ListFillRange. Para ello debemos abrir las propiedades del control e indicar el rango de
celdas que contiene los elementos:
En este ejemplo he especificado que los valores sean tomados del rango A1:A6, lo cual da como
resultado un cuadro de listacon los valores especificados en dicho rango:
Otra alternativa para indicar los elementos de un cuadro de lista es a través de código VBA. Para
ello puedes incluir el siguiente código en el evento Workbook_Open:
De esta manera cuando se abra el libro se agregarán las opciones al cuadro de lista llamado
ListBox1.
Adicionalmente podemos asociar una celda al cuadro de lista la cual mostrará la selección que
hagamos. Para hacer esta asociación debemos especificar la dirección de la celda en la propiedad
LinkedCell:
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.
Para insertar un Cuadro combinado debemos ir a la ficha Programador y dentro del botón Insertar
pulsar el comando Cuadro combinado (control ActiveX):
Después de dibujar el Cuadro combinado tendrás un resultado como el siguiente:
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:
Una diferencia importante entre el Cuadro combinado y el cuadro de lista es que el primero
permite que el usuario capture una opción diferente a las mostradas en la lista. En el ejemplo
anterior no aparecía el día domingo como parte de los elementos, sin embargo puedo capturar el
día domingo dentro del cuadro de lista.
Si quieres evitar que el usuario introduzca sus propios valores existen dos opciones:
Utilizar el Cuadro combinado pero validar la opción seleccionada con código VBA de
manera que nos aseguremos que el usuario ha seleccionado una opción de la lista. Un
ejemplo de código de validación es el siguiente:
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:
Cuando selecciones un elemento del cuadro combinado se reflejará dicha selección en la celda
indicada en la propiedadLinkedCell:
35)Casilla de verificación en VBA
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.
Para insertar este control debemos ir al comando Insertar y seleccionar la opción Casilla de
verificación (Control ActiveX).
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:
Esta línea de código coloca el valor de la casilla de verificación en la celda C4. De esta manera,
al seleccionar la casilla de verificación obtendré el siguiente resultado:
Para validar en VBA si la casilla de verificación tiene un valor u otro podemos utilizar un código
como el siguiente:
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.
Para insertar un botón de opción hacemos clic en el comando Insertar de la ficha Programador.
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
La propiedad Value es la que nos indica si el control está seleccionado, en cuyo caso, la propiedad
será igual a True. Para este ejemplo, al validar que el botón de opción está seleccionado, se
mostrará un cuadro de diálogo con un mensaje sobre la opción seleccionada.
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.
Inmediatamente se mostrar un formulario en blanco y de igual manera podrás observar el Cuadro
de herramientas:
Para agregar un control al formulario debes seleccionarlo del Cuadro de herramientas y dibujarlo
sobre el formulario. En mi formulario he agregado etiquetas y cuadros de texto así como un par de
botones de comando:
El texto de las etiquetas se modifica en la propiedad llamada Caption. Para realizar este cambio
solamente selecciona el control y se mostrará la ventana de Propiedades donde podrás hacer la
modificación. De igual manera el texto desplegado en los botones de comando se modifica en su
propiedad Caption.
Código para el botón Cancelar
El botón cancelar cerrará el formulario sin guardar la información capturada en ningún lugar. El
código que debemos utilizar es el siguiente:
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: