Anda di halaman 1dari 99

INTRODUCCION

Qu es una macro de Excel?


Si utilizas Excel frecuentemente es posible que en alguna ocasin te hayas encontrado
ejecutando una misma serie de acciones una y otra vez. Esas acciones que haces repetidas
veces se podran automatizar con una macro.
Una macro es un conjunto de comandos que se almacena en un lugar especial de Excel de
manera que estn siempre disponibles cuando los necesites ejecutar.
Por ejemplo, si todas las maanas creas un reporte de ventas y en ese reporte siempre das el
mismo formato a los textos, se podra crear una macro para que lo haga automticamente
por ti. Las macros se utilizan principalmente para eliminar la necesidad de repetir los pasos
de aquellas tareas que realizas una y otra vez.

Un lenguaje de programacin
Las macros se escriben en un lenguaje de computadora especial que es conocido como
Visual Basic for Applications (VBA). Este lenguaje permite acceder a prcticamente todas
las funcionalidades de Excel y con ello tambin ampliar la funcionalidad del programa.

Pero no te preocupes si no eres un programador de computadoras, Excel provee de una


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

Aunque si aceptas el desafo y te introduces en el mundo de la programacin VBA pronto


te convertirs en un Ninja de Excel. Vers que crear una macro en Excel no es tan
complicado y ser una manera fcil y rpida de eliminar esas tareas repetitivas que todos
los das te quitan minutos preciados de tu tiempo.

Para qu sirve una macro en Excel


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.

Automatizacin de tareas
Seguramente ests familiarizado con procesos de automatizacin en el mbito industrial.
Un ejemplo muy claro son las plantas ensambladoras de automviles donde existen robots
que han sustituido tareas que antes eran hechas por humanos. La automatizacin 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 anlisis de los datos y
en la toma de decisiones.

Cmo se ve una macro en Excel?


Las macros son escritas en un lenguaje de computadora conocido como VBA por sus siglas
en ingls (Visual Basic for Applications). Como cualquier otro lenguaje de computadora
debemos aprender a utilizar los comandos que nos ayudarn a indicar a Excel lo que
deseamos hacer con nuestros datos.

Aprender el lenguaje VBA no es nada complicado y se puede lograr fcilmente. Lo que


toma un poco ms de tiempo es pulir nuestras habilidades de programacin. Lo que quiero
decir con esto es que para ser un buen programador de macros debes dedicar tiempo en
resolver mltiples problemas en donde puedas llevar al lmite el lenguaje VBA.

Creacin de una macro


Las macros se crean con el Editor de Visual Basic el cual nos permitir introducir el cdigo
con las instrucciones que sern ejecutadas por la macro.
Existe otro mtodo que es utilizar la Grabadora de macros la cual ir grabando todas las
acciones que realicemos en Excel hasta que detengamos la grabacin. Una vez grabada la
macro podremos reproducir de nuevo las acciones con tan solo un clic.
Ahora que ya sabes para qu sire una macro en Excel puedes dar los primeros pasos en
este camino utilizando el tutorial Introduccin a las macros.

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.

Mostrar la ficha Programador en Excel 2010


Haz clic en la ficha Archivo y elige la seccin Opciones. Se mostrar el cuadro de dilogo
Opciones de Excel donde debers seleccionar la opcin Personalizar cinta de opciones.

En el panel de la derecha debers asegurarte de seleccionar la ficha Programador.

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

Grupos de la ficha Programador

El grupo Cdigo tienes los comandos necesarios para iniciar el Editor de Visual Basic
donde se puede escribir directamente cdigo VBA. Tambin nos permitir ver la lista de
macros disponibles para poder ejecutarlas o eliminarlas. Y no podramos olvidar mencionar
que en este grupo se encuentra el comando Grabar macro el cual nos permite crear una
macro sin necesidad de saber sobre programacin en VBA.
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 verificacin, botones
de opcin entre otros ms que sern de gran utilidad para ampliar la funcionalidad de Excel.
El grupo XML permite importar datos de un archivo XML as como opciones tiles para
codificar archivos XML. Finalmente el grupo Modificar solamente contiene el comando
Panel de documentos.
Aunque pueden parecer intimidantes los comandos de la ficha Programador con el paso
del tiempo te irs familiarizando poco a poco con cada uno de ellos.

La grabadora de macros
Puedes crear una macro utilizando el lenguaje de programacin VBA, pero el mtodo ms
sencillo es utilizar la grabadora de macros que guardar todos los pasos realizados para
ejecutarlos posteriormente.

La grabadora de macros en Excel 2010


La grabadora de macros almacena cada accin que se realiza en Excel, por eso es
conveniente planear con antelacin los pasos a seguir de manera que no se realicen
acciones innecesarias mientras se realiza la grabacin. Para utilizar la grabadora de macros
debes ir a la ficha Programador y seleccionar el comando Grabar macro.

Al pulsar el botn se mostrar el cuadro de dilogo Grabar macro.

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


manera nica a la macro que estamos por crear. De manera opcional puedes asignar un
mtodo abreviado de teclado el cual permitir ejecutar la macro con la combinacin de
teclas especificadas.

La lista de opciones Guardar macro en permite seleccionar la ubicacin 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 sesin actual de Excel.
Libro de macros personal. Esta opcin permite utilizar la macro en cualquier momento sin
importar el libro de Excel que se est utilizando.

Tambin puedes colocar una Descripcin para la macro que vas a crear. Finalmente debes
pulsar el botn Aceptar para iniciar con la grabacin de la macro. Al terminar de ejecutar
las acciones planeadas debers pulsar el botn Detener grabacin para completar la
macro.

Crear una macro


En esta ocasin mostrar cmo crear una macro en Excel utilizando la grabadora de
macros. La macro ser un ejemplo muy sencillo pero permitir ilustrar el proceso bsico de
creacin.
Voy a crear una macro que siempre introduzca el nombre de tres departamentos de una
empresa y posteriormente aplique un formato especial al texto. Para iniciar la grabacin
debes ir al comando Grabar macro que se encuentra en la ficha Programador lo cual
mostrar el siguiente cuadro de dilogo.

Observa cmo he colocado un nombre a la macro y adems he especificado el mtodo


abreviado CTRL+d para ejecutarla posteriormente. Una vez que se pulsa el botn Aceptar
se iniciar la grabacin. Observa con detenimiento los pasos.

Al terminar los pasos se pulsa el comando Detener grabacin y la macro habr quedado
guardada. Para ejecutar la macro recin guardada seleccionar una nueva hoja de Excel y
seleccionar el comando Macros.

Al pulsar el comando Macros se mostrar la lista de todas las macros existentes y de las
cuales podrs elegir la ms conveniente. Al hacer clic sobre el comando Ejecutar se
realizarn todas las acciones almacenadas en la macro y obtendrs el resultado esperado.
Por supuesto que si utilizas el mtodo abreviado de teclado de la macro entonces se omitir
este ltimo cuadro de dilogo.

El cdigo de la Grabadora de macros


Una manera muy interesante de descubrir y aprender ms sobre cdigo VBA es analizar el
cdigo 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 dilogo donde asignar un nombre a la macro que estoy por
crear.

Pulsa el botn Aceptar y se comenzarn a grabar todas las acciones, as que debes actuar
con cuidado porque se grabar absolutamente todo. Para la macro que estoy grabando solo
har lo siguiente: ir a la ficha Inicio y pulsar el comando Color de fuente y seleccionar
el color rojo para la celda activa.

Una vez hecho esto debo detener la grabacin de la macro y una alternativa para hacerlo es
pulsar el icono que se muestra en la barra de estado.

Ahora que ya hemos generado la macro, pulsa el botn Macros que se encuentra en el
grupo Cdigo de la ficha Programador. Se mostrar el cuadro de dilogo Macro que
enlista todas las macros que hemos creado.

Selecciona la macro recin creada y pulsa el botn Modificar. Esto abrir el Editor de
Visual Basic y mostrar el cdigo generado para la macro.

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

Establecer seguridad de macros


La seguridad es un tema importante al hablar de macros en Excel. Si abres algn archivo
que contenga una macro maliciosa puedes causar algn tipo de dao al equipo. De manera
predeterminada Excel no permite ejecutar macros automticamente.
Sin embargo, si ests creando tus propias macros y deseas remover esta proteccin porque
sabes que no existe cdigo malicioso, entonces puedes modificar la configuracin 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 dilogo mostrado
selecciona la opcin Centro de confianza y posteriormente pulsa el botn Configuracin
del centro de confianza. Se mostrar el cuadro de dilogo Centro de confianza.

Dentro de la seccin Configuracin de macros selecciona alguna de las opciones


disponibles.

Deshabilitar todas las macros sin notificacin. Deshabilita las macros y permite
ejecutar solamente aquellas que estn almacenadas en un lugar confiable. Los
lugares confiables se configuran en la seccin Ubicaciones de confianza del mismo
cuadro de dilogo.

Deshabilitar todas las macros con notificacin. Muestra una alerta de seguridad
advirtiendo sobre la intencin de ejecutar una macro de manera que se pueda decidir
si se desea ejecutar. Esta es la opcin predeterminada de Excel.
Deshabilitar todas las macros excepto las firmadas digitalmente. Solamente se
podrn ejecutar las macros que estn firmadas digitalmente.
Habilitar todas las macros. Permite ejecutar todas las macros sin enviar alguna
notificacin al usuario. Esta opcin es til si se ejecutan mltiples macros
totalmente confiables. Esta opcin es la que corre los mayores riesgos al ejecutar
una macro de una fuente desconocida.

Una vez seleccionada la opcin deseada se debe pulsar el botn Aceptar para hacer los
cambios permanentes.

PRINCIPIOS BASICOS
Programando en VBA
Excel 2010 es una de las herramientas de software ms poderosas para el manejo, anlisis y
presentacin de datos. Aun y con todas sus bondades, en ocasiones Excel no llega a suplir
algunas necesidades especficas de los usuarios.
Afortunadamente Excel cuenta con VBA que es un lenguaje de programacin que permite
extender las habilidades del programa para cubrir nuestros requerimientos. Utilizando
VBA se pueden desarrollar nuevos algoritmos para analizar la informacin o para integrar a
Excel con alguna otra aplicacin como Microsoft Access.

Principios fundamentales
La programacin en VBA puede ser un tanto misteriosa para la mayora de los usuarios de
Excel, sin embargo una vez que se comprenden los principios bsicos de programacin en
VBA se comenzarn a crear soluciones robustas y efectivas.
El primer concepto importante a entender es que cada elemento de Excel es representado en
VBA como un objeto. Por ejemplo, existe el objeto Workbook que representa a un libro
de Excel. Tambin existe el objeto Sheet que representa una hoja y el objeto Chart para un
grfico.
El segundo concepto importante a entender es que cada uno de estos objetos tiene
propiedades y mtodos. Para explicar mejor este concepto utilizar una analoga.

Propiedades y Mtodos
Supongamos que tenemos el objeto auto. As es, un auto como el que manejamos todos los
das para ir al trabajo. Este auto tiene varias propiedades como son: marca, modelo, color,
tipo de transmisin las cuales ayudan a describir mejor al auto. Tambin hay propiedades
que indican su estado actual como por ejemplo gasolina disponible, temperatura del aceite,
velocidad, kilmetros recorridos entre otras propiedades ms. Podemos decir que las
propiedades de un objeto nos ayudan a describirlo mejor en todo momento.
Por otro lado tenemos los mtodos 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 mtodos.

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 mtodos son Save (Guardar), Close (Cerrar), PrintOut (Imprimir), Protect (Proteger),
Unprotect (Desproteger).
Ser dificil mencionar todos los objetos de Excel y sus propiedades en esta publicacin,
pero lo importante a recordar en este ocasin es que cada elemento de Excel est siempre
representado por un objeto en VBA y cada objeto tiene a su vez propiedades y mtodos
que nos permitirn trabajar con nuestros datos.

El Editor de Visual Basic


El Editor de Visual Basic, VBE por sus siglas en ingls, es un programa independiente a
Excel pero fuertemente relacionado a l porque es el programa que nos permite escribir
cdigo VBA que estar asociado a las macros.
Existen al menos dos alternativas para abrir este editor, la primera de ellas es a travs del
botn Visual Basic de la ficha Programador.

El segundo mtodo para abrir este programa es, en mi opinin, el ms sencillo y rpido y
que es a travs del atajo de teclado: ALT + F11. El Editor de Visual Basic contiene varias
ventanas y barras de herramientas.

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


VBA creado para el libro actual y adems muestra las hojas pertenecientes a ese libro de

Excel. Si por alguna razn no puedes visualizar este mdulo puedes habilitarlo en la opcin
de men Ver y seleccionando la opcin Explorador de proyectos.

El Explorador de proyectos tambin nos ayuda a crear o abrir mdulos de cdigo que se
sern de gran utilidad para reutilizar todas las funciones de cdigo 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 cdigo
VBA porque permite introducir instrucciones y observar el resultado inmediato. Adems,
desde el cdigo VBA podemos imprimir mensajes hacia la ventana Inmediato con el
comando Debug.Print de manera que podamos depurar nuestro cdigo. Si no puedes
observar esta ventana puedes mostrarla tambin desde el men Ver.
El rea ms grande en blanco es donde escribiremos el cdigo 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
creacin de macros.

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 botn Visual Basic.

Creacin de un mdulo
Una vez dentro del Editor debes hacer clic derecho sobre el ttulo del proyecto y dentro del
men seleccionar la opcin Insertar y posteriormente Mdulo.

Se crear la seccin Mdulos y dentro de la misma se mostrar el mdulo recin creado.


Puedes saber que el mdulo est abierto porque su nombre se muestra en el ttulo entre
corchetes.

Si el mdulo no est abierto solamente debers hacer doble clic sobre l. Posicinate en el
rea de cdigo e introduce las siguientes instrucciones:

Antes de avanzar explicar con detalle las instrucciones mostradas.

Subrutinas en VBA
El primer concepto que explicare es la instruccin Sub que es la abreviacin de la palabra
subrutina. Una subrutina no es ms que un conjunto de instrucciones que se ejecutarn
una por una hasta llegar al final de la subrutina que est especificado por la instruccin End
Sub.

Las subrutinas nos ayudan a agrupar varias instrucciones de manera que podamos
organizar adecuadamente nuestro cdigo. Una subrutina siempre tiene un nombre el cual
debe ser especificado justo despus de la instruccin Sub y seguido por parntesis.

La funcin MsgBox en VBA


La subrutina que acabamos de crear para este ejemplo solamente tiene una instruccin
dentro la cual hace uso de la funcin MsgBox. Esta funcin 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 ms sencilla de la funcin MsgBox la cual solamente tiene un solo
argumento que es precisamente el mensaje que necesitamos mostrar en pantalla al usuario.

Ejecutar macro
Para probar nuestro cdigo bastar con pulsar el botn Ejecutar que se encuentra dentro de
la barra de herramientas.

En cuanto se pulsa el botn se ejecutar el cdigo recin 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 funcin MsgBox. Para guardar la macro recuerda que debes
guardar el archivo como Libro de Excel habilitado para macros, de lo contrario perders
el cdigo del mdulo creado.

Utilizar comentarios en VBA


Utilizar comentarios dentro del cdigo VBA es una de las mejores prcticas que debes
adoptar desde que inicias en el mundo de la programacin en Excel. Los comentarios harn
que tu cdigo sea fcil de entender.
Un comentario en VBA es una lnea dentro del cdigo que no ser tomada en cuenta al
momento de realizar la ejecucin. Los comentarios sern solo visibles por ti al momento de
editar el cdigo dentro del Editor de Visual Basic.
Para agregar un comentario ser suficiente con colocar una comilla sencilla () al inicio de
la lnea. Despus de colocar la comilla sencilla debes escribir el comentario y al terminar de
insertar la lnea Excel colocar automticamente el texto en color verde indicando que ha
reconocido la lnea como un comentario en VBA.

He visto en ms de una ocasin que muchas personas no tienen esta buena prctica al
programar en VBA y el problema se presentar cuando pase el tiempo y tengan que
modificar el cdigo pero ya no recuerden la lgica implementada ni lo que significa cada
una de las variables.
Aunque pareciera una actividad aburrida, creme que te ahorrar mucho tiempo cuando te
veas en la necesidad de modificar tu cdigo. Adems, si por alguna razn necesitas que otra
persona haga modificaciones al cdigo le sern de gran ayuda los comentarios que hayas
agregado.

Comentar varas lneas de cdigo


Como ya lo mencion, un comentario en VBA ser omitido al momento de la ejecucin.
En ocasiones cuando est haciendo pruebas con tu cdigo VBA deseas evitar que ciertas
lneas de cdigo se ejecuten y una manera de hacer es comentando dichas lneas.
Para comentar varias lneas de cdigo en una macro, sin la necesidad de estar colocando la
comilla sencilla al principio de cada una de las lneas, puedes seguir los siguientes pasos.
En primer lugar selecciona todas las lneas de cdigo que deseas convertir en comentarios y
posteriormente oprime el botn Bloque con comentarios de manera que Excel coloque
todas las comillas sencillas () a cada lnea de cdigo seleccionada.

De la misma manera puedes remover las comillas sencillas si pulsas el botn Bloque sin
comentarios que se encuentra justo al lado derecho del botn Bloque con comentarios.

Si no puedes ver los botones anteriores en el Editor de Visual Basic es porque seguramente
tienes oculta la barra de herramientas de Edicin. Para mostrarla, haz clic derecho sobre un
rea libre del men superior y seleccionar la opcin Edicin.

Objetos, propiedades y mtodos


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 ms objetos en Excel. A esto lo
conocemos como el modelo de objetos de Excel.

Cada uno de los objetos de Excel tiene propiedades y mtodos. Las propiedades son las
caractersticas del objeto y los mtodos son las acciones que el objeto puede hacer.

Propiedades de un objeto
Si una persona fuera un objeto de Excel sus propiedades seran el color de sus ojos, el color
de su cabello, su estatura, su peso. De la misma manera, un objeto de Excel tiene
propiedades por ejemplos, una celda (Range) tiene las propiedades valor (Value) y
direccin (Address) entre muchas otras. Estas propiedades describen mejor al objeto.

Mtodos de un objeto
Siguiendo con el ejemplo de una persona, si fuera un objeto de Excel sus mtodos seran
correr, caminar, hablar, dormir. Los mtodos 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 mtodos activar (Activate), calcular (Calculate),
borrar (Clear) entre muchos ms.

Utilizando las propiedades y los mtodos


Para acceder a las propiedades y mtodos de un objeto lo hacemos a travs de una
nomenclatura especial. Justo despus del nombre del objeto colocamos un punto seguido
del nombre de la propiedad o del mtodo. 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 mtodo
Clear de la siguiente manera:
Range("A1").Clear

Ver todas las propiedades y mtodos


Los objetos tienen muchas propiedades y mtodos y a veces es difcil 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 cdigo nos proporciona la
lista completa de propiedades y mtodos para un objeto.

Esto sucede al momento de introducir el punto despus del nombre del objeto. Puedes
distinguir entre las propiedades y mtodos porque tienen iconos diferentes. En la imagen de
arriba los mtodos son los que tienen el icono de color verde.
Recuerda, los objetos son cosas en Excel y sus caractersticas las llamamos propiedades
las cuales nos ayudan a definir al objeto. Los mtodos son las acciones que cada objeto
puede realizar.

Navegando el modelo de objetos


Excel tiene un modelo de objetos el cual es una jerarqua de todos los objetos que podemos
utilizar desde el lenguaje VBA. En la parte superior de la jerarqua se encuentra el objeto
Application y todos los dems objetos estarn por debajo de l.

Acceder a objetos inferiores


Para tener acceso a los objetos que estn por debajo del objeto Application podemos utilizar
el punto. El punto nos ayuda a navegar por la jerarqua hacia un nivel inferior. Observa lo
que se muestra en el Editor de Visual Basic al colocar un punto despus 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 lnea de cdigo puede tomarnos un poco de tiempo en escribirla, pero describe
por completo la jerarqua de los objetos.

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

Inclusive podemos omitir los objetos ActiveWorkbook y ActiveSheet sabiendo que el


cdigo se ejecutar siempre sobre el libro activo y la hoja que est activa al momento de la
ejecucin:

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 razn para hacer esto
es porque da una claridad absoluta sobre la ubicacin exacta de cada objeto lo cual ayudar
a evitar cualquier mala interpretacin del cdigo.
Si decides no hacer uso de los objetos predeterminados sino que deseas utilizar las
referencias completas hacia cada objeto an hay una manera de ahorrar algunas lneas de
cdigo. Supongamos las siguientes instrucciones en VBA:

Podemos ahorrar algunas palabras de este cdigo 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 cdigo VBA claro y legible.

Las colecciones de objetos Workbooks y


Worksheets
Un objeto en VBA puede contener otro objeto y ese objeto a su vez puede contener otro
objeto y as sucesivamente. La raz de todos los objetos en VBA se encuentra en el objeto
Application el cual a su vez contiene las colecciones de objetos Workbooks y
Worksheets.

El objeto Workbook 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 ms de una hoja lo cual
significa que un objeto Workbook puede contener ms de un objeto Worksheet.
Ya que no hay lmite en el nmero de hojas que puede tener un libro, se volvera
complicado organizar esta relacin entre los objetos Workbook y Worksheet y por esta
razn se crearon las colecciones de objetos. De esta manera un objeto Workbook tiene
asociada una coleccin 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 coleccin de objetos Workbooks la cual incluir todos los
objetos Workbook de los libros de Excel que abramos en nuestro cdigo VBA.

Abrir un libro de Excel


Para abrir un libro de Excel en VBA podemos utilizar el mtodo Open del objeto
Workbooks de la siguiente manera:
Application.Workbooks.Open Filename:="C:Libro1.xlsx"

Esta instruccin abrir el archivo ubicado en C:Libro1.xlsx y lo agregar a la coleccin


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

Hacer referencia a un libro en VBA


Una vez que hemos abierto los archivos que necesitamos podremos hacer referencia a cada
uno de ellos a travs de la coleccin de objetos Workbooks de la siguiente manera:
Application.Workbooks(1).Activate

El nmero que observas dentro de los parntesis indica el ndice del objeto Workbook
dentro de la coleccin de objetos Workbooks. De manera predeterminada el ndice 1 ser
para el libro de Excel que contiene el cdigo VBA y a partir de ah la numeracin ser de
acuerdo al orden en que hayamos abierto otros archivos.
Si conocemos el nombre del libro podemos utilizarlo en lugar del ndice y tener una
instruccin como la siguiente:
Application.Workbooks("Libro1.xlsx").Activate

La coleccin de objetos Workbooks nos permitir acceder a todos los libros que hayamos
abierto dentro de nuestra aplicacin VBA.

Acceder las hojas de un libro


De igual manera podemos acceder las hojas de cualquier libro a travs de su coleccin de
objetos Worksheets. Esta coleccin tambin puede ser accedida por el ndice de cada una
de las hojas del libro:
Application.Workbooks(1).Worksheets(1).Range("A1").Value = "Hola"

Esta instruccin accede a la hoja con el ndice 1 y coloca el valor Hola Mundo en la
celda A1. Tambin podemos acceder a una hoja a travs de su nombre en caso de que lo
conozcamos:
Application.Workbooks(1).Worksheets("Hoja1").Range("A1").Value = "Hola"

Agregar una nueva hoja


A travs de la coleccin de objetos Worksheets podemos crear nuevas hojas en un libro.
Observa la siguiente instruccin:
Worksheets.Add

Observa que no he iniciado la instruccin 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
mtodo 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 coleccin de libros que se han abierto y Worksheets que es
la coleccin de hojas que pertenecen a un determinado libro.

El objeto Application en VBA


Cuando escribimos macros con VBA trabajamos con mltiples objetos que pueden ejecutar
nuestras instrucciones adecuadamente, pero el objeto Application est en el nivel ms alto
de la jerarqua 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 aplicacin. Muchas de las opciones que podemos modificar
con el objeto Application son las mismas que encontramos en la ficha Archivo dentro del
cuadro de dilogo Opciones de Excel.
Ya que el objeto Application es el objeto principal dentro de VBA todos los dems objetos
derivan de l. Es por ello que encontrars frecuentemente instrucciones que comienzan
especificando el objeto Application:
Application.ActiveSheet.Name = "Reporte de Ventas"

Sin embargo, VBA nos permite, en la mayora de los casos, omitir la escritura del objeto
Application ya que supone que todos los dems objetos provienen de l. De esta manera la
siguiente instruccin tambin es vlida.
ActiveSheet.Name = "Reporte de Ventas"

Colecciones del objeto Application


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

Es muy importante mencionar que la coleccin Sheets se referir al libro de Excel que se
encuentre activo en el momento de ejecutar esta instruccin. Las colecciones Columns y
Rows nos permitirn acceder a las columnas y filas de la hoja activa.
Application.Columns(5).Select
Application.Rows(5).Select

Propiedades del objeto Application


El objeto Application tiene muchas propiedades como para mencionarles todas en esta
ocasin, pero algunas de las ms importantes son las siguientes:

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


activo.

ActiveSheet. Regresa un objeto Worksheet que representa a la hoja que est


actualmente seleccionada (activa).
ActiveCell. Devuelve un objeto Range que representa la celda activa dentro de la
hoja activa en el libro de Excel activo.
ThisWorkbook. Esta propiedad devolver un objeto Workbook que representar el
libro que contiene la macro que est siendo ejecutada.

Mtodos del objeto Application


Uno de los mtodos ms utilizados del objeto Application es el mtodo InputBox que nos
ayuda a mostrar un cuadro de dilogo que solicita al usuario el ingreso de algn valor.
Observa la siguiente lnea de cdigo:
Impresiones = Application.InputBox(Prompt:="Nmero
Title:="Imprimir", Default:=1, Type:=1)

de

impresiones:",

Esta instruccin har que Excel muestre un cuadro de dilogo pidiendo al usuario ingresar
el nmero de impresiones que desea realizar. El nmero ingresado por el usuario se
guardar en la variable Impresiones.

El libro de macros personal en Excel


Cuando creamos una macro en Excel podemos guardarla en el libro actual o podemos
guardarla en el libro de macros personal. La ventaja de guardar una macro en el libro de
macros personal es que nuestra macro estar disponible para cualquier libro.

El libro de macros personal


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 podrs encontrar el archivo
personal.xlsb en la siguiente carpeta:
C:\Usuarios\[Usuario]\App\Data\Roaming\Microsoft\Excel\XLSTART

En la ruta que observas arriba [Usuario] es el nombre de tu usuario en el equipo. Adems la


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

Creacin del libro de macros personal


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 vers un mensaje preguntando si deseas guardar los
cambios realizados al libro de macros personal, para lo cual debers pulsar el botn
Guardar.

El libro de macros personal en el Editor de Visual Basic


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

Por debajo del nombre VBAProject (PERSONAL.XLSB) encontrars la carpeta Mdulos y


dentro de ella encontrars todas las macros que se hayan guardado en el libro de macros
personal organizadas en mdulos.
Si deseas eliminar algn mdulo solamente debers hacer clic derecho sobre l y
seleccionar la opcin Quitar Mdulo.

Tipos de errores en VBA


No todas las cosas funcionan bien a la primera y seguramente te encontrars con errores al
programar en Excel. Existen dos tipos de errores en VBA: errores de sintaxis y errores en
tiempo de ejecucin.

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 ms fciles 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 cdigo.
Los errores de sintaxis en VBA surgen cuando intentamos insertar algn operador o alguna
instruccin de VBA en un lugar que no le corresponde. Observa la siguiente imagen:

En este ejemplo he intentado utilizar la palabra Next en lugar del tipo de dato de la variable.
Es por eso que el Editor de Visual Basic muestra un mensaje de error de compilacin. 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 instruccin Mod
(mdulo) 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.

Errores en tiempo de ejecucin


Un error en tiempo de ejecucin ocurre cuando nuestra aplicacin ya est siendo ejecutada
e intenta hacer alguna accin que no est permitida por Excel o por Windows. Esto
ocasionar que nuestra aplicacin colapse o que Excel deje de responder.
Este tipo de errores son mas difciles de encontrar pero aun as se podrn encontrar algunos
de ellos al hacer pruebas y depuracin de nuestra aplicacin. Algunos ejemplos de este tipo
de errores son los siguientes:

Intentar realizar una operacin no permitida por el ordenador. Por ejemplo una
divisin entre cero o intentar sumar una cadena de texto y un valor Double.
Intentar utilizar una librera de cdigo que no est accesible en ese momento.
Utilizar un bucle con una condicin que nunca se cumple.
Tratar de asignar un valor que est fuera de los lmites de una variable.

Existen muchas otras razones por las que podemos tener un error en tiempo de
ejecucin. La mejor manera de prevenir estos errores ser haciendo una depuracin de
nuestro cdigo pero eso ser tema de otro artculo.
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 cdigo y
minimizar al mximo los posibles errores de ejecucin.

Depurar macros en Excel


Cuando nos encontramos con errores en nuestras macros podemos depurar el cdigo
utilizando el Editor de Visual Basic para encontrar fcilmente los errores que pueda
contener nuestro cdigo VBA. Considera la siguiente macro:

Depurar cdigo VBA


Para iniciar con la depuracin del cdigo podemos seleccionar la opcin de men
Depuracin > Paso a paso por instrucciones o simplemente pulsar la tecla F8.

Esto har que se inicie la ejecucin en la primera lnea, la cual se mostrar con un fondo
amarillo indicando que esa instruccin es la que esta por ejecutarse.

Para continuar con la depuracin debemos pulsar de nuevo la tecla F8 hasta llegar al final
del cdigo. Cada vez que pulsamos la techa F8 suceden las siguientes cosas:
1. Excel ejecuta la instruccin que est sombreada en color amarillo
2. Si Excel encuentra un error en la instruccin, entonces enviar un mensaje de error.
3. Por el contrario, si no hubo error en dicha instruccin, entonces Excel marcar en
amarillo la siguiente instruccin a ejecutar.
De esta manera podemos ejecutar cada una de las lneas de nuestro cdigo VBA y validar
que no exista error alguno. Regresando a nuestro ejemplo, al momento de llegar a la tercera
instruccin y pulsar la tecla F8, Excel enviar el siguiente mensaje de error:

El mensaje nos advierte que el objeto no admite esa propiedad o mtodo y se est refiriendo
al objeto Range en donde el mtodo Value no est escrito de manera correcta y por lo tanto
el depurador de VBA no reconoce dicha propiedad. Pulsa el botn Aceptar para cerrar el
cuadro de dilogo y poder corregir el error en el cdigo.
Ya hemos hablado sobre los diferentes tipos de errores en VBA y la depuracin nos
ayudar a probar nuestro cdigo y a encontrar la gran mayora de los errores que podamos
tener. Es probable que al principio veas a la depuracin como un trabajo muy exhaustivo
pero cuando tus programas y macros comiencen a crecer entonces vers todos los
beneficios que nos da la depuracin de macros en Excel.

Variables en VBA
Cuando programamos en VBA frecuentemente necesitamos un repositorio para almacenar
el resultado de alguna operacin. 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 nmeros, variables de tipo doble
que tambin almacenan nmeros pero con decimales, variables de tipo texto para guardar
una cadena de caracteres entre algunos otros tipos de variables. A continuacin haremos
una revisin de cada uno de estos tipos.

Variables de tipo entero


Las variables de tipo entero son utilizadas para guardar nmeros enteros. Debemos utilizar
la palabra clave Integer para declarar una variable de este tipo.
Dim
x = 6

As

Integer

En la primera instruccin 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 informacin. En la segunda instruccin asigno
el valor 6 a la variable x.

Variables de tipo doble


Las variables de tipo doble pueden almacenar nmeros con el doble de precisin
incluyendo nmeros decimales. La palabra clave para este tipo de variables es Double.
Dim
x = 3.1416

As

Double

Aunque las variables de tipo doble pueden almacenar nmeros enteros sin problema, no es
recomendable hacerlo porque estaremos desperdiciando espacio en la memoria del
ordenador. Es decir, el tamao reservado para una variable doble es el adecuado para
guardar nmeros decimales, si solo guardamos un nmero entero quedar especio sin
utilizar. Por lo tanto es recomendable utilizar siempre el tipo de variable adecuado para
cualquier nmero.

Variables de tipo texto


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

Dim
libro
libro = "Programacin en Excel"

As

String

Variables de tipo lgico


Una variable de tipo lgico es aquella que puede almacenar solamente dos valores: falso o
verdadero. La palabra clave para definir estas variables es Boolean.
Dim
continuar = True

continuar

As

Boolean

La primera lnea 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 bsicos en VBA. Existen algunos ms que ir tratando en
artculo 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.

Cadenas de texto en VBA


Existen varias funciones en VBA que podemos utilizar para manipular cadenas de texto. A
continuacin revisaremos algunas de estas funciones VBA y observaremos el resultados de
cada una de ellas.
Para iniciar con esta revisin, debes colocar un botn de comando dentro de una hoja de
Excel y despus hacer doble clic sobre l para introducir el cdigo.

Unir cadenas de texto


Para unir dos (o ms) cadenas de texto podemos utilizar el operador &. Observa el siguiente
cdigo:

El resultado de este cdigo es el siguiente:

La funcin Left
La funcin Left en VBA nos ayuda a extraer un nmero determinado de caracteres a la
izquierda de la cadena de texto.

En el cdigo he especificado los 7 caracteres a la izquierda de la cadena de texto. El


resultado es el siguiente:

La funcin Right
La funcin Right nos permite extraer caracteres a la derecha de una cadena de texto.
Observa el siguiente cdigo:

En esta funcin la cuenta de caracteres se hace de derecha a izquierda siendo el ltimo


carcter de la cadena de texto el primero que extraer la funcin Right. Para este ejemplo
he pedido los ltimos 5 caracteres a la derecha de la cadena de texto:

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

La funcin Len contar cada uno de los caracteres de la cadena y regresar un nmero:

La funcin InStr
La funcin InStr devuelve la posicin de un carcter dentro de la cadena. Supongamos que
quiero encontrar la posicin de la letra M dentro de la cadena que contiene el valor Hola
Mundo.

Es importante resaltar que la funcin InStr es sensible a maysculas y minsculas. Observa


cmo he especificado buscar la letra M (mayscula) y el resultado de la funcin es el
siguiente:

La funcin InStr encontr la letra M en la posicin nmero 6 comenzando desde la


izquierda. Si en lugar de la letra M busco la letra m (minscula), la funcin InStr
devolver el valor 0 (cero) indicando que no ha encontrado dicha letra.
Adems de indicar letras individuales en la funcin InStr, tambin podemos especificar
palabras completas por ejemplo:

cadena
=
InStr (cadena, "Mundo")

"Hola

Mundo"

Por ejemplo, al buscar la palabra Mundo dentro de la cadena de texto obtendremos como
resultado la posicin nmero 6 ya que en esa posicin comienza la palabra Mundo.

La funcin Mid
Con la funcin Mid podemos extraer una subcadena de otra cadena de texto con tan solo
especificar la posicin inicial de la subcadena y su longitud. Observa el siguiente ejemplo:

La funcin Mid se mover a la posicin 15 de la cadena y a partir de ah contar 7


caracteres y devolver como resultado la cadena comprendida entre ambas posiciones. En
nuestro ejemplo, la palabra funcion es la que se encuentra entre dichas posiciones.

Las funciones de texto en VBA nos ayudarn a manipular adecuadamente las cadenas de
texto y podremos obtener los resultados que necesitamos.

La declaracin If-Then en VBA


En ocasiones necesitamos ejecutar algunas lneas de cdigo de nuestra macro solamente
cuando alguna condicin se haya cumplido. La declaracin If-Then nos permite validar
una condicin para tomar una decisin adecuada.
La declaracin If-Then en VBA es la ms bsica de todas las declaraciones de control de
flujo que son aquellas declaraciones que nos permiten tomar decisiones en base a una
condicin. Esta declaracin la podemos traducir como Si-Entonces y la utilizaremos en
situaciones donde necesitamos realizar la siguiente evaluacin: Si se cumple la condicin
Entonces haz esto.

Ejemplo de la declaracin If-Then


Para probar el funcionamiento de la declaracin If-Then inserta un botn de comando
(Control ActiveX) en una hoja de Excel y haz doble clic sobre l para colocar el siguiente
cdigo:

En el primer paso se hace la declaracin de las variables que utilizar en el resto del
cdigo.
En el segundo paso asigno el valor de la celda A1 a la variable calificacin.
El tercer paso contiene la declaracin If-Then y que prueba Si el valor de la variable
calificacin es mayor o igual a 60. En caso de ser verdadero Entonces se asigna el
valor Aprobado a la variable resultado.
El ltimo paso es asignar el valor de la variable resultado a la celda B2.

Ahora observa el resultado al ejecutar esta macro.

La declaracin Else
Parece que todo funciona muy bien en el cdigo anterior pero an lo podemos mejorar
agregando la declaracin Else de manera que tengamos una declaracin de la forma IfThen-Else. Esta variante nos permite hacer la siguiente evaluacin: Si se cumple la
condicin Entonces haz esto De lo contrario haz otra cosa.
La declaracin Else en VBA nos permite indicar otro bloque de instrucciones que se deben
ejecutar en caso de que la condicin sea falsa. De esta manera podemos tomar una accin
determinada en caso de que la condicin se cumpla o en caso de que no se cumpla.
Ahora modificar el ejemplo anterior para asegurarme de que en caso de que la condicin
de calificacin mayor o igual a 60 no se cumpla se despliegue el resultado reprobado.
Observa el siguiente cdigo.

En el tercer paso puedes observar la declaracin If-Then-Else. Ahora observa el efecto de


este cambio al momento de ejecutar el cdigo:

Por ltimo quiero que observes que en este segundo ejemplo la declaracin If-Then-Else
termina con la declaracin End If. Siempre que utilicemos la declaracin If-Then o la
declaracin If-Then-Else debemos terminar con End If.
La nica ocasin donde no se termina con End If es cuando la declaracin If-Then se
puede colocar en una sola lnea como es el caso del primer ejemplo de este artculo.

Acceder celdas con VBA


Existe un par de maneras para acceder las celdas de nuestras hojas utilizando VBA.
Podemos utilizar el objeto Range y tambin podemos utilizar el objeto Cells. A
continuacin revisaremos ambos objetos.

Seleccionar una celda


Si deseamos seleccionar la celda B5 podemos utilizar cualquiera de las dos instrucciones
siguientes:
Range("B5").Select
Cells(5, 2).Select

El objeto Cells tiene como primer argumento el nmero de fila y como segundo argumento
el nmero de columna.

Seleccionar un rango
Para seleccionar un rango de celdas lo ms 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.

Establecer el valor de una celda


Para establecer el valor de una celda podemos utilizar alguna de las siguientes
instrucciones:
Range("B5").Value
Cells(5, 2).Value = 600

500

Ventaja del objeto Cells


Es mucho ms comn encontrarse el objeto Range en las aplicaciones VBA, sin embargo el
objeto Cells ofrece una ventaja que debemos considerar cuando necesitamos hacer un
recorrido programtico por varias celdas ya que ser muy sencillo especificar las filas y
columnas utilizando una variable numrica.
For
For
Cells(i,

i
j

=
=
j).Value

1
1
=

To
To
i

10
5
j

Next
Next i

El bucle For-Next en VBA


En trminos de programacin, un bucle es una instruccin que nos permitir ejecutar
repetidamente un conjunto de instrucciones hasta que se cumpla la condicin que hayamos
especificado. Los bucles tambin son conocidos como ciclos.

La instruccin For-Next
El bucle For-Next es una de las instrucciones ms tiles al programar en VBA. La sintaxis
de esta instruccin es la siguiente:
For
inicializacin
de
{Conjunto
de
instrucciones
Next incrementar variable

variable
que

To
se

lmite
repetirn}

Inicializacin de variable: Ya que la instruccin For Next repite un conjunto de


instrucciones un nmero de veces especfico, debemos inicializar una variable que
ir contando cada una de las repeticiones. Es comn encontrar la instruccin escrita
como For i = 1 lo cual indica que la variable i llevar la cuenta de las repeticiones
que deseamos que inicien en 1.
Lmite: Adems de inicializar la variable que llevar la cuenta de las repeticiones,
debemos especificar un lmite donde se detendr el ciclo. Este lmite es indicado
con la instruccin To. De esta manera, si deseamos hacer un bucle que vaya desde 1
hasta 5 la instruccin la escribiremos como For i = 1 To 5.
Incrementar variable: El final del conjunto de instrucciones se indica con la
instruccin 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 instruccin Next
i.

Ejemplo de un bucle For-Next


A continuacin un ejemplo muy sencillo de un bucle For-Next donde la nica instruccin
que se repite es la de mostrar una ventana de dilogo con el valor de la variable i:

Con este bucle provocaremos que se muestre una ventana de dilogo 5 veces y en cada una
de ellas se mostrar el valor actual de la variable i que comenzar con 1 y terminar con 5.
Observa el resultado:

Ya que la variable i comienza con el valor 1, el primer cuadro de dilogo muestra el


mensaje i = 1, despus i = 2 y as sucesivamente hasta llegar al lmite.
El bucle For-Next en VBA nos ayudar a crear ciclos que ejecutarn un conjunto de
instrucciones hasta alcanzar el lmite que hayamos especificado.

Operadores lgicos en VBA


Los operadores lgicos ms 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 cdigo que ser ejecutado.

El operador lgico And


El operador lgico 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 cdigo se debe cumplir la condicin1 Y la condicin2.
En el siguiente ejemplo tengo la calificacin de dos exmenes. Solamente si ambos
exmenes tienen una calificacin mayor a 70, entonces el estudiante ser aprobado, de lo
contrario la calificacin ser reprobatoria.

El cdigo que se ejecutar al pulsar el botn ser el siguiente:

Al ejecutar este cdigo obtendremos el resultado Aprobado ya que ambos exmenes


tienen una calificacin mayor a 70:

De esta manera comprobamos que el operador lgico And nos ayuda a forzar que ambas
condiciones se cumplan. En cambio, si el valor de una de las celdas es menor a 70, entonces
tendremos un resultado diferente:

El operador lgico And devolver el valor verdadero solamente cuando ambas


condiciones se cumplan y ser suficiente con que una de ellas no se cumpla para
obtener un resultado negativo.

El operador lgico Or
El operador lgico Or lo traducimos como O y nos permitir saber si al menos una de
las condiciones se cumple, es decir, si la condicin1 O la condicin2 se cumplen.
Si cambiamos un poco el ejemplo anterior y decimos que es suficiente que alguna de las
dos calificaciones sea mayor a 70 para que el estudiante sea aprobado, entonces podemos
modificar el cdigo de la siguiente manera:

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

La nica manera en que el operador lgico Or nos devuelva un valor falso es que ninguna
de las condiciones se cumpla. En nuestro ejemplo, el alumno estar reprobado solamente
cuando ambas calificaciones sean menores a 70:

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

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 accin a tomar cuando el usuario hace algo
especfico como el activar una hoja o hacer clic en alguna celda.

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 seleccin 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 mostrarn
los objetos y en el panel derecho las propiedades, mtodos y eventos de dicho objeto.
Podrs distinguir los eventos porque tienen un icono en forma de rayo (color amarillo):

Un ejemplo de eventos en VBA

El ejemplo que crearemos en esta ocasin es para activar un cuadro de dilogo 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 opcin Worksheet:

Esto crear automticamente la subrutina para el evento SelectionChange pero podemos


fcilmente crear otro evento seleccionndolo de la lista de Procedimientos. Para este
ejemplo crear el evento Activate:

Una vez creada la subrutina para el evento Activate solamente insertar el cdigo para que
se muestre el mensaje dentro del cuadro de dilogo:

Ahora que hemos definido una accin asociada al evento Activate de la Hoja2, el mensaje
se mostrar cada vez que actives la Hoja2.
Los eventos en VBA son de mucha utilidad porque nos ayudan a controlar el momento
exacto en que deseamos ejecutar algn bloque de cdigo al iniciarse alguna accin por el
usuario.

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 especfico
(elemento) utilizando su posicin (ndice).
Para comprender mejor lo que es un arreglo observa la siguiente imagen:

Un arreglo es una coleccin de casillas que contendrn variables individuales. Casa


casilla tendr un nmero de ndice el cual nos permitir asignar u obtener el valor que
contiene.

Crear un arreglo en VBA


Para crear un arreglo en VBA utilizamos la siguiente instruccin:
Dim Paises(1 To 5) As String

Con este cdigo 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)
Paises(2)
Paises(3)
Paises(4)
Paises(5) = "Per"

=
=
=
=

"Argentina"
"Colombia"
"Espaa"
"Mxico"

Acceder un elemento del arreglo


Para acceder cualquier elemento del arreglo simplemente colocamos el nombre del arreglo
seguido por parntesis y el nmero de ndice del elemento que necesitamos. Por ejemplo,
para desplegar un mensaje con el nombre de pas Espaa puedo utilizar la siguiente
instruccin:
MsgBox Paises(3)

El resultado de esta instruccin ser el siguiente:

Fecha y hora en VBA


Los valores de fecha y hora en VBA pueden ser manipulados de diversas maneras. En esta
ocasin aprenderemos cmo obtener el ao, mes y da en VBA y cmo hacer operaciones
bsicas con fechas.
Para realizar estos ejemplos debes colocar un control de botn en una hoja de Excel y
colocar las lneas de cdigo mostradas.

Obtener la fecha y hora actual


Para obtener la fecha actual en VBA utilizamos la funcin Date y para obtener la hora
actual usamos Now.

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

Obtener el ao, mes y da


En el ejemplo anterior he obtenido la fecha actual en la variable fechaActual, sin embargo,
si deseo mostrar solamente el ao puedo utilizar la funcin Year.

El resultado de este cdigo es el siguiente:

Al trabajar con fechas podremos obtener el mes utilizando la funcin Month y para obtener
el da la funcin Day.

Obtener la hora, minuto y segundo


Para obtener la hora de la variable horaActual utilizaremos la funcin Hour de la siguiente
manera:

El resultado es el siguiente:

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

Convertir una cadena de texto en fecha


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

El nico argumento de la funcin DateValue es la cadena de texto que convertir en fecha.


El resultado de esta conversin es el siguiente:

Sumar das a una fecha


Para sumar das a una fecha en VBA utilizaremos la funcin DateAdd. Esta funcin nos
permite especificar la cantidad exacta de das a sumar:

Observa el resultado de sumar 5 das a la fecha original:

El primer argumento de la funcin DateAdd determina la unidad de tiempo que ser


sumada. En este ejemplo especifiqu d para indicar das, pero podemos utilizar otras
medidas de tiempo:

yyyy para aos


m para meses
d para das
ww para semanas

Las fechas y horas son un tipo de dato muy comn con el que seguramente tendrs que
trabajar al crear tus macros. Es importante que aprendas a utilizar las funciones VBA que
nos permitirn manipular adecuadamente la informacin.

Funciones VBA
El lenguaje de programacin VBA contiene un nmero considerable de funciones que
podemos utilizar para construir cdigo en Excel. Cuando ests escribiendo cdigo, puedes
introducir la palabra VBA seguida de un punto y vers una lista desplegable de estas
funciones.
La siguiente tabla provee una descripcin breve de algunas de las funciones VBA ms
utilizadas.
FUNCIN

DESCRIPCIN

Abs

Regresa el valor absoluto de un nmero

Asc

Obtiene el valor ASCII del primer caracter de una cadena de texto

CBool

Convierte una expresin a su valor booleano

CByte

Convierte una expresin al tipo de dato Byte

CCur

Convierte una expresin al tipo de dato moneda (Currency)

CDate

Convierte una expresin al tipo de dato fecha (Date)

CDbl

Convierte una expresin al tipo de dato doble (Double)

CDec

Convierte una expresin 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 expresin en un dato de tipo entero (Int)

CLng

Convierte una expresin en un dato de tipo largo (Long)

CreateObject

Crea un objeto de tipo OLE

CStr

Convierte una expresin en un dato de tipo texto (String)

CurDir

Regresa la ruta actual

CVar

Convierte una expresin en un dato de tipo variante (Var)

Date

Regresa la fecha actual del sistema

DateAdd

Agrega un intervalo de tiempo a una fecha especificada

DateDiff

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

DatePart

Regresa una parte especfica de una fecha

DateSerial

Convierte una fecha en un nmero serial

DateValue

Convierte una cadena de texto en una fecha

Day

Regresa el da del mes de una fecha

Dir

Regresa el nombre de un archivo o directorio que concuerde con un patrn

EOF

Regresa verdadero si se ha llegado al final de un archivo

FileDateTime

Regresa la fecha y hora de la ltima modificacin de un archivo

FileLen

Regresa el nmero de bytes en un archivo

FormatCurrency Regresa un nmero como un texto con formato de moneda


FormatPercent Regresa un nmero como un texto con formato de porcentaje
Hour

Regresa la hora de un valor de tiempo

IIf

Regresa un de dos partes, dependiendo de la evaluacin de una expresin

InputBox

Muestra un cuadro de dilogo que solicita la entrada del usuario

InStr

Regresa la posicin de una cadena de texto dentro de otra cadena

InStrRev

Regresa la pocisin de una cadena de texto dentro de otra cadena pero


empezando desde el final

Int

Regresa la parte entera de un nmero

IsDate

Regresa verdadero si la variable es una fecha

IsEmpty

Regresa verdadero si la variable est vaca

IsError

Regresa verdadero si la expresin es un valor de error

IsNull

Regresa verdadero si la expresin es un valor nulo

IsNumeric

Regresa verdadero si la variable es un valor numrico

Join

Regresa una cadena de texto creada al unir las cadenas contenidas en un arrreglo

LCase

Regresa una cadena convertida en minsculas

Left

Regresa un nmero especfico de caracteres a la izquierda de una cadena

Len

Regresa la longitud de una cadena (en caracteres)

LTrim

Remueve los espacios a la izquierda de una cadena

Mid

Extrae un nmero especfico de caracteres de una cadena de texto

Minute

Regresa el minuto de una dato de tiempo

Month

Regresa el mes de una fecha

MsgBox

Despliega un cuadro de dialogo con un mensaje especificado

Now

Regresa la fecha y hora actual del sistema

Replace

Reemplaza una cadena de texto con otra

Space

regresa una cadena de texto con el nmero de espacios especidicados

Split

Regresa un arreglo formado for cadenas de texto que formaban una sola cadena

Str

Regresa la representacin en texto de un nmero

Right

Regresa un nmero especificado de carecteres a la derecha de una cadena de


texto

Rnd

Regresa un nmero aleatorio entre 0 y 1

Round

Redondea un nmero a una cantidad especfica de decimales

RTrim

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

Second

Regresa los segundos de un dato de tiempo

StrComp

Compara dos cadenas de texto

StrReverse

Invierte el orden de los caracteres de una cadena

Time

Regresa el tiempo actual del sistema

Timer

Regresa el nmero de segundos desde la media noche

TimeValue

Convierte una cadena de texto a un nmer 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 maysculas

Val

Regresa el nmero contenido en una cadena de texto

Weekday

Regresa un nmero que representa un da de la semana

WeekdayName Regresa el nombre de un da de la semana


Year

Obtiene el ao de una fecha

Creando una funcin VBA


Como hemos visto en el artculo Tu primera macro con VBA, una subrutina nos ayuda a
organizar y agrupar las instrucciones en nuestro cdigo. El da de hoy te mostrar cmo
crear una funcin VBA, la cual es similar a una subrutina excepto por una cosa.
A diferencia de las subrutinas, las funciones VBA fueron diseadas para regresar un valor.
As es, a travs de una funcin podemos agrupar cdigo que nos ayudar a hacer algn
clculo especfico y obtener un resultado de regreso.
Una funcin VBA tambin es conocida como Funcin Definida por el Usuario, UDF por
sus siglas en ingls, y una vez creada puede ser utilizada de la misma manera que las
funciones incluidas en Excel como la funcin SUMAR o la funcin CONSULTAV. Esto
hace que las funciones VBA sean una herramienta muy poderosa.
A continuacin mostrar una funcin que toma un rango y regresa la suma de cada una de
sus celdas. Posteriormente ir explicando el detalle de la funcin.

La palabra clave Function


La primera lnea de cdigo comienza con la palabra Function la cual define el inicio de la
funcin. Observa tambin cmo la ltima lnea de cdigo es End Function que est
especificando el trmino de la funcin.
Inmediatamente despus de la palabra clave Function se debe especificar el nombre de la
funcin que en este ejemplo es MiSuma seguida de parntesis que de manera opcional
pueden contener una lista de parmetros.

Parmetros de una funcin VBA


Los parmetros son el medio por el cual pasamos informacin de entrada a la funcin.
Algunas funciones necesitarn de dichas entradas para realizar algn clculo y algunas

otras no, es por ello que los parmetros de una funcin son opcionales. Puedes incluir
tantos parmetros como sean necesarios y solamente debes recordar separarlos por una
coma.
Un parmetro no es ms que una variable y por lo tanto puedes observar que en el ejemplo
he definido la variable rango que ser del tipo Range.

Valor de retorno
Como mencion al principio, la caracterstica principal de una funcin es que puede
regresar un valor. Es por eso que al definir una funcin se debe indicar el tipo del valor de
retorno que tendr dicha funcin. En este caso el valor de retorno ser de tipo Double y se
est especificado por las palabras As Double que aparecen despus de los parntesis.

Cuerpo de la funcin VBA


Una vez definida la funcin se pueden especificar todas las instrucciones que sern
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 funcin se encuentra en la instruccin For Each ya que realiza un
recorrido por todas las celdas del rango que fue especificado como parmetro. Para cada
celda que se encuentra se va sumando su contenido en la variable resultado.

Retornando el valor
Una vez que se han hecho los clculos necesarios, es importante regresar el valor. Para
hacerlo es indispensable igualar el nombre de la funcin al valor o variable que contiene el
valor que se desea regresar. En nuestro ejemplo, la variable resultado es la que contiene la
suma de todas las celdas por lo que se iguala con el nombre de la funcin en la lnea
MiSuma = resultado.

Probando la funcin VBA


Finalmente probar la funcinVBA recin creada dentro de una hoja de Excel. Tal como lo
definimos en el cdigo, el nico parmetro de la funcin debe ser un rango del cual me
regresar la suma de los valores de la celda. Observa el siguiente ejemplo.

Aunque la funcin MiSuma hace lo mismo que la funcin de Excel SUMAR, nos ha
servido de ejemplo para introducir el tema de las funciones en VBA. Con este ejemplo tan
sencillo hemos creado nuestra primera funcin VBA.

CONTROLES
Controles de formulario en Excel
Los controles de formulario en Excel son objetos que podemos colocar dentro de una hoja
y que nos darn funcionalidad adicional para interactuar mejor con los usuarios y tener un
mejor control sobre la informacin.
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 botn.
Los controles de formulario en Excel se encuentran dentro de la ficha Programador
dentro del grupo Controles. Solamente pulsa el botn Insertar y observars cada uno de
ellos:

Justo por debajo de los controles de formulario podrs observar el grupo de controles
ActiveX pero sus diferencias y similitudes las discutiremos en otro artculo. Por ahora nos
enfocaremos solamente en los controles de formulario.

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

Los diferentes controles de formulario


Existen diferentes tipos de controles de formulario en Excel que ofrecen diversos tipos de
funcionalidad e interaccin con el usuario. Desde una simple etiqueta hasta controles que
permiten una seleccin mltiple de sus opciones. A continuacin una breve descripcin de
cada uno de ellos.

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


dentro de un intervalo predefinido.
Botn. El botn nos permite ejecutar una macro al momento de hacer clic sobre l.
Botn de opcin. Nos permite una nica seleccin dentro de un conjunto de
opciones.
Casilla de verificacin. Permite la seleccin o no seleccin de una opcin.
Control de nmero. Nos ayuda a aumentar o disminuir un valor numrico.
Cuadro combinado. Es una combinacin de un cuadro de texto con un cuadro de
lista.
Cuadro de grupo. Agrupa varios controles dentro de un rectngulo.
Cuadro de lista. Muestra una lista de valores de los cuales podemos elegir una sola
opcin o mltiples opciones de acuerdo a la configuracin del control.
Etiqueta. Permite especificar un texto o breves instrucciones en el formulario.

Controles de formulario no disponibles en Excel 2010


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

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.

Controles ActiveX y controles de formulario


Los controles de formulario fueron introducidos desde la versin 4 de Excel y por lo tanto
han estado presentes en la aplicacin por ms 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 ms posibilidades de configuracin y formato que los
controles de formulario. Ambos tipos de controles se encuentran en la ficha Programador.

La diferencia ms significativa entre ambos es la manera en como podemos obtener


informacin de los controles al momento de interactuar con el usuario. Los controles de
formulario solamente respondern despus de que el usuario ha interactuado con ellos,
como despus de haber pulsado el botn. 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 ratn sobre el
botn.

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 botn 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 botn Modo
Diseo 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
caractersticas. A continuacin un ejemplo de la ventana Propiedades para un botn de
comando ActiveX:

Controles ActiveX con subrutinas VBA

Otra diferencia entre los controles de formulario y los controles ActiveX es que los
primeros pueden tener asignada una macro y al hacer clic sobre el control de formulario se
iniciar la ejecucin de dicha macro.
Los controles ActiveX no tienen asignada una macro explcitamente sino que podemos
asignar cdigo 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 ms.
Para asignar cdigo a uno de los eventos de un control ActiveX solamente debemos hacer
clic derecho sobre l y seleccionar la opcin Ver cdigo.

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

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


nuestro control ActiveX y para los cuales podemos escribir cdigo 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.

Otra ventaja de los controles ActiveX


En la versin de Excel 2010 algunos controles de formulario han dejado de ser soportados y
no podemos utilizarlos ms. Ese es el caso del control de formulario conocido como campo
de texto. Sin embargo, dentro de la lista de controles ActiveX tenemos disponibles un
control llamado Cuadro de texto lo cual puede hacer atractiva la opcin de utilizar
controles ActiveX en lugar de controles de formulario.

Cuadro de texto en Excel


El cuadro de texto es un control ActiveX que muestra un campo vaco donde el usuario
puede introducir cualquier texto. En esta ocasin revisaremos cmo incrustar un cuadro de
texto y hacer referencia al mismo desde cdigo VBA.

Insertar un cuadro de texto en Excel


Para insertar un cuadro de texto en una hoja de Excel debes ir a la ficha Programador y
hacer clic en el botn Insertar y entonces hacer clic sobre la opcin Cuadro de texto de la
seccin Controles ActiveX.

El puntero del ratn 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 podrs hacer clic derecho
sobre l y seleccionar la opcin Propiedades para conocer el nombre que la ha sido
asignado.

Tambin puedes ver las propiedades de cualquier control seleccionndolo primero y


pulsando el botn Propiedades que se encuentra dentro del grupo Controles de la ficha
Programador.

Modificar valor del cuadro de texto


Si deseas colocar un texto dentro del cuadro de texto desde VBA puedes utilizar una
instruccin como la siguiente:
TextBox1.Text = "Texto inicial"

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

Leer valor del cuadro de texto


Si quieres leer el valor del cuadro de texto y colocarlo en una celda podemos utilizar la
siguiente instruccin:
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 instruccin:


TextBox1.Text = ""

Cuadro de lista en VBA


El cuadro de lista es un control ActiveX que nos permite desplegar una serie de opciones
de las cuales el usuario puede realizar una seleccin. Podemos configurar el cuadro de lista
para permitir seleccionar uno o varios elementos de la lista.

Dibujar un cuadro de lista


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

Especificar los elementos del cuadro de lista


Una alternativa para indicar los elementos de un cuadro de lista es a travs de la propiedad
llamada ListFillRange. Para ello debemos abrir las propiedades del control e indicar el
rango de celdas que contiene los elementos:

En este ejemplo he especificado que los valores sean tomados del rango A1:A6, lo cual da
como resultado un cuadro de lista con los valores especificados en dicho rango:

Elementos del cuadro de lista por cdigo


Otra alternativa para indicar los elementos de un cuadro de lista es a travs de cdigo
VBA. Para ello puedes incluir el siguiente cdigo en el evento Workbook_Open:

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

Asociar una celda al cuadro de lista


Adicionalmente podemos asociar una celda al cuadro de lista la cual mostrar la seleccin
que hagamos. Para hacer esta asociacin debemos especificar la direccin de la celda en la
propiedad LinkedCell:

De esta manera, cada vez que hagamos una seleccin de alguna de las opciones del cuadro
de lista se ver reflejado su valor en la celda asociada:

Cuadro combinado en VBA


Excel tiene un control ActiveX conocido como Cuadro combinado el cual tambin es
llamado comnmente por su nombre en ingls: 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 botn
Insertar pulsar el comando Cuadro combinado (control ActiveX):

Despus de dibujar el Cuadro combinado tendrs un resultado como el siguiente:

Agregar elementos al cuadro combinado


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

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

Diferencia con el cuadro de lista


Una diferencia importante entre el Cuadro combinado y el cuadro de lista es que el
primero permite que el usuario capture una opcin diferente a las mostradas en la lista. En
el ejemplo anterior no apareca el da domingo como parte de los elementos, sin embargo
puedo capturar el da domingo dentro del cuadro de lista.

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

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


Utilizar el Cuadro combinado pero validar la opcin seleccionada con cdigo
VBA de manera que nos aseguremos que el usuario ha seleccionado una opcin de
la lista. Un ejemplo de cdigo de validacin es el siguiente:

Asociar una celda al cuadro combinado


Al igual que con otros controles ActiveX, podemos asocias una celda al cuadro combinado
de manera que muestre el elemento de la lista que haya sido seleccionado. Esta
configuracin la hacemos en la propiedad LinkedCell:

Cuando selecciones un elemento del cuadro combinado se reflejar dicha seleccin en la


celda indicada en la propiedad LinkedCell:

Casilla de verificacin en VBA


Una casilla de verificacin es un control ActiveX que podemos utilizar para permitir que
un usuario marque una opcin y por lo tanto poder conocer sus preferencias al verificar
dicho valor en cdigo VBA.

El control ActiveX casilla de verificacin


Para insertar este control debemos ir al comando Insertar y seleccionar la opcin Casilla de
verificacin (Control ActiveX).

Despus de dibujar este control tendrs el siguiente resultado:

Propiedades de una casilla de verificacin


La primera propiedad que desearas modificar de una casilla de verificacin 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 verificacin 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:

Valor de una casilla de verificacin

Una casilla de verificacin 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
Range("C4").Value
End Sub

Sub
=

CheckBox1_Click()
CheckBox1.Value

Esta lnea de cdigo coloca el valor de la casilla de verificacin en la celda C4. De esta
manera, al seleccionar la casilla de verificacin obtendr el siguiente resultado:

Para validar en VBA si la casilla de verificacin tiene un valor u otro podemos utilizar un
cdigo como el siguiente:
If
CheckBox1.Value
=
True
Then
Range("C4").Value
If CheckBox1.Value = False Then Range("C4").Value = 0

La primera lnea valida si el control ActiveX tiene un valor verdadero y de ser as coloca el
nmero 1 en la celda C4. Si la casilla de verificacin no ha sido seleccionada (falso)
entonces colocar el nmero cero en la celda C4.

Botn de opcin en VBA


Un botn de opcin es un control ActiveX que nos permitir seleccionar una sola opcin
dentro de un grupo de botones de opcin. A diferencia de las casillas de verificacin, los
botones de opcin dependen uno del otro.

El botn de opcin en Excel


Para insertar un botn de opcin hacemos clic en el comando Insertar de la ficha
Programador.

Un solo botn de opcin no hace mucho sentido, as que siempre agregamos dos o ms
botones de opcin para permitir que usuario haga una seleccin de cualquiera de ellos.

Una vez que se ha agregado un segundo botn de opcin podrs notar que al seleccionar
uno de ellos se desmarcarn todos los dems.

La propiedad Caption

De manera predeterminada Excel colocar el botn de opcin con un nombre como


OptionButton1. Para cambiar este texto debemos editar la propiedad Caption del botn de
opcin.

El botn de opcin en VBA


Para saber si un botn de opcin 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 opcin
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 botn de opcin est
seleccionado, se mostrar un cuadro de dilogo con un mensaje sobre la opcin
seleccionada.

Formularios en VBA
Los formularios en VBA no son ms que un cuadro de dilogo de Excel donde podremos
colocar controles que nos ayudarn a solicitar informacin del usuario. Podremos colocar
cajas de texto, etiquetas, cuadros combinados, botones de comando, etc.

Crear un formulario en Excel


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

Inmediatamente se mostrar un formulario en blanco y de igual manera podrs observar el


Cuadro de herramientas:

Si no ves el Cuadro de herramientas puedes seleccionar el men Ver y la opcin Cuadro de


herramientas.

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
podrs hacer la modificacin. De igual manera el texto desplegado en los botones de
comando se modifica en su propiedad Caption.

Cdigo para el botn Cancelar


El botn cancelar cerrar el formulario sin guardar la informacin capturada en ningn
lugar. El cdigo que debemos utilizar es el siguiente:
Private
Unload
End Sub

Sub

CommandButton2_Click()
Me

Para agregar este cdigo puedes hacer doble clic sobre el control. La sentencia Unload
Me cerrar el formulario.

Cdigo para el botn Aceptar


A diferencia del botn Cancelar, el botn Aceptar colocar los datos de las cajas de texto en
las celdas A1, B1 y C1. El cdigo utilizado es el siguiente:
Private
Sub
Worksheets("Hoja1").Range("A1").Value
Worksheets("Hoja1").Range("B1").Value
Worksheets("Hoja1").Range("C1").Value
End Sub

=
=
=

CommandButton1_Click()
Me.TextBox1.Value
Me.TextBox2.Value
Me.TextBox3.Value

Al pulsar el botn Aceptar se transferirn los valores de los controles TextBox hacia las
celdas de la Hoja1.

Botn para abrir formulario


Para facilitar la apertura del formulario puedes colocar un botn ActiveX en la hoja con el
siguiente cdigo:
Private
UserForm1.Show
End Sub

Sub

CommandButton1_Click()

Probar el formulario
Observa cmo cada uno de los botones realiza la accin correcta al pulsarlos:

Anda mungkin juga menyukai