You are on page 1of 78

Manual de

Microsoft Excel 2013


Modulo 4
Tabla de contenido

1. MACROS EN EXCEL .................................................................................................................. 5


1.1. introducción ........................................................................................................................... 5
1.2. Mostrar la ficha Desarrollador en Excel 2013 .................................................................... 7
1.2.1. Grupos de la ficha Desarrollador ................................................................................. 8
1.3. La grabadora de macros en Excel 2013............................................................................... 8
1.3.1. Creando una macro ....................................................................................................... 9
1.3.2. El código de la Grabadora de macros........................................................................ 11
1.3.3. Grabar macros con Referencias Absolutas ............................................................... 14
1.3.4. Grabar una macro con Referencias Relativas .......................................................... 16
1.4. Establecer seguridad de macros ......................................................................................... 18
2. PROGRAMANDO EN VBA ...................................................................................................... 19
2.1. Principios fundamentales.................................................................................................... 19
2.2. objeto .................................................................................................................................... 19
2.3. Propiedades y Métodos ....................................................................................................... 19
2.4. El Editor de Visual Basic .................................................................................................... 20
2.5. Creación de un módulo ....................................................................................................... 21
2.6. Subrutinas en VBA.............................................................................................................. 22
2.6.1. La función MsgBox en VBA ....................................................................................... 22
2.6.2. Utilizar comentarios en VBA...................................................................................... 23
2.6.3. Objetos, propiedades y métodos................................................................................. 25
2.6.3.1. Propiedades de un objeto .................................................................................... 26
2.6.3.2. Métodos de un objeto .......................................................................................... 26
2.6.3.3. Objetos predeterminados.................................................................................... 28
2.6.3.4. El objeto Workbook y el objeto Worksheet ...................................................... 29
2.6.3.5. El objeto Application en VBA ............................................................................ 31
2.6.3.6. Métodos del objeto Application .......................................................................... 32
2.7. Cómo crear el libro de macros personal en Excel ............................................................ 33
2.8. Tipos de errores en VBA..................................................................................................... 34
2.8.1. Errores de sintaxis en VBA ........................................................................................ 34
2.8.2. Errores en tiempo de ejecución .................................................................................. 35
2.8.3. Depurar errores en Excel ............................................................................................ 36
2.8.4. Depurar código VBA ................................................................................................... 36
2.9. Variables en VBA ................................................................................................................ 38
2.10. Las funciones estándar en VBA ..................................................................................... 40
2.10.1. La función Left ............................................................................................................ 40
2.10.2. La función Right .......................................................................................................... 41
2.10.3. La función Len ............................................................................................................. 41
2.10.4. La función InStr .......................................................................................................... 42
2.10.5. La función Mid ............................................................................................................ 43
2.11. Estructuras de control en VBA ...................................................................................... 43
2.11.1. La declaración If-Then en VBA ................................................................................. 43
2.11.2. La declaración If-Then-Else ....................................................................................... 44
2.12. Acceder celdas con VBA ................................................................................................. 45
2.12.1. Seleccionar una celda .................................................................................................. 46
2.12.2. Seleccionar un rango ................................................................................................... 46
2.12.3. Establecer el valor de una celda ................................................................................. 46
2.12.4. La repeticion controlada For-Next en VBA ............................................................. 47
3. FUNCIONES CREADAS POR EL USUARIO EN VBA ........................................................ 53
3.1. Creando una función VBA ................................................................................................. 53
3.2. La palabra clave Function .................................................................................................. 53
3.3. Parámetros de una función VBA ...................................................................................... 53
3.4. Valor de retorno .................................................................................................................. 54
3.5. Cuerpo de la función VBA .................................................................................................. 54
3.6. Retornando el valor ............................................................................................................. 54
3.7. Probando la función VBA ................................................................................................... 54
4. EVENTOS EN VBA .................................................................................................................... 55
4.1. Concepto de evento.............................................................................................................. 55
4.2. Ejemplos de eventos en VBA .............................................................................................. 55
4.3. Un ejemplo de eventos en VBA .......................................................................................... 56
5. ARREGLOS EN VBA................................................................................................................. 58
5.1. Crear un arreglo en VBA ................................................................................................... 58
5.2. Acceder un elemento del arreglo ........................................................................................ 58
6. FORMULARIOS EN EXCEL ................................................................................................... 60
6.1. Fformulario en Excel........................................................................................................... 60
6.2. Controles de formulario en Excel ...................................................................................... 60
6.3. Los diferentes controles de formulario .............................................................................. 60
6.3.1. Controles de formulario no disponibles en Excel 2013 ............................................ 61
6.3.2. Controles ActiveX en Excel ........................................................................................ 61
6.3.3. Controles ActiveX y controles de formulario............................................................ 61
6.4. Propiedades de los controles ActiveX ................................................................................ 62
6.5. Otra ventaja de los controles ActiveX en Excel ................................................................ 63
Microsoft Excel 2013 Macros y programación VBA

EXCEL VBA

1. MACROS EN EXCEL

1.1. introducción

Si utiliza Excel frecuentemente es posible que en alguna ocasión se haya encontrado


ejecutando una misma serie de acciones una y otra vez. Esas acciones que hace repetidas
veces se podrían automatizar con una macro.

Una macro es un conjunto de comandos que se almacena en un lugar especial de Excel de


manera que están siempre disponibles cuando lo necesite ejecutar.

Por ejemplo, si todas las mañanas crea un reporte de ventas y en ese reporte siempre da el
mismo formato a los textos, se podría crear una macro para que lo haga automáticamente.
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.

Excel provee de una herramienta especial que permite crear una macro sin necesidad de
conocer los detalles del lenguaje de programación.

Aunque si acepta el desafío y se inicia en el mundo de la programación VBA Verá que crear
una macro en Excel no es tan complicado y será una manera fácil y rápida de eliminar tareas
repetitivas que todos los días quitan minutos preciados de tiempo.

Centro de informatica 5|Página


Microsoft Excel 2013 Macros y programación VBA

Automatización de tareas

Seguramente está familiarizado con procesos de automatización en el ámbito industrial. Un


ejemplo muy claro son las plantas ensambladoras de automóviles donde existen robots que han
sustituido tareas que antes eran hechas por humanos. La automatización trajo beneficios como
mayor eficiencia y productividad de las plantas y un mejor aprovechamiento del tiempo del
personal al reducir la cantidad de tareas repetitivas que realizaban.

De la misma manera las macros nos ayudan a eliminar esas tareas repetitivas de lo trabajo
cotidiano al permitirnos utilizar mejor lo tiempo en el análisis de los datos y en la toma de
decisiones.

¿Cómo se ve una macro en Excel?

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 ayudarán a indicar a Excel lo que se desea hacer con los
datos.

Las macros se crean con el Editor de Visual Basic el cual nos permite 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 se realice en Excel hasta que se detenga la grabación. Una vez grabada la macro
se puede “reproducir” de nuevo las acciones con tan solo un clic.

Centro de informatica 6|Página


Microsoft Excel 2013 Macros y programación VBA

1.2. Mostrar la ficha Desarrollador en Excel 2013

Para escribir una nueva macro o ejecutar una macro previamente creada, entonces se
habilita la ficha Desarrollador dentro de la cinta de opciones. Para mostrar esta ficha sigue
los siguientes pasos.

Haga clic en la ficha Archivo y elige la sección Opciones. Se mostrará el cuadro de diálogo
Opciones de Excel donde deberá seleccionar la opción Personalizar cinta de opciones.

En el panel de la derecha deberá seleccionar la ficha Desarrollador

Acepta los cambios y la ficha se mostrará en la cinta de opciones.

Centro de informatica 7|Página


Microsoft Excel 2013 Macros y programación VBA

1.2.1. Grupos de la ficha Desarrollador

El grupo Código tiene 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 olvidar que en este
grupo se encuentra el comando Grabar macro el cual permite crear una macro sin
necesidad de saber sobre programación en VBA.

El grupo Complementos permite administrar y habilitar complementos como el Solver.

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.

1.3. La grabadora de macros en Excel 2013

Puede 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 debe ir a
la ficha Desarrollador y seleccionar el comando Grabar macro.

Al pulsar el botón se mostrará el cuadro de diálogo Grabar macro.

Centro de informatica 8|Página


Microsoft Excel 2013 Macros y programación VBA

En el cuadro de texto Nombre de la macro deberá colocar el nombre que identificará de


manera única a la macro que se va a crear. De manera opcional puede asignar un método
abreviado de teclado el cual permitirá ejecutar la macro con la combinación de teclas
especificadas.

La lista de opciones Guardar macro en permite seleccionar la ubicación donde se


almacenará la macro.

Este libro. Guarda la macro en el libro actual.

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 puede colocar una Descripción para la macro que vas a crear. Finalmente debe
pulsar el botón Aceptar para iniciar con la grabación de la macro. Al terminar de ejecutar
las acciones planeadas deberá pulsar el botón Detener grabación para completar la macro.

1.3.1. Creando una 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.

Se va 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

Centro de informatica 9|Página


Microsoft Excel 2013 Macros y programación VBA

grabación debe ir al comando Grabar macro que se encuentra en la ficha Desarrollador


lo cual mostrará el siguiente cuadro de diálogo.

Observa cómo se ha colocado un nombre a la macro y además he especificado el método


abreviado CTRL+d para ejecutarla posteriormente. Una vez que se pulsa el botón
Aceptar se iniciará la grabación. Observa con detenimiento los pasos.

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 seleccione el comando Macros.

Centro de informatica 10 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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 utiliza el método abreviado de teclado de la macro entonces se
omitirá este último cuadro de diálogo.

1.3.2. El código de la Grabadora de macros

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 Desarrollador 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 debe acsuar
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.

Centro de informatica 11 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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 Desarrollador. Se mostrará el cuadro de diálogo Macro que
enlista todas las macros que hemos creado.

Centro de informatica 12 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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 tenga 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.

Centro de informatica 13 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

1.3.3. Grabar macros con Referencias Absolutas

Las referencias absolutas son aquellas celdas que al escribirlas en una fórmula se
especifican la ubicación exacta de estas. Por ejemplo: A11 o B16.

Se elaborarán dos cuadros en los cuales se debe de editar la información sobre los
servicios que se brindan en diferentes hoteles de la ciudad de Lima. Las cuadros que se
obtendrán serán como las siguientes:

Estos cuadros serán de ayuda para realizar la macro que se usará como ejemplo para las
referencias absolutas.

Para grabar una macro se seguirán los siguientes pasos:

1. Seleccionar la celda A1.


2. Seleccionar Desarrollador.
3. Seleccionar Grabar macro.
4. Editar el nombre de la macro, en este caso nombraremos Hoteles, aceptar.
5. Seleccionar la celda A16, editar TOTAL.
6. Seleccionar la celda D16 y editar la siguiente fórmula: =contar(D2:D15).
La fórmula empleada cuenta el número de celdas seleccionadas, se detener tener en
cuenta que estás celdas contienen números.
7. Parar la grabación de macros.

Centro de informatica 14 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

El formato del libro debe ser el siguiente:

Para comprobar que se ejecute la macro, se debe realizar los siguientes pasos:

1. Eliminar la fila 16.


2. Seleccionar Desarrollador.
3. Seleccionar macros.
4. Seleccionar ejecutar.

Si se siguió con los pasos, al ejecutar la macro en la tabla izquierda se cumplirá con el
objetivo. Sin embargo, si se selecciona la celda F16, con el objetivo de que la macro se
ejecute para la tabla de la derecha, no se obtendrá ningún resultado para esta.

Para entender que sucede, vamos a analizar el código. Para ello, seleccionar
desarrollador, después Macros, hacemos clic en HOTELES; por último, hacemos clic
en modificar.

Se obtendrá el siguiente cuadro en Visual Basic, en el cual describe en forma de códigos


los procesos que se realizaron al momento de grabar la macro.

Centro de informatica 15 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Al observar la tercera y quinta línea de la macro que tienen como referencia los
siguientes códigos: Range (“A16”).Select y Range (“D16”).Select, se observa que en
los códigos se han escrito la ubicación exacta de las celdas A16 Y D16, a esto se llamará
referencia absoluta. Por ello, al intentar ejecutar la macro desde otra celda como F1 no
se puede puede repetir el procedimiento grabado

1.3.4. Grabar una macro con Referencias Relativas

Este botón da mayor flexibilidad al uso del grabador de macros. Es muy útil cuando se
quieren hacer macros que impliquen grabar una secuencia de datos. Las macros se
graban con acciones relativas a la celda seleccionada inicialmente.

Por ejemplo, trabajar un reporte diario de asistencias a capacitaciones en un centro


laboral. Se requiere crear una fila con los días de la semana con la cantidad de personas
que asistieron a la capacitación esos días.

– Encendemos el grabador de macros y rellenamos los día de la semana.

– Ahora intentaremos usar esta macro desde la otra celda que no haya sido la de la
grabación, y vemos que la macro no llega a ejecutarse correctamente, la secuencia de
datos queda incompleta ya que la macro intenta crear una serie de datos desde B4
iniciando en A1.

Centro de informatica 16 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

En VBA

Sub Macro10()
ActiveCell.FormulaR1C1 = “lunes”
Range(“A1″).Select
Selection.AutoFill Destination:=Range(“A1:G1″), Type:=xlFillDefault
Range(“A1:G1″).Select
Columns(“G:G”).Select
End Sub

– Para evitar este problema, se debe activar el botón usar referencias relativas, antes de
empezar a grabar la macro así como se muestra en la imagen inferior (el botón cambio
de color)

Ahora grabaremos la macro y la usaremos desde la celda B5, y como se ve esta se


completa correctamente.

En VBA

Sub Macro11()
ActiveCell.FormulaR1C1 = “lunes”
Selection.AutoFill Destination:=ActiveCell.Range(“A1:G1″), Type:= _
xlFillDefault
ActiveCell.Range(“A1:G1″).Select
End Sub

Notase la diferencia en los códigos en el codigo de Macro10 se especifica el rango de filas y


columnas, sin embargo en la macro11 la última indicación usa Activecell

Centro de informatica 17 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

1.4. Establecer seguridad de macros

La seguridad es un tema importante al hablar de macros en Excel. Si abre algún archivo que
contenga una macro maliciosa puede causar algún tipo de daño al equipo. De manera
predeterminada Excel no permite ejecutar macros automáticamente.

Sin embargo, si está creando macros y desea remover esta protección porque sabes que no
existe código malicioso, entonces puede modificar la configuración para habilitar todas
las macros. Para hacerlo debe seguir los siguientes pasos.

Haga 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.

Dentro de la sección Configuración de macros selecciona alguna de las opciones


disponibles.

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.

Una vez seleccionada la opción deseada se debe pulsar el botón Aceptar para hacer los
cambios permanentes.

Centro de informatica 18 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

2. PROGRAMANDO EN VBA

Excel 2013 es una de las herramientas de software más poderosas para el manejo, análisis y
presentación de datos. Aun y con todas sus bondades, en ocasiones Excel no llega a suplir
algunas necesidades específicas de los usuarios.

Afortunadamente Excel cuenta con VBA que es un lenguaje de programación que permite
extender las habilidades del programa para cubrir los 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.

2.1. 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.

2.2. objeto

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.

2.3. 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, temperasura 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 lo 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 Lecsura), 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 los datos.

Centro de informatica 19 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

2.4. 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 permite escribir código
VBA que estará asociado a las macros.

Existen al menos dos alternativas para abrir el editor, la primera de ellas es a través del
botón Visual Basic de la ficha Desarrollador.

El segundo método para abrir este programa es 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.

En la parte izquierda se muestra el Explorador de proyectos el cual muestra el proyecto


VBA creado para el libro actual y además muestra las hojas pertenecientes a ese libro de
Excel. Si por alguna razón no puede visualizar este módulo puede habilitarlo en la opción
de menú Ver y seleccionando la opción Explorador de proyectos.

Centro de informatica 20 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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


puede 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 lo
código. Si no puede observar esta ventana puede 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 las macros.

Es importante familiarizarnos con el Editor de Visual Basic antes de iniciar con la creación de
macros.

Ahora que ya conoce lo que es el Editor de Visual Basic para Aplicaciones puede ver un ejemplo
muy sencillo para crear una macro. Lo primero que debe hacer es ir a la ficha Desarrollador y
hacer clic en el botón Visual Basic.

2.5. Creación de un módulo

Una vez dentro del Editor debe hacer clic derecho sobre el título del proyecto y dentro del
menú seleccionar la opción Insertar Módulo.

Centro de informatica 21 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Se creará la sección Módulos y dentro de la misma se mostrará el módulo recién creado.


Puede 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á hacer doble clic sobre él. Posicione en el área
de código escriba las siguientes instrucciones:

Antes de avanzar vea con detalle las instrucciones mostradas.

2.6. Subrutinas en VBA

El primer concepto es la subrutina. Una subrutina no es más que un conjunto de


instrucciones que se ejecutarán una por una hasta llegar al final de la subrutina que está
especificado por la instrucción End Sub. Se asocian al concepto de subprograma, en la
notación actual se denomina método, simplemente es un conjunto de líneas de código que
realizan un trabajo y obtienen un resultado.

Las subrutinas nos ayudan a agrupar varias instrucciones de manera que podamos organizar
adecuadamente lo 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.

2.6.1. La función MsgBox en VBA

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

Centro de informatica 22 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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 lo código bastará con pulsar el botón Ejecutar que se encuentra dentro de la
barra de herramientas.

En cuanto se pulsa el botón se ejecutará el código recién ingresado y obtendremos el


resultado en pantalla.

Listo, has creado su 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 debe
guardar el archivo como Libro de Excel habilitado para macros, de lo contrario
perderás el código del módulo creado

2.6.2. Utilizar comentarios en VBA

Utilizar comentarios dentro del código VBA es una de las mejores prácticas que debe
adoptar desde que se inicia en el mundo de la programación en Excel. Los comentarios
harán que su 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 usted 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 debe escribir el comentario y al

Centro de informatica 23 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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.

Es una buena práctica colocar comentarios al programar en VBA esto le ahorrará mucho
tiempo cuando tenga la necesidad de modificar su código. Además, si por alguna razón
necesita que otra persona haga modificaciones al código le serán de gran ayuda los
comentarios que haya colocado.

Comentar varías líneas de código

Como ya lo mencioné, un comentario en VBA será omitido al momento de la ejecución.


En ocasiones cuando está haciendo pruebas con su código VBA deseas evitar que ciertas
líneas de código se ejecuten y una manera de hacer es comentando dichas líneas.

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, puede seguir los
siguientes pasos:

Seleccione 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.

Centro de informatica 24 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

De la misma manera puede remover las comillas sencillas si pulsa el botón Bloque sin
comentarios que se encuentra justo al lado derecho del botón Bloque con comentarios.

Si no puede ver los botones anteriores en el Editor de Visual Basic es porque


seguramente tiene oculta la barra de herramientas de Edición. Para mostrarla, haga clic
derecho sobre un área libre del menú superior y seleccionar la opción Edición.

2.6.3. 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.

Centro de informatica 25 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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.

2.6.3.1. 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.

2.6.3.2. 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.

Utilizando las propiedades y los métodos

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

Centro de informatica 26 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

porque justamente al momento de escribir lo 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. Puede 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.

Navegando el modelo de objetos

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.

Acceder a objetos inferiores

Para tener acceso a los objetos que están por debajo del objeto Application se puede utilizar el
punto. El punto nos ayuda a navegar por la jerarquía hacia un nivel inferior. Observe 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, describe
perfectamente la jerarquía de los objetos en VBA ya que después de acceder el objeto de la
aplicación (Application), le seguirá el objeto del libro de trabajo activo (ActiveWorkbook) y

Centro de informatica 27 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

posteriormente el objeto de la hoja activa (ActiveSheet) para finalmente llegar al objeto del
rango de celdas (Range) y modificar la propiedad Bold de la Fuente.

2.6.3.3. 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 lo 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:

Centro de informatica 28 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Referencias completas a objetos

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.

En ambos casos el resultado será el mismo y en el último ahorraremos algunos caracteres


dejando lo código VBA claro y legible.

Las colecciones de objetos Workbooks y Worksheets

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.

2.6.3.4. El objeto Workbook y el objeto Worksheet

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 lo código VBA.

Centro de informatica 29 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Abrir un libro de Excel

Para abrir un libro de Excel en VBA podemos utilizar el método Open del objeto
Workbooks de la siguiente manera:

Application.Workbooks.Open Filename:="C:Libro1.xlsx"

Esta instrucción abrirá el archivo ubicado en “C:Libro1.xlsx” y lo agregará a la


colección de objetos Workbooks. De esta manera podemos abrir tantos archivos como
sean necesarios y para cada uno de ellos se creará un objeto Workbook el cual será
almacenado dentro de Workbooks.

Hacer referencia a un libro en VBA

Una vez que hemos abierto los archivos que necesitamos podremos hacer referencia a
cada uno de ellos a través de la colección de objetos Workbooks de la siguiente manera:

Application.Workbooks(1).Activate

El número que observa 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 se haya abierto otros archivos. Si conoce el nombre del
libro podemos utilizarlo en lugar del índice y tener una instrucción como la siguiente:

Application.Workbooks("Libro1.xlsx").Activate

La colección de objetos Workbooks nos permitirá acceder a todos los libros que
hayamos abierto dentro de nuestra aplicación VBA.

Acceder a las hojas de un libro

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:

Application.Workbooks(1).Worksheets(1).Range("A1").Value = "Hola"

Esta instrucción accede a la hoja con el índice 1 y coloca el valor “Hola Mundo” en la
celda A1. También podemos acceder a una hoja a través de su nombre en caso de que
lo conozcamos:

Application.Workbooks(1).Worksheets("Hoja1").Range("A1").Value = "Hola"

Agregar una nueva hoja

A través de la colección de objetos Worksheets podemos crear nuevas hojas en un


libro. Observa la siguiente instrucción:

Centro de informatica 30 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Worksheets.Add

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:

Application.Workbooks("Libro1.xlsx").Worksheets.Add

Ahora ya sabemos que VBA tiene un objeto para representar los libros de Excel
(Workbook) y otro objeto para representar las hojas de un libro (Worksheet). Ambos
tipos de objetos son almacenados dentro de colecciones de objetos que son conocidas
como Workbooks, que se refiere a la colección de libros que se han abierto y Worksheets
que es la colección de hojas que pertenecen a un determinado libro.

2.6.3.5. El objeto Application en VBA

Cuando escribimos macros con VBA trabajamos con múltiples objetos que pueden
ejecutar las instrucciones adecuadamente, pero el objeto Application está en el nivel
más alto de la jerarquía del modelo de objetos de Excel.

El objeto Application simboliza a Excel mismo y nos da acceso a opciones y


configuraciones a nivel de la aplicación. Muchas de las opciones que podemos
modificar con el objeto Application son las mismas que encontramos en la ficha
Archivo dentro del cuadro de diálogo Opciones 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á frecuentemente instrucciones que
comienzan especificando el objeto Application:

Application.ActiveSheet.Name = "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.

ActiveSheet.Name = "Reporte de Ventas"

Colecciones del objeto Application

El objeto Application tiene algunas colecciones que son de mucha utilidad como
Sheets, Columns y Rows. La colección Sheets nos permite acceder a todas las hojas
de un libro:

Application.Sheets.Count

Centro de informatica 31 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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

Propiedades del objeto Application

El objeto Application tiene muchas propiedades como para mencionarles todas en esta ocasión,
pero algunas de las más importantes son las siguientes:

ActiveWorkbook. Devuelve un objeto Workbook que representa el libro de Excel activo.

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.

2.6.3.6. Métodos del objeto Application

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:

Impresiones = Application.InputBox(Prompt:="Número de impresiones:", _


Title:="Imprimir", Default:=1, Type:=1)

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.

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.
Centro de informatica 32 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

El libro de macros personal es en realidad un archivo oculto llamado PERSONAL.XLSB


y que es cargado cada vez que iniciamos Excel. Si tienes Windows 13 podrás encontrar
el archivo personal.xlsb en la siguiente carpeta:

C:\Usuarios\[Usuario]\AppData\Roaming\Microsoft\Excel\XLSTART

En la ruta que observas arriba [Usuario] es el nombre de su usuario en el equipo. Además


la carpeta AppData es una carpeta oculta por lo que no la encontrará directamente en el
navegador de Windows a menos que habilite la vista de archivos ocultos.

2.7. Cómo crear el libro de macros personal en Excel

El libro de macros personal se crea la primera vez que se guarda una macro en él. Para
hacerlo, cree una macro y especifique que desea guardarla en el Libro de macros personal.

Cuando guarde el archivo Excel verá un mensaje preguntando si desea guardar los cambios
realizados al libro de macros personal, para lo cual deberá pulsar el botón Guardar.

El libro de macros personal en el Editor de Visual Basic

Centro de informatica 33 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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 (PERSONAL.XLSB) encontrará la carpeta Módulos y


dentro de ella encontrará 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á hacer
clic derecho sobre él y seleccionar la opción Quitar Módulo.

2.8. Tipos de errores en VBA

No todas las cosas funcionan bien a la primera y seguramente te encontrará con errores al
programar en Excel. Existen dos tipos de errores en VBA: errores de sintaxis y errores en
tiempo de ejecución.

2.8.1. Errores de sintaxis en VBA

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 lo 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:

Centro de informatica 34 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

En este ejemplo se 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 se ha utilizado en el lugar inapropiado y
por eso se obtiene el error.

De igual manera el Editor de Visual Basic notará si ha utilizado una palabra que no
pertenece al lenguaje VBA. En el siguiente ejemplo he se debio escribir la instrucción
Mod (módulo) y se escribió la palabra Mud.

Estos son solo algunos ejemplos de errores de sintaxis que se pueden cometer; el Editor
de Visual Basic alertará sobre dichos errores y se podrán detectarlos y corregirlos.

2.8.2. Errores en tiempo de ejecución

Un error en tiempo de ejecución ocurre cuando una aplicación ya está siendo ejecutada
e intenta hacer alguna acción que no está permitida por Excel o por Windows. Esto
ocasionará que la aplicación colapse o que Excel deje de responder.

Este tipo de errores son más difíciles de encontrar pero aun así se podrán encontrar
algunos de ellos al hacer pruebas y depuración de la aplicación. Algunos ejemplos de
este tipo de errores son los siguientes:

Centro de informatica 35 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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.

Utilizar un bucle con una condición que nunca se cumple.

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
lo código pero eso será tema de otro artículo.

2.8.3. Depurar errores en Excel

Cuando nos encontramos con errores en las macros podemos depurar el código
utilizando el Editor de Visual Basic para encontrar fácilmente los errores que pueda
contener lo código VBA. Considera la siguiente macro:

2.8.4. Depurar código VBA

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.

Centro de informatica 36 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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:

Excel ejecuta la instrucción que está sombreada en color amarillo

Si Excel encuentra un error en la instrucción, entonces enviará un mensaje de error.

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 del código VBA y validar que
no exista error alguno. Regresando al 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.

Existen diferentes tipos de errores en VBA y la depuración nos ayudará a probar el


código y a encontrar la gran mayoría de los errores que podamos tener. Es probable que
al principio vea a la depuración como un trabajo muy exhaustivo pero cuando sus
programas y macros comiencen a crecer entonces verás todos los beneficios que nos da
la depuración de macros en Excel.

Centro de informatica 37 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

2.9. Variables en VBA

Cuando programamos en VBA frecuentemente necesitamos un repositorio para almacenar


el resultado de alguna operación. Las variables en VBA son utilizadas para guardar valores
y su tipo dependerá de clase da dato que deseamos guardar dentro de ellas.

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.

Variables de tipo entero

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 se está declarando la variable con el nombre “x” e 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”.

Variables de tipo doble

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.

Variables de tipo texto

Una variable de tipo texto se declara con la palabra clave String. En el ejemplo se
muestra:

Dim libro As String


libro = "Programación en Excel"

Centro de informatica 38 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Variables de tipo lógico

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.

Dim continuar As Boolean


continuar = True

La primera línea declara la variable “booleana” y en la segunda se le asigna un valor.


Solamente podemos asignar dos valores a este tipo de variables: True (verdadero) y False
(falso).

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
los programas.

Cadenas de texto en VBA

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, debe 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.

Unir cadenas de texto

Para unir dos (o más) cadenas de texto podemos utilizar el operador &. Observa el siguiente
código:

Centro de informatica 39 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

El resultado de este código es el siguiente:

2.10. Las funciones estándar en VBA

2.10.1. 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.

En el código he especificado los 7 caracteres a la izquierda de la cadena de texto. El


resultado es el siguiente:

Centro de informatica 40 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

2.10.2. 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:

2.10.3. La función Len

La función Len nos ayuda a conocer la longisud 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:

Centro de informatica 41 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

2.10.4. 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:

cadena = "Hola Mundo"


InStr (cadena, "Mundo")

Centro de informatica 42 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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”.

2.10.5. 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 longisud. 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 el 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.

2.11. Estructuras de control en VBA

Las estructuras de control en VBA, permiten direccionar el flujo de los datos, logrando
tomar decisiones, èstas pueden ser alternativas si se tratan de obtener un resultdo entre dos
o mas posibles u obtener el procesamiento de un grupo de datos sea este condicionado o
no si se tratan de decisiones repetitivas

2.11.1. La declaración If-Then en VBA

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 sentencia 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

Centro de informatica 43 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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 haga esto.

Ejemplo de la declaración If-Then

Para probar el funcionamiento de la declaración If-Then inserta un botón de comando


(Control ActiveX) en una hoja de Excel y haga doble clic sobre él para colocar el
siguiente código:

En el primer paso se hace la declaración de las variables que utilizaré en el resto del
código.

En el segundo paso asigno el valor de la celda A1 a la variable calificación.

El tercer paso contiene la declaración If-Then y que prueba Si el valor de la variable


calificación es mayor o igual a 60. En caso de ser verdadero Entonces se asigna el valor
“Aprobado” a la variable resultado.

El último paso es asignar el valor de la variable resultado a la celda B2.

Ahora observa el resultado al ejecutar esta macro.

2.11.2. La declaración If-Then-Else

Parece que todo funciona muy bien en el código anterior pero aún lo podemos mejorar
agregando la declaración Else de manera que tengamos una declaración de la forma If-
Then-Else. Esta variante nos permite hacer la siguiente evaluación: Si se cumple la
condición Entonces haga esto De lo contrario haga otra cosa.
Centro de informatica 44 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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 puede 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.

2.12. Acceder celdas con VBA

Existe un par de maneras para acceder las celdas de las hojas utilizando VBA. Podemos
utilizar el objeto Range y también podemos utilizar el objeto Cells. A continuación
revisaremos ambos objetos.

Centro de informatica 45 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

2.12.1. Seleccionar una celda

Si deseamos seleccionar la celda B5 podemos utilizar cualquiera de las dos instrucciones


siguientes:

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.

2.12.2. 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.

2.12.3. Establecer el valor de una celda

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

Centro de informatica 46 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

2.12.4. La repeticion controlada For-Next en VBA

En términos de programación, un bucle es una instrucción que nos permitirá ejecutar


repetidamente un conjunto de instrucciones hasta que se cumpla la condición que
hayamos especificado. Los bucles también son conocidos como ciclos.

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:

For inicialización de variable To límite


{Conjunto de instrucciones que se repetirán}
Next incrementar variable

Inicialización de variable: Ya que la instrucción For Next repite un conjunto de


instrucciones un número de veces específico, debemos inicializar una variable que irá
contando cada una de las repeticiones. Es común encontrar la instrucción escrita como
For i = 1 lo cual indica que la variable i llevará la cuenta de las repeticiones que
deseamos que inicien en 1.

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.

Ejemplo de un bucle For-Next

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:

Centro de informatica 47 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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.

Operadores lógicos en VBA

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

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.

En el siguiente ejemplo tengo la calificación de dos exámenes. Solamente si ambos


exámenes tienen una calificación mayor a 70, entonces el estudiante será aprobado, de
lo contrario la calificación será reprobatoria.

Centro de informatica 48 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

El código que se ejecutará al pulsar el botón será el siguiente:

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:

Centro de informatica 49 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Si alguna de las calificaciones es mayor a 70, entonces el estudiante será aprobado:

La única manera en que el operador lógico Or nos devuelva un valor falso es que
ninguna de las condiciones se cumpla. En el 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:

Funciones VBA

El lenguaje de programación VBA contiene un número considerable de funciones que


podemos utilizar para construir código en Excel. Cuando estás escribiendo código,
puede introducir la palabra VBA seguida de un punto y verás una lista desplegable de
estas funciones.

Centro de informatica 50 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

La siguiente tabla provee una descripción breve de algunas de las funciones VBA más
utilizadas.

FUNCIÓN DESCRIPCIÓN
Abs Regresa el valor absoluto de un número
Asc Obtiene el valor ASCII del primer caracter de una cadena de texto
CBool Convierte una expresión a su valor booleano
CByte Convierte una expresión al tipo de dato Byte
CCur Convierte una expresión al tipo de dato moneda (Currency)
CDate Convierte una expresión al tipo de dato fecha (Date)
CDbl Convierte una expresión al tipo de dato doble (Double)
CDec Convierte una expresión al tipo de dato decimal (Decimal)
Choose Selecciona un valor de una lista de argumentos
Chr Convierte un valor ANSI en valor de tipo texto
CInt Convierte una expresión en un dato de tipo entero (Int)
CLng Convierte una expresión en un dato de tipo largo (Long)
CreateObject Crea un objeto de tipo OLE
CStr Convierte una expresión en un dato de tipo texto (String)
CurDir Regresa la ruta actual
CVar Convierte una expresión en un dato de tipo variante (Var)
Date Regresa la fecha actual del sistema
DateAdd Agrega un intervalo de tiempo a una fecha especificada
DateDiff Obtiene la diferencia entre una fecha y un intervalo de tiempo especificado
DatePart Regresa una parte específica de una fecha
DateSerial Convierte una fecha en un número serial
DateValue Convierte una cadena de texto en una fecha
Day Regresa el día del mes de una fecha
Dir Regresa el nombre de un archivo o directorio que concuerde con un patrón
EOF Regresa verdadero si se ha llegado al final de un archivo
FileDateTime Regresa la fecha y hora de la última modificación de un archivo
FileLen Regresa el número de bytes en un archivo
FormatCurrency Regresa un número como un texto con formato de moneda
FormatPercent Regresa un número como un texto con formato de porcentaje
Hour Regresa la hora de un valor de tiempo
IIf Regresa un de dos partes, dependiendo de la evaluación de una expresión
InputBox Muestra un cuadro de diálogo que solicita la entrada del usuario
InStr Regresa la posición de una cadena de texto dentro de otra cadena
InStrRev Regresa la pocisión de una cadena de texto dentro de otra cadena pero
empezando desde el final
Int Regresa la parte entera de un número
IsDate Regresa verdadero si la variable es una fecha
IsEmpty Regresa verdadero si la variable está vacía
IsError Regresa verdadero si la expresión es un valor de error
IsNull Regresa verdadero si la expresión es un valor nulo
IsNumeric Regresa verdadero si la variable es un valor numérico
Join Regresa una cadena de texto creada al unir las cadenas contenidas en un
arrreglo
LCase Regresa una cadena convertida en minúsculas
Left Regresa un número específico de caracteres a la izquierda de una cadena
Centro de informatica 51 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Len Regresa la longisud de una cadena (en caracteres)


LTrim Remueve los espacios a la izquierda de una cadena
Mid Extrae un número específico de caracteres de una cadena de texto
Minute Regresa el minuto de una dato de tiempo
Month Regresa el mes de una fecha
MsgBox Despliega un cuadro de dialogo con un mensaje especificado
Now Regresa la fecha y hora actual del sistema
Replace Reemplaza una cadena de texto con otra
Space regresa una cadena de texto con el número de espacios especidicados
Split Regresa un arreglo formado for cadenas de texto que formaban una sola
cadena
Str Regresa la representación en texto de un número
Right Regresa un número especificado de carecteres a la derecha de una cadena
de texto
Rnd Regresa un número aleatorio entre 0 y 1
Round Redondea un número a una cantidad específica de decimales
RTrim Remueve los espacios en blanco a la derecha de una cadena de texto
Second Regresa los segundos de un dato de tiempo
StrComp Compara dos cadenas de texto
StrReverse Invierte el orden de los caracteres de una cadena
Time Regresa el tiempo actual del sistema
Timer Regresa el número de segundos desde la media noche
TimeValue Convierte una cadena de texto a un númer de serie de tiempo
Trim Remueve los espacios en blanco al inicio y final de una cadena de texto
TypeName Obtiene el nombre del tipo de dato de una variable
UCase Convierte una cadena de texto en mayúsculas
Val Regresa el número contenido en una cadena de texto
Weekday Regresa un número que representa un día de la semana
WeekdayName Regresa el nombre de un día de la semana
Year Obtiene el año de una fecha

Centro de informatica 52 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

3. FUNCIONES CREADAS POR EL USUARIO EN VBA

Las funciones creadas por el usuarios son líneas de código que permiten realizar una tarea en
Excel sin tener que estar colocando una formula, puesto que esta puede ser reemplazada por
una función que en el pasado se le atribuyo el nombre de subrutina y en la actualidad se le
conoce con el nombre de método.

3.1. Creando una función VBA

A diferencia de las subrutinas, las funciones VBA fueron diseñadas para retornar un valor.
A través de una función podemos agrupar código que nos ayudará a hacer algún cálculo
específico y obtener un resultado de regreso. Una función VBA también es conocida como
Función Definida por el Usuario, UDF por sus siglas en inglés, y una vez creada puede ser
utilizada de la misma manera que las funciones incluidas en Excel como la función SUMAR
o la función BUSCARV. Esto hace que las funciones VBA sean una herramienta muy
poderosa.

A continuación mostraré una función que toma un rango y regresa la suma de cada una de
sus celdas. Es importante insertar el código dentro de un Módulo tal como se muestra en el
artículo Su primera macro con VBA. Posteriormente iré explicando el detalle de la función.

3.2. La palabra clave Function

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.

Inmediatamente después de la palabra clave Function se debe especificar el nombre de la


función que en este ejemplo es MiSuma seguida de paréntesis que de manera opcional
pueden contener una lista de parámetros.

3.3. Parámetros de una función VBA

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. Puede incluir tantos
parámetros como sean necesarios y solamente debe recordar separarlos por una coma.

Centro de informatica 53 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Un parámetro no es más que una variable y por lo tanto puede observar que en el ejemplo
he definido la variable rango que será del tipo Range.

3.4. 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.

3.5. Cuerpo de la función VBA

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.

3.6. 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 el 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.

3.7. Probando la función VBA

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.

Centro de informatica 54 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

4. EVENTOS EN VBA

4.1. Concepto de evento

Los eventos en VBA son acciones del usuario al interactuar con el Excel, sea con el teclado
o el mouse permite 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.

4.2. Ejemplos de eventos en VBA

Algunos ejemplos de eventos en VBA son los siguientes:

WorkbookOpen: El usuario abre un libro de Excel.

WorkbookActivate: El usuario activa un libro de Excel.

SelectionChange: El usuario cambia la selección de celdas en una hoja.

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):

Centro de informatica 55 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

4.3. 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 lo libro.
Para comenzar, debe seleccionar el objeto Hoja2 del panel izquierdo del Editor de Visual
Basic y posteriormente seleccionar la opción Worksheet:

Esto creará automáticamente la subrutina para el evento SelectionChange pero podemos


fácilmente crear otro evento seleccionándolo de la lista de Procedimientos. Para este
ejemplo crearé el evento Activate:

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.

Centro de informatica 56 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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.

Centro de informatica 57 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

5. ARREGLOS EN VBA

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).

Para comprender mejor lo que es un arreglo observa la siguiente imagen:

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.

5.1. Crear un arreglo en VBA

Para crear un arreglo en VBA usar la siguiente instrucción:

Dim Paises(1 To 5) As String

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ú"

5.2. Acceder un elemento del arreglo

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)

El resultado de esta instrucción será el siguiente:

Centro de informatica 58 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Centro de informatica 59 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

6. FORMULARIOS EN EXCEL

6.1. Formulario en Excel

Un formulario en Excel es un interfaz grafico para el usuario interactue con el Excel tal
como lo realizaría en una aplicación directa, por ello este interfaz contiene elementos,
denominados controles que permiten una interaccon agil del usuario final con la solución a
un determinado problema.

6.2. Controles de formulario en Excel

Los controles de formulario en Excel son objetos que podemos colocar dentro de una hoja
de lo libro, o dentro de un formulario de usuario en VBA, y nos darán funcionalidad
adicional para interacsuar 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 Desarrollador
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á 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.

6.3. Los diferentes controles de formulario

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.

Barra de desplazamiento. Al hacer clic en las flechas se va desplazando la barra dentro de


un intervalo predefinido.

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.

Centro de informatica 60 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Casilla de verificación. Permite la selección o no selección de una opción.

Control de número. Nos ayuda a aumentar o disminuir un valor numérico.

Cuadro combinado. Es una combinación de un cuadro de texto con un cuadro de lista.

Cuadro de grupo. Agrupa varios controles dentro de un rectángulo.

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.

Etiqueta. Permite especificar un texto o breves instrucciones en el formulario.

6.3.1. Controles de formulario no disponibles en Excel 2013

Los controles de formulario han estado presentes por varias versiones de Excel, sin
embargo a partir de Excel 2013 existen algunos controles que ya no pueden ser
utilizados dentro de las hojas como lo son el Campo de texto, el Cuadro combinado de
lista y el Cuadro combinado desplegable, sin embargo podremos alcanzar funcionalidad
similar utilizando controles ActiveX.

6.3.2. Controles ActiveX en Excel

Los controles ActiveX son un tipo de controles que nos permiten agregar funcionalidad
de formularios a los 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.

6.3.3. Controles ActiveX y controles de formulario

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 Desarrollador.

La diferencia más significativa entre ambos es la manera en como podemos obtener


información de los controles al momento de interacsuar con el usuario. Los controles de
formulario solamente responderán después de que el usuario ha interacsuado con ellos,
Centro de informatica 61 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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.

6.4. Propiedades de los controles ActiveX

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 Desarrollador.

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 de
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.

Centro de informatica 62 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Esto mostrará el Editor de Visual Basic con una subrutina para el evento Click() donde
podremos escribir lo código.

En la lista desplegable de la derecha podemos observar la lista de eventos disponibles para


lo control ActiveX y para los cuales podemos escribir código VBA. Al seleccionar
cualquiera de dichos eventos se insertará una nueva subrutina que podremos utilizar. Son
precisamente la gran cantidad de eventos disponibles para los controles ActiveX lo que los
hace controles muy poderosos que podemos utilizar en los formularios.

6.5. Otra ventaja de los controles ActiveX en Excel

En la versión de Excel 2013 algunos controles de formulario han dejado de ser soportados
y no podemos utilizarlos más en las hojas. Ese es el caso del control de formulario conocido
como campo de texto. Sin embargo, dentro de la lista de controles ActiveX seguimos
teniendo disponible el control llamado Cuadro de texto lo cual puede hacer atractiva la
opción de utilizar controles ActiveX en Excel en lugar de controles de formulario

Cuadro de texto en Excel

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.

Centro de informatica 63 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Insertar un cuadro de texto en Excel

Para insertar un cuadro de texto en una hoja de Excel debe ir a la ficha Desarrollador
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 puede 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
Desarrollador.

Modificar valor del cuadro de texto

Si deseas colocar un texto dentro del cuadro de texto desde VBA puede utilizar una
instrucción como la siguiente:

TextBox1.Text = "Texto inicial"

Esto hará que el cuadro de texto se vea de la siguiente manera:

Centro de informatica 64 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Leer valor del cuadro de texto

Si quieres leer el valor del cuadro de texto y colocarlo en una celda podemos utilizar
la siguiente instrucción:

Range("A1").Value = TextBox1.Text

El valor de la celda será el mismo que el del cuadro de texto.

Si deseas limpiar el cuadro de texto puede utilizar la siguiente instrucción:

TextBox1.Text = ""

Cuadro de lista en VBA

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.

Dibujar un cuadro de lista

Para insertar un cuadro de lista en una hoja de Excel debemos ir a la ficha Desarrollador
y pulsar el botón Insertar para seleccionar la opción Cuadro de lista (control ActiveX).

Centro de informatica 65 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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 lista con los valores especificados en dicho rango:

Centro de informatica 66 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Elementos del cuadro de lista por código

Otra alternativa para indicar los elementos de un cuadro de lista es a través de código
VBA. Para ello puede 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.

Asociar una celda al cuadro de lista

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:

Centro de informatica 67 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Cuadro combinado en VBA

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 los formularios.

Para insertar un Cuadro combinado debemos ir a la ficha Desarrollador 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:

Agregar elementos al cuadro combinado

Si quiero que el Cuadro combinado muestre los valores del rango A1:A5, puedo
utilizar la propiedad ListFillRange donde puedo indicar este rango:

Centro de informatica 68 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Como resultado obtendré los valores de las celdas como elementos del Cuadro
combinado:

Diferencia con el cuadro de lista

Una diferencia importante entre el Cuadro combinado y el cuadro de lista es que el


primero permite que el usuario capsure 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 capsurar el día domingo dentro del cuadro de lista.

Si quieres evitar que el usuario introduzca sus propios valores existen dos opciones:

Utilizar el control ActiveX Cuadro de lista en lugar del Cuadro combinado

Centro de informatica 69 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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:

Asociar una celda al cuadro combinado

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 propiedad LinkedCell:

Casilla de verificación en VBA

Centro de informatica 70 | P á g i n a
Microsoft Excel 2013 Macros y programación 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.

El control ActiveX casilla de verificación

Para insertar este control debemos ir al comando Insertar y seleccionar la opción


Casilla de verificación (Control ActiveX).

Después de dibujar este control tendrás el siguiente resultado:

Propiedades de una casilla de verificación

La primera propiedad que desearas modificar de una casilla de verificación será su


propiedad Caption que es la que almacena el texto desplegado dentro del control
ActiveX. Por ejemplo, si deseo que el control muestre el texto “Mayor de edad” debo
hacer el cambio de la siguiente manera:

Centro de informatica 71 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

La otra propiedad de una casilla de verificación que tal vez quieras modificar será la
propiedad Value que de manera predeterminada tendrá el valor False lo cual indica que
el control se mostrará desmarcado. Si deseas que el control se muestre marcado de
manera predeterminada, debe poner el valor True en la propiedad Value:

Valor de una casilla de verificación

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:

Centro de informatica 72 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Private Sub CheckBox1_Click()


Range("C4").Value = CheckBox1.Value
End Sub

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:

If CheckBox1.Value = True Then Range("C4").Value = 1


If CheckBox1.Value = False Then Range("C4").Value = 0

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.

Botón de opción en VBA

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


Desarrollador.

Centro de informatica 73 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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

De manera predeterminada Excel colocará el botón de opción con un nombre como


OptionButton1. Para cambiar este texto debemos editar la propiedad Caption del botón
de opción.

El botón de opción en VBA

Para saber si un botón de opción ha sido seleccionado podemos acceder a su


propiedad Value de la siguiente manera:

Private Sub OptionButton1_Click()


If OptionButton1.Value = True Then MsgBox ("Has seleccionado la opción
Hombre")
End Sub

Centro de informatica 74 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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.

Un ejemplo desarrollado de formularios en Excel VBA

Los formularios en VBA no son más que un cuadro de diálogo de Excel donde
podremos colocar controles que nos ayudarán a solicitar información del usuario.
Podremos colocar cajas de texto, etiquetas, cuadros combinados, botones de comando,
etc.

Los formularios de Excel son creados desde el Editor de Visual Basic donde debemos
seleccionar la opción de menú Insertar y posteriormente la opción UserForm.

Inmediatamente se mostrar un formulario en blanco y de igual manera podrás observar


el Cuadro de herramientas:

Centro de informatica 75 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Si no ves el Cuadro de herramientas puede seleccionar el menú Ver y la opción Cuadro


de herramientas.

Agregar controles al formulario

Para agregar un control al formulario debe 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:

Centro de informatica 76 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

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 capsurada en ningún


lugar. El código que debemos utilizar es el siguiente:

Private Sub CommandButton2_Click()


Unload Me
End Sub

Para agregar este código puede hacer doble clic sobre el control. La sentencia “Unload
Me” cerrará el formulario.

Código para el botón Aceptar

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:

Private Sub CommandButton1_Click()


Worksheets("Hoja1").Range("A1").Value = Me.TextBox1.Value
Worksheets("Hoja1").Range("B1").Value = Me.TextBox2.Value
Worksheets("Hoja1").Range("C1").Value = Me.TextBox3.Value
End Sub

Al pulsar el botón Aceptar se transferirán los valores de los controles TextBox hacia las
celdas de la Hoja1.

Botón para abrir formulario

Para facilitar la apertura del formulario puede colocar un botón ActiveX en la hoja con
el siguiente código:

Private Sub CommandButton1_Click()


UserForm1.Show
End Sub

Probar el formulario

Observa cómo cada uno de los botones realiza la acción correcta al pulsarlos:

Centro de informatica 77 | P á g i n a
Microsoft Excel 2013 Macros y programación VBA

Centro de informatica 78 | P á g i n a