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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Si el mdulo no est abierto solamente debers hacer doble clic sobre l. Posicinate en el
rea de cdigo e introduce las siguientes instrucciones:
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.
Ejecutar macro
Para probar nuestro cdigo bastar con pulsar el botn Ejecutar que se encuentra dentro de
la barra de herramientas.
Listo, has creado tu primera macro la cual muestra una ventana de mensajes y despliega el
texto especificado en la 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.
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.
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.
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.
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
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.
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:
Podemos ahorrar algunas palabras de este cdigo haciendo uso del bloque With de la
siguiente manera.
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.
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"
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.
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"
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
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.
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.
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.
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.
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.
As
Integer
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.
Dim
libro
libro = "Programacin en Excel"
As
String
continuar
As
Boolean
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.
La funcin Right
La funcin Right nos permite extraer caracteres a la derecha de una cadena de texto.
Observa el siguiente cdigo:
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.
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:
Las funciones de texto en VBA nos ayudarn a manipular adecuadamente las cadenas de
texto y podremos obtener los resultados que necesitamos.
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.
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.
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.
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.
500
i
j
=
=
j).Value
1
1
=
To
To
i
10
5
j
Next
Next i
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}
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:
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 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:
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.
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):
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:
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:
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"
En este ejemplo las variables fechaActual y horaActual contienen la fecha y horas actuales
respectivamente.
Al trabajar con fechas podremos obtener el mes utilizando la funcin Month y para obtener
el da la funcin Day.
El resultado es el siguiente:
Para obtener el minuto y el segundo podremos utilizar las funciones Minute y Second.
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
Asc
CBool
CByte
CCur
CDate
CDbl
CDec
Choose
Chr
CInt
CLng
CreateObject
CStr
CurDir
CVar
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Dir
EOF
FileDateTime
FileLen
IIf
InputBox
InStr
InStrRev
Int
IsDate
IsEmpty
IsError
IsNull
IsNumeric
Join
Regresa una cadena de texto creada al unir las cadenas contenidas en un arrreglo
LCase
Left
Len
LTrim
Mid
Minute
Month
MsgBox
Now
Replace
Space
Split
Regresa un arreglo formado for cadenas de texto que formaban una sola cadena
Str
Right
Rnd
Round
RTrim
Second
StrComp
StrReverse
Time
Timer
TimeValue
Trim
TypeName
UCase
Val
Weekday
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.
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.
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.
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:
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.
precisamente la gran cantidad de eventos disponibles para los controles ActiveX lo que los
hace controles muy poderosos que podemos utilizar en nuestros formularios.
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.
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:
De esta manera cuando se abra el libro se agregarn las opciones al cuadro de lista
llamado ListBox1.
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:
Como resultado obtendr los valores de las celdas como elementos del Cuadro
combinado:
Si quieres evitar que el usuario introduzca sus propios valores existen dos opciones:
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:
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.
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
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.
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.
Sub
CommandButton2_Click()
Me
Para agregar este cdigo puedes hacer doble clic sobre el control. La sentencia Unload
Me cerrar el formulario.
=
=
=
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.
Sub
CommandButton1_Click()
Probar el formulario
Observa cmo cada uno de los botones realiza la accin correcta al pulsarlos: