Está en la página 1de 78

A FORMACIÓN VBA

VBA PARA EXCEL

Documentación de uso exclusivo para formación 1


A FORMACIÓN VBA

1. Introducción

Las macros de Excel nos permiten automatizar tareas que realizamos cotidianamente de manera que
podamos ser más eficientes en nuestro trabajo. Una macro no es más que una serie de comandos o
instrucciones que permanecen almacenados dentro de Excel y que podemos ejecutar cuando sea
necesario y cuantas veces lo deseemos.

2. ¿Qué es una macro de Excel?

Si utilizas Excel frecuentemente es posible que en alguna ocasión te hayas encontrado ejecutando
una misma serie de acciones una y otra vez. Esas acciones que haces repetidas veces se podrían
automatizar con una macro.
Una macro es un conjunto de comandos que se almacena en un lugar especial de Excel de manera
que están siempre disponibles cuando los necesites ejecutar.
Por ejemplo, si todas las mañanas creas un informe de ventas y en ese informe siempre das el mismo
formato a los textos, se podría crear una macro para que lo haga automáticamente por ti.
Las macros se utilizan principalmente para eliminar la necesidad de repetir los pasos de aquellas
tareas que realizas una y otra vez.

3. Un lenguaje de programación

Las macros se escriben en un lenguaje


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.

Si te resulta muy complicado programar, Excel dispone de una


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

Documentación de uso exclusivo para formación 2


A FORMACIÓN VBA

4. Para qué sirve una macro en Excel

Una macro nos ayuda a automatizar aquellas tareas que hacemos repetidamente. Una macro es una
serie de instrucciones que son guardadas dentro de un archivo de Excel para poder ser ejecutadas
cuando lo necesitemos.

4.1. Automatización de tareas

Seguramente estás 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 nuestro trabajo
cotidiano al permitirnos utilizar mejor nuestro tiempo en el análisis de los datos y en la toma de
decisiones.

4.2. ¿Cómo se ve una macro en Excel?

Las macros son escritas en un lenguaje de ordenador conocido como VBA por sus siglas en inglés
(Visual Basic for Applications). Como cualquier otro lenguaje de programación debemos aprender a
utilizar los comandos que nos ayudarán a indicar a Excel lo que deseamos hacer con nuestros datos.

Aunque aprender el lenguaje VBA no es demasiado complicado, debemos dedicar tiempo en resolver
múltiples problemas en donde puedas llevar al límite el lenguaje VBA.

4.3. Creación de una macro

Las macros se programan con el Editor de Visual Basic el cual nos permitirá introducir el código con
las instrucciones que serán ejecutadas por la macro.
Recuerda que existe otro método que es utilizar la Grabadora de macros la cual irá grabando todas
las acciones que realicemos en Excel hasta que detengamos la grabación. Una vez grabada la macro
podremos “reproducir” de nuevo las acciones con tan solo un clic.

Documentación de uso exclusivo para formación 3


A FORMACIÓN VBA

5. Mostrar la ficha Programador

Si quieres escribir una nueva macro o ejecutar una macro previamente creada, entonces
debes habilitar la ficha Programador dentro de la cinta de opciones. Para mostrar esta ficha sigue los
siguientes pasos.

5.1. Mostrar la ficha Programador en Excel 2010

Haz clic en la ficha Archivo y elige la sección Opciones. Se


mostrará el cuadro de diálogo Opciones de Excel donde deberás
seleccionar la opción Personalizar cinta de opciones.

En el panel de la
derecha deberás
asegurarte de
seleccionar la
ficha Programador.

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


opciones.

5.2. Grupos de la ficha Programador

En el grupo Código tenemos los comandos necesarios para: iniciar el Editor de Visual Basic donde se
puede escribir directamente código VBA, ver la lista de macros disponibles para poder ejecutarlas o
eliminarlas, crear nuevas macros con la grabadora, etc.
El grupo Complementos nos 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 que nos
permite visualizar y/o cambiar las propiedades del documento.

Documentación de uso exclusivo para formación 4


A FORMACIÓN VBA

6. La grabadora de macros

Puedes crear una macro utilizando el lenguaje de programación VBA, pero el método más sencillo es
utilizar la grabadora de macros que guardará todos los pasos realizados para ejecutarlos
posteriormente.

6.1. La grabadora de macros en Excel 2010

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 puedes ir a la ficha Vista o a la
ficha Programador y seleccionar el comando Grabar macro.
FICHA VISTA

FICHA PROGRAMADOR

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

En el cuadro de texto Nombre de la macro deberás


colocar el nombre que identificará de manera única
a la macro que estamos por crear. De manera
opcional puedes asignar un método abreviado de
teclado el cual permitirá ejecutar la macro con la
combinación de teclas especificadas.

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.

Documentación de uso exclusivo para formación 5


A FORMACIÓN VBA

También puedes colocar una Descripción para la macro que vas a crear. Finalmente debes pulsar el
botón Aceptar para iniciar con la grabación de la macro. Al terminar de ejecutar las acciones
planeadas deberás pulsar el botón Detener grabación para completar la macro.

7. Crear una macro

En el siguiente ejemplo se muestra 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.

La macro que introducirá el nombre de


tres departamentos de una empresa y
posteriormente aplicará un formato
especial al texto. Para iniciar la
grabación haremos clic en el
comando Grabar macro que se
encuentra en la ficha Programador lo
cual mostrará el siguiente cuadro de
diálogo.
Escribimos el nombre de la macro y, si
así se desea, se puede especificar un
método abreviado (CTRL+d) para,
posteriormente, ejecutar la macro con
esa combinación de teclas. Una vez que
se pulsa el botón Aceptar se iniciará la
grabación.
Observa con detenimiento los pasos:
1. Escribe Finanzas en la celda A1.
2. Escribe Recursos humanos en la celda A2.
3. Escribe Informática en la celda A3.
4. Selecciona la celda A1 y aplica negrita.
5. Selecciona la celda A2 y aplica cursiva.
6. Selecciona la celda A3 y aplica subrayado.
Al terminar los pasos haremos clic en el botón Detener grabación y la macro habrá quedado
guardada.

Documentación de uso exclusivo para formación 6


A FORMACIÓN VBA

Para ejecutar la macro recién guardada seleccionaremos una nueva hoja de Excel y haremos clic en el
comando Macros. Al elegir el comando Macros se mostrará la lista de todas las macros existentes y
podremos elegir la que nos interese. 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 utilizamos
el método abreviado de teclado de la macro entonces se omitirá este último cuadro de diálogo.

8. 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 Programador


y pulsar el comando Grabar macro lo cual
mostrará el cuadro de diálogo donde asignaré un
nombre a la macro que vamos a crear.
Pulsa el botón Aceptar y se comenzarán a grabar
todas las acciones, así que debes actuar con
cuidado porque se grabará absolutamente todo.
Para la macro que estamos grabando solo
haremos lo siguiente: ir a la ficha Inicio y pulsar el
comando Color de fuente y seleccionar el
color rojo para la celda activa.
Una vez hecho esto detenemos la grabación de la macro.
Ahora que ya se ha generado la macro, haremos clic en el botón Macros que se encuentra en el
grupo Código de la ficha Programador. Se mostrará el cuadro de diálogo Macro que enlista todas las
macros que hemos creado.
Selecciona la macro recién creada y pulsa el botón Modificar. Esto abrirá el Editor de Visual Basic y
mostrará el código generado para la macro.

Observando este código podemos aprender varias cosas. Para empezar observamos que el objeto
Selection tiene una propiedad llamada Font que es la que hace referencia a la fuente de la celda o
rango seleccionado. A su vez, la propiedad Font tiene otra propiedad llamada Color que es la que
define el color rojo.
Aunque este ha sido un ejemplo muy sencillo, cuando tengas curiosidad o duda sobre qué objetos
utilizar al programar en VBA considera utilizar la Grabadora de macros para darte una idea del
camino a seguir.

Documentación de uso exclusivo para formación 7


A FORMACIÓN VBA

9. Establecer seguridad de macros

La seguridad es un tema importante al hablar de macros en Excel. Si abres algún archivo que
contenga una macro maliciosa puedes causar algún tipo de daño al equipo. De manera
predeterminada Excel no permite ejecutar macros automáticamente.
Sin embargo, si estás creando tus propias macros y deseas remover esta protección porque sabes
que no existe código malicioso, entonces puedes modificar la configuración para habilitar todas las
macros. Para hacerlo debes seguir los siguientes pasos.
Haz clic en la ficha Archivo y posteriormente en Opciones. Dentro del cuadro de diálogo mostrado
selecciona la opción Centro de confianza y posteriormente pulsa el botón Configuración del centro
de confianza. Se mostrará el cuadro de diálogo Centro de confianza.

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.

Documentación de uso exclusivo para formación 8


A FORMACIÓN VBA

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

10. Programando en VBA

Excel cuenta con VBA que es un lenguaje de programación que permite extender las habilidades del
programa para cubrir nuestros requerimientos. Utilizando VBA se pueden desarrollar nuevos
algoritmos para analizar la información o para integrar a Excel con alguna otra aplicación como
Microsoft Access.

10.1. Principios fundamentales

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.

10.2. Propiedades y Métodos

Supongamos que tenemos el objeto auto. Así es, un auto como el que manejamos todos los días para
ir al trabajo. Este auto tiene varias propiedades como son: marca, modelo, color, tipo de transmisión
las cuales ayudan a describir mejor al auto. También hay propiedades que indican su estado actual
como por ejemplo gasolina disponible, temperatura del aceite, velocidad, kilómetros recorridos
entre otras propiedades más. Podemos decir que las propiedades de un objeto nos ayudan a
describirlo mejor en todo momento.
Por otro lado tenemos los métodos de un objeto que en resumen son las acciones que podemos
realizar con dicho objeto. Por ejemplo, con nuestro auto podemos hacer lo siguiente: encenderlo,
avanzar, vuelta a la izquierda, vuelta a la derecha, reversa, detener, apagar, etc. Todas las acciones
que se pueden llevar a cabo con un objeto son conocidas como métodos.
Volviendo al terreno de Excel, el objeto Workbook tiene propiedades como ActiveSheet (Hoja
activa), Name (Nombre), ReadOnly (Solo Lectura), Saved (Guardado) y algunos de sus métodos son
Save (Guardar), Close (Cerrar), PrintOut(Imprimir), Protect (Proteger), Unprotect (Desproteger).
Será difícil mencionar todos los objetos de Excel y sus propiedades en esta publicación, pero lo
importante a recordar es que cada elemento de Excel está siempre representado por un objeto en
VBA y cada objeto tiene a su vez propiedades y métodos que nos permitirán trabajar con nuestros
datos.

Documentación de uso exclusivo para formación 9


A FORMACIÓN VBA

11. El Editor de Visual Basic

El Editor de Visual Basic, VBE por sus siglas en inglés, es un programa independiente a Excel pero
fuertemente relacionado a él porque es el programa que nos permite escribir código VBA que estará
asociado a las macros.
Existen al menos dos alternativas para abrir este editor, la primera de ellas es a través del
botón Visual Basic de la ficha Programador.

El segundo método es mediante la combinación de teclas 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 puedes visualizar este módulo puedes habilitarlo en
la opción de menú Ver y seleccionando la
opción Explorador de proyectos.

El Explorador de proyectos también nos ayuda a crear o


abrir módulos de código que se serán de gran utilidad
para reutilizar todas las funciones de código VBA que
vayamos escribiendo.

Dentro del Editor de Visual Basic puedes observar una ventana llamada Inmediato que está en la
parte inferior. Esta ventana es de mucha ayuda al momento de escribir código VBA porque permite
introducir instrucciones y observar el resultado inmediato. Además, desde el código VBA podemos

Documentación de uso exclusivo para formación 10


A FORMACIÓN VBA

imprimir mensajes hacia la ventana Inmediato con el comando Debug.Print de manera que podamos
depurar nuestro código. Si este panel no está visible, puedes mostrarlo también desde el menú Ver.
El área más grande en blanco es donde escribiremos el código VBA. Es en esa ventana en donde
escribimos y editamos las instrucciones VBA que dan forma a nuestras macros.
Es importante familiarizarnos con el Editor de Visual Basic antes de iniciar con la creación de macros.

12. Tu primera macro con VBA

Ahora que ya sabes lo que es el Editor de Visual Basic para Aplicaciones puedo mostrarte un ejemplo
muy sencillo para crear una macro. Lo primero que debes hacer es ir a la ficha Programador y hacer
clic en el botón Visual Basic.

12.1. Creación de un módulo

Una vez dentro del Editor debes hacer clic derecho sobre el título del proyecto y dentro del menú
seleccionar la opción Insertar y posteriormente Módulo. Opcionalmente puedes utilizar el botón
derecho del ratón en el panel Explorador de proyectos.

Documentación de uso exclusivo para formación 11


A FORMACIÓN VBA

Se creará la sección Módulos y dentro de la misma se mostrará el módulo recién creado. Puedes
saber que el módulo está abierto porque su nombre se muestra en el título entre corchetes.

Si el módulo no está abierto solamente deberás hacer doble clic sobre él. Posiciónate en el área de
código e introduce las siguientes instrucciones:

Antes de avanzar se explicara con detalle las instrucciones mostradas.

12.2. Subrutinas en VBA

El primer concepto que explicare es la instrucción Sub que es la abreviación de la palabra 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.
Las subrutinas nos ayudan a agrupar varias instrucciones de manera que podamos organizar
adecuadamente nuestro código. Una subrutina siempre tiene un nombre el cual debe ser
especificado justo después de la instrucción Sub y seguido por paréntesis.

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

Documentación de uso exclusivo para formación 12


A FORMACIÓN VBA

12.4. Ejecutar macro

Para probar nuestro 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 tu primera macro la cual muestra una ventana de mensajes y despliega el texto
especificado en la función MsgBox. Para guardar la macro recuerda que debes guardar el archivo
como Libro de Excel habilitado para macros, de lo contrario perderás el código del módulo creado.

La función MsgBox en VBA tiene 5 argumentos:

 Prompt (obligatorio). Es la cadena de texto que se mostrará como el mensaje dentro del
cuadro de diálogo. La longitud máxima es de 1024 caracteres, pero depende del tipo de
fuente utilizada.
 Buttons (opcional). Expresión numérica que proviene de la suma de ciertas constantes que
representan el tipo de botón e iconos a desplegar. Utilizaremos el símbolo más (+) para
añadir varios de estos atributos. Ej.: vbYesNo+vbCritical.
 Title (opcional). Cadena de texto que se mostrará como el título del cuadro de diálogo. Si se
omite, el título será el nombre de la aplicación.
 HelpFile (opcional). Cadena de texto con la ubicación del archivo de ayuda asociado al cuadro
de diálogo. Si se especifica este argumento, debe indicarse también Context.
 Context (opcional). Valor numérico asignado por el autor al tema de ayuda. Si se especifica
este argumento, debe indicarse también HelpFile.

Documentación de uso exclusivo para formación 13


A FORMACIÓN VBA

13. Utilizar comentarios en VBA

Utilizar comentarios dentro del código VBA es una de las mejores prácticas que debes adoptar desde
que inicias en el mundo de la programación en Excel. Los comentarios harán que tu código sea fácil
de entender.
Un comentario en VBA es una línea dentro del código que no será tomada en cuenta al momento de
realizar la ejecución. Los comentarios serán solo visibles al editar el código dentro del Editor de Visual
Basic.
Para agregar un comentario será suficiente con colocar una comilla sencilla (‘) al inicio de la línea.
Después de colocar la comilla sencilla debes escribir el comentario y al terminar de insertar la línea
Excel colocará automáticamente el texto en color verde indicando que ha reconocido la línea como
un comentario en VBA.

A veces, es muy importante ya que nos puede ahorrar mucho tiempo cuando más adelante nos
veamos en la necesidad de modificar el código. Además, si por alguna razón necesitas que otra
persona haga modificaciones al código le serán de gran ayuda los comentarios que hayas agregado.

Documentación de uso exclusivo para formación 14


A FORMACIÓN VBA

13.1. Comentar varías líneas de código

Como ya se ha mencionado, un comentario en VBA será omitido al momento de la ejecución. En


ocasiones cuando está haciendo pruebas con tu 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,
puedes seguir los siguientes pasos. En
primer lugar selecciona todas las líneas
de código que deseas convertir en
comentarios y posteriormente oprime
el botón Bloque con comentarios de
manera que Excel coloque todas las
comillas sencillas (‘) a cada línea de
código seleccionada.

De la misma manera se pueden eliminar las comillas sencillas si se pulsa


el botón Bloque sin comentarios que se encuentra justo al lado derecho
del botón Bloque con comentarios.

Si no puedes ver los botones anteriores en el Editor de Visual Basic es porque tienes oculta la barra
de herramientas de Edición. Actívala siguiendo cualquiera de los siguientes pasos:

1. Selecciona menú Ver, Barras de herramientas, Edición


2. Sitúa el puntero del ratón sobre la barra de menús o la barra de herramientas Estándar, pulsa
el botón derecho del ratón y selecciona Edición

Documentación de uso exclusivo para formación 15


A FORMACIÓN VBA

14. Objetos, propiedades y métodos

Los objetos en Excel (VBA) son cosas. Una celda es un objeto, una hoja es un objeto, un libro es un
objeto y de esta manera existen muchos más objetos en Excel. A esto lo conocemos como el modelo
de objetos de Excel.

Cada uno de los objetos de Excel tiene propiedades y métodos. Las propiedades son las
características del objeto y los métodos son las acciones que el objeto puede hacer.

14.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
ejemplo, una celda (Range) tiene las propiedades valor (Value) y dirección (Address) entre muchas
otras. Estas propiedades describen mejor al objeto.

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

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

Documentación de uso exclusivo para formación 16


A FORMACIÓN VBA

14.4. Ver todas las propiedades y métodos

Los objetos tienen muchas propiedades y métodos y a veces es difícil pensar que los llegaremos a
memorizar todos por completo. Sin embargo, el Editor de Visual Basic es de gran ayuda porque
justamente al momento de escribir nuestro código nos proporciona la lista completa de propiedades
y métodos para un objeto.

Esto sucede al momento de introducir el punto


después del nombre del objeto. Puedes distinguir
entre las propiedades y métodos porque tienen
iconos diferentes. En la imagen de arriba los
métodos son los que tienen el icono de color
verde.

Recuerda que los objetos son cosas en Excel y que a 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.

Otro objeto que se puede utilizar para referenciar celdas es Cells. Este tiene como primer argumento
el número de fila y como segundo argumento el número de columna. Ejemplo: Cells(5,2).Select.
Seleccionaría la celda B5.

El objeto Cells tiene como inconveniente que solo se puede especificar una celda. La ventaja que
ofrece es cuando necesitamos hacer un recorrido por varias celdas ya que será muy sencillo
especificar las filas y columnas utilizando una variable numérica. Por ejemplo, el código siguiente
permite multiplicar celdas desde la fila 4 hasta la 40 por celdas desde la columna 2 hasta la 10:

For i = 4 To 40
For j = 2 To 10
Cells(i, j).Value = i * j

Dar formato a textos o a celdas por medio de Macros es algo indispensable. Algunas de las
propiedades son:

FONT. Permite definir atributos de fuente como nombre, tamaño, color, etc.
INTERIOR. Permite especificar el color de relleno.
MERGECELLS. Permite combinar celdas.

Documentación de uso exclusivo para formación 17


A FORMACIÓN VBA

Los siguientes ejemplos de códigos muestran algunos de los formatos más habituales:

CÓDIGO FUNCIÓN
Range("A1").Font.Bold = True Aplica negrita en la celda A1
Range("A1").Font.Bold = False Desactiva la negrita en la celda A1
Range("A1:A10").Font.Bold = True Aplica negrita en el rango A1:A10
Range("A1").Select Selecciona la celda A1
Selection.Font.Italic = True Aplica cursiva a la celda activa
Range("A1").Font.Underline =
Subraya los datos de la celda A1
xlUnderlineStyleSingle
Range("A1").Font.Underline =
Realiza un doble subrayado
xlUnderlineStyleDouble
Range("A1").Font.Size = 16 Cambia el nombre y tamaño de la fuente de
Range("A1").Font.Name = "Arial" la celda A1
Range("A1").Font.ColorIndex = 5 Aplica color azul a los datos de la celda A1
Range("A1").Font.Color = RGB(255,0,0) Color rojo para los datos de la celda
Range("A1").Interior.ColorIndex = 3 Color rojo como relleno de la celda
Range("A1").Interior.Color = RGB(0, 0,255) Aplica color azul como relleno de la celda
Range("A1:B1").MergeCells = True Combina las celdas A1:B1
Range("A1:B1").MergeCells = False Descombina las celdas A1:B1

Para añadir bordes en VBA a una celda (o a un rango de celda) usaremos las propiedades:

Cells.BorderAround. Define los bordes exteriores de la celda.


Cells.Borders y añadiendo el atributo del borde que queremos entre paréntesis: xlEdgeBottom,
xlEdgeTop, xlEdgeLeft, and xlEdgeRight.

Los atributos comunes a estas dos propiedades son:


Color. Usaremos la sintáxis de RGB con la combinación de la siguiente triada de argumentos
núméricos: RGB (Rojo, Verde, Azul)
Grosor. xlHairline, xlThin, xlMedium y xlThick.
Estilo de línea. xlContinuous, xlDash, xlDashDot, xlDashDotDot, xlDot, xlDouble y xlSlantDashDot

Para alinear utilizaremos:


HorizontalAlignment. Alineación horizontal
VerticalAlignment. Alineación vertical

Los valores posibles de HorizontalAlignment son:

Izquierda (sangría): xlLeft Justificado: xlJustify


Centrado: xlCenter Centrar en la selección: xlCenterAcrossSelection
Derecha (sangría): xlRight Distribuido (sangría): xlDistributed
Rellenar: xlFill General: xlGeneral

Utilizaremos la propiedad: IndentLevel para establecer el nivel de sangría.

Documentación de uso exclusivo para formación 18


A FORMACIÓN VBA

Si la columna no tiene el suficiente ancho no se verá correctamente la alineación en horizontal


de los datos de la celda.

Podemos utilizar el objeto Columns para definir el ancho de la columna.


Columns(“B”).ColumnWidth=25 Establece un ancho de 25 puntos para la
columna B.
Columns(“B:D”).ColumnWidth=25 Establece un ancho de 25 puntos para las
columnas B, C y D.
Columns(“2”).AutoFit Autoajusta el ancho.

Los valores posibles de VerticalAlignment son:


Inferior: xlBottom
Centrado: xlCenter
Distribuido: xlDistributed
Justificado: xlJustify
Superior: xlTop

Documentación de uso exclusivo para formación 19


A FORMACIÓN VBA

Si la fila no tiene la suficiente altura no se verá correctamente la alineación en vertical de los


datos de la celda.

Podemos utilizar el objeto Rows para definir la altura de la fila.

Rows(3).RowHeight=25 Establece una altura de 25 puntos para la fila 3.


Rows(3:5).RowHeight=25 Establece una altura de 25 puntos para las filas 3, 4 y 5.
Rows(3).AutoFit Autoajusta la altura de la fila.

Como se ha comentado, la propiedad Clear borra el contenido y el formato de una celda o


rango de ellas. Otras posibilidades son:

ClearContents. Borra solo contenido y no los formatos:


ClearFormats. Borra solo formatos.
ClearComments. Borra solo los comentarios de la celda.
ClearNotes. Borra las notas.

14.5. Petición de información

Usamos la función InputBox de Excel para obtener la entrada del usuario. Es importante
recordar incluir validaciones de datos correctas, esto asegurará que la entrada de datos es lo
que el programa espera que sea.

La sintaxis será: Inputbox (Promt, Title, Default)


Prompt. Especifica la leyenda que mostrará la caja de mensajes.
Title. Especifica el título que llevará el cuadro de diálogo.
Default. Es el texto que mostrará la caja de texto.
El aspecto más importante de InputBox es que nos devuelve una cadena con lo que haya
ingresado el usuario en la caja de texto. Luego podemos realizar una tarea específica
dependiendo del valor resuelto.
Para “capturar” esa cadena debemos definir una variable mediante la siguiente sintaxis:
DIM nombrevariable As tipovariable.

Documentación de uso exclusivo para formación 20


A FORMACIÓN VBA

Donde tipovariable puede ser:


TIPO DE DATOS RANGO DE VALORES OBSERVACIONES
- 32768 a 32767
Integer o Uso en contadores, control de
(Entero) -2.147.483.648 a 2.147.483.647 según bucles etc.
versión
- 2147483648 a 2147483647
Long o Igual que integer pero admite
(Entero largo) -9,2E+18 a 9,2E+18 un rango más amplio
según versión
Hasta 6 decimales o más según
Single 38 38
- 3,4*10 a 3,4*10 versión. También admite
(Decimal simple)
enteros
Hasta 14 decimales o más
Double
- 1,79*10308 a 1,79*10308 según versión. También admite
(Decimal doble)
enteros
False es el valor
Boolean
True o False predeterminado y va asociado
(Booleano)
a cero
String 0 a 2*109 caracteres Texto de longitud variable
Variant
Los del tipo double para números o los Admite números enteros,
(Object en otras
del tipo string para texto decimales
versiones)

Podremos utilizar la función Offset para definir referencias relativas a celdas.


Ejemplo: Range(“B6”). Offset(0,1).Value = “Hola”. Introduce la cadena “Hola” en la celda
situada a la derecha de la celda B6.
El primer número indica el número de filas a desplazarse y el segundo el de columnas. Si los
números son negativos, se desplaza hacia arriba (filas) y hacia la izquierda (columnas).

15. 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. Este contiene:

 La Configuración de toda la aplicación y las opciones.


 Métodos para objetos de nivel superior, como, por ejemplo, ActiveCell y ActiveSheet.

Documentación de uso exclusivo para formación 21


A FORMACIÓN VBA

15.1. Acceder a objetos inferiores

Para tener acceso a los objetos que están por debajo del objeto Application podemos utilizar el
punto. El punto nos ayuda a navegar por la jerarquía hacia un nivel inferior. Observa lo que se
muestra en el Editor de Visual Basic al colocar un punto después del objeto Application:

Por ejemplo, si deseamos poner en negritas el texto de la celda A1 debemos llegar al objeto
Range el cual nos dará acceso a modificar la propiedad Bold de la siguiente manera:

Aunque esta línea de código puede tomarnos un poco de tiempo en escribirla, 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
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

15.2. Objetos predeterminados

Existe una funcionalidad intrínseca de VBA conocida como objetos predeterminados la cual
nos permite omitir la escritura de algunos objetos y aun así tener un código funcional. Por
ejemplo, en la sentencia mostrada previamente podemos omitir el objeto Application y tener
nuestro código funcionando correctamente:

Inclusive podemos omitir los objetos ActiveWorkbook y ActiveSheet sabiendo que el código se
ejecutará siempre sobre el libro activo y la hoja que esté activa al momento de la ejecución:

Documentación de uso exclusivo para formación 22


A FORMACIÓN VBA

15.3. 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 nuestro código VBA claro y legible.

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

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

Documentación de uso exclusivo para formación 23


A FORMACIÓN VBA

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

16.3. 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 observas dentro de los paréntesis indica el índice del objeto Workbook dentro
de la colección de objetos Workbooks. De manera predeterminada el índice 1 será para el libro
de Excel que contiene el código VBA y a partir de ahí la numeración será de acuerdo al orden
en que hayamos abierto otros archivos. Si disponemos del libro de macros personal
Personal.xls ese será el primero númerodel índice. Si conocemos el nombre del libro podemos
utilizarlo en lugar del índice y tener una instrucción como la siguiente:

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

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

16.4. Acceder 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"

Documentación de uso exclusivo para formación 24


A FORMACIÓN VBA

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

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.

Podremos indicar el número de hojas a añadir, en qué posición, incluir un nombre.


Worksheets.Add.Name = "Febrero" Añade una nueva hoja de nombre “Febrero”
Worksheets.Add(After:=Worksheets("Febr Añade una nueva hoja de nombre “Marzo”
ero")).Name = "Marzo" después de la hoja “Febrero”
Worksheets.Add(Before:=Worksheets("Feb Añade una nueva hoja de nombre “Enero”
rero")).Name = "Enero" antes de la hoja “Febrero”
Worksheets.Add Añade una nueva hoja de nombre “Diciembre”
(After:=Worksheets(Worksheets.Count)).N al final de todas las hojas
ame = "Diciembre"
Worksheets.Add Añade tres nuevas hoja al final de todas
After:=Worksheets(Worksheets.Count),
Count:=3

También podremos realizar otras operaciones tales como cambiar el nombre, mover o copiar
una hoja.

Worksheets("Hoja16").Name = Modifica el nombre de la Hoja16 a Octubre


"Octubre"
Worksheets("Marzo").Move Mueve la hoja Marzo a continuación de la hoja
After:=Worksheets("Enero") Enero
Worksheets("Enero").Copy Copia la hoja Enero antes de la hoja Diciembre
before:=Worksheets("Diciembre")

Documentación de uso exclusivo para formación 25


A FORMACIÓN VBA

17. El objeto Application en VBA

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

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ás frecuentemente instrucciones que comienzan
especificando el objeto Application:

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

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

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

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

Documentación de uso exclusivo para formación 26


A FORMACIÓN VBA

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

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

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

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 7 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 tu usuario en el equipo. Además la


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

Documentación de uso exclusivo para formación 27


A FORMACIÓN VBA

18.1. 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,
crea una macro y especifica que deseas guardarla en el Libro de macros personal.

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

Documentación de uso exclusivo para formación 28


A FORMACIÓN VBA

18.2. El libro de macros personal en el Editor de Visual Basic

Una vez que el libro de macros personal ha sido creado lo podrás ver dentro del Editor de
Visual Basic:

Por debajo del nombre VBAProject (PERSONAL.XLSB) encontrarás la carpeta Módulos y dentro
de ella encontrarás todas las macros que se hayan guardado en el libro de macros personal
organizadas en módulos. Si deseas eliminar algún módulo solamente deberás hacer clic
derecho sobre él y seleccionar la opción Quitar Módulo.

19. Tipos de errores en VBA

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

19.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 nuestro código.

Los errores de sintaxis en VBA surgen cuando intentamos insertar algún operador o alguna
instrucción de VBA en un lugar que no le corresponde. Observa la siguiente imagen:

Documentación de uso exclusivo para formación 29


A FORMACIÓN VBA

En este ejemplo he intentado utilizar la palabra Next en lugar del tipo de dato de la variable. Es
por eso que el Editor de Visual Basic muestra un mensaje de error de compilación. La
palabra Next es parte del lenguaje VBA pero la he utilizado en el lugar inapropiado y por eso
obtengo el error.

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

Estos son solo unos ejemplos de errores de sintaxis que podemos cometer pero como lo he
mencionado antes, el Editor de Visual Basic nos alertará sobre dichos errores y podremos
detectarlos y corregirlos.

Documentación de uso exclusivo para formación 30


A FORMACIÓN VBA

19.2. Errores en tiempo de ejecución

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

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

 Intentar realizar una operación no permitida por el ordenador. Por ejemplo una
división entre cero o intentar sumar una cadena de texto y un valor Double.
 Intentar utilizar una librería de código que no está accesible en ese momento.
 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 nuestro código pero
eso será tema de otro artículo.

Lo importante por ahora es estar consiente de estos dos tipos de errores en VBA y saber que
debemos estar atentos para corregir todos los errores de sintaxis de nuestro código y
minimizar al máximo los posibles errores de ejecución.

20. Depurar macros en Excel

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

Documentación de uso exclusivo para formación 31


A FORMACIÓN VBA

20.1. 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 está por ejecutarse.

Para continuar con la depuración debemos pulsar de nuevo la tecla F8 hasta llegar al final del
código. Cada vez que pulsamos la techa F8 suceden las siguientes cosas:

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


2. Si Excel encuentra un error en la instrucción, entonces enviará un mensaje de error.
3. Por el contrario, si no hubo error en dicha instrucción, entonces Excel marcará en
amarillo la siguiente instrucción a ejecutar.

Documentación de uso exclusivo para formación 32


A FORMACIÓN VBA

De esta manera podemos ejecutar cada una de las líneas de nuestro código VBA y validar que
no exista error alguno. Regresando a nuestro ejemplo, al momento de llegar a la tercera
instrucción y pulsar la tecla F8, Excel enviará el siguiente mensaje de error:

El mensaje nos advierte que el objeto no admite esa propiedad o método y se está refiriendo
al objeto Range en donde el método Value no está escrito de manera correcta y por lo tanto el
depurador de VBA no reconoce dicha propiedad. Pulsa el botón Aceptar para cerrar el cuadro
de diálogo y poder corregir el error en el código.

Ya hemos hablado sobre los diferentes tipos de errores en VBA y la depuración nos ayudará a
probar nuestro código y a encontrar la gran mayoría de los errores que podamos tener. Es
probable que al principio veas a la depuración como un trabajo muy exhaustivo pero cuando
tus programas y macros comiencen a crecer entonces verás todos los beneficios que nos da
la depuración de macros en Excel.

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

Documentación de uso exclusivo para formación 33


A FORMACIÓN VBA

21.1. 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 estoy declarando la variable con el nombre “x” y estoy indicando que
será del tipo Integer. “Declarar una variable” significa avisar a Excel sobre la existencia de
dicho repositorio para guardar información. En la segunda instrucción asigno el valor 6 a la
variable “x”.

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

21.3. Variables de tipo texto

Una variable de tipo texto se declara con la palabra clave String. En el siguiente código
declararé la variable libro y posteriormente le asignaré un valor.

Dim libro As String

libro = "Programación en Excel"

Documentación de uso exclusivo para formación 34


A FORMACIÓN VBA

21.4. 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 le asignamos 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 nuestros programas.

22. 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, debes colocar un botón de comando dentro de una hoja de Excel
y después hacer doble clic sobre él para introducir el código.

Documentación de uso exclusivo para formación 35


A FORMACIÓN VBA

22.1. Unir cadenas de texto

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

El resultado de este código es el siguiente:

22.2. 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 se han especificado los 7 caracteres a la izquierda de la cadena de texto. El


resultado es el siguiente:

Documentación de uso exclusivo para formación 36


A FORMACIÓN VBA

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

22.4. La función Len

La función Len nos ayuda a conocer la longitud de una cadena de texto, es decir, la cantidad de
caracteres que conforman a una cadena.

La función Len contará cada uno de los caracteres de la cadena y devolverá un número:

Documentación de uso exclusivo para formación 37


A FORMACIÓN VBA

22.5. 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 primera letra “E” dentro de la cadena que contiene el valor
“Macros Excel”.

Es importante resaltar que la función InStr es sensible a mayúsculas y minúsculas. Observa que
se ha especificado buscar la letra “e” (minúscula) y el resultado de la función es el siguiente:

La función InStr encontró la letra “e” en la posición número 11 comenzando desde la izquierda.
Si en lugar de la letra “e” busco la letra “E” (minúscula), la función InStr devolverá el valor 8. Si
no encuentra la letra, 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 = "Macros Excel"

InStr (cadena, "Excel")

Por ejemplo, al buscar la palabra “Excel” dentro de la cadena de texto obtendremos como
resultado la posición número 8 ya que en esa posición comienza la palabra “Excel”.

Documentación de uso exclusivo para formación 38


A FORMACIÓN VBA

22.6. La función Mid

Con la función Mid podemos extraer una subcadena de otra cadena de texto con tan solo
especificar la posición inicial de la subcadena y su longitud. Observa el siguiente ejemplo:

La función Mid se moverá a la posición 15 de la cadena y a partir de ahí contará 7 caracteres y


devolverá como resultado la cadena comprendida entre ambas posiciones. En nuestro
ejemplo, la palabra “función” 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.

23. 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 condición. Esta
declaración la podemos traducir como Si-Entonces y la utilizaremos en situaciones donde
necesitamos realizar la siguiente evaluación: Si se cumple la condición Entonces haz esto.

Documentación de uso exclusivo para formación 39


A FORMACIÓN VBA

23.1. 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 haz doble clic sobre él para colocar el siguiente código:

 En el primer paso se hace la declaración de las variables que se utilizarán en el resto


del código.
 En el segundo paso se asigna 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 5. 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.

23.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 haz esto De lo contrario haz otra cosa.

La declaración Else en VBA nos permite indicar otro bloque de instrucciones que se deben
ejecutar en caso de que la condición sea falsa. De esta manera podemos tomar una acción
determinada en caso de que la condición se cumpla o en caso de que no se cumpla. Ahora se

Documentación de uso exclusivo para formación 40


A FORMACIÓN VBA

modificará el ejemplo anterior para asegurarse de que en caso de que la condición de


calificación sea inferior a 5 el resultado sea “Suspenso”.

En el tercer paso puedes observar la declaración If-Then-Else. Ahora observa el efecto de este
cambio al momento de ejecutar el código:

Observa 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 tema.

23.3. Acceder A celdas con VBA

Existe un par de maneras para acceder las celdas de nuestras hojas utilizando VBA. Podemos
utilizar los objetos Range o Cells.

23.4. Seleccionar una celda

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


siguientes:

Range("B5").Select Cells(5, 2).Select

Documentación de uso exclusivo para formación 41


A FORMACIÓN VBA

El objeto Cells tiene como primer argumento el número de fila y como segundo argumento el
número de columna.

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

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

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

24. El bucle 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.

Documentación de uso exclusivo para formación 42


A FORMACIÓN VBA

25. La instrucción For-Next

El bucle For-Next es una de las instrucciones más útiles al programar en VBA. La sintaxis de
esta instrucción es la siguiente:

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.

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

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.

Documentación de uso exclusivo para formación 43


A FORMACIÓN VBA

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

26.1. 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 7, entonces el
estudiante será aprobado, de lo contrario la
calificación será negativa.

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

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 7, entonces
tendremos un resultado diferente:

Documentación de uso exclusivo para formación 44


A FORMACIÓN VBA

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.

26.2. 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 7 para que el estudiante sea aprobado, entonces podemos
modificar el código de la siguiente manera:

Si alguna de las calificaciones es mayor a 7, 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 nuestro ejemplo, el
alumno estará suspenso solamente cuando ambas
calificaciones sean menores a 7:

Podemos concluir que al evaluar dos condiciones, los operadores And y Or se comportarán de
la siguiente manera:

Documentación de uso exclusivo para formación 45


A FORMACIÓN VBA

27. Eventos en VBA

Los eventos en VBA nos ayudan a monitorear las acciones que realizan los usuarios en Excel de
manera que podamos controlar la acción a tomar cuando el usuario hace algo específico como
el activar una hoja o hacer clic en alguna celda.

Documentación de uso exclusivo para formación 46


A FORMACIÓN VBA

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

27.2. Un ejemplo de eventos en VBA

El ejemplo que crearemos en esta ocasión es para activar un cuadro de diálogo con el mensaje
“Bienvenido a la Hoja 2” y que se mostrará cuando activemos la Hoja2 de nuestro libro. Para
comenzar, debes seleccionar el objeto Hoja2 del panel izquierdo del Editor de Visual Basic y
posteriormente seleccionar la opción Worksheet:

Documentación de uso exclusivo para formación 47


A FORMACIÓN VBA

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 se debe insertar el código para
que se muestre el mensaje dentro del cuadro de diálogo:

Ahora que se ha definido una acción asociada al evento Activate de la Hoja2, el mensaje se
mostrará cada vez que se active la Hoja2.

Los eventos en VBA son de mucha utilidad porque nos ayudan a controlar el momento exacto
en que deseamos ejecutar algún bloque de código al iniciarse alguna acción por el usuario.

Documentación de uso exclusivo para formación 48


A FORMACIÓN VBA

28. 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 imagen


de la derecha:

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.

28.1. Crear un arreglo en VBA

Para crear un arreglo en VBA utilizamos 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ú"

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

Documentación de uso exclusivo para formación 49


A FORMACIÓN VBA

29. Fecha y hora en VBA

Los valores de fecha y hora en VBA pueden ser manipulados de diversas maneras. En esta
ocasión aprenderemos cómo obtener el año, mes y día en VBA y cómo hacer operaciones
básicas con fechas.

Para realizar estos ejemplos debes colocar un control de botón en una hoja de Excel y colocar
las líneas de código mostradas.

29.1. Obtener la fecha y hora actual

Para obtener la fecha actual en VBA utilizamos la función Date y para obtener la hora actual
usamos Now.

En este ejemplo las variables fechaActual y horaActual contienen la fecha y horas actuales
respectivamente.

29.2. Obtener el año, mes y día

En el ejemplo anterior se ha
obtenido la fecha actual en la
variable fechaActual, sin embargo,
si se desea mostrar solamente el
año se puede utilizar la función
Year.

El resultado de este código es el siguiente:

Al trabajar con fechas podremos obtener el mes utilizando la


función Month y para obtener el día la función Day.

Documentación de uso exclusivo para formación 50


A FORMACIÓN VBA

29.3. Obtener la hora, minuto y segundo

Para obtener la hora de la variable horaActual utilizaremos la función Hour de la siguiente


manera:

El resultado es el siguiente:

Para obtener el minuto y el segundo podremos utilizar las funciones Minute y Second.

29.4. Convertir una cadena de texto en fecha

Ya hemos visto que la función Date nos devuelve la fecha actual, pero podemos utilizar otra
función que nos permitirá convertir una cadena de texto en una fecha. La función que
utilizaremos para este será la función DateValue.

Documentación de uso exclusivo para formación 51


A FORMACIÓN VBA

El único argumento de la función DateValue es la cadena de texto que convertirá en fecha. El


resultado de esta conversión es el siguiente:

29.5. Sumar días a una fecha

Para sumar días a una fecha en VBA utilizaremos la función DateAdd. Esta función nos permite
especificar la cantidad exacta de días a sumar:

Observa el resultado de sumar 5 días a la fecha original:

El primer argumento de la función DateAdd determina la unidad de tiempo que será sumada.
En este ejemplo especifiqué “d” para indicar días, pero podemos utilizar otras medidas de
tiempo:

 “yyyy” para años


 “m” para meses
 “d” para días
 “ww” para semanas

Las fechas y horas son un tipo de dato muy común con el que seguramente tendrás que
trabajar al crear tus macros. Es importante que aprendas a utilizar las funciones VBA que nos
permitirán manipular adecuadamente la información.

Documentación de uso exclusivo para formación 52


A FORMACIÓN VBA

30. 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, puedes
introducir la palabra VBA seguida de un punto y verás una lista desplegable de estas funciones.

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

FUNCIÓN DESCRIPCIÓN

Abs Devuelve el valor absoluto de un número.

Asc Obtiene el valor ASCII del primer carácter 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 Devuelve la ruta actual.

CVar Convierte una expresión en un dato de tipo variante (Var).

Date Devuelve la fecha actual del sistema.

Documentación de uso exclusivo para formación 53


A FORMACIÓN VBA

FUNCIÓN DESCRIPCIÓN

DateAdd Agrega un intervalo de tiempo a una fecha especificada.

DateDiff Obtiene la diferencia entre una fecha y un intervalo de tiempo


especificado.

DatePart Devuelve una parte específica de una fecha.

DateSerial Convierte una fecha en un número.

DateValue Convierte una cadena de texto en una fecha.

Day Devuelve el día del mes de una fecha.

Dir Devuelve el nombre de un archivo o directorio que concuerde con un


patrón.

EOF Devuelve verdadero si se ha llegado al final de un archivo.

FileDateTime Devuelve la fecha y hora de la última modificación de un archivo.

FileLen Devuelve el número de bytes en un archivo.

FormatCurrency Devuelve un número como un texto con formato de moneda.

FormatPercent Devuelve un número como un texto con formato de porcentaje.

Hour Devuelve la hora de un valor de tiempo.

IIf Devuelve 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 Devuelve la posición de una cadena de texto dentro de otra cadena.

InStrRev Devuelve la posición de una cadena de texto dentro de otra cadena pero
empezando desde el final.

Int Devuelve la parte entera de un número.

IsDate Devuelve verdadero si la variable es una fecha.

IsEmpty Devuelve verdadero si la variable está vacía.

Documentación de uso exclusivo para formación 54


A FORMACIÓN VBA

FUNCIÓN DESCRIPCIÓN

IsError Devuelve verdadero si la expresión es un valor de error.

IsNull Devuelve verdadero si la expresión es un valor nulo.

IsNumeric Devuelve verdadero si la variable es un valor numérico.

Join Devuelve una cadena de texto creada al unir las cadenas contenidas en
un arreglo.

LCase Devuelve una cadena convertida en minúsculas.

Left Devuelve un número específico de caracteres a la izquierda de una


cadena.

Len Devuelve la longitud 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 Devuelve el minuto de una dato de tiempo.

Month Devuelve el mes de una fecha.

MsgBox Despliega un cuadro de dialogo con un mensaje especificado.

Now Devuelve la fecha y hora actual del sistema.

Replace Reemplaza una cadena de texto con otra.

Space Devuelve una cadena de texto con el número de espacios especificados.

Split Devuelve un arreglo formado for cadenas de texto que formaban una
sola cadena.

Str Devuelve la representación en texto de un número.

Right Devuelve un número especificado de caracteres a la derecha de una


cadena de texto.

Rnd Devuelve un número aleatorio entre 0 y 1.

Round Redondea un número a una cantidad específica de decimales.

Documentación de uso exclusivo para formación 55


A FORMACIÓN VBA

FUNCIÓN DESCRIPCIÓN

RTrim Remueve los espacios en blanco a la derecha de una cadena de texto.

Second Devuelve los segundos de un dato de tiempo.

StrComp Compara dos cadenas de texto.

StrReverse Invierte el orden de los caracteres de una cadena.

Time Devuelve el tiempo actual del sistema.

Timer Devuelve el número de segundos desde la media noche.

TimeValue Convierte una cadena de texto a un número 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 Devuelve el número contenido en una cadena de texto

Weekday Devuelve un número que representa un día de la semana

WeekdayName Devuelve el nombre de un día de la semana.

Year Obtiene el año de una fecha.

31. Creando una función VBA

Como hemos visto anteriormente, una subrutina nos ayuda a organizar y agrupar las
instrucciones en nuestro código. Seguidamente veremos cómo crear una función VBA, la cual
es similar a una subrutina excepto por una cosa.

A diferencia de las subrutinas, las funciones VBA fueron diseñadas para devolver 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.

Documentación de uso exclusivo para formación 56


A FORMACIÓN VBA

A continuación se creará una función que toma un rango y devuelve 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
tema Tu primera macro con VBA. Posteriormente se explicará el detalle de la función.

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

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

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

31.3. Valor de retorno

Como se ha mencionado al principio, la característica principal de una función es que puede


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

Documentación de uso exclusivo para formación 57


A FORMACIÓN VBA

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

31.5. Retornando el valor

Una vez que se han hecho los cálculos necesarios, es importante devolver el valor. Para
hacerlo es indispensable igualar el nombre de la función al valor o variable que contiene el
valor que se desea devolver. En nuestro ejemplo, la variable resultado es la que contiene la
suma de todas las celdas por lo que se iguala con el nombre de la función en la línea MiSuma =
resultado.

31.6. Probando la función VBA

Finalmente se probará la función VBA 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
devolverá 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 SUMA, 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.

32. Controles de formulario en Excel

Los controles de formulario en Excel son objetos que podemos colocar dentro de una hoja de
nuestro libro, o dentro de un formulario de usuario en VBA, y nos darán funcionalidad
adicional para interactuar mejor con los usuarios y tener un mejor control sobre la
información.

Documentación de uso exclusivo para formación 58


A FORMACIÓN VBA

Podemos utilizar estos controles para ayudar a los usuarios a seleccionar elementos de una
lista predefinida o permitir que el usuario inicie una macro con tan solo pulsar un botón.
Los controles de formulario en Excel se encuentran dentro de la ficha Programador dentro del
grupo Controles. Solamente pulsa el botón Insertar y observarás cada uno de ellos:

Justo por debajo de los controles de formulario podrás observar el grupo de controles
ActiveX pero sus diferencias y similitudes las discutiremos en otro artículo. Por ahora nos
enfocaremos solamente en los controles de formulario.

32.1. ¿Cómo insertar un control de formulario en Excel?

Para insertar cualquiera de los controles de formulario debes seleccionarlo del menú
desplegable y hacer clic sobre la hoja de Excel arrastrando el borde para “dibujar” el contorno
del control. Observa este procedimiento.

Documentación de uso exclusivo para formación 59


A FORMACIÓN VBA

32.2. 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.
 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.

32.3. Controles de formulario no disponibles en Excel 2010

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

33. Controles ActiveX en Excel

Los controles ActiveX son un tipo de controles que nos permiten agregar funcionalidad de
formularios a nuestros libros de Excel. Existe otro tipo de controles que es conocido
como Controles de formulario y que tienen una funcionalidad similar, sin embargo existen
algunas diferencias entre ambos tipos.

33.1. 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 Programador.

Documentación de uso exclusivo para formación 60


A FORMACIÓN VBA

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


información de los controles al momento de interactuar con el usuario. Los controles de
formulario solamente responderán después de que el usuario ha interactuado con ellos, como
después de haber pulsado el botón. Por el contrario, los controles ActiveX responden de
manera continua a las acciones del usuario lo cual nos permite realizar acciones como cambiar
el tipo de puntero del mouse que se muestra al colocar el puntero del ratón sobre el botón.

Documentación de uso exclusivo para formación 61


A FORMACIÓN VBA

33.2. 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 Programador.

Antes de poder ver las propiedades de un control ActiveX debemos pulsar el botón Modo
Diseño el cual nos permitirá seleccionar el control y posteriormente ver sus propiedades. Cada
tipo de control ActiveX mostrará una ventana de Propiedades con sus propias características. A
continuación un ejemplo de la ventana Propiedades para un botón de comando ActiveX:

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

Documentación de uso exclusivo para formación 62


A FORMACIÓN VBA

Los controles ActiveX no tienen asignada una macro explícitamente sino que podemos asignar
código VBA para cada evento del control.
Un evento de un control ActiveX puede
ser el evento de hacer clic sobre el
control, el evento de hacer doble clic, el
evento de obtener el foco sobre el
control ActiveX, entre otros eventos más.
Para asignar código a uno de los eventos
de un control ActiveX solamente
debemos hacer clic derecho sobre él y
seleccionar la opción Ver código.

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

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


nuestro 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 nuestros formularios.

33.4. Otra ventaja de los controles ActiveX en Excel

En la versión de Excel 2010 algunos controles de formulario han dejado de ser soportados y no
podemos utilizarlos más en nuestras 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.

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

Documentación de uso exclusivo para formación 63


A FORMACIÓN VBA

34.1. Insertar un cuadro de texto en Excel

Para insertar un cuadro de texto en una hoja de Excel debes ir a la ficha Programador y hacer
clic en el botón Insertar y entonces hacer clic sobre la opción Cuadro de texto de la sección
Controles ActiveX.

El puntero del ratón se convertirá en una cruz la cual nos permitirá dibujar el cuadro de
texto sobre la hoja de Excel. Una vez dibujado el cuadro de texto podrás hacer clic derecho
sobre él y seleccionar la opción Propiedades para conocer el nombre que la ha sido asignado.

También puedes ver las propiedades de cualquier control seleccionándolo primero y pulsando
el botón Propiedades que se encuentra dentro del grupo Controles de la ficha Programador.

34.2. Modificar valor del cuadro de texto

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

TextBox1.Text = "Texto inicial"

Documentación de uso exclusivo para formación 64


A FORMACIÓN VBA

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

34.3. 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 puedes utilizar la siguiente instrucción:

TextBox1.Text = ""

Documentación de uso exclusivo para formación 65


A FORMACIÓN VBA

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

35.1. Dibujar un cuadro de lista

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

35.2. 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 se ha 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:

Documentación de uso exclusivo para formación 66


A FORMACIÓN VBA

35.3. 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 puedes incluir el siguiente código en el evento Workbook_Open:

De esta manera cuando se abra el libro se agregarán las opciones al cuadro de lista llamado
ListBox1.

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

Documentación de uso exclusivo para formación 67


A FORMACIÓN VBA

36. 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 nuestros formularios.

Para insertar un Cuadro combinado debemos ir a la ficha Programador y dentro del botón
Insertar pulsar el comandoCuadro combinado (control ActiveX):

Después de dibujar el Cuadro combinado tendrás un resultado como el siguiente:

Documentación de uso exclusivo para formación 68


A FORMACIÓN VBA

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

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

36.2. 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 capture una opción diferente a las mostradas en la lista. En el ejemplo
anterior no aparecía el día domingo como parte de los elementos, sin embargo puedo capturar
el día domingo dentro del cuadro de lista.

Documentación de uso exclusivo para formación 69


A FORMACIÓN VBA

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


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

36.3. 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 propiedadLinkedCell:

Documentación de uso exclusivo para formación 70


A FORMACIÓN VBA

37. Casilla de verificación en VBA

Una casilla de verificación es un control ActiveX que podemos utilizar para permitir que un
usuario marque una opción y por lo tanto poder conocer sus preferencias al verificar dicho
valor en código VBA.

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

Documentación de uso exclusivo para formación 71


A FORMACIÓN VBA

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

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

Documentación de uso exclusivo para formación 72


A FORMACIÓN VBA

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

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.

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

Documentación de uso exclusivo para formación 73


A FORMACIÓN VBA

38.1. El botón de opción en Excel

Para insertar un botón de opción hacemos clic en el comando Insertar de la ficha


Programador.

Un solo botón de opción no hace mucho sentido, así que siempre agregamos dos o
más botones de opción para permitir que usuario haga una selección de cualquiera de ellos.

Una vez que se ha agregado un segundo botón de opción podrás notar que al seleccionar uno
de ellos se desmarcarán todos los demás.

Documentación de uso exclusivo para formación 74


A FORMACIÓN VBA

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

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

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.

39. Formularios en VBA

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

Documentación de uso exclusivo para formación 75


A FORMACIÓN VBA

39.1. Crear un formulario en Excel

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:

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


herramientas.

Documentación de uso exclusivo para formación 76


A FORMACIÓN VBA

39.2. Agregar controles al formulario

Para agregar un control al formulario debes seleccionarlo del Cuadro de herramientas y


dibujarlo sobre el formulario. En mi formulario he agregado etiquetas y cuadros de texto así
como un par de botones de comando:

El texto de las etiquetas se modifica en la propiedad llamada Caption. Para realizar este cambio
solamente selecciona el control y se mostrará la ventana de Propiedades donde podrás hacer
la modificación. De igual manera el texto desplegado en los botones de comando se modifica
en su propiedad Caption.

39.3. Código para el botón Cancelar

El botón cancelar cerrará el formulario sin guardar la información capturada en ningún lugar.
El código que debemos utilizar es el siguiente:

Private Sub CommandButton2_Click()

Unload Me

End Sub

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

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

Documentación de uso exclusivo para formación 77


A FORMACIÓN VBA

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.

39.5. Botón para abrir formulario

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

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

39.6. Probar el formulario

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

Documentación de uso exclusivo para formación 78