curso avanzado de excel - macros - 1
TRANSCRIPT
Excel 2003
Curso Avanzado:
“Macros”
Mayo 2005
SINCOR Curso Avanzado Excel 2003
Introducción
¿Qué son los macros?
Un macro es un conjunto de instrucciones, comandos y/o funciones que se almacenan en un
módulo de Microsoft Visual Basic y que sirven para automatizar procesos. En Excel, muchas de
las tareas pueden automatizarse, de manera de ahorrar tiempo y trabajo. Esto es obvio cuando se
trata de tareas repetitivas. Tómese como ejemplo una tarea en la que se deba seleccionar un
rango de una hoja de cálculo, cambiar las características de la fuente, del ancho de columnas e
incluso del contenido de una tabla. Si esta tarea debe hacerse a diario, un macro es lo que se
necesita. Una manera de dar una sola orden y que el macro o programa ejecute todas esas
acciones de manera automática.
Por definición un macro debe ir orientado a tres objetivos:
- Debe resolver un problema
- Debe tener un número finito de pasos o instrucciones
- Debe aportar una respuesta
En muchos casos, la respuesta no será necesariamente un número o una palabra, puede ser un
cambio en la apariencia de un objeto o incluso operaciones que no son necesariamente visibles,
como abrir y cerrar archivos.
En Visual Basic para Aplicaciones (VBA), los macros son guardados en procedimientos o
Subrutinas (SUB) que permiten el manejo de la información según nuestras necesidades. Existe
también un tipo específico de subrutinas que efectivamente arrojan un resultado, son llamadas
Funciones (FUNCTION). Excel utiliza VBA como estándar para la programación de macros, ya
que es la herramienta integrada en su paquete de oficina “Microsoft Office”™. Permite la
interacción entre el usuario y sus datos, el manejo de varios programas del mismo paquete,
incluso la interacción entre Excel y otros programas que comparten esta plataforma de
programación, cada día mas usada.
Visual Basic para Aplicaciones, de aquí en adelante VBA, esta basado en el lenguaje BASIC
desarrollado hace mas de 30 años y de amplia popularidad. Ha evolucionado a la programación
orientada a objetos, pero evitando el engorroso código que esto conlleva. La mayor parte de los
2
SINCOR Curso Avanzado Excel 2003
elementos ya tienen un manejo básico ya programado. Así, al presionar un botón, por ejemplo, el
usuario no tendrá que dibujar el botón presionado, simplemente agrega el botón y le indica a
VBA qué debe hacer cuando alguien lo presione.
En este curso se verá la aplicación práctica de los macros, su creación y modificación, objetos y
como se manejan, el uso de VBA y su entorno y tópicos de programación que son necesarios para
el correcto manejo de esta herramienta.
Queda entendido que el mientras mas sea usada esta herramienta de programación mejor será el
aprendizaje que de ella se tenga. Este curso pretende ser la base para que los participantes se
interesen en el área y profundicen, según sus necesidades, en las infinitas posibilidades de la
programación.
3
SINCOR Curso Avanzado Excel 2003
Grabar Macros
Generalmente las personas conocen las macros por la grabadora de macros, es decir, ejecutan una
tarea repetitiva y alguien les sugiere que utilicen la grabadora de macros para automatizar esta
tarea. Excel lleva incluida una utilidad que sirve para registrar acciones que se llevan a cabo en
un libro de trabajo y registrarlas en forma de macro. Esta herramienta es útil para generar código
engorroso, por su sintaxis un tanto complicada de recordar, además de ahorrar tiempo.
Al grabar una macro, Excel almacena información sobre cada paso dado cuando se ejecuta una
serie de comandos. A continuación, se ejecuta la macro para que repita los comandos. Si se
comete algún error mientras se graba la macro, también se graban las correcciones que se
realicen. Es por esto que casi siempre después deberemos modificar las macros para adaptarlas a
nuestras necesidades, sin embargo eso resultará sumamente sencillo.
¿Cómo se generan las macros?
Para mostrar como son grabadas las macros ejecutaremos unas sencillas acciones que facilitarán
su comprensión.
Ejemplo
La grabadora de macros se activa desde el menú Herramientas (Tools/Macro/Record New Macro)
4
SINCOR Curso Avanzado Excel 2003
Se despliega la ventana “Record Macro”, en ella se puede indicar el nombre de la macro que se
va a grabar, el método abreviado para ejecutarla, dónde será almacenada y una breve descripción
de la misma.
Después de realizar varias acciones sobre la hoja de cálculo, hacemos clic en el botón
“Stop Recording” , para detener el grabado de la macro.
Modificación de Macros
Como se comentó anteriormente, es casi inevitable después de grabar una macro dejarla intacta,
pues siempre necesitará algún ajuste que obvie algún error o básicamente optimice (simplifique)
el código.
Demos un vistazo a lo que generó la grabadora de macros en el editor de Visual Basic, hacemos
clic en “Tools – Macro – Visual Basic Editor” o en “Tools – Macro – Macros…”, se desplegará
la ventana “Macro” seleccionaremos la macro recién guardada y hacemos clic en el botón “Edit”.
5
SINCOR Curso Avanzado Excel 2003
En el editor de Visual Basic veremos un código igual o similar a este:
Sub Macro1()'' Macro1 Macro' Macro recorded 05/10/2004 by Leonardo Cardona'
' ActiveCell.FormulaR1C1 = "Esta es una prueba de escritura: ""Hola Mundo!""" Range("A5").Select ActiveCell.FormulaR1C1 = "Este desplazamiento se realizó con el teclado" Range("F5").Select ActiveCell.FormulaR1C1 = "Y este con el mouse" Range("A1").Select Selection.Font.Bold = True Range("A5").Select Selection.Font.Bold = True With Selection.Font .Name = "Arial" .Size = 12 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Range("F5").Select Selection.Cut Destination:=Range("H5") Range("H5").Select Selection.Font.Bold = True With Selection.Font .Name = "Arial" .Size = 12 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone
6
SINCOR Curso Avanzado Excel 2003
.ColorIndex = xlAutomatic End With Columns("H:H").EntireColumn.AutoFit Selection.Copy Range("H7").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "Esto fue una copia de una celda" Range("H8").SelectEnd Sub
Como se puede ver en este código de Visual Basic, es posible, hasta cierto punto, intuir lo que
ejecuta la macro (más aún si fuimos nosotros mismos quienes la generamos), la coloración en el
código tiene un significado especial: el color verde significa que es un comentario, el color azul
significa que son palabras reservadas para Visual Basic y el color negro es simplemente código;
un color rojo indicará que hay un error en el código escrito.
En este punto podemos realizar los cambios que consideremos necesarios al código, se pueden,
por ejemplo, eliminar todas esas instrucciones que al final tienen un “= False” los cuales casi
siempre (no siempre) representan acciones que no hemos ejecutado pero que están vinculadas a la
propiedad de un objeto; o simplemente cambiarlas a “= True” para experimentar que pasa con
ellas, al culminar los cambios realizados es recomendable (mas no necesario) guardar los
cambios, lo que puede hacerse presionando el botón en la barra de herramientas del editor de
Visual Basic (esto guardará la hoja de cálculo!), cerremos el editor y ejecutemos nuevamente la
macro y veamos si los cambios surtieron efecto.
En este punto es necesario revisar el ambiente de desarrollo de VBA a fin de familiarizarnos con
él.
7
SINCOR Curso Avanzado Excel 2003
Editor de Visual Basic para Aplicaciones
El editor de VBA es el área que nos permite manejar los proyectos de programación que llevamos
a cabo. Los macros, procedimientos y funciones generados, son guardados dentro de la hoja de
cálculo indicada en cada caso. La pantalla principal de VBA se muestra a continuación:
Las partes de esta ventana son:
- Área de Trabajo: Es aquí donde se insertarán los módulos que contengan a los
macros o procedimientos. También se pueden incluir formularios con los que el
usuario pueda interactuar con los datos o con el programa
- Proyecto: Muestra cada libro de trabajo abierto actualmente en Excel, junto con
sus elementos: Hojas, gráficos, módulos y formularios
- Propiedades: Cada objeto utilizado en los programas posee propiedades o
características. En esta zona es posible, no solo ver esas características, sino fijar
valores a disposición del usuario
8
Área de Trabajo(Módulos y Formas)
Proyecto
PropiedadesVentana
InmediataObservación
SINCOR Curso Avanzado Excel 2003
- Ventana Inmediata: Resulta indispensable, durante la creación de programas,
modificar algunos valores mientras se ejecuta un programa, ver valores de alguna
variable en un momento dado o incluso modificar, durante la ejecución el sentido
del programa. Esto puede ser realizado en esta ventana inmediata.
- Observación: Permite hacer seguimiento de los valores de las variables durante
toda la ejecución del programa, aportando un conocimiento claro de su
comportamiento, con lo que podemos controlar que el programa esté realizando
lo que queremos que haga
Veremos un pequeño ejemplo de programa o subrutina que nos indicará la manera de manejar, al
menos básicamente, el editor de VBA.
Inicialmente, es necesario insertar o incluir un módulo en el cual podamos escribir nuestra
subrutina o programa. Para ello, desde el Editor de VBA, en el menú Insert (Insertar),
seleccionaremos la opción Module (Módulo). En el área de trabajo veremos una pequeña pantalla
blanca similar a la de otros programas editores como Notepad o Wordpad:
En ella podemos proceder a escribir directamente lo que queramos. En nuestro ejemplo,
escribiremos una rutina que sume dos valores. La siguiente es dicha rutina:
9
SINCOR Curso Avanzado Excel 2003
Sub Suma2Mas2() a = 2 b = 2 c = a + b ActiveCell.Value = cEnd Sub
Ahora podemos correr este sencillo programa desde el editor o desde Excel. La explicación más
simple del programa es que toma dos variables (a y b), les asigna un valor y el resultado de su
suma lo almacena en otra variable (c). Finalmente, la instrucción ActiveCell.Value = c, muestra
en Excel el resultado de la operación. La sintaxis correcta de esta rutina se verá mas adelante en
este curso.
Para ejecutar el programa desde el editor, basta con estar situado dentro del procedimiento y
presionar la tecla F5. También se puede ejecutar esta opción desde el menú Run:
Al ejecutar un macro tan sencillo como este es difícil notar algún cambio, pero en Excel, aparece
el resultado en la celda que actualmente contenga al cursor:
Es el primer macro creado directamente en el editor!. Puede hacer variaciones en los valores de
las variables o en la operación en si.. Puede agregar más variables si lo desea y ver el resultado
de esos cambios. A continuación se mostrará una ligera explicación de una herramienta
importante como es el Debug o depuración del programa.
VBA permite ejecutar el programa de varios modos: completo de una sola vez, un paso a la vez,
ejecutarlo hasta cierto punto. Todas estas son herramientas que permiten manejar mejor los
programas, ya que es posible ir viendo paso a paso como se comporta el código. Usaremos las
10
SINCOR Curso Avanzado Excel 2003
herramientas más usuales para la depuración y seguimiento de programas que podemos encontrar
en el editor, pueden ser encontradas en el menú Debug (Depuración):
- Step Into (Paso a paso): Permite ir ejecutando el programa línea por línea, cada
vez que ejecutamos esta opción, también accesible presionando la tecla F8, el
programa ejecuta la siguiente línea.
- Run to cursor (Ejecutar hasta el cursor). El programa correrá desde el inicio hasta
donde se encuentre ubicado el cursor en ese instante, deteniéndose al alcanzar esa
instrucción. De aquí en adelante es posible continuar con la ejecución o ir paso a
paso
- Add Watch (Agregar observación): Permite poner una variable en modo
seguimiento, de manera que su valor esté siempre disponible en la ventana de
“Observación” en la parte inferior del editor
- Toggle Breakpoint (Encender Punto de Parada): Esta opción enciende o apaga un
punto de parada. Al ejecutar el programa, este correrá hasta que consiga un
punto de parada, aquí se detendrá y devolverá el manejo al usuario, quien podrá
revisar algún valor o el comportamiento del programa. La opción es activada
también al presionar la tecla F9 desde cualquier parte del programa.
Al escribir el código del programa, VBA tiene la opción de ir completándolo automáticamente:
Esto ayuda a recordar la sintaxis de los comandos, también permite saber, los parámetros que
necesite alguna función de VBA o algún procedimiento.
Procederemos a escribir una función y veremos como se comporta dentro de Excel. En el mismo
módulo, debajo del procedimiento recién escrito, debemos transcribir el siguiente código:
11
SINCOR Curso Avanzado Excel 2003
Function SumaDosNumeros(a As Single, b As Single) As Single SumaDosNumeros = a + bEnd Function
Una función difiere de un procedimiento en que siempre debe dar un resultado, el tipo de
resultado dependerá del tipo de función. Las partes de una función son:
- Identificador de Función (Function): Esta palabra le informa a VBA que a
continuación viene un código que dará un resultado
- Nombre (SumaDosNumeros): Identifica a la función. Debe ser único para poder
hacer el llamado de la función desde Excel o desde otro procedimiento
- Parámetros (a As Single, b As Single): Los parámetros o argumentos son
opcionales y sirven como valores base para los cálculos realizados por la función
- Tipo de función (As Single): Hay que informar a VBA qué tipo de resultado será.
En este caso, el tipo Single corresponde a valor numérico real
- Instrucciones: En este caso la función sólo tiene una instrucción, pero puede
poseer todas las que sea necesaria para alcanzar el resultado
- Asignación de Resultado (SumaDosNumeros = ) Al finalizar una función
siempre hay que asignarle el resultado de sus cálculos al nombre que la
identifica. De esta manera VBA entenderá cuál es el valor final de la función.
- Finalización (End Function): Punto final de la función.
Como se aprecia en este ejemplo, esta función toma dos parámetros de tipo numérico y los suma,
mostrando finalmente el resultado también numérico. Una función puede ser usada desde VBA o
desde Excel. Para usarla en este último caso, simplemente basta con aplicarla como si fuese otra
función normal de Excel:
=SUMADOSNUMEROS(4, A1)
Los parámetros pueden ser literales o referencias a celdas, siempre y cuando esas celdas tengan
contenido numérico. Desde Excel, el resultado sería:
12
SINCOR Curso Avanzado Excel 2003
13
SINCOR Curso Avanzado Excel 2003
Código de Macros, VBA
Visual Basic para Aplicaciones tiene su fundamento en el lenguaje BASIC (Beginners
All-Purpose Symbolic Instruction Code – Código de instrucciones simbólicas de todo
propósito para principiantes), desarrollado hace ya 40 años en Estados Unidos por John
Kemeny y Thomas Kurtz. Es un lenguaje de programación basado en el idioma inglés
simple, con instrucciones sencillas de aprender y por ello, de amplia difusión. Es, quizás,
el lenguaje más fácil de aprender de todos los que existen, no por ello el más completo,
pero para propósitos generales de programación, cumple con todas las expectativas.
Ha visto grandes cambios en su evolución, hasta el punto que ahora es un lenguaje visual fácil de
usar. Los lenguajes visuales son herramientas llamadas de cuarta generación que permiten ir
“dibujando” las aplicaciones que se realizan. Gran parte del trabajo con estos lenguajes ya está
pre-programado por los creadores del lenguaje, así que ya no es necesario incluir la parte difícil
del código de manejo de Windows, tal como manejo de eventos o métodos.
VBA es una herramienta que se incluye con Microsoft Office a fin de que sus usuarios extiendan
las capacidades de estos paquetes, permitiendo no sólo la interacción sencilla entre ellos, sino con
otros programas que permiten la conexión a través de módulos de instrucciones o librerías
dinámicas.
La principal limitación que debe afrontar Basic o VBA, es su manera de manejar las
instrucciones. En programación se habla de dos metodologías diferentes: Compilación e
Interpretación. La primera convierte un código creado usando algún lenguaje de programación,
en código que sólo entiende la computadora, es decir transforma todas las instrucciones de un
programa en operaciones binarias internas de una computadora. Esto lleva a que los programas
sean más eficientes y más rápidos, ya que varias líneas de código pueden ser compiladas o unidas
en unas pocas instrucciones de la máquina.
Por su parte, los lenguajes interpretados, de los cuales forma parte VBA, tienen la desventaja de
que las instrucciones son leídas una por una, luego interpretadas, analizadas y por último
ejecutadas, cada vez una por una. La tecnología actual de VBA permite que el proceso sea una
14
SINCOR Curso Avanzado Excel 2003
mezcla de Interpretación y Compilación, pero por su naturaleza interpretativa, los programas
requieren librerías instaladas en cada computadora donde debe correr el programa que permitan
agilizar los procesos escritos en el código.
15