Curso Avanzado de Excel - Macros - 1

19
Excel 2003 Curso Avanzado: “Macros” Mayo 2005

Transcript of Curso Avanzado de Excel - Macros - 1

Page 1: Curso Avanzado de Excel - Macros - 1

Excel 2003

Curso Avanzado:

“Macros”

Mayo 2005

Page 2: Curso Avanzado de Excel - Macros - 1

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

Page 3: Curso Avanzado de Excel - Macros - 1

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

Page 4: Curso Avanzado de Excel - Macros - 1

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

Page 5: Curso Avanzado de Excel - Macros - 1

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

Page 6: Curso Avanzado de Excel - Macros - 1

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

Page 7: Curso Avanzado de Excel - Macros - 1

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

Page 8: Curso Avanzado de Excel - Macros - 1

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

Page 9: Curso Avanzado de Excel - Macros - 1

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

Page 10: Curso Avanzado de Excel - Macros - 1

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

Page 11: Curso Avanzado de Excel - Macros - 1

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

Page 12: Curso Avanzado de Excel - Macros - 1

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

Page 13: Curso Avanzado de Excel - Macros - 1

SINCOR Curso Avanzado Excel 2003

13

Page 14: Curso Avanzado de Excel - Macros - 1

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

Page 15: Curso Avanzado de Excel - Macros - 1

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