Manual Programacion de Macros en Microsoft Excel
Manual Programacion de Macros en Microsoft Excel
Contenido
Introduccion a las Macros en Excel
El editor de Visual Basic
Creacion de Macros
Aplicaciones con Macros
Actividades Generales.
Exposiciones del Facilitador sobre los temas.
Participacion individual sobre temas y ejercicios de apoyo.
Desarrollo de ejercicios y ejemplos complementarios.
Evaluaciones de las unidades y contenidos del modulo.
Exposición complementaria y de reforzamiento por el Facilitador y los participantes.
Indice
UNIDAD 1 ....................................................................................................................................... 4
Introduccion a las Macros en Excel ........................................................................................................... 4
Qué es una Macro ......................................................................................................................................... 5
La pestaña de Desarrollador ......................................................................................................................... 8
Grabar y guardar macros............................................................................................................................. 10
Seguridad de macros ................................................................................................................................... 12
Grabando una macro en el libro de macros personal ................................................................................. 13
Asignar un botón a una Macro .................................................................................................................... 15
UNIDAD 2 ..................................................................................................................................... 19
El Editor de Visual Basic ........................................................................................................................... 19
Visual Basic o IDE......................................................................................................................................... 20
Estructura de una macro ............................................................................................................................. 21
Formas de ejecutar una macro ................................................................................................................... 22
En qué consiste programar en VBA ............................................................................................................. 30
Objetos, propiedades y métodos ................................................................................................................ 32
Primer macro manual .................................................................................................................................. 33
Comentarios en VBA ................................................................................................................................... 36
UNIDAD 3 ..................................................................................................................................... 38
Creacion de Macros ................................................................................................................................. 38
Rangos de celdas con VBA........................................................................................................................... 39
filas y columnas con VBA ............................................................................................................................. 41
Trabajo con hojas en VBA............................................................................................................................ 45
Trabajo con libros con VBA ......................................................................................................................... 47
Acciones en Excel en VBA -Objeto Application ........................................................................................... 48
formatos de celda con VBA ......................................................................................................................... 50
UNIDAD 1
Introduccion a las Macros en Excel
Las macros de Excel nos permiten automatizar tareas que realizamos cotidianamente de
manera que podamos ser más eficientes en nuestro trabajo. Una macro no es más que una serie
de comandos o instrucciones que permanecen almacenados dentro de Excel y que podemos
ejecutar cuando sea necesario y cuantas veces lo deseemos.
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.
Las instrucciones de las macros en Excel deben ser escritas en un lenguaje de programación
que sea comprendido por Excel mismo de manera que puedan ser ejecutadas de manera
adecuada. El lenguaje de programación utilizado para este fin lleva el nombre Visual Basic para
Aplicaciones que también es conocido por su abreviatura VBA.
VBA es todo un ambiente de programación que fue pensado para que los desarrolladores
pudieran crear soluciones personalizadas en Excel. A través del lenguaje de programación VBA
tendremos acceso a todas las propiedades y funcionalidades de Excel de manera que podamos
hacer prácticamente cualquier cosa desde nuestras macros en Excel.
En estricto sentido podríamos crear cualquier solución de Microsoft Office utilizando VBA ya sea
Excel, Word, PowerPoint o inclusive Outlook. Cada una de las aplicaciones de Microsoft Office
proporciona los medios adecuados para manipular y extender su funcionalidad a través de VBA.
El verdadero secreto para dominar las macros en Excel radica en aprender a utilizar
adecuadamente el lenguaje de programación VBA y su modelo de objetos. Dicho modelo de
objetos refleja cada una de las partes de Excel en donde la aplicación está representada por el
objeto Application.
El objeto Application representa a Excel mismo podemos entender que los libros de Excel
formarán parte del objeto Application. Los libros de Excel son representados por el objeto
Workbooks y las hojas de cada libro por el objeto Worksheets. Como sabemos, cada hoja está
compuesta por celdas y en VBA podemos acceder una celda o a un rango de celdas a través del
objeto Range.
De esta manera podemos resumir la relación entre estos objetos de la siguiente manera: El objeto
Application representa toda la aplicación, la cual puede contener varios libros de Excel
representados por el objeto Workbooks. Cada libro tiene hojas que están representadas por el
objeto Worksheets y sus celdas pueden ser accedidas a través del objeto Range.
Cada uno de los objetos en VBA tendrá una serie de propiedades y métodos que nos permitirán
crear las instrucciones necesarias dentro de nuestras macros en Excel.
Las macros en Excel también te ayudarán a crear funciones personalizadas que harán tareas
que no son posibles realizar con las funciones predeterminadas de Excel y por lo tanto podrás
realizar cálculos y operaciones con tus datos que de otra manera serían casi imposibles. Además,
las macros en Excel te permitirán crear aplicaciones profesionales a la medida de tus
necesidades y que significarán un gran ahorro de cientos de horas de trabajo manual en Excel.
Una vez que te familiarices con las macros en Excel comenzarás a vislumbrar toda una nueva
gama de oportunidades para desarrollar y aplicar el potencial de Excel en tus actividades
cotidianas.
La pestaña de Desarrollador
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 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.
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.
Seguridad de macros
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.
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.
Una vez seleccionada la opción deseada se debe pulsar el botón Aceptar para hacer los cambios
permanentes.
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 terminar los pasos se pulsa el comando Detener grabación y la macro habrá quedado
guardada. Para ejecutar la macro recién guardada seleccionaré una nueva hoja de Excel y
seleccionaré el comando Macros.
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.
Después de crear una macro, puede asignar a un botón haga clic en para ejecutar la
macro. Puede asignar una macro a un botón de la barra de herramientas de acceso rápido o a
un botón en su propio grupo personal de la cinta de opciones.
Si desea que un botón de macro esté disponible en otros libros, puede asignar una macro que se
ha creado en un libro personal.
1. Haga clic en archivo > Opciones > barra de herramientas de acceso rápido.
Un nombre de macro que comienza con el nombre de la personal libro (PERSONAL. XLSB)
estará disponible en otros libros.
5. Para reemplazar el icono de macro enigmático con un botón diferente para la macro, haga
clic en Modificar.
7. Para usar un nombre más sencillo para el botón, en el cuadro nombre para mostrar ,
escriba el nombre que desee.
El nuevo botón aparece en la barra de herramientas acceso rápido, donde puede hacer clic en él
para ejecutar la macro.
SUGERENCIA: Cuando guarde el libro, los botones se asigna a las macros en el libro personal
estarán disponible en todos los libros que abra.
5. Para usar un nombre más adecuado para el nuevo grupo, haga clic en Cambiar nombre,
escriba el nombre que desee en el cuadro nombre para mostrar y, a continuación, haga
clic en Aceptar.
6. Para agregar una macro al grupo, en la lista comandos disponibles en , haga clic
en Macros.
7. Seleccione la macro que desea agregar a su nuevo grupo y, a continuación, haga clic
en Agregar. La macro se agrega al grupo de Macros de mi .
Un nombre de macro que comienza con el nombre de la personal libro (PERSONAL. XLSB)
estará disponible en otros libros.
8. Para usar un nombre más sencillo, haga clic en Cambiar nombrey escriba el nombre
deseado en el cuadro Nombre para mostrar.
El nuevo grupo aparece en la pestaña elegida, donde puede hacer clic en el botón para ejecutar
la macro.
UNIDAD 2
El Editor de Visual Basic
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.
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.
El Explorador de proyectos también nos ayuda a crear o abrir módulos de código que se serán
de gran utilidad para reutilizar todas las funciones de código VBA que vayamos escribiendo.
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.
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.
Excel ofrece varias maneras de ejecutar una macro. Una macro es una acción o un conjunto de
acciones que permiten automatizar tareas. Para ejecutar una macro, puede hacer lo siguiente:
Presione Ctrl más una tecla de método abreviado, según la configuración de ejecución de
la macro.
o Ejecutar una macro de Excel presionando Ctrl más una tecla de método
abreviado
Ejecutar la macro
o Para ejecutar una macro desde un módulo de Microsoft Visual Basic para
Aplicaciones (VBA), haga clic en Editar y, en el menú Ejecutar, haga clic
en Ejecutar Sub/UserFormo presione F5.
Ejecutar una macro de Excel presionando Ctrl más una tecla de método abreviado
3. En el cuadro Nombre de la macro, haga clic en la macro a la que desea asignar una
combinación de teclas con Ctrl.
7. Haga clic en Aceptar para guardar los cambios y, a continuación, en Cancelar para
cerrar el cuadro de diálogo Macro.
Para ejecutar una macro desde un botón de la barra de herramientas de acceso rápido, primero
debe agregar el botón a la barra de herramientas. Para ello:
4. Para cambiar la imagen del botón de la macro, seleccione la macro en el cuadro al que la
agregó y haga clic en Modificar.
6. Para cambiar el nombre de la macro que aparece al posicionar el cursor sobre el botón,
escriba el nombre que desea en el cuadro Nombre para mostrar.
Puede crear una zona activa en un gráfico donde los usuarios pueden hacer clic para ejecutar
una macro.
1. En la hoja de cálculo, inserte un objeto gráfico, como una imagen, una imagen
prediseñada, una forma o un gráfico SmartArt.
3. Haga clic con el botón secundario en la zona activa que ha creado y, a continuación,
elija Asignar macro.
5. Vuelva a hacer clic con el botón secundario en la forma y haga clic en Formato de forma.
Si graba una macro y la guarda con el nombre "Auto_abrir", la macro se ejecutará cada vez que
se abra el libro que contiene la macro. Otra forma de ejecutar automáticamente una macro al abrir
un libro es escribir un procedimiento de VBA en el evento Open del libro usando el Editor de
Visual Basic. El evento Open es un evento de libro integrado que ejecuta su código de macro
cada vez que se abre el libro.
3. Si desea guardar la macro con un libro determinado, abra primero ese libro.
6. En la lista Guardar macro en, seleccione el libro donde desea almacenar la macro.
Sugerencia si desea que una macro esté disponible siempre que utilice Excel,
seleccione Libro de macros Personal. Al seleccionar esta opción, Excel crea un libro
oculto de macros personal (Personal.xlsb), si aún no existe y guarda la macro allí.
Si desea que se inicie automáticamente una macro del libro de macros personal en otro libro,
también debe guardar ese libro en la carpeta XLStart, de forma que ambos libros se abran cuando
se inicie Excel.
2. Una vez que haya grabado todas las acciones, en la ficha Programador, en el
Notas
Si en el paso 6 eligió guardar la macro en Este libro o en Libro nuevo, guarde o mueva
el libro a la carpeta XLStart del PC.
o Una macro Auto_abrir se ejecuta antes de que se abra cualquier otro libro. Por lo
tanto, si graba acciones que desea que realice Excel en el libro predeterminado
Libro1 o en un libro cargado desde la carpeta XLStart, la macro Auto_abrir
producirá un error cuando reinicie Excel porque la macro se ejecuta antes de abrir
los libros de inicio y el predeterminado.
Si desea iniciar Excel sin ejecutar una macro Auto_abrir, mantenga presionada la tecla
Mayús al abrir el programa.
El ejemplo siguiente utiliza el evento Open para ejecutar una macro al abrir el libro.
End Sub
fecha CuadroMsj
Worksheets("Sheet1"). Range("a1"). Valor = fecha
End Sub
9. Cambie a Excel y guarde el libro como libro habilitado para macros (.xlsm).
10. Cierre y vuelva a abrir el libro. Al abrir de nuevo el libro, Excel ejecuta el procedimiento
Private Sub Workbook_Open, que muestra la fecha actual en un cuadro de mensaje.
Ha aprendido cómo grabar una macro y ha echado un vistazo tras bastidores para ver cómo se
crean los procedimientos de VBA. El siguiente paso es aprender unos cuantos aspectos básicos
más de la programación para sentar una base sólida para la programación en VBA.
Lo primero que debe saber es que el código de VBA se ensambla de ta modo que simula como
usted describiría las cosas que le rodean. Está compuesto por los cuatro conceptos indicados a
continuación:
Método Acción, o algo que una "cosa" puede hacer Agregar una "cosa"
Juntos, estos cuatro conceptos son lo que los programadores llaman un modelo de programación
orientada a objetos. Esta es una manera de realizar una tarea describiendo la "cosa" o el
"Objeto/Colección" sobre el que desea actuar, las características específicas o "Propiedad" que
describen la cosa sobre la que desea actuar y el cómo o el "Método" que desea utilizar para
realizar la acción.
Anteriormente grabó su primera macro de VBA. Veamos ahora en el código generado por la
grabadora de macros.
Para ver el código, haga clic en Herramientas > Macro > Editor de Visual Basic. Esto es lo que
verá:
Sub DeleteRow()
'
' DeleteRow Macro
'
'
Selection.Rows.Delete
End Sub
Vamos a revisar cada línea de esta macro:
1. Sub DeleteRow
Todas las macros comienzan con Sub y acaban con End Sub. En el ejemplo anterior,
DeleteRowes el nombre de la macro o del procedimiento que ha creado.
Esto se conoce como comentarios. Son útiles para describir los que sucede en el código. Esto es
especialmente útil cuando el código se vuelve más complejo y otras personas necesitan
mantenerlo, o incluso cuando revisa su código pasado un tiempo. Los comentarios siempre
comienzan con una sola cita, y el color frontal se marca en verde en el Editor de Visual Basic para
ayudar a diferenciar comentarios de otras partes de su código.
3. Selection.Rows.Delete
Esta línea de código indica a Word qué hacer. En este caso, selecciona la fila y la elimina.
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
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.
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:
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.
Comentarios en VBA
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.
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.
UNIDAD 3
Creacion de Macros
Se puede especificar una celda o un rango en una instrucción que identifique el rango y que,
además, cambie una propiedad o aplique un método.
Un objeto Range en Visual Basic puede ser una celda individual o un rango de celdas. Los
siguientes temas muestran las maneras más usuales de identificar y trabajar con objetos Range.
Al aplicar la propiedad Cells a una hoja de cálculo sin especificar un número de índice, el método
devuelve un objeto Range que representa todas las celdas de la hoja de cálculo. El siguiente
procedimiento Sub borra el contenido de todas las celdas de la hoja Sheet1 del libro activo.
Sub ClearSheet()
Worksheets("Sheet1").Cells.ClearContents
End Sub
Puede hacer referencia a una celda o rango de celdas del estilo de referencia A1 utilizando el
método Range. La siguiente subrutina cambia el formato de las celdas A1:D5 a negrita.
Sub FormatRange()
Workbooks("Book1").Sheets("Sheet1").Range("A1:D5") _
.Font.Bold = True
End Sub
Referencia Significado
Range("A1") Celda A1
Range("A1:B5") Celdas de la A1 a la
B5
Range("A:A") Columna A
Range("1:1") Fila 1
Range("A:C") Columnas de la A a
la C
Range("1:5") Filas de la 1 a la 5
Range("1:1;3:3;8:8") Filas 1, 3 y 8
Range("A:A;C:C;F:F") Columnas A, C y F
Si establece una variable de objeto para un objeto Range, puede manipular fácilmente el rango
utilizando el nombre de la variable.
VBA
Sub Random()
myRange.Formula = "=RAND()"
myRange.Font.Bold = True
End Sub
Utilice la propiedad Rows o Columns para trabajar con filas o columnas enteras. Estas
propiedades devuelven un objeto Range que representa un rango de celdas. En el siguiente
ejemplo, Rows(1) devuelve la fila uno de la hoja Sheet1. A continuación, la propiedad Bold del
objeto Font del rango se establece en True.
Sub RowBold()
Worksheets("Sheet1").Rows(1).Font.Bold = True
End Sub
Referencia Significado
Para trabajar con varias filas o columnas al mismo tiempo, cree una variable de objeto y utilice el
método Union, combinando varias llamadas a la propiedad Rows o Columns. El siguiente
ejemplo cambia a negrita el formato de las filas uno, tres y cinco de la hoja de cálculo uno del
libro activo.
Sub SeveralRows()
Worksheets("Sheet1").Activate
Dim myUnion As Range
Set myUnion = Union(Rows(1), Rows(3), Rows(5))
myUnion.Font.Bold = True
End Sub
VBA
Sub Delete_Empty_Rows()
lnDeletedRows = 0
If Selection.Areas.Count = 1 Then
'Initialize the range to what the user has selected, and initialize the count for the upcoming FOR loop.
lnLastRow = rnSelection.Rows.Count
'Start at the bottom row and work up: if the row is empty then
If Application.CountA(rnSelection.Rows(lnRowCount)) = 0 Then
rnSelection.Rows(lnRowCount).Delete
lnDeletedRows = lnDeletedRows + 1
End If
Next lnRowCount
rnSelection.Resize(lnLastRow - lnDeletedRows).Select
Else
End If
Else
End If
Application.ScreenUpdating = True
End Sub
VBA
Sub Delete_Empty_Columns()
lnDeletedColumns = 0
If Selection.Areas.Count = 1 Then
'Initialize the range to what the user has selected, and initialize the count for the upcoming FOR loop.
lnLastColumn = rnSelection.Columns.Count
'Start at the far-right column and work left: if the column is empty then
If Application.CountA(rnSelection.Columns(lnColumnCount)) = 0 Then
rnSelection.Columns(lnColumnCount).Delete
lnDeletedColumns = lnDeletedColumns + 1
End If
Next lnColumnCount
rnSelection.Resize(lnLastColumn - lnDeletedColumns).Select
Else
End If
Else
End If
Application.ScreenUpdating = True
End Sub
Los siguientes ejemplos muestran cómo determinar si existe una hoja de cálculo y cómo crearla
o reemplazarla.
Este ejemplo muestra cómo determinar si existe una hoja de cálculo denominada "Sheet4"
mediante la propiedad Name del objeto Worksheet. El nombre de la hoja de cálculo se especifica
en la variable mySheetName.
VBA
Sub TestSheetYesNo()
mySheetName = "Sheet4"
mySheetNameTest = Worksheets(mySheetName).Name
If Err.Number = 0 Then
MsgBox "The sheet named ''" & mySheetName & "'' DOES exist in this workbook."
Else
Err.Clear
MsgBox "The sheet named ''" & mySheetName & "'' does NOT exist in this workbook."
End If
End Sub
En este ejemplo se muestra cómo determinar si existe una hoja de cálculo denominada "Sheet4".
El nombre de la hoja de cálculo se especifica en la variable mySheetName. Si la hoja de cálculo
no existe, este ejemplo muestra cómo crear una hoja de cálculo denominada "Sheet4" usando el
método Add del objeto Worksheets.
VBA
Sub TestSheetCreate()
mySheetName = "Sheet4"
mySheetNameTest = Worksheets(mySheetName).Name
If Err.Number = 0 Then
MsgBox "The sheet named ''" & mySheetName & "'' DOES exist in this workbook."
Else
Err.Clear
Worksheets.Add.Name = mySheetName
MsgBox "The sheet named ''" & mySheetName & "'' did not exist in this workbook but it has been created
now."
End If
End Sub
En este ejemplo se muestra cómo determinar si existe una hoja de cálculo denominada "Sheet4".
El nombre de la hoja de cálculo se especifica en la variable mySheetName. Si la hoja de cálculo
existe, este ejemplo muestra cómo eliminarla usando el método Delete del objeto Worksheet y
luego crea una hoja de cálculo nueva denominada "Sheet4".
Importante
Todos los datos que haya en la hoja de cálculo original denominada "Sheet4" se borrarán cuando se
elimine la hoja de cálculo.
VBA
Sub TestSheetReplace()
mySheetName = "Sheet4"
Application.DisplayAlerts = False
Worksheets(mySheetName).Delete
Err.Clear
Application.DisplayAlerts = True
Worksheets.Add.Name = mySheetName
MsgBox "The sheet named ''" & mySheetName & "'' has been replaced."
End Sub
Crear un libro
Para crear un libro en Visual Basic, utilice el método Add. El siguiente procedimiento crea un libro.
Microsoft Excel asigna automáticamente el nombre BookN al libro, donde N es el siguiente
número disponible. El nuevo libro se convertirá en el libro activo.
Sub AddOne()
Workbooks.Add
End Sub
Una forma mejor de crear un libro es asignarlo a una variable de objeto. En el siguiente ejemplo,
el objeto Workbook devuelto por el método Add se asigna a la variable de bjeto, newBook. A
continuación, se establecen varias de las propiedades de newBook. Puede controlar fácilmente
el nuevo libro utilizando la variable de objeto.
Sub AddNew()
With NewBook
.Subject = "Sales"
.SaveAs Filename:="Allsales.xls"
End With
End Sub
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.
Application.Sheets.Count
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.
Application.Columns(5).Select
Application.Rows(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:
ActiveCell. Devuelve un objeto Range que representa la celda activa dentro de la hoja
activa en el libro de Excel activo.
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.
Seleccionar una celda o rango de celdas es una operación usual que se realiza antes de hacer
otras acciones, como establecer un área de impresión, dar formatos, ordenar un conjunto de
datos, etc. Para ello, usaremos las propiedades Range o Cells, que nos sirven además para
referenciar celdas mientras se programa Excel con VBA, y así indicar sobre qué celdas se debe
buscar o realizar algún evento.
Por ejemplo, para definir explícitamente un rango a seleccionar, se puede usar la siguiente macro:
Sub Macro1()
Range (“B2:B10”).Select
End Sub
Después de que el rango de celdas es seleccionado, se puede hacer diferentes acciones como
cambiar su formato (color de fuente, tamaño de letra, negrita, subrayado, cursiva, darle formato
de número o fecha, etc). A continuación, se mostrará un ejemplo para demostrar cómo definir
cada uno de ellos:
Nota: No es necesario memorizar todas las propiedades de las celdas (los códigos), ya que se
puede primero usar el grabador de macros, y cuando comience la grabación, proceder a dar
formato a las celdas. Luego, se puede mirar el código generado automáticamente por Excel en
VBA.
De la macro anterior, notamos que la palabra “Selection” se repite en todas las sentencias, por lo
que se puede hacer más eficiente esta macro si se usa la estructura With…End With, de la
siguiente manera:
Otra manera de seleccionar un rango es usando Cells del objeto Rango, como se hizo en esta
última macro. Esta requiere las posiciones fila, columna según: Cells(fila, columna); por ejemplo,
a la celda D5, le correspondería Cells(5,4).
Además, notamos que con la macro, se puede dar formato sin necesariamente seleccionar el
rango antes, es por ello que se digitó “With Range(Cells(2, 2), Cells(10, 2))”, en lugar de “With
Range(Cells(2, 2), Cells(10, 2)).Select”, y esta es una ventaja de automatizar las acciones con
las macros, pues además de ahorro de tiempo, es eficien
A través del formato personalizado de celdas en Excel podemos dar la apariencia que
necesitamos a cualquier valor numérico de una celda sin necesidad de editarla. Con solo indicar
un código de formato personalizado podremos manipular la manera en que Excel despliega dicho
valor.
De manera predeterminada, Excel tiene una serie de formatos de celda que podemos aplicar a
nuestros datos. Una manera de acceder a dichos formatos es a través de los comandos que se
encuentran en el grupo Número dentro de la ficha Inicio.
En la lista desplegable encontrarás los formatos de celda comúnmente utilizados en Excel como
el formato General, Número, Moneda, Contabilidad, Fecha corta, Fecha larga, Hora, Porcentaje,
Fracción, Científica y Texto.
Además, por debajo de la lista desplegable, se encuentran los comandos para elegir el símbolo
de moneda, el símbolo de porcentaje, el estilo de millares y los botones para aumentar o disminuir
los decimales.
Si ninguno de estos comandos puede ayudarte a mostrar el valor de la celda como lo deseas,
entonces podrás recurrir al formato de celdas personalizado. Por ejemplo, si en tu hoja de Excel
tienes una columna que contendrá un número de folio y necesitas que dicho número se muestre
siempre de 5 dígitos, entonces necesitas que Excel muestre el valor “1” como “00001”, y el valor
“2” como “00002” y así sucesivamente.
En realidad tú no quieres introducir todos los caracteres para cada uno de los folios sino
solamente introducir el valor “1” y que Excel presente el formato adecuado. Eso es posible a
través del formato de celdas personalizado y trabajaremos en ese ejemplo en el resto del artículo.
Para iniciar nuestro ejemplo, ingresaré el valor “1” en la celda A1, y posteriormente haré clic
derecho sobre la celda y seleccionaré la opción Formato de celdas lo cual abrirá un cuadro de
diálogo.
Otra manera de abrir este cuadro de diálogo es haciendo clic en el indicador de cuadro de
diálogo del grupo Número en la ficha Inicio.
Una vez que se ha abierto la ventana Formato de celdas, deberás asegurarte de seleccionar la
pestaña Número y dentro de la lista de Categoría deberás seleccionar la
opción Personalizada tal como se muestra en la siguiente imagen.
El siguiente paso es seleccionar la cada de texto Tipo, que es donde actualmente se muestra la
palabra Estándar. Borra dicho texto y en su lugar introduce el valor 00000 el cual está formado
por cinco números cero.
Finalmente deberás hacer clic en el botón Aceptar y la celda A1, la cual tenía el valor 1, se
mostrará en pantalla como 00001.
Si copias este formato de celda a toda tu columna, tendrás el comportamiento deseado en todos
tus datos. Recuerda que puedes copiar un formato de celda con el botón Copiar formato que se
encuentra en la ficha Inicio dentro del grupo Portapapeles.
De esta manera hemos creado un formato personalizado en Excel y lo hemos aplicado a un rango
de celdas. Si quieres dejar de utilizar dicho formato, deberás seleccionar todas las celdas que
El formato personalizado de celdas nos permite dar una apariencia única a nuestros datos. En la
siguiente tabla puedes ver otras opciones de formato personalizado que puedes utilizar.
La columna Valor muestra el valor original de la celda es decir, con un formato General. La
columna Formato personalizado es el valor ingresado en la caja de texto Tipo del cuadro de
diálogo Formato de celdas y finalmente la columna Presentación es el valor mostrado en la celda
después de aplicar el formato personalizado.
1 000 001
1 “N”000 N001
Debes considerar que aunque Excel cambia el formato en pantalla de los datos, el valor de la
celda no es afectado. Por ejemplo, si tienes el valor 1.2345 y aplicas un formato personalizado a
la celda para que se vea como 1.23, al momento de hacer un cálculo con el valor de dicha celda,
Excel considerará el valor 1.2345 aunque no esté desplegado en pantalla.
Es muy importante mencionar que el Formato personalizado de celdas en Excel fue pensado
primordialmente para cambiar la apariencia de valores numéricos y no es posible crear formatos
personalizados para manipular la apariencia de celdas con texto. Lo único que podemos hacer
es agregar caracteres individuales como lo muestra el segundo ejemplo de la tabla anterior.
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:
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:
3. 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.
Descripción
Instrucción
Figura 1. Un mensaje de error de vba detiene nuestra macros y debe volver a correrse.
Lo bueno del mensaje de error de vba es que podemos presionar el botón Depurar y nos dirige
a la línea donde la ejecución de la macro se detuvo.
Caso práctico
Como ejemplo, tenemos una macro que le asigna un color rojo a 5 etiquetas de un archivo.
Usamos un constructor For Next que va completando el nombre de las hojas, comenzando con
Hoja1, Hoja2, y así sucesivamente.
La macro funciona perfectamente cuando tenemos las 5 hojas con los nombre del 1 al 5, pero
cualquier cambio de nombre de alguna hoja o si protegemos el archivo, indudablemente nos
marcará un error y macro se detendrá.
Entendiendo On Error
Al terminar las líneas de nuestra macro, será necesario usar Exit Sub, Exit Function o Exit
Property, ya que se supone que después de estas líneas seguirá la etiqueta que hemos definido
para el manejo de error.
Sub MacroPrueba()
'Aquí va el código
Exit Sub
Errores:
End Sub
Los errores se almacenan en el objeto Err, por lo que podemos obtener el número de error
con Err.Number o la descripción con Err.Description.
Ejemplos de código
Sub SinManejo()
'
Dim i As Integer
'
For i = 1 To 5
Sheets(Nombre).Tab.Color = vbRed
Next i
'
End Sub
Sub OnErrorGoto()
'
Dim i As Integer
'
'
For i = 1 To 5
Sheets(Nombre).Tab.Color = vbRed
Next i
'
Exit Sub
'
'Etiqueta
Handler:
'
'
Case Is = 9
Case Is = 1004
Case Else
End Select
'
End Sub
Con la instrucción On Error Resume Next, al detectar un error, o que el nombre de una hoja no
existe, se pasará a la siguiente y la macro no se detendrá.
Sub OnErrorResume()
'
Dim i As Integer
'
'
For i = 1 To 5
Sheets(Nombre).Tab.Color = vbRed
Next i
End Sub
UNIDAD 4
Aplicaciones con Macros
Formularios en Excel.
Empleo de Controles Active X.
Estructuras de Programación en
Controles. Los procedimientos de
evento.
Impresion
Formularios en Excel.
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 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.
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:
En esta ocasión haremos un ejemplo básico de cómo utilizar un formulario VBA para desarrollar
una mini-aplicación en Excel que realice la conversión de temperaturas entre grados Celsius y
grados Fahrenheit. Este ejemplo será de gran ayuda para aquellos que comienzan en la
programación VBA.
Es probable que hayas iniciado a programar en VBA pero aún no hayas utilizado los formularios,
así que será conveniente dar una breve definición antes de comenzar. Un formulario VBA es un
cuadro de diálogo donde agregamos diversos tipos de controles como botones de comando, cajas
de texto, casillas de verificación, y otros controles más que serán de utilidad para obtener
información de un usuario ya sea para procesarla y devolver algún resultado o simplemente
almacenarla.
Los formularios nos permiten crear aplicaciones en Excel para extender el uso y funcionalidad de
la herramienta y aunque su uso está fuertemente relacionado con los usuarios avanzados de
Excel, pronto verás que no es tan complicado utilizarlos. Para iniciar nuestro ejemplo
agregaremos un nuevo formulario de la siguiente manera. En la ficha Programador pulsa el botón
Visual Basic y se mostrará el Editor de VBA. Haz clic derecho sobre VBA Project y selecciona la
opción Insertar > UserForm:
De inmediato el panel principal mostrará el formulario recién creado así como un pequeño cuadro
de diálogo con el título Cuadro de herramientas el cual contiene los controles que podemos
agregar al formulario.
El Cuadro de herramientas tiene un botón para cada tipo de control como etiqueta, cuadro de
texto, cuadro combinado, cuadro de lista, casilla de verificación, botón de opción, etc. Para
agregar un control al formulario es necesario hacer clic en el botón correspondiente dentro
del Cuadro de herramientas y posteriormente hacer clic dentro del formulario. Otra manera de
agregar un control al formulario es pulsar el botón del control y arrastrarlo sobre el formulario.
Para nuestro ejemplo necesitamos agregar una etiqueta, un cuadro de texto, un cuadro de lista y
un botón de comando de manera que nuestro formulario quede de la siguiente manera:
Para cambiar el texto de la etiqueta y del botón de comando debemos modificar la propiedad
llamada Caption y eso lo haremos desde la ventana Propiedades. Si esta ventana no se muestra
actualmente en el Editor de Visual Basic puedes seleccionarla desde el menú Ver o también
puedes hacer clic derecho sobre alguno de los controles y seleccionar la opción Propiedades lo
cual mostrará la ventana:
Encuentra la propiedad Caption y al lado derecho ingresa el valor de dicha propiedad para el
control seleccionado. En la imagen anterior estamos viendo las propiedades de la etiqueta
llamada Label1 y por lo tanto he colocado el texto Temperatura. Para hacer el cambio de esta
propiedad para el botón de comando solo debes seleccionarlo de la lista desplegable que se
encuentra en la parte superior de la misma ventana Propiedades. Al terminar el cambio de la
propiedad Caption tendremos el formulario de la siguiente manera:
En la imagen anterior puedes notar que también he cambiado en el título del formulario y lo
puedes hacer modificando también la propiedad Caption del formulario mismo.
Un último cambio que haremos a los controles es agregar los valores al cuadro de lista. Para
nuestro ejemplo solo necesitamos los valores Celsius y Fahrenheit pero no existe una propiedad
del control que nos permita hacerlo sino que debemos utilizar código VBA. Para especificar estas
opciones debemos hacer doble clic sobre el formulario y seleccionar el código para el
procedimiento Initialize donde colocaremos las instrucciones necesarias para agregar las
opciones:
La instrucción AddItem es la que nos permite agregar un nuevo elemento al cuadro de lista y la
instrucción ListIndex nos permite indicar el valor que estará seleccionado al cargarse el formulario
y que será la opción Celsius ya que es la primera opción de la lista y por lo tanto tiene asociado
el índice cero.
Finalmente agregaremos código VBA al botón de comando que será el encargado de hacer la
conversión, solo haz doble clic sobre el botón para mostrar la ventana de código asociada. El
código que colocaremos en el procedimiento Click será el siguiente:
6 Exit Sub
7 End If
10 If ComboBox1.ListIndex = 0 Then
14 Else
17 End If
18
19 End Sub
La primera validación dentro del código verifica que el cuadro de texto no esté vacío en cuyo caso
desplegará un mensaje solicitando ingresar una temperatura y posteriormente sale de la
subrutina. La segunda validación es para saber si el cuadro de lista tiene seleccionada la opción
Celsius y por lo tanto hacer la conversión a Fahrenheit para mostrar el resultado. Por el contrario,
si el cuadro de lista tiene seleccionada la opción Fahrenheit se hará la conversión a Celsius. Para
probar el funcionamiento de nuestro formulario es suficiente con pulsar el botón Ejecutar que se
encuentra en la barra de herramientas Estándar:
Ya que hemos terminado con la construcción del formulario y el código necesario para su
funcionamiento, podemos dar un paso adicional para llamar el formulario desde una hoja de
Excel.
Para cargar un formulario desde una hoja de Excel será suficiente con agregar un botón de
comando ActiveX desde la ficha Programador:
Al hacer doble clic sobre el botón se mostrará el código asociado al evento Click del botón y
debemos colocar una sola instrucción:
Con esto será suficiente para que al momento de pulsar el botón de la hoja de Excel se muestre
el formulario VBA recién creado y podamos realizar la conversión de temperaturas. Aunque este
es un ejemplo muy sencillo espero que sea útil para darte cuenta del gran potencial que existe
en el uso de formularios en Excel.
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:
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.
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 a
partir de Excel 2010 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.
Eventos en Excel
Los eventos en Excel son acciones iniciadas por el usuario, como el seleccionar una hoja
diferente dentro del libro o modificar el valor de una celda. Al suceder dicho evento se ejecutará
un procedimiento asociado el cual contendrá nuestro código VBA.
3 End Sub
Es así como podemos hacer nuestra primera conclusión: Los eventos en Excel ya están definidos
en la herramienta y debemos utilizar el nombre del procedimiento asociado a cada uno de ellos
respetando también sus argumentos.
Existen tres objetos en Excel que contienen la mayoría de los eventos generalmente utilizados:
Application, Workbook y Worksheet. El objeto de mayor jerarquía es Application y se refiere a
Excel mismo. El siguiente objeto en la jerarquía es el objeto Workbook que hace referencia a un
libro de Excel y el último objeto de la jerarquía es Worksheet y que hace referencia a una hoja
de Excel.
Cada uno de estos objetos contiene eventos por sí mismo pero también contiene eventos que
hacen referencia a los eventos de los objetos por debajo de la jerarquía. Por ejemplo, el
objeto Workbook tiene el evento SheetActivate que se activará cada vez que seleccionamos una
hoja diferente de nuestro libro. El objeto Worksheet tiene el evento Activate que se ejecuta
también al seleccionar una hoja específica del libro.
Para dejar claro el funcionamiento de ambos eventos he creado un libro de Excel que
puedes descargar el cual muestra un mensaje al momento de seleccionar una hoja diferente
dentro del libro. Se mostrará un cuadro de diálogo con el mensaje “Evento
Workbook_SheetActivate” que corresponde al objeto Workbook y al seleccionar la Hoja1 se
mostrará el mensaje “Evento Worksheet_Activate”.
Este ejemplo también será útil para dejar en claro el orden de ejecución de los eventos. La
ejecución comienza siempre con los eventos del objeto de menor jerarquía y continúa con los
objetos de mayor jerarquía. En nuestro ejemplo, al seleccionar la Hoja1 se mostrará primero el
mensaje del procedimiento Worksheet_Activate y posteriormente el mensaje del
procedimiento Workbook_SheetActivate.
Hasta ahora hemos hablado sobre los eventos de Excel y los procedimientos vinculados a cada
uno de ellos. También conocemos los objetos que contienen los eventos, su jerarquía y el orden
de ejecución, así que solo nos resta saber cuáles son todos los eventos disponibles para cada
objeto.
Una manera de conocer los eventos de un objeto es utilizar el Examinador de objetos que
podemos acceder desde el Editor de Visual Basic dentro del menú Ver. Al mostrarse el
Examinador de objetos tendremos dos paneles, en la izquierda estarán las clases (objetos) y al
seleccionar alguno de ellos el panel derecho mostrará sus eventos, sus métodos y propiedades.
En la siguiente imagen podemos ver algunos de los eventos del objeto Worksheet que son
fácilmente identificados por un pequeño icono color amarillo en forma de rayo:
Ahora que ya sabemos cómo identificar todos los eventos de un objeto es necesario conocer la
ubicación donde debemos colocar el procedimiento asociado a cada uno de ellos. Para los
eventos del objeto Worksheet es necesario colocar el código dentro del módulo asociado a cada
hoja. Para el ejemplo mencionado anteriormente, coloqué el código del evento Activate dentro
del módulo de la Hoja1 de la siguiente manera:
Los eventos del objeto Workbook deben colocarse dentro del módulo ThisWorkbook que se
encuentra por debajo de los módulos de código de las hojas:
Un beneficio que nos ofrece el Editor de Visual Basic es que provee dos listas desplegables en
la parte superior del panel derecho donde podremos elegir el objeto y de inmediato sus
procedimientos serán desplegados en la segunda lista.
Al seleccionar alguno de los eventos de la segunda lista se insertará el código del procedimiento
utilizando el nombre y argumentos adecuados en espera de que introduzcamos el código VBA
que será ejecutado al suceder el evento.
Es importante respetar la ubicación adecuada para cada uno de los procedimientos de los
eventos o de lo contrario Excel no los encontrará y por lo tanto no serán ejecutados. A diferencia
de los eventos para los objetos Worksheet y Workbook, no existe un repositorio específico para
los eventos del objeto Application sino que deben ser incluidos ya sea dentro del módulo
ThisWorkbook o dentro de un módulo de clase independiente.
Para utilizar un evento del objeto Application dentro del módulo ThisWorkbook comenzamos por
declarar el objeto y posteriormente inicializarlo dentro del evento Workbook_Open de la siguiente
manera:
5 End Sub
La palabra clave WithEvents nos ayuda a indicar que la variable App del tipo Application puede
provocar eventos. Posteriormente dentro del procedimiento Workbook_Open inicializamos dicha
variable. Una vez hecho esto podemos elegir la opción App dentro de la primera lista desplegable
del panel y posteriormente elegir cualquiera de los eventos disponibles para el objeto Application
dentro de la segunda lista.
De esta manera podemos utilizar los eventos del objeto Application dentro del módulo de código
ThisWorkbook y al igual que con los ejemplos anteriores, al seleccionar el evento de la segunda
lista, Excel colocará el código base para el procedimiento del evento.
Impresion
Para imprimir con Visual Basic en Excel insertaremos un botón de control de los controles de formulario de
Excel. Para ello, llevaremos a cabo los siguientes pasos:
o Hacer clic en el menú insertar del menú programador y seleccionar el botón de comando
de controles ActiveX.
o Cambiar el nombre del botón a Imprimir haciendo clic sobre el botón+propiedades y rellenando el
campo de Caption.
o Hacer clic con el botón derecho sobre el botón imprimir y seleccionar ver código.