You are on page 1of 161

DIRECCIN GENERAL DE EDUCACIN CONTINUA

PROGRAMA DE EDUCACIN CONTINUA EN COMPUTACIN

PROGRAMACIN DE MACROS CON


VISUAL BASIC PARA EXCEL
Tabla de contenidos
Que es una Macro............................................................................................................3
Grabacin de pulsaciones..............................................................................3
Escribir el cdigo............................................................................................3
Crear una Macro..............................................................................................3
mbito de ejecucin.......................................................................................5
Grabar una Macro............................................................................................................6
Probar la Macro..............................................................................................11
Editor de Visual Basic...................................................................................13
Los Mdulos..................................................................................................19
Libro de Macros Personal.............................................................................................24
Grabar una Macro en el libro de Macros Personal....................................24
Ver cdigo de una macro del libro de macros Personal...........................27
Ocultar el libro de macros personal............................................................29
Macros ms Eficientes..................................................................................................30
Simplificar una macro...................................................................................33
Cambio de nombre a una macro.................................................................35
Asociar una macro a un botn....................................................................36
Texto en la barra de estado para un botn de una macro........................41
Barra de herramientas de macros...............................................................43
Referencias en las Macros...........................................................................................45
Referencia absoluta......................................................................................45
Referencia Relativa.......................................................................................47
Control de errores en una Macro.................................................................................51
On Error Resume Next..................................................................................59
On Error GoTo................................................................................................60
Macros programadas....................................................................................................62
Insertar un Modulo........................................................................................64
Fundamentos de Programacin..................................................................65
Objetos, propiedades y mtodos.................................................................................65
Objetos...........................................................................................................65
Propiedades...................................................................................................66
Principales objetos de Visual Basic for Application para Excel..............67
Crear Funciones..........................................................................................................142
Creacin de un Formulario.........................................................................................154
Insercin de Objetos en el Formulario.....................................................155
Insercin de Cdigo de Programacin.....................................................159
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS EN EXCEL
Conjunto 1
Pgina 3

Introduccin A medida que se avanza en el conocimiento de la


planilla de clculo Excel se va haciendo mas patente la
necesidad de automatizar ciertos procedimientos de
manera de ejecutarlos ms rpidamente.
Para resolver esta necesidad Excel cuenta con un
poderoso lenguaje de programacin llamado Visual
Basic for Application, el cual nos permite construir
poderosas rutinas que nos permiten un mayor control
sobre el programa.
Visual Basic es un lenguaje de programacin muy
utilizado por los desarrolladores de sistemas y la
versin que trae Excel est orientada al trabajo con
todos los objetos que trae la planilla.

Que es una Macro Las macros son rutinas que nos permiten acelerar la
ejecucin de procedimientos de uso frecuente dentro de
un sistema. Existen dos tipos de macros:

Grabacin de pulsaciones Este tipo de macros son las ms comunes, consisten en


grabar el procedimiento que queremos que la macro
ejecute automticamente. Visual Basic se encarga de ir
traduciendo las acciones realizadas por el usuario a
cdigo para su posterior utilizacin o modificacin

Escribir el cdigo Tambin se puede escribir el cdigo de la macro


directamente en el Editor de Visual Basic. El Editor de
Visual Basic es una aplicacin parecida a un
procesador de texto en el cual se ingresan las
instrucciones que queremos que la macro realice
posteriormente. Ms adelante hablaremos con ms
detalle de este tipo de macros.

Crear una Macro A continuacin procederemos a crear nuestra primera


macro para cual nos pondremos en la siguiente
situacin:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS EN EXCEL
Conjunto 1
Pgina 4

Imagine que usted tiene que colocar continuamente


Autoformato Clsico 3 a los cuadros que va creando
dentro de su planilla, tarea en la cual pierde demasiado
tiempo, por lo que desea crear una macro que haga el
trabajo por usted.
Antes de grabar cualquier macro lo mas importante es
tener claro el procedimiento a realizar para llegar al
resultado deseado, en el caso nuestro debemos conocer
el procedimiento para poner Autoformato clsico 3,
conocer las restricciones del mismo, etc.
En nuestro caso debemos saber que para poder colocar
Autoformato a un cuadro debemos situarnos dentro de
ste, en cualquier celda con datos, o bien en alguna
celda vaca, pero que limite con alguna celda del
cuadro y por ningn motivo situarnos en una celda
vaca y que las celdas vecinas no tengan datos ya que
el procedimiento no se puede realizar en este caso.
Para probar lo recin expuesto ingrese a Excel y
escriba los siguientes datos

Sitese dentro de una celda con datos y luego vaya al


men Formato y elija la opcin Autoformato ver que
esta se activa, lo mismo pasa si usted si sita en una
celda vaca, pero vecina a una celda con datos (por
ejemplo la celda A5) y da la misma orden. Pero si usted
se sita en una celda vaca que tiene sus celdas vecinas
tambin vacas (por ejemplo la celda A1), notar que es
imposible dar la orden de autofomato ya que Excel nos
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS EN EXCEL
Conjunto 1
Pgina 5

arroja un error indicando que es imposible ejecutar la


accin requerida.

Este tipo de situaciones nosotros las debemos tener


muy claras a la hora de crear una Macro ya que no
podemos permitir que se nos presente este error cuando
estamos grabando la macro.

mbito de ejecucin Otra cosa que debemos tener clara a la hora de crear
una macro es dnde queremos que esta se ejecute, es
decir, queremos que la macro se ejecute sobre el rango
de celdas que tengamos seleccionado al momento de
ejecutar la macro o bien necesitamos que la macro se
ejecute siempre sobre el mismo Rango.
Lo usual es que necesitemos que la macro se ejecute
sobre lo que tengamos seleccionado en el momento de
la ejecucin, pero a veces la macro est escrita para
afectar siempre el mismo rango de celdas.

Procederemos a grabar nuestra primera macro la cual


colocar Autoformato Clsico 3 al cuadro creado
anteriormente, pero tambin la dejaremos disponible
para utilizarla en otros cuadros.
Grabe el archivo recin creado con el nombre
Ejercicios de Macros.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 6

Grabar una Macro 1.- Vaya al Men Herramientas


2.- Elija la opcin Macros
3.- del Submen elija la opcin Grabar nueva Macro

4.- A continuacin usted ver el siguiente cuadro:


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 7

5.- Lo primero es escribir un nombre para identificar la


Macro. Este nombre no puede exceder los 64 caracteres
(en el caso de las macros escritas directamente en el
Editor de Visual Basic el nombre puede tener una
extensin de 255 caracteres), adems el nombre no
puede contener espacios, caracteres especiales ( puntos,
comillas, gatos, parntesis, etc.), tampoco el nombre de
la Macro puede ser una palabra reservada,
entendindose por palabra reservada todas aquellas
palabras que son propias del lenguaje (Sub, For, Next,
GoTo, etc.). Se recomienda utilizar el siguiente estilo de
escritura para los nombres de las macros.

CrearFormatoCeldas
ElegirFuente
AgrandarColumna

Escriba como nombre de la Macro


ColocarAutoformatoClsico3

6.- Luego debemos asignar una combinacin de teclas


para ejecutar la macro una vez que la tengamos
grabada y la vayamos a utilizar. Es importante saber
que si usted escriba la letra de la combinacin con
minscula la combinacin de teclas quedar constituida
por la pulsacin de la tecla Control mas la letra
ingresada por usted, pero si la letra ingresada la escribe
con maysculas se entiende que la combinacin de
teclas estar compuesta por la tecla Control mas la
tecla Shift seguida de la letra ingresada por usted. Est
ultima opcin es la mas aconsejable ya que es bueno
recordar que la mayora de los mtodos abreviados mas
utilizados en Excel comienzan con la tecla Control mas
un letra (Control C, Control G, Control A, etc.) y si
usted utiliza alguna de estas combinaciones como
combinacin de ejecucin de una macro no podr
utilizar la tecla de mtodo abreviada para realizar un
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 8

procedimiento estndar de Excel sino que se le


disparar la Macro.
En nuestro caso ingresa la letra A mayscula para que
la combinacin sea Control + Shift + A

A continuacin se debe indicar dnde se guardar la


Macro, por omisin nos ofrece guardarla en el mismo
libro en el cual estamos trabajando con lo cual la
Macro solo quedara disponible para ejecutarse en este
libro, otra opcin es guardarla en el libro de macros
Personal, este libro es un libro que se crea cuando
usted guarda la primera macro en este libro (antes no
existe). La particularidad de este libro es que una vez
que se grabo una Macro en l cada vez que usted abra
Excel automticamente se abrir este libro con lo cual
usted tiene acceso a las macros guardadas en el mismo,
pudiendo utilizar las macros en cualquier momento,
est la opcin ms recomendable, pero no la
utilizaremos por ahora para verla con ms detalle,
adelante.
Elija guardar la Macro en Este Libro

Opcionalmente usted puede ingresar una descripcin


acera de las acciones realizadas por su Macro:
Ingrese Colocar Autoformato Clsico 3

Al terminar su cuadro debera quedar con la siguiente


ilustracin.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 9

Una vez verificado la correcta escritura de la


informacin de un clic en el botn aceptar.
Se le debiera presentar una pantalla como la siguiente:

Barra de herramienta
Detener Grabacin

Barra de Estado indicando


que Excel est Grabando

A continuacin debemos realizar el procedimiento que


queremos ensearle a la macro para lo cual haga lo
siguiente:
Vaya al Men Formato
Elija la opcin Autoformato
Del cuadro de dialogo seleccione Clsico 3
D un clic en el botn Aceptar
Detenga la grabacin de la Macro dando un clic
en el botn Detener de la barra de herramientas
Detener grabacin.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 10

Para probar el funcionamiento de su Macro le


recomendamos lo siguiente:

1.- Seleccione el cuadro al cual se le puso Autoformato


2.- Vaya al men Formato
3.- Elija la opcin Borrar
4.- Del Submen elegir la opcin Formato
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 11

Luego copie el cuadro unas cuatro veces hacia abajo


como se aprecia en la ilustracin:

Probar la Macro Para probar el funcionamiento de su Macro active una


de las celdas del cuadro y presione Control + Shift + A,
si todo anduvo bien el cuadro debera asumir el
Autoformato Clsico 3. Repita el procedimiento para
los cuadros restantes.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 12

Ver el cdigo de la Macro Para ver el cdigo de la Macro recin escrita el


procedimiento es el siguiente:

1.- Vaya al Men Herramientas


2.- Elija la opcin Macro
3.- Del Submen elija la opcin Macros
4.- Debiera ver el siguiente cuadro

Ejecutar la Macro
seleccionada.

Cerrar este cuadro

Ir al Editor de Visual Basic Ejecutar la Macro


y ver el cdigo detrs de la haciendo una pausa
Macro lnea por lnea de
cdigos.
Crear una nueva Macro
Eliminar la Macro
seleccionada.

Abre un cuadro de dialogo en el cual se puede ingresar la


combinacin de teclas a usar para ejecutar la Macro y
tambin da la posibilidad de ingresar una descripcin de la
Macro.

Seleccione la Macro recin creada y de un clic en el


botn Modificar. Este procedimiento nos llevar al
Editor de Visual Basic mostrndonos el cdigo
generado durante la grabacin de la Macro.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 13

Editor de Visual Basic

Barra de titulo Barra de Mens Barra de herramientas Estndar

Explorador de
Proyectos
Cdigo de la Macro

Barra separadora
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 14

A continuacin examinaremos el cdigo de la Macro.

Palabra reservada con la cual comienzan todas las Macros, Sub significa Subrutina o
Sub procedimiento, por cada Sub debe haber un End Sub que indica el final de la
subrutina.

Nombre de la Macro

Lneas de comentario, comienzan con


un apostrofo, el texto es de color verde
y no se ejecutan al utilizar la Macro, se
pueden insertar dentro del cdigo para
documentar la Macro y hacer mas fcil
su lectura y comprensin.

Selection.Autoformat Indica que al rea seleccionada se le


quiere colocar un Autoformato

Format:=xlRangeAutoformatClassic3 Indica el tipo de Autoformato


seleccionado para el Rango en nuestro
caso Clsico 3.

Number:=True, Font:=True, etc. Aqu hablaremos de una de las


caractersticas ms importantes de las
Macros de grabacin de pulsaciones.
Cuando usted, durante la grabacin de
una Macro, se dirige a un cuadro de
dialogo la Macro traduce a cdigo todo
lo que encuentra en la ficha del cuadro de
dialogo usado. En nuestro caso la Macro
anot el estado en el cual se encontraban
las casillas de verificacin que contena
el cuadro de dialogo de Autoformato.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 15

Number:=True, Font =True, Alignment:=True, Border:=True,


Pattern:=True, Width:=True

Para volver a Excel usted puede dar un clic en el botn


correspondiente en la barra de tareas
o dar un clic en el icono que se
encuentra en la barra de herramientas
Estndar del Editor de Visual Basic.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 16

Es importante hacer notar que al seleccionar una celda


o un rango de celdas antes de comenzar a grabar la
Macro esta quedar disponible para ser utilizada de ah
en adelante sobre cualquier Rango de celda de su
planilla, en cambio, si usted durante la grabacin de la
Macro selecciona un Rango de celda; la Macro cada
vez que se ejecute realizar las acciones en ese Rango
en particular independiente de lo que usted tenga
seleccionado a la hora de ejecutar la Macro.
A continuacin veremos un ejemplo de esto, grabando
la misma Macro anterior,
pero con la diferencia que
durante la grabacin de la
misma, seleccionaremos un rango de celdas en
particular.

Ejercicio Borre los formatos a los cuadros utilizados en el


ejercicio anterior; para esto seleccione el Rango
correspondiente a los cuadros, luego vaya al Men
Formato, elija la opcin Borrar, y del Submen, escoja
la opcin Formatos.

1.- Vaya al Men Herramientas


2.- Elija la opcin Macro
3.- Seleccione la opcin Grabar nueva macro
4.- Ingrese como nombre de la macro
ColocarFormatoRangoEspecifico
5.- Tecla mtodo abreviado Control + Shift + B
6.- Guardar Macro en: Este libro
7.- En Descripcin escriba Colocar Autoformato a un
rango especifico de la hoja.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 17

8.- D un clic en el botn Aceptar

9.- A continuacin seleccione el Rango B2:F9, que


corresponde al primer cuadro.
10.- Aplique Autoformato Clsico 3
Vaya al Men Formato
Elija la opcin Autoformato
Del cuadro de dialogo seleccione Clsico 3
D un clic en el botn Aceptar
Detenga la grabacin de la Macro dando un clic
en el botn Detener de la barra de herramientas
Detener grabacin.

11.- Sitese en el segundo o tercer cuadro y ejecute la


Macro utilizando las teclas de mtodo abreviado
Control+Shift+B. Notar que cada vez que
ejecutamos nuestra Macro esta siempre afecta el
mismo Rango de celdas, esto sucede por que
durante la grabacin de la Macro nosotros
seleccionamos un Rango de celdas en particular y
la macro tradujo esta pulsacin a cdigo como
veremos ahora.

Revisar Cdigo A.- Vaya al men herramientas


B.- Seleccione la opcin Macro
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 18

C.- Selecciones Macros


D.- Seleccione la Macro recin creada
E.- D un clic en el botn Modificar

Deberamos estar viendo el siguiente cdigo:

Lnea distinta

Notar que la nica diferencia la hace la primera lnea


de cdigo, el resto es igual a la macro anterior, pero
esta lnea hace que el funcionamiento de la Macro sea
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 19

totalmente distinta ya que es la causante de que la


Macro se ejecute siempre sobre el mismo Rango.
Tambin es vlido comentar que si usted ejecuta la
Macro en una hoja distinta a la que contiene el cuadro
la macro se ejecutar en el Rango indicado en el cdigo
pero de esta hoja. Si el Rango est vaco se mostrar un
error ya que para colocar Autoformato a un Rango este
debe contener Datos.

Los Mdulos Los Mdulos son el lugar donde Visual Basic almacena
el cdigo de las Macros, un mdulo puede contener
varias Macros. Los Mdulos se generan por sesin, lo
que significa que si usted ingresa a Excel y crea
Macros en un archivo todas las macros creadas en esa
sesin quedarn en el mismo mdulo, pero si usted
cierra el archivo para luego volverlo a abrir y despus
crea una Macro, sta y las macros posteriores se
guardarn en este nuevo Mdulo.

Mdulo
Seleccion
ado Macros del
Mdulo
seleccionado

Mdulos
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 20

Ejercicios: A continuacin se sugiere una serie de ejercicios para


conocer mejor el funcionamiento de las Macros.

Ajustar Texto La siguiente Macro tiene como finalidad Ajustar el


texto de las celdas que se encuentren seleccionadas a la
hora de ejecutar la Macro, adems la Macro deber
centrar estas celdas tanto en horizontal como
verticalmente. Recuerde que ajustar texto nos permite
que los textos demasiado largos se vean en distintas
lneas dentro de una misma celda, para esto Excel
modifica el alto de las celdas seleccionadas para poder
mostrar la totalidad de los datos

Vaya al Men herramientas, elija Macro y luego grabar


Nueva Macro
A continuacin escriba los siguientes valores:

A continuacin realice los siguientes pasos:


1.- Vaya al men Formato
2.- Elija la opcin Celdas
3.- D un clic en la ficha Alineacin
4.- Active la casilla de verificacin Ajustar texto
5.- En alineacin Horizontal elija Centrar
6.- En alineacin Vertical elija Centrar
7.- D un clic en el botn Aceptar
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 21

8.- Detenga la grabacin de la Macro

Vea el cdigo de su Macro


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 22

Como recordar en ningn momento, durante la


grabacin de la Macro, seleccionamos un rango de
celda por lo que la macro asume que la accin debe
realizarse sobre el rea que se encuentre seleccionada
al momento de ejecutar la Macro. Notar que una de
las primeras instrucciones de la macro hace mencin al
objeto selection lo que indica que sobre lo seleccionado
se realice la accin.
Al igual que la Macro del Autoformato, aqu la macro
anot todo lo que apareca en el cuadro de dialogo
utilizado en la grabacin.

Otra cosa interesante de esta Macro es el uso de la


sentencia With, esta sentencia se usa para abreviar
cdigo, de manera de que la macro sea ms rpida y
mas legible. En el caso anterior todas las instrucciones
que se encuentran entre el With y el End With deberan
haber comenzado con la instruccin Selection, para no
escribirla cada vez Visual Basic abrevia colocando esta
sentencia.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 23

Eliminacin de lneas Para eliminar las lneas innecesarias de una macro


innecesarias basta con seleccionarlas con el Mouse y luego
presionar la tecla Supr del teclado. Al eliminar estas
lneas logramos que nuestra Macro se ejecute mas
rpidamente al no tener que leer el cdigo al ejecutarse
la Macro.
Borre las lneas que se aprecian en la siguiente
ilustracin.

Su Macro debe quedar como sigue.


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 24

Libro de Macros Personal El libro de Macros Personal es un libro de


caractersticas muy especiales que posee Excel. En l
es posible almacenar Macros que estarn disponibles
para ser utilizadas en cualquier libro de Excel, de ah
su importancia. A continuacin veremos cmo opera
este libro y que mejor que hacerlo con un ejemplo.
Imaginemos que necesitamos confeccionar una macro
que aplique formato dlar con un decimal a los
nmeros que tengamos seleccionados.

Grabar una Macro en el 1.- Vaya al Men Herramientas


libro de Macros Personal 2.- Elija la opcin Macros
3.- del Submen elija la opcin Grabar nueva Macro
5.- Coloque como nombre a la macro FormatoDlar
6.-Use como tecla de mtodo abreviado la
combinacin Control + Shift + D
7.- En Guardar Macro en, seleccione la opcin Libro
de Macros Personal
8.- En Descripcin coloque Asignar formato dlar a
las celdas seleccionadas
9.- D clic en botn Aceptar
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 25

Colocar un Formato Ahora grabe las siguientes instrucciones:


Numrico Personalizado
Ir a Men Formato
Elegir opcin Celdas
Dar clic en Ficha
Nmero
Elegir Categora
Nmero
Seleccione un
nmero con punto separador de miles y un
decimal.
Vaya a la categora
Personalizada
En el cuadro tipo
anteponer al formato propuesto lo siguiente
USD*, quedando como USD* #.##0,0 (El
punto indica que se usar este smbolo como
separador de miles, el 0 que aparece despus de los
gatos (##0) indica a Excel que al haber un valor
cero en la celda lo muestre de lo contrario lo oculta,
la coma es el separador decimal a utilizar y la
cantidad de ceros que aparezca a la derecha de esta
indica la cantidad de decimales a utilizar)
Su cuadro debera
verse como el siguiente:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 26
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 27

D un clic en el
botn Aceptar
Detenga la
grabacin de la Macro
Pruebe su Macro
sobre un grupo de celdas con nmeros
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 28

Ver cdigo de una macro Si queremos ver el cdigo que hay detrs de una
del libro de macros Macro almacenada en el libro de Macros Personal
Personal
debemos realizar el siguiente procedimiento:

1. Del men Ventana seleccionar la opcin Mostrar.

2. En este cuadro aparecer el nombre Personal.xls


que es su libro de macros personal. Seleccinelo y
hacer un clic en Aceptar.
3. Vaya al Men Herramientas
4. Elija la opcin Macro
5. Seleccione del submen Macros..
6. Elija la Macro FormatoDlar
7. D un clic en botn Modificar.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 29

8. El Libro Personal de macros, es un libro normal de


Excel, pero tiene la particularidad de guardarse
automticamente en el directorio de inicio de la
aplicacin y tiene la propiedad de oculto. Por esta
razn es usado como bodega de todas las macros
asociadas a la aplicacin y no al archivo abierto.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 30

Ocultar el libro de macros Para volver a ocultar el libro personal de macros


personal realice lo siguiente:

1. Teniendo activo el libro de macros personal,


seleccionar del men Ventana la opcin Ocultar.

Nota: Cuando cierre Excel, el programa le preguntar


si graba los cambios en el libro de macros personal.
Debe responder segn su necesidad.

Cuando necesite eliminar las macros del libro personal,


deber eliminar el archivo Personal.xls de la carpeta
de inicio del programa.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 31

Macros ms Eficientes Teniendo activo un libro, podra hacerse necesario


ocultar las Lneas de divisin de las celdas. Para ello
deber desactivar la casilla Lneas de divisin de la
ficha Ver del men Opciones. Cuando necesite ver
nuevamente las lneas de divisin en las celdas, deber
activar la casilla en el mismo men. Realizaremos este
procedimiento mediante una macro.

1. Del men Herramientas seleccionar la opcin


Macro y luego Grabar nueva macro.

2. Asigne el nombre OcultarLneasDivisin, agregue


descripcin, asigne mtodo abreviado
CONTROL+SHIFT+E y direccionar la grabacin al
libro de macros personal. Hacer un clic en Aceptar.

3. Del men Herramientas seleccione el comando


Opciones, luego desactivar en la ficha Ver la
casilla Lneas de divisin. Hacer un clic en
Aceptar.

4. Hacer un clic en el botn Detener grabacin.


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 32

La macro quedar as:

Esta macro es muy parecida a la macro FormatoDolar


pero la propiedad DisplayFormulas = True no afecta a
la seleccin sino a la ventana activa.

Recuerde que la macro est en el libro de macros


personal.

Pruebe la macro. Para probarla primero active la casilla


Lneas de divisin del men opciones.

Note que es ms fcil y rpido ocultar las lneas con la


macro que con el men.

Para volver a mostrar las lneas tendramos que crear


otra macro. Pero es ms eficiente que sea una misma
macro que muestre frmulas y resultados.
Para ello realizaremos lo siguiente:

1. Active el libro de macros personales.

2. Borre la palabra True.

3. Digite despus del signo igual un espacio y la


siguiente sentencia: (mantenga los espacios)
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 33
Not ActiveWindow.DisplayGridlines
La macro deber quedar as:

Active cualquier libro y presione repetidas veces las


combinacin CONTROL+SHIFT+E. Note como
funciona su macro.
La macro lee el valor antiguo de la propiedad y lo
cambia por su opuesto por medio de la palabra Not y
asigna este valor nuevo a la propiedad.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 34

Simplificar una macro La macro anterior contiene una sola lnea, en algunas
oportunidades y dependiendo de lo que se necesite,
esta lnea podra ser demasiado larga.
En esta macro la propiedad DisplayGridlines afecta a la
ventana activa a ambos lados del signo igual.
Podramos utilizar la estructura With de tal manera de
evitar la escritura repetitiva.

1. Borre la palabra ActiveWindow a ambos lados de la


sentencia.

2. Ubique el punto de insercin al inicio de la lnea de


donde borr ActiveWindow.

3. Presione Enter y suba a la lnea superior el punto de


insercin.

4. Escriba With un espacio y la palabra ActiveWindow.

5. Ubique el punto de insercin al inicio de la lnea


.DisplayGridlines = Not .DisplayGridlines.

6. Presione la tecla Tab para sangrar esta lnea.


Ubquese al final de esta misma lnea y presione
Enter.

7. Presione una vez retroceso para que el punto de


insercin quede a la misma altura que With
ActiveWindow.

8. Escriba End With.


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 35

La macro quedar entonces as:

Prubela, presionando repetidas veces la combinacin


CONTROL+SHIFT+E.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 36

Cambio de nombre a una El nombre que asignamos a la macro anterior


macro (OcultarLneasDivisin) ya no es adecuado.
Procederemos a cambiarla.

1. Activar el libro de macros personales.

2. En el inicio de la macro dice :

Sub OcultarLneasDivisin().

En vez de OcultarLneasDivisin escriba

MostrarOcultarLneasDivisin.

3. Si va al men Herramientas Macro el nuevo


nombre ha cambiado automticamente en este
cuadro.

No ocurre as en las lneas de los comentarios (lneas


verdes de la macro). Si quiere cambiarlos deben
modificarse manualmente.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 37

Asociar una macro a un Anteriormente hemos ejecutado las macros usando


botn mtodos abreviados y con el men ejecutar macros.
Estas tambin pueden ser asociadas a un botn de la
barra de herramientas. Para ello debe realizar lo
siguiente:

1. Activar el libro que contiene la macro a la cual se


asociar a un botn. Si la macro est en el libro de
macros personales, no es necesario que est visible.

2. Del men Ver seleccionar la opcin Barra de


herramientas, seleccione al final del submen la
opcin Personalizar. Aparecer el siguiente cuadro:

Crear una nueva Barra


de Herramientas

Cambiar nombre a una


Barra de Herramientas

Eliminar una barra de


herramienta creada
anteriormente

Permite restaurar una


Permite acoplar una barra de barra de herramientas a
herramienta personalizada al su estado inicial.
envio de un archivo, ya sea
por Correo o al pasarlo a un
disco.

3. Cree una nueva barra de herramientas haciendo lo


siguiente
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 38

D un clic al botn Nueva

Escriba el siguiente nombre para su barra

D un clic al botn Aceptar

4. Hacer un clic en la ficha Comandos. En la lista de


Categoras, seleccionar Macros. En la lista de
comandos tendr una sola opcin para personalizar
un botn. Seleccione este comando y arrstrelo hacia
la barra de herramientas de formato presente en la
ventana de Excel.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 39

5. Elija el botn Smile y arrstrelo a su nueva Barra.

6.

Marque el botn que agrego con el botn derecho


del mouse y seleccione el ltimo comando Asignar
macro
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 40

7. En este cuadro aparecer el listado de las macros que


tiene disponibles en el momento. De la lista
seleccione el nombre de la macro a la cual desea
asignar un botn.

8. Hacer un clic en Aceptar.

9. Cierre el cuadro de dilogo Personalizar.

Con los pasos antes descritos para ejecutar la macro


bastar que active el botn en la barra de herramientas.

Nota: Recuerde que si la macro esta almacenada en


cualquier libro de Excel, para ejecutarla deber tener
abierto el libro. Si la macro est almacenada en el libro
de macros personal, bastar con activar el botn.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 41

Texto en la barra de Los botones de la barras de herramientas de Excel,


estado para un botn de despliegan una explicacin de su funcin en la barra
una macro
de estado cuando se ubica el cursor del mouse sobre
ellos. Para que un botn de una macro haga lo mismo
debe realizar los siguientes pasos:

1. Debe tener abierto el libro que contiene la macro


asociada a un botn en la barra de herramientas. Si
la macro se encuentra en al libro de macros
personales, este deber estar visible.

2. .Desde el men ver elija Barras de Herramientas, y


luego Personalizar
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 42

3. Luego seleccione el botn de la barra que


personalizamos con el botn derecho del mouse

4. En el men contextual encontrar la opcin:


Nombre: Escriba aqu la descripcin de la macro.

5. Luego cierre la ventana Personalizar. Ahora, cuando


el mouse se ubique sobre ste botn, se mostrara una
leyenda amarilla (Tips) que muestra la leyenda que
ingreso
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 43

Barra de herramientas de Para grabar y ejecutar macros tambin se puede usar la


macros barra de herramientas de Visual Basic. Para activarla
en pantalla debe realizar lo siguiente:
1. Del men Ver seleccionar Barras de
herramientas..
Activar la opcin Visual Basic

De esta barra debe usar el siguiente botn para grabar


macros:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
EDITAR UNA MACRO
Conjunto 1
Pgina 44

Para detener la grabacin puede usar el siguiente


botn:

Para ejecutar un macro:


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 45
Referencias en las Macros Referencia absoluta
Si tiene visible la Es el tipo de referencia por omisin de las macros, lo
barra de herramientas que significa que todos los desplazamientos, al
de Visual Basic
puede dar la orden de momento de grabar una macro, los guardar como
grabar presionando
este botn
rangos especficos y cada vez que se ejecute la Macro
se ira a seleccionar estos rangos o a realizar acciones
sobre estos Rangos.
Ejemplo
1. Sitese en una hoja en blanco de un libro

2. Active la celda B2 de este libro

3. Vaya al Men Herramientas

4. Elija la opcin Macro

5. Del submen seleccione la opcin Grabar


Macro

6. Ingrese los siguientes valores

7. D un clic en botn aceptar

8. Presione la tecla flecha hacia abajo una vez y


luego coloque color de relleno azul.

9. Detenga la grabacin
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 46

Ver cdigo de la Macro 1. Vaya al Men Herramientas


2. Elija la opcin Macros
3. Del submen elija Macros
4. Del listado elija la Macro recin grabada
5. El editor de Visual Basic nos mostrar el
siguiente cdigo:

Como se puede notar en el cdigo, la pulsacin de la


tecla flecha hacia abajo partiendo de la celda B2 se
grab como desplcese a la celda B3, esto significa
que independientemente de la celda en la cual nos
encontremos al ejecutar esta macro siempre ir a
colocarle color azul de fondo a esta celda y no a otra.
Pruebe esto ejecutando la Macro situado en distintas
celdas.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 47

Referencia Relativa Este tipo de referencia nos permite desplazarnos dentro


de la planilla al grabar la macro y que este
desplazamiento se interprete como desplazamientos a
contar de la celda que tengamos seleccionada a la hora
de ejecutar. Esto nos permite crear Macros que se
desplacen, a partir de la celda activa, hacia otras celdas.

Ejemplo:

A continuacin crearemos una Macro exactamente igual


a ala anterior salvo que la grabaremos con referencia
relativa para ver la diferencia entre una y otra al
momento de ejecutarla.

1. Seleccione la celda B2 de una hoja en blanco


2. Vaya al Men Herramientas
3. Elija la opcin Macros
4. Seleccione opcin Grabar Macro
5. Ingrese los siguientes valores

6. D un clic en el botn Aceptar


7. Realice las siguientes acciones
Ubique la Barra de herramientas Detener
grabacin y d un clic en el botn Referencia
relativa.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 48

Presione la tecla flecha hacia debajo de su teclado


Coloque color azul de fondo a la celda
Detenga la grabacin de la Macro.
Ver cdigo de la Macro 1. Vaya al Men Herramientas
2. Elija la opcin Macros
3. Del submen elija Macros
4. Del listado elija la Macro recin grabada
5. El editor de Visual Basic nos mostrar el
siguiente cdigo:

Como ver, si comparamos esta Macro con la anterior


la diferencia se encuentra en la primera lnea de
cdigo. Offset es una propiedad del objeto ActiveCell
(celda activa) que permite hacer desplazamientos a
contar de la celda activa. La estructura de esta
propiedad es la siguiente:

ActiveCell.Offset(1, 0).Range("A1").Select

ActiveCell = Celda activa


Offset(1,0) = Indica el tipo de desplazamiento a
realizarse, el primer nmero indica cuantas filas a
contar de la celda activa debe desplazarse. Si el
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 49

nmero es positivo indica que debe desplazarse filas


hacia abajo, de lo contrario debe desplazarse filas
hacia arriba.
El segundo nmero afecta a las columnas. Si el
nmero es positivo indica columnas hacia la derecha a
partir de la celda activa, si este es negativo indica
columna hacia la izquierda.
A continuacin se ofrecen algunos ejemplos de esta
propiedad.

ActiveCell.offset(1,0).Select = desplazarse una fila


hacia abajo.

ActiveCell.offset(-1,0).Select = desplazarse una fila


hacia arriba.

ActiveCell.offset(0,1).Select = desplazarse una


columna hacia la derecha.

ActiveCell.offset(0,-1).Select = desplazarse una


columna hacia la izquierda.

ActiveCell.offset(1,1).Select = desplazarse una fila


hacia abajo y una columna hacia la derecha.

ActiveCell.offset(-4,-2).Select = desplazarse cuatro


filas hacia arriba y dos columnas hacia la izquierda.

Range(a1).Select : Esta instruccin nos permite que


una vez realizado el desplazamiento seleccionar un
conjunto de celdas. Si usted durante la grabacin
solamente se desplazo sin hacer hacer una seleccin,
al llegar a las celdas destino aparecer la instruccin
Range(a1).Select, que corresponde a un rango
virtual que indica que al termino del movimiento solo
quede seleccionada la celda activa. Para entender de
mejor forma esta instruccin modifique la instruccin
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 50

cambindola por lo siguiente:

ActiveCell.Offset(1, 0).Range("A1:B5").Select

Al ejecutar la Macro esta se desplazar una celda


hacia abajo (Offset(1,0)), y luego a contar de esta
posicin seleccionar, 5 celdas hacia abajo y dos hacia
la derecha. Esto se debe a que el Rango virtual
A1:B5 son 10 celdas.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 51

Control de errores en una A medida que los programas van creciendo la


Macro probabilidad de cometer errores tambin va creciendo.
Los errores se clasifican normalmente en tres categoras.

Errores en tiempo de compilacin.


Son los tpicos errores que impiden hacer funcionar el
programa debido, por ejemplo, a errores de sintaxis en
las instrucciones, llamadas a funciones que no existen o
llamadas con el tipo o el nmero de parmetros
incorrectos, etc. Este tipo de errores no dan demasiados
problemas, primero porque el compilador avisa de donde
se han producido y luego porque simplemente revisando
la sintaxis se solucionan rpidamente.

Errores en tiempo de ejecucin.


Estos errores se producen por una mala programacin
del cdigo al no haber previsto determinados casos
concretos o especiales, como por ejemplo intentar abrir
un archivo que no existe, imprimir sin comprobar que la
impresora est conectada, definir mal la dimensin de un
array e intentar acceder a miembros que no existen, etc.
Cuando se produce este tipo de errores se detiene la
ejecucin del programa y normalmente se informa del
tipo de error que se ha producido. Muchos de estos
errores se pueden solucionar mediante rutinas o
funciones de tratamiento de errores, estudiaremos este
tipo de rutinas un poco ms adelante.

Errores de funcin.
Son los ms complicados de detectar ya que ni se
detectan en la fase de ejecucin, ni provocan la detencin
del programa, son debidos a la incorrecta programacin
de algn proceso y como resultado se obtienen datos
errneos. Errores de este tipo son clculos mal hechos,
bucles infinitos, devolucin de valores incorrectos, etc.
Como ni los detecta el compilador, ni provocan la
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 52

interrupcin del programa deben revisarse a mano, y


claro, si el programa es extenso y trata muchos datos, su
deteccin puede resultar dificultosa. Visual Basic, y
todos los entornos de programacin incorporan
herramientas para facilitar la deteccin de este tipo de
errores, son las herramientas de depuracin. Antes de
comenzar a describir como funcionan estas herramientas,
le recomendamos, una vez ms, que modularice su
programa utilizando procedimientos cortos que realicen
trabajos concretos y precisos, de esta forma conseguir,
adems de que el programa quede ms elegante y en un
futuro sea ms sencillo modificarlo, evitar el tener que
revisar grandes bloques de cdigo para detectar errores
de este tipo.

A continuacin realizaremos una Macro a la cual le


incluiremos cdigo para controlar los errores que se
puedan producir durante la ejecucin de la misma.

Esta Macro debe realizar dos acciones, primero debe


modificar la orientacin del texto de las celdas que se
encuentren seleccionadas al momento de ejecutarla
dejndolo en 45 y luego debe cambiar el color de fondo
de la celda a amarillo.

1. Seleccione cualquier celda de una hoja (recuerde


que al seleccionar una o mas celdas ANTES de la
grabacin de la Macro, al ejecutarse sta la accin
la realizar sobre las celdas que se encuentren
seleccionadas en ese momento).
2. Vaya al Men Herramientas
3. Elija la opcin Macros
4. Seleccione opcin Grabar Macro
5. Ingrese los siguientes valores
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 53

6. D un clic en el botn Aceptar


7. Realice las siguientes acciones
Vaya al Men Formato
Elija la opcin Celdas
D un clic en la ficha Alineacin
Modifique la orientacin del texto a 45

Cmbiese a la ficha Trama y modifique el color de


la celda a Amarillo.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 54
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 55

Si examinamos el cdigo existente detrs de la Macro


no daremos cuenta de algo que ya habamos
comentado anteriormente, Visual Basic anot todo lo
que encontr en los cuadros de dialogo utilizados pese
a que las nicas instrucciones vlidas para nosotros
son:
.Orientation = 45
.ColorIndex = 6

ColorIndex Es una propiedad que permite cambiar el


color del fondo, bodes o fuente de una celda
ingresando un nmero entre 1 y 56 que representa la
posicin del color dentro de la paleta de colores
estndar de Excel.
Edite su macro borrando todas las lneas innecesarias
de manera que quede solo con las instrucciones que
vamos a utilizar. Su Macro debiera verse de la
siguiente forma:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 56

A continuacin modificaremos el cdigo de la Macro


de manera tal que se nos produzca un error al
ejecutarla. El error consistir en la modificacin de los
grados a orientar la celda los cuales colocaremos en
100. Debe usted saber que la orientacin de un Rango
solo se puede modificar entre 90 y 90.
Vaya al cdigo y cambie los grados a 100, su Macro
debiera verse as
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 57

Ahora probaremos nuestra Macro:


Vaya a Excel
Seleccione un
Rango de celdas
Ejecute su Macro
presionando la combinacin de teclas Control +
Shift + H

Por haber excedido los parmetros del procedimiento


nos debiera aparecer el siguiente mensaje de error.

Este mensaje contiene tres botones activos los cuales


sirven para lo siguiente:

Finalizar:
Permite terminar la ejecucin de la Macro de manera
de hacer las modificaciones correspondientes.

Depurar:
Detiene momentneamente la ejecucin de la Macro
dejndola en pausa para que usted haga las
modificaciones pertinentes para su buen
funcionamiento. Una vez hechas las
modificaciones necesarias usted puede
seguir con la ejecucin a partir de la lnea
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 58

donde se produjo el error dando un clic en el botn


continuar.
Ayuda:
Muestra una ventana con informacin acerca del error
cometido.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 59

On Error Resume Next Especifica que, en caso de que se produzca un error en


tiempo de ejecucin, el control pase a la instruccin
que sigue inmediatamente a aqulla en la que se ha
producido el error, donde contina la ejecucin.

Veamos un ejemplo:
A la Macro que tiene el error agregue la siguiente
instruccin

On Error Resume Next en la posicin que se muestra


en la siguiente ilustracin.

Vuelva a Excel y ejecute su Macro nuevamente.


Notar que no se mostr ningn mensaje de error ya
que cuando Visual Basic encontr la lnea que lo
contena la obvi pasando a ejecutar la siguiente. Si
bien esto nos resuelve parte del problema sera bueno
que controlramos el error de una manera mas
eficiente avisndole al usuario del error producido en
la Macro.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 60

On Error GoTo lnea Activa la rutina de control de errores que comienza en


la lnea especificada en el argumento necesario lnea.
El argumento lnea es cualquier etiqueta de lnea o
nmero de lnea. Si se produce un error en tiempo de
ejecucin, el control pasa a lnea, activando el
controlador de errores. La lnea especificada en el
argumento lnea debe encontrarse en el mismo
procedimiento que la instruccin On Error; o de lo
contrario, se producir un error en tiempo de
compilacin.

A continuacin volveremos a modificar la Macro para


controlar de mejor manera el error. Vuelva al Editor
de Visual Basic y realice las siguientes modificaciones
al cdigo de su Macro:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 61

Sub CambiarOrientacin()
'
' CambiarOrientacin Macro
' Modificar orientacin y color de fondo de las celdas seleccionadas
'
' Acceso directo: Ctrl+Mays+H
'

' La siguiente instruccin permite que en caso de producirse un error


' la ejecucin de la Macro se desplace a la seccin Errores y ejecute
' el procedimiento que controla los errores

On Error GoTo Errores

With Selection
.Orientation = 100
.Interior.ColorIndex = 6
End With

' La siguiente instruccin permite que en caso de ingresar correctamente los


' grados a orientar la macro se detenga en esta instruccin y no pase a la
' seccin que controla los errores.

Exit Sub

' Seccin que controla el error

Errores:
MsgBox "Los grados a orientar deben estar entre 90 y -90"
End Sub

Pruebe su Macro nuevamente


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 62

Macros programadas Cuando se avanza en el conocimiento de las Macros


en Excel se puede llegar a necesitar crear Macros que
no necesariamente respondan a pulsaciones del
usuario, sin que controlen procedimientos ms
complejos.
A travs de la programacin directa con Visual Basic
nosotros podemos realizar operaciones mas complejas
dentro de nuestra planilla, pero para poder hacer esto
debemos conocer algunos conceptos de la
programacin orientada a los objetos, como tambin
de la programacin por eventos.
A continuacin comenzaremos a aprender a
programar directamente con Visual Basic. Lo primero
que haremos ser desplegar el Editor de Visual Basic.

Cierre cualquier
Libro abierto que tenga
Abra un libro nuevo
Gurdelo como
Macros Programadas
Vaya al Men
herramientas
Elija la opcin
Macros
Seleccione del
Submen la opcin Editor de Visual Basic (otra
manera de acceder el Editor es presionando ALT +
F11)
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 63

Barra de Mens Barra de herramientas Estndar

Explorador de
Proyectos
Cdigo de la Macro

Si al desplegar el Editor no se visualiza el Explorador


de proyectos, el cual es esencial para acceder el
contenido de los distintos Mdulos, presione el botn
Explorador de proyectos que se encuentra en la Barra
de Herramientas Estndar.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 64
Insertar un Modulo Para poder confeccionar nuestras Macros lo primero
que debemos hacer es insertar un Mdulo para poder
escribir el cdigo en su interior. El procedimiento para
insertar un mdulo nuevo es el siguiente:

Ir al Men Insertar
Elegir opcin
Mdulo

Objetos del proyecto


Objetos del proyecto
Hojadel
delmdulo
mdulo
Hoja
para escribir elel
para escribir
cdigodedelas
las
Mdulo Nuevo cdigo
Mdulo Nuevo Macros
Macros

Mdulo
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 65

Fundamentos de Ahora veremos algunos conceptos que usted debe


Programacin tener muy claros a la hora de programar con Visual
Basic for Application. Esto es muy importante para
entender los fundamentos del lenguaje y el modo en
que opera.

Objetos, propiedades y A la hora de trabajar con macros en Excel, deben


mtodos. tenerse claros ciertos conceptos de lo que se llama
programacin orientada a objetos (OOP). No nos
extenderemos demasiado sobre la OOP, pero si
definiremos a continuacin los conceptos de Objeto,
Propiedades y Mtodos.

Objetos Cuando en el mundo real nos referimos a objeto


significa que hablamos de algo ms o menos abstracto
que puede ser cualquier cosa. Si decidimos concretar
un poco ms podemos referirnos a objetos auto,
objetos silla, objetos casa, etc. En OOP, la
generalizacin (o definicin) de un objeto se llama
Clase, as la clase automvil seria como la
representante de todos los automviles del mundo,
mientras que un objeto automvil seria un automvil
en concreto.
Cuando decimos que la clase automvil representa a
todos los automvil del mundo significa que define
como es un automvil, cualquier automvil. Dicho de
otra forma y para aproximarnos a la definicin
informtica, la clase automvil define algo que tiene
cuatro ruedas, un motor, un chasis,... entonces,
cualquier objeto real de cuatro ruedas, un motor, un
chasis,... es un objeto de la clase automvil.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 66

Propiedades Cualquier objeto tiene caractersticas o propiedades


como por ejemplo el color, la forma, peso, medidas,
etc. Estas propiedades se definen en la clase y luego
se particularizan en cada objeto. As, en la clase
automvil se podran definir las propiedades Color,
Ancho y Largo , luego al definir un objeto concreto
como automvil ya se particularizaran estas
propiedades a, por ejemplo, Color = Rojo, Ancho = 2
metros y Largo = 3,5 metros.

Mtodos La mayora de objetos tienen comportamientos o


realizan acciones, por ejemplo, una accin evidente de
un objeto automvil es el de moverse o lo que es lo
mismo, trasladarse de un punto inicial a un punto
final.
Cualquier proceso que implica una accin o pauta de
comportamiento por parte de un objeto se define en su
clase para que luego pueda manifestarse en cualquiera
de sus objetos. As, en la clase automvil se definiran
en el mtodo mover todos los procesos necesarios
para llevarlo a cabo (los procesos para desplazar de un
punto inicial a un punto final), luego cada objeto de la
clase automvil simplemente tendra que invocar este
mtodo para trasladarse de un punto inicial a un punto
final, cualesquiera que fueran esos puntos.
Para comprender mejor esto podramos decir que los
mtodos son las acciones que son capaces de realizar
los objetos.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 67

Principales objetos de A continuacin describiremos los objetos mas


Visual Basic for utilizados dentro de Microsoft Excel. Se tratar de dar
Application para Excel
un orden jerrquico lo que significa que se vern
primeros aquellos objetos que a su vez contienen otros
objetos en el interior.
Objeto Application Este objeto se encuentra en el nivel mas alto de la
jerarqua de objetos de Excel y representa al propio
Excel. Cualquier cambio de propiedad o ejecucin de
un mtodo afecta directamente al programa. Este
objeto posee mas de 120 propiedades y 40 mtodos.
A continuacin mostraremos algunos de ellos:

Propiedades

Caption : Es el rotulo que aparece en la Barra de titulo


de la ventana de Excel.

DisplayAlerts : Esta es una propiedad que indica si se


deben mostrar cuadros de alerta al realizar acciones
que puedan causar perdida de datos en Excel, como
por ejemplo al salir sin grabar, al eliminar una hoja,
etc. Por omisin esta propiedad est puesta en
Verdadero.

Path : Es el directorio en el cual se encuentra instalado


Excel. Esta es una propiedad de solo lectura, lo que
significa que no se puede modificar.

Screen Updating : Indica si se deben ir mostrando los


cambios que se producen al ejecutar una Macro o si
solo se debe mostrar el resultado final. Por omisin
esta propiedad es True (verdadera).

Mtodos

Help : El mtodo Help muestra la ayuda de Excel


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 68

Quit : Permite salir de Excel.

Run : Permite ejecutar una subrutina de VBA (Visual


Basic for Application).

Para cambiar

Objeto Application

Cambiar una propiedad Para cambiar la propiedad de un objeto este no debe


del objeto Application ser una propiedad de solo lectura. El cambio de la
propiedad se debe hacer colocando en primer lugar el
nombre del Objeto, seguido de un punto, luego el
nombre de la propiedad, despus un signo igual y a la
derecha de ste, el nuevo valor de la propiedad.
Objeto Propiedad Nuevovalor
valordedelala
Objeto Propiedad Nuevo
propiedad
propiedad

Sub CambiarTitulo()
Application.Caption = Curso de Macros
End Sub

Ejecute la macro dando clic al botn ejecutar que se


encuentra en la Barra de
herramientas estndar (asegrese
de tener el cursor dentro de la
Macro que se quiere ejecutar).

El resultado es el siguiente

Ver el valor de una Como vimos recin las propiedades de solo lectura no
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 69

propiedad de solo lectura se pueden cambiar, pero en algunos casos


necesitaremos saber el valor de estas. Para esto cree la
siguiente macro:

Sub MostrarRuta()
MsgBox Application.Path
End Sub

Ejecute su Macro
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 70

El objeto Workbook (Libro Este objeto representa un libro de trabajo dentro de


de Trabajo) Excel. A continuacin veremos algunas propiedades y
mtodos del mismo.

Propiedades

Name : Propiedad de solo lectura que almacena el


nombre del libro. Para modificar el nombre se debe
utilizar el mtodo SaveAs

Mtodos

Close :Cierra el libro especificado

Save : Guarda el libro especificado

SaveAs : Permite guardar el libro con otro nombre


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 71
El Objeto Worksheet (Hoja Este es uno de los objetos mas utilizados y se refiere a
de trabajo) las hojas de trabajo que contienen los libros. Algunas
propiedades y mtodos de este objeto.

Propiedades
Name = Permite cambiar el nombre de una Hoja

Ejemplo

Sub CambiarNombreHoja
Worksheets(Hoja1).name=Macros 1
End Sub

Visible: Propiedad Booleana (True o False) que indica


si la hoja estar visible o no.

Mtodos

Copy : Permite copiar la Hoja a otro lugar

Move : Permite cambiar de posicin la hoja


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 72
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 73
Objeto Range (Rango) Representa un rango dentro de la planilla, la sintaxis
es la siguientes:
Range(A1:B5).

Propiedades

Value : Permite modificar el valor de un rango de


celdas.

Ejemplo:

Sub CambiarValor
Range(A1:B5).value = Clases de Macros

Count : Variable de solo lectura que devuelve la


cantidad de celdas de un Rango

Mtodos:

Clear : Borra todo lo que hay en una celda

Copy : Permite copiar un grupo de celdas a otro lugar.


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 74
Objetos individuales y Se entiende por objetos individuales a todos aquellos
objetos de que solo pueden existir uno a la vez dentro de la
colecciones
aplicacin. Un ejemplo de este tipo de objetos lo
encontramos en el objeto Application ya que solo se
puede trabajar con un Excel a la vez.

Objetos que pertenecen a colecciones son todos


aquellos objetos que coexisten con sus iguales dentro
de la planilla. Un par de ejemplos de esto lo
encontramos en los objetos Workbook y Worksheet ya
que en Excel usted puede trabajar con varios Libros
abiertos a la vez y estos libros tienen varias hojas.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 75

Referenciar objetos que Para referirse a un objeto que pertenece a una


pertenecen a colecciones coleccin se pueden usar dos mtodos:

Referencia por nombre


Se debe indicar el nombre del objeto entre comillas
dobles. Por ejemplo si queremos cambiar el nombre
de la segunda hoja de nuestro libro utilizando este
mtodo debiramos escribir el siguiente cdigo:
Sub CambiarNombreHoja()
Worksheets(Hoja2).Name = Ejercicios
End Sub

Referencia por posicin


Esta forma de referenciar los objetos nos permite
referirnos a un objeto de una coleccin de acuerdo al
lugar que ocupa dentro de sus pares (ndice). Si
quisiramos cambiar el nombre de la segunda hoja
utilizando este mtodo la Macro quedara de la
siguiente manera:

Sub CambiarNombrePosicin()
Worksheets(2).Name =Nuevo Nombre
End Sub

Importante:
Habr notado usted que al referirnos a un objeto de
coleccin lo hacemos en plural (Worksheets,
Workbooks). Esta es la manera correcta ya que si
ingresamos el nombre del objeto en singular se nos
producira un error
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 76

Uso de variables Una variable es simplemente un trozo de memoria que


la funcin o procedimiento se reserva para guardar
datos, la forma general de declarar una variable es

DIM variable AS tipo.

Siendo variable el nombre que se asigna a la misma y


Tipo el tipo de datos que se guardarn (nmeros, texto,
fecha, booleanos,...). En nuestro ejemplo,
declararemos la variable de tipo String (tipo texto), y
lo haremos de la forma siguiente.

Dim Texto As String

Con esto estamos indicando que se reserve un trozo de


memoria (el que sea), que se llama Texto y que el tipo
de datos que se guardarn ah sern caracteres.

A continuacin se muestra un cuadro muy interesante


que ilustra los distintos tipos de datos que existen en
Visual Basic, el tipo de informacin que almacenan y
los recursos que consumen.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 77
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 78

La sentencia Option En visual basic no es necesario declarar las variables.


Explicit. A pesar de ello, le recomendamos que siempre declare
las variables que va a utilizar, de esta forma sabr
cuales utiliza el procedimiento y que tipo de datos
guarda cada una, piense que a medida que vaya
aprendiendo, crear procedimientos cada vez ms
complicados y que requerirn el uso de ms variables,
si no declara las variables al principio del
procedimiento ocurrirn dos cosas. Primero, las
variables no declaradas son asumidas como tipo
Variant (este es un tipo de datos que puede almacenar
cualquier valor, nmero, fechas, texto, etc. pero tenga
en cuenta que ocupa 20 Bytes y para guardar una
referencia a una casilla, la edad de alguien, etc. no son
necesarios tantos bytes); segundo, reducir
considerablemente la legibilidad de sus
procedimientos ya que las variables las ir colocando a
medida que las necesite, esto, a la larga complicar la
correccin o modificacin del procedimiento.
Bueno, pues toda la explicacin anterior es para que
declare todas las variables que va a utilizar. La
sentencia Option Explicit al principio del mdulo
fuerza a que se declaren todas las variables. Si al
ejecutar el programa, se encuentra alguna variable sin
declarar se producir un error y no se podr ejecutar el
programa hasta que se declare.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 79
Variables de Objetos. Una variable objeto sirve para hacer referencia a un
objeto, esto significa que podremos acceder a las
propiedades de un objeto e invocar a sus mtodos a
travs de la variable en lugar de hacerlo directamente a
travs del objeto. Posiblemente no se utilice
demasiado esta clase de variables (esta claro que esto
depender de las preferencias del programador), pero
hay casos en los que no hay ms remedio que
utilizarlas, por ejemplo en estructuras For Each ...
Next como veremos, o cuando sea necesario construir
funciones que devuelvan rangos, referencias a hojas,
etc.
Para declarar una variable objeto se utiliza tambin la
palabra Dim de la forma siguiente,
Dim Var_Objeto As Objeto
Por Ejemplo
Dim R As Range
Dim Hoja As WorkSheet
Para asignar un objeto a una variable debe u utilizar la
instruccin Set.
Set Variable_Objeto = Objeto
Por Ejemplo
Set R= ActiveSheet.Range("A1:B10")
Set Hoja = ActiveSheet
Set Hoja = WorkSheets(1)

Estructuras de Control Las estructuras de control nos permiten controlar los


flujos de ejecucin de cdigo de las Macros, dando la
posibilidad de que se tomen decisiones cada vez que
se modifique algn elemento, pudiendo repetir
procedimientos, restringir la ejecucin de otros,
condicionar la realizacin de ciertos procesos, etc.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 80
Estructuras Condicionales Permiten que se ejecute cierto cdigo solo si se
cumplen ciertas condiciones.
Condicional If Las estructuras condicionales son instrucciones de
programacin que permiten controlar la ejecucin de
un fragmento de cdigo en funcin de si se cumple o
no una condicin.

Estudiaremos en primer lugar la instruccin if


Condicin then..End if (Si Condicin Entonces...Fin
Si)

La estructura condicional que se construye con la


instruccin Si Condicin Entonces... Fin Si tiene la
forma siguiente.

Si Condicin Entonces
Sentncia1
Sentncia2
.
.
SentnciaN
Fin Si

Cuando el programa llega a la instruccin Si


Condicin Entonces , se evala la condicin, si esta se
cumple (es cierta), se ejecutan todas las sentencias que
estn encerradas en el bloque, si no se cumple la
condicin, se saltan estas sentencias. Esta estructura en
Visual Basic tiene la sintaxis siguiente,

If Condicin Then
Sentncia1
Sentncia2
.
.
SentnciaN
End If
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 81
Estructura If..Else Esta estructura se utiliza cuando se requiere una
respuesta alternativa a una condicin. Su estructura es
la siguiente.

Si Condicin Entonces
Sentncia1
Sentncia2
.
.
SentnciaN
Sino
Sentncia1
Sentncia2
.
.
SentnciaN
Fin Si

Observe que, si se cumple la condicin, se ejecuta el


bloque de sentencias delimitado por Si Condicin
Entonces y Si no se cumple la condicin se ejecuta el
bloque delimitado por Sino y Fin Si. En Visual Basic
la instruccin Si Condicin Entonces ... Sino ... Fin Si
se expresa con las instrucciones siguientes.

If Condicin Then
Sentncia1
Sentncia2
.
.
SentnciaN
Else
Sentncia1
Sentncia2
.
SentnciaN
End If
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 82

Estructura Select Case La estructura Case es muy til en el momento en el


que debemos tomar diferentes decisiones de una
misma condicin. La estructura sera la siguiente:

En caso <condicin> hacer


<valor 1>
<instrucciones>
<valor 2>
<instrucciones>
...
Fin caso

So lo llevamos a Visual Basic la estructura sera mas o


menos as.

Select Case <condicin> Is


<valor 1>
<instrucciones>
<valor 2>
<instrucciones>
...
End Select
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 83

Estructuras repetitivas Este tipo de estructuras permiten ejecutar ms de una


(Bucles) vez un mismo bloque de sentencias.

Estructura repetitiva For Esta estructura sirve para repetir la ejecucin de una
(para). sentencia o bloque de sentencias, un nmero definido
de veces. La estructura es la siguiente:

Para var =Valor_Inicial Hasta Valor_Final Paso Incremento Hacer


Inicio
Sentencia 1
Sentencia 2
.
.
Sentencia N
Fin

Var es una variable que la primera vez que se entra en


el bucle se iguala a Valor_Inicial, las sentencias del
bucle se ejecutan hasta que Var llega al Valor_Final,
cada vez que se ejecutan el bloque de Instrucciones
Var se incrementa segn el valor de Incremento.
En Visual Basic para Excel la estructura se
implementa de la siguiente manera.

For Varible = Valor_Inicial To Valor_Final Step Incremento


Sentencia 1
Sentencia 2
.
.
Sentencia N
Next Variable
Si el incremento es 1, no hace falta poner Step 1.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 84
Estructura repetitiva Do La estructura repetitiva for se adapta perfectamente a
While..Loop aquellas situaciones en que se sabe previamente el
(Hacer
nmero de veces que se ha de repetir un proceso,
Mientras).
entrar veinte valores, recorrer cincuenta celdas, etc.
Pero hay ocasiones o casos en los que no se sabe
previamente el nmero de veces que se debe repetir un
proceso. Por ejemplo, suponga que ha de recorrer un
rango de filas en los que no se sabe cuantos valores
habr (esto es, cuantas filas llenas habr), en ocasiones
puede que hayan veinte, en ocasiones treinta, en
ocasiones ninguna, etc. Para estos casos la estructura
for no es adecuada y deberemos recurrir a la sentencia
Do While..Loop en alguna de sus formas.
Esta estructura repetitiva est controlada por una o
varias condiciones, la repeticin del bloque de
sentencias depender de si se va cumpliendo la
condicin o condiciones.

Hacer Mientras (se cumpla la condicin)


Sentencia1
Sentencia2
.
.
Sentencia N
Fin Hacer Mientras

En Visual Basic

Do While (se cumpla la condicin)


Sentencia1
Sentencia2
.
.
Sentencia N
Loop
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 85
Estructura Do Until Permite ejecutar acciones hasta que se cumpla una
(Hacer.. Hasta) condicin dada.

Hacer Hasta (se cumpla la condicin)


Sentencia1
Sentencia2
.
.
Sentencia N
Fin Hacer Hasta

En Visual Basic

Do Until (se cumpla la condicin)


Sentencia1
Sentencia2
.
.
Sentencia N
Loop
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 86

Estructura For Each. Este bucle se utiliza bsicamente para ejecutar un


grupo de sentencias con los elementos de una
coleccin. Recuerde que una coleccin es un conjunto
de objetos, hojas, rangos, etc.

Funciones de Visual Basic Visual Basic posee una serie de funciones que nos
permiten simplificar ciertos trabajos. Al igual que las
funciones normales de Excel estas estn programadas
para realizar un procedimiento en particular y para
poder operar necesitan de ciertos elementos llamados
argumentos. Dentro de estos argumentos hay algunos
que son obligatorios y otros opcionales los cuales se
identifican por estar dentro de parntesis de corchetes
[].
La funcin RGB. Permite modificar el color de un objeto ingresando
tres argumentos que identifican tres colores: Rojo,
Verde y Azul

RGB(Red, Green, Blue), los

Los tres argumentos para esta funcin son valores del


0 a 255 que corresponden a la intensidad de los
colores
Rojo, Verde y Azul respectivamente.

A continuacin un ejemplo que cambia el color de


fuente de un rango de celdas

Sub Segundo
ActiveSheet.Range("A1:A8").Font.Color = RGB(255,0,0)
End Sub
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 87
La Funcin InputBox Esta funcin muestra una ventana para que el usuario
pueda teclear datos. Cuando se pulsa sobre Aceptar,
los datos entrados pasan a la variable a la que se ha
igualado la funcin. Vea la lnea siguiente.

Texto = InputBox("Introduzca el texto", "Entrada de


datos").

Si en la ventana que muestra InputBox pulsa sobre el


botn Aceptar, los datos tecleados se guardarn el la
variable Texto.

Sintaxis de InputBox.

InputBox(Mensaje, Ttulo, Valor por defecto, Posicin


horizontal, Posicin Vertical, Archivo ayuda, Nmero
de contexto para la ayuda).

Mensaje : Es el mensaje que se muestra en la ventana.


Si desea poner ms de una lnea ponga
Chr(13) para cada nueva lnea

Ttulo : Es el ttulo para la ventana InputBox. Es un


parmetro opcional.

Valor por defecto: Es el valor que mostrar por


defecto el cuadro donde el usuario entra el valor.
Parmetro opcional.

Posicin Horizontal: La posicin X de la pantalla


donde se mostrar el cuadro, concretamente es la
posicin para la parte izquierda. Si se omite el cuadro
se presenta horizontalmente centrado a la pantalla.

Posicin Vertical: La posicin Y de la pantalla donde


se mostrar el cuadro, concretamente es la posicin
para la parte superior. Si se omite el cuadro se
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 88

presenta verticalmente centrado a la pantalla.

Archivo Ayuda: Es el archivo que contiene la ayuda


para el cuadro. Parmetro opcional.

Nmero de contexto para la ayuda: Nmero asignado


que corresponde al identificador del archivo de ayuda,
sirve para localizar el texto que se debe mostrar. Si se
especifica este parmetro, debe especificarse
obligatoriamente el parmetro Archivo Ayuda.

Sub Entrar_Valor
Dim Texto As String
' Chr(13) sirve para que el mensaje se muestre en dos Lneas
Texto = InputBox("Introducir un texto " & Chr(13) & "Para la casilla A1", "Entrada de datos")
ActiveSheet.Range("A1").Value = Texto
End Sub

Sub CambiarOrientacin()
Selection.Orientation = InputBox("Ingrese grados a orientar", "Orientar texto", 0)
End Sub
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 89
La funcin MsgBox Esta funcin muestra un mensaje en un cuadro de
dilogo hasta que el usuario pulse un botn. La
funcin devuelve un dato tipo Integer en funcin del
botn pulsado por el usuario. A la hora de invocar est
Funcin, s e permiten diferentes tipos de botones.

Sintaxis de MsgBox.

MsgBox( Mensaje, Botones, Ttulo, Archivo de


ayuda, contexto)

Mensaje: Obligatorio, es el mensaje que se muestra


dentro del cuadro de dilogo.

Botones: Opcional. Es un nmero o una suma de


nmeros o constantes (vea tabla Valores para botones
e Iconos), que sirve para mostrar determinados
botones e iconos dentro del cuadro de dilogo. Si se
omite este argumento asume valor 0 que corresponde
a un nico Botn OK.

Ttulo: Opcional. Es el texto que se mostrar en la


barra del ttulo del cuadro de dilogo.

Archivo de Ayuda : Opcional. Si ha asignado un texto


de ayuda al cuadro de dilogo, aqu debe especificar
el nombre del archivo de ayuda donde est el texto.

Context: Opcional. Es el nmero que sirve para


identificar el texto al
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 90
Tabla para botones e iconos del cuadro MsgBox.

Algunas veces puede que le interese simplemente


desplegar un cuadro MsgBox para mostrar un mensaje
al usuario sin que se requiera recoger ningn valor. En
este caso puede optar por la forma siguiente:

MsgBox Prompt:="Hola usuaria, Ha acabado el proceso", Buttons:=VbOkOnLy _


Title:="Mensaje"

Lo que no puede hacer porque Visual Basic dara error


es poner la primera forma sin igualarla a ninguna
variable. Por ejemplo, la expresin siguiente es
incorrecta.

MsgBox ("Hola usuario, Ha acabado el proceso", VbOkOnly, "Mensaje")

Seria correcto poner:

X= MsgBox ("Hola usuario, Ha acabado el proceso", VbOkOnly, "Mensaje")


En este caso, aunque X reciba un valor, luego no se
utiliza para nada, es decir simplemente se pone para
que Visual Basic d error.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 91
Paso de Argumentos Cuando se hace una llamada a un procedimiento Sub
o Function, se pueden incluir argumentos de forma
posicional, es decir, en el orden en que aparecen en la
definicin del procedimiento, o se pueden incluir los
argumentos con su nombre sin respetar ningn orden.
Por ejemplo, el siguiente procedimiento Sub acepta
tres argumentos:

Sub PasaArgs(strNombre As String, intEdad As


Integer, dteNacimiento As Date)
Debug.Print strNombre, intEdad, dteNacimiento
End Sub

Al llamar este procedimiento se pueden incluir sus


argumentos en la posicin correcta, todos separados
por comas, tal y como muestra el siguiente ejemplo:

PasaArgs "Mara", 29, #21-2-69#

Tambin se puede hacer una llamada a este


procedimiento e incluir argumentos con nombre,
separados por comas.

PasaArgs intEdad:=29, dteNacimiento:=#21/2/69#,


strNombre:="Maria"

Un argumento nominativo est formado por el nombre


del argumento seguido por dos puntos y un signo
igual (:=), todo ello seguido por el valor del
argumento.

Los argumentos con nombre son muy tiles cuando se


llama a procedimientos con argumentos opcionales. Si
se usan argumentos con nombre no ser necesario
incluir sucesivas comas para sustituir argumentos
posicionales ausentes. Al usar argumentos con nombre
es ms fcil controlar qu argumentos se pasan y
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 92

cules se omiten.

Los argumentos opcionales van precedidos por la


palabra clave Optional en la definicin del
procedimiento. En la definicin del procedimiento se
puede especificar tambin un valor predefinido para el
argumento opcional. Por ejemplo:

Sub ArgsOpcionales(strProvincia As String, Optional


strPais As String = "MXICO")
...
End Sub

Cuando se hace una llamada a un procedimiento con


un argumento opcional, se puede optar por especificar
o no el argumento opcional. Si no se especifica, se
usar el valor predefinido si existe. Si no se ha
especificado tampoco un valor predefinido, el
argumento tendr el valor de inicializacin que le
corresponda a una variable del mismo tipo.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 93

Pasar argumentos a una Permite pasar los argumentos en el orden en la cual


funcin por fueron establecidos al crear a funcin. Para separar un
posicin
argumento de otro se debe colocar una coma.

Al ir escribiendo el cdigo, Visual Basic nos muestra


una ayuda con los argumentos de la funcin y su
posicin, el argumento en negrita es el argumento
activo y los que estn con parntesis de corchetes son
los opcionales

Sub CambiarTamaoLetra()
Selection.Font.Size = Inputbox("Ingrese tamao Fuente","tamao letra",12)
End Sub

Pasar argumentos a una Para pasar los argumentos por nombre se debe colocar
funcin por el nombre del argumento seguido de := . Esto nos
Nombre
permite ingresarlos en cualquier orden.

A continuacin veremos el mismo ejemplo anterior


pero con los argumentos pasados por nombre.

Sub CambiarTamaoLetra()
Selection.Font.Size = InputBox(Default:=12, Title:="tamao letra", prompt:="Ingrese tamao
Fuente")
End Sub
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 94
MACROS SUBORDINADAS
Cuando se necesita crear una macro que realice una
tarea muy extensa, lo ms aconsejable es dividirla por
etapas, o sea, crear varias macros en forma
independiente y despus subordinarlas a otra general,
de tal forma que esta ltima las ejecute una a una.

La planilla electrnica posee una herramienta que


permite importar archivos de texto. Si no la conoce
practquela antes de grabar la macro.

Crearemos una macro que permita Importar un archivo


de texto y luego traspasarlo a un libro activo En el
disquete de trabajo del curso tiene un archivo que se
llama Informe.txt.

1. Pida un libro nuevo y grbelo inmediatamente como


Importaciones.xls.

2. Realice los pasos para grabar una macro. Como


nombre a la macro asigne ImportarArchivo. Grbela
en un este libro (Importaciones.xls) que debe tener
activo. Mtodo abreviado CONTROL+SHIFT+I.
Asigne alguna descripcin apropiada.

3. Hacer un clic en el botn Abrir. En este cuadro en


Tipo de archivo seleccione la opcin Todos los
archivos. Ubicar la unidad donde tiene almacenado
el archivo Informe.txt. Hacer un clic en el botn
Abrir.

4. Aparecer el Asistente para importacin de texto.


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 95

5. En este cuadro debe marcar la opcin Delimitados,


debido a que existen separadores que delimitan las
columnas a importar. En Comenzar a importar en
la fila seleccione el nmero 2, debido a que en la fila
1 del archivo esta el ttulo que encabeza los datos y
ste no lo deseamos importar. Hacer un clic en
Siguiente. Aparecer el paso 2 del Asistente de
Importacin.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 96

6. En Separadores marque la casilla Tabuladores ya


que en el archivo los datos estn separados por
marcas de tabulacin. Hacer un clic en Terminar.

7. Modifique tamao y posicin de la ventana de


Informe.txt de tal forma que pueda ver las etiquetas
del libro Importaciones.xls.

8. Arrastre la etiqueta del libro Informe.txt hasta


ubicarla delante de la hoja 1 del libro
Importaciones.xls. Automticamente desaparecer el
libro Informes debido a que le sac la nica hoja que
tena.

9. Hacer un clic en el botn Detener grabacin.

La macro est lista. Ahora comprobaremos como


funciona, recorrindola paso a paso. Para ello realice lo
siguiente: (Antes de ejecutar la macro, elimine la hoja
Informe del libro Importaciones.xls).

1. Realizar los pasos para ejecutar un macro. De la lista


de macros seleccionar ImportarArchivo y luego
hacer clic en el botn Paso a Paso.

Haga clic en
este botn
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 97

2. Su ventana se mostrar como lo muestra la figura


siguiente:

3. Organice las ventanas para que pueda ver la ventana


de Visual Basic y la de Importaciones.xls.
Seleccione con el botn derecho del mouse la barra
de estado de Windows y elija del men contextual
Mosaico Horizontal de manera que se vea la
pantalla como lo muestra la siguiente figura:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 98

La primera sentencia que aparece resaltada


corresponde al nombre de la macro.

4. Hacer clic en el botn Paso a paso por


instrucciones, de la barra de herramientas de Visual
Basic. (lo mismo es usar la tecla F8)
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 99

Se seleccionar la primera sentencia de la macro:


Workbooks.OpenText
Filename:="C:\ExcelVBA\Ejercicios\Informe.txt",
_Origin:=xlWindows, StartRow:=2,
DataType:=xlDelimited,TextQualifier:=xlDoubleQuote,
ConsecutiveDelimiter:=False, Tab _=True, Semicolon:=False,
Comma:=False, Space:=False, Other _ :=False,
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4,
1), Array(5, 1))

Esta sentencia tan larga es la que importa el archivo


de texto.

El grabador de macros divide sentencias muy largas


con espacios y guiones bajos.
Workbooks.OpenText
Filename:="C:\ExcelVBA\Ejercicios\Informe.txt",
Esta instruccin es la que abre el archivo Informe.txt.
Origin:=xlWindows, StartRow:=2, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
Tab :=True, Semicolon:=False, Comma:=False, Space:=False,_
Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1))

Esta instruccin es la que corresponde a las opciones


usadas en el Asistente de Importacin de texto.

5. Presione la tecla F8 para que se ejecute la sentencia


enmarcada y se seleccione la siguiente.

La siguientes cuatro sentencias corresponden a una


estructura With, que corresponden a la acomodacin
de la ventana para visualizar las etiquetas del libro
Importaciones.xls.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 100
With ActiveWindow
Top = -5
.Left = 51.25
End With
6. Presione la tecla F8 hasta llegar a esta sentencia:
Sheets("Informe").Select
Esta instruccin activa la hoja Informe del libro
Importaciones.xls.

7. Presione la tecla F8. Se resaltar la siguiente


sentencia:
Sheets("Informe").MoveBefore:=Workbooks("Importaciones.xls")._
Sheets(1).
Con esta instruccin se mueve la hoja Informe al
libro Importaciones.xls.

8. Presione la tecla F8 y resaltar la siguiente sentencia


que termina la macro:
End Sub

Hemos revisado como se ejecuta la macro. Si la ejecuta


varias veces notar que en el libro Importaciones.xls,
tendr varias copias de la hoja Informe.

Esta macro que ha grabado le permite abrir un archivo


en particular.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 101

Modificacin de la macro Haremos ahora ciertas modificaciones a la macro de tal


manera de optimizar su utilizacin. Realice lo
siguiente:

1. Realizar los pasos para ejecutar una macro. En el


cuadro macro seleccionar ImportarArchivo y luego
hacer clic en el botn Modificar.

Haga clic en
este botn.

De esta forma podr visualizar la hoja del mdulo


que contiene la macro.

2. Efectuar las modificaciones que se indican a


continuacin:

Incluir el mtodo en que el usuario decida el archivo


que necesita abrir:

a) Ubicar el punto de insercin delante de la sentencia


que dice Workbooks y presionar enter.
b) Subir el punto de insercin a la lnea que se cre y
escribir lo siguiente (debe escribirlo tal cual como se
muestra):
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 102

archivo = Application.GetOpenFilename _
("Archivos de texto,*.txt")

Application.GetOpenFilename es un mtodo que


muestra el cuadro de dilogo Abrir, lo que est entre
parntesis indica que se muestren slo archivos de
texto, la palabra archivo indica el lugar en donde
quedar almacenado el nombre del archivo que ser
utilizado por Workbooks.OpenText Filename, que es
en realidad la sentencia que abre el archivo.

c) Reemplazar el nombre del archivo Informe.txt


(incluyendo su ruta de acceso y comillas) que sigue
a la sentencia Workbooks.OpenText Filename, por la
palabra archivo que es la que contiene el nombre que
se desea abrir.

d) Borrar la sentencia que desplaza la ventana:


With ActiveWindow
.Top = -5
.Left = 51.25
End With

e) Borrar la sentencia que activa la hoja Informe.

Sheets("Informe").Select

f) Borrar la palabra Sheets("Informe"). En su lugar


escribir:
ActiveSheet.
Indica hoja activa.

Cuando haya terminado las modificaciones su macro


debera quedar as:

Sub ImportarArchivo()
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 103
archivo = Application.GetOpenFilename("Archivos de texto,*.txt")
Workbooks.OpenText Filename:=archivo, _
Origin:=xlWindows, StartRow:=2, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab _
:=True, Semicolon:=False, Comma:=False, Space:=False, Other _
:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1))_
Sheets("Informe").Move _
Before:=Workbooks("Importaciones.xls").Sheets(1)
End Sub

Nota: Como se mencion anteriormente el grabador de


macros divide lneas muy largas con un espacio y un
guin, por lo tanto puede que en su macro los cortes
estn en otros lugares.

Una vez que hemos importado los datos del archivo


Informe.txt. habr notado que hay celdas que estn
vacas. Haremos entonces una macro que llene las
celdas vacas copiando el contenido que encuentre en
sus respectivas celdas (no vacas) superiores.
Para ello utilizaremos herramientas que posee Excel
para seleccionar rpidamente todas las celdas vacas de
un determinado rango y para copiar en ellas la
informacin que encuentren en su celda superior no
vaca. Obviamente grabaremos todos estos pasos.

1. Activar alguna hoja Informe del libro


Importaciones.xls. recuerde que si ha ejecutado
varias veces la macro ImportarArchivo tendr varias
copias de la hoja Informe.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 104

2. Efectuar los pasos para grabar un macro. Como


nombre de la macro asigne CopiarDatos, mtodo
abreviado CONTROL+SHIFT+C, grabarla en el
libro activo (Importaciones.xls) y escribir alguna
descripcin.

3. Presionar Control + * para seleccionar todo el rango


de la tabla.

4. Del men Edicin seleccionar la opcin Ir a. Hacer


clic en el botn Especial. Aparecer el siguiente
cuadro:

5. Marcar la opcin Celdas en blanco y hacer clic en


Aceptar.

Note que tendr activa la celda C3.

6. Escriba en ella =C2 para introducir una frmula que


ingrese el valor que encuentre en la celda superior.

7. Presione Control + Enter. (Si presiona Enter la


frmula slo se ingresar en la celda C3. Sin
embargo, si presiona Control + Enter la frmula se
ingresar en todas las celdas seleccionadas).
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 105

Al realizar el paso anterior lo que tiene en las celdas


que estaban vacas son frmulas. Haremos que esas
frmulas se conviertan en Valores (palabras).

8. Presionar Control + * para seleccionar toda la tabla.

9. Hacer un clic en la herramienta Copiar.

10. Del men Edicin la opcin Pegado Especial. En


ese cuadro marcar la opcin Valores y hacer un clic
Aceptar.

11. Detener la grabacin de la macro.

Revisaremos la ejecucin de la macro:

1. Hacer los pasos para ejecutar la macro paso a paso.

2. La primera sentencia ser el nombre de la macro.


Hacer clic en el botn Recorrer todo.

La sentencia siguiente:

Selection.CurrentRegion.Select

Esta instruccin selecciona la regin actual (tabla en


donde se encuentra el cursor).

3. Presione la tecla F8.

La sentencia que se enmarcar es:


Selection.SpecialCells(xlBlanks).Select
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 106

Esta instruccin selecciona las celdas en blanco de la


seleccin actual. SpecialCells se refiere a las celdas
seleccionadas con el men Ir a opcin Especial.

4. Presione la tecla F8..

Se enmarcar la siguiente sentencia:


Selection.FormulaR1C1 = "=R[-1]C"
Esta instruccin escribe la frmula =C2 en la celda
activa.

Selection.FormulaR1C1 lo que aparece despus del


signo igual en la celda activa.

"=R[-1]C" indica que debe escribir el signo igual y


luego hacer referencia a la celda que est en la fila
superior R[-1] y en la misma columna C.

5. Presione la tecla F8.

Se enmarcar la siguiente sentencia.


Selection.CurrentRegion.Select

Esta instruccin vuelve a seleccionar la regin en


donde se encuentra el cursor.

6. Presione la tecla F8..


Selection.Copy
Selection.PasteSpecial Paste:=xlValues, _ Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

7. Estas instrucciones son las que copian y pegan solo


valores en la seleccin.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 107

Agregaremos ahora ms instrucciones a la misma


macro. Note que el la hoja en la cual peg valores an
esta activa la regin de copia. Haremos entonces que la
macro desactive la regin y que el cursor vaya a la
celda A1.

Agregue las Siguientes instrucciones al final de la


macro

Application.CutCopyMode = False
Range("A1").Select

Estas sentencias son las que desactivan el modo copiar


y activan la celda A1.

Crearemos ahora una tercera macro que incluya una


columna de fechas en la columna A en la hoja del
Importaciones.xls, una vez que ya tiene todas las celdas
con informacin. Realice lo siguiente:

1. Activar alguna hoja Informe del libro Importaciones


que tenga todos los datos.

2. Realizar los pasos para grabar una nueva macro:


nombre de la macro AgregarColumnaFecha, mtodo
abreviado CONTROL + SHIFT+A, grbela en el
libro Importaciones y agregue alguna descripcin.

3. Activar la celda A1.

4. Del men Insertar seleccionar la opcin Columnas.

5. Escribir en A1 Fecha y presionar Enter.

6. Presionar Control + * para seleccionar toda la tabla.


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 108

7. Del men Edicin seleccionar Ir a. Clic en el botn


Especial y luego Celdas en blanco. Se
seleccionarn las celdas en donde se incluirn las
fechas.

8. Escribir Nov-01 y presionar Control + Enter. Tendr


entonces ingresadas las fechas en la columna A.

9. Seleccionar A1.

10. Detener la grabacin.

Ahora recorra la macro paso a paso.

1. Activar alguna hoja Informe que no tenga las fechas.

2. Ejecutar macro, seleccionar AgregarColumnaFecha


y luego Paso a paso.

3. La macro debera haber quedado como se muestra a


continuacin:
Sub AgregarColumnaFecha()
Range("A1").Select
Selection.EntireColumn.Insert
ActiveCell.FormulaR1C1 = "'Fecha"
Range("A2").Select
Selection.CurrentRegion.Select
Selection.SpecialCells(xlBlanks).Select
Selection.FormulaR1C1 = "Nov-98"
Range("A1").Select
End Sub
Note que en esta macro hay una diferencia entre las
sentencias ActiveCell.FormulaR1C1 = "'Fecha" y
Selection.FormulaR1C1 = "Nov-98". Ambas
sentencias ingresan un dato, pero la primera lo hace en
la celda activa (Activecell) y la segunda en la seleccin
actual (Selection).
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 109

La macro as grabada siempre ingresar la fecha Nov-


01. Modificaremos la macro de forma que pida la fecha
que se desea ingresar. Para ello realice lo siguiente:

1. Presionar el botn Ejecutar macro, seleccionar la


macro AgregarColumnaFecha y presionar el botn
Modificar.

2. Ubicar el punto de insercin al final de la sentencia


Sub AgregarColumnafecha() y presionar Enter. Si es
necesario sangre la lnea con la tecla tab.
fecha = InputBox("Introduzca la fecha en formato mmm-aa")

InputBox es una funcin de Visual Basic que


muestra un cuadro durante la ejecucin de la macro
que pide informacin. El texto que sigue a esta
funcin entre parntesis corresponde al texto que
aparecer en el cuadro. La palabra fecha es el lugar
donde quedar almacenada la fecha introducida en el
cuadro para que la macro la escriba en las celdas
seleccionadas.

3. Borre el texto Nov-01 incluidas las comillas.

En su lugar escriba fecha. La sentencia debe quedar


as:
Selection.FormulaR1C1 = fecha

Pruebe ahora la macro.


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 110

Ahora haremos una macro que lleve los datos de la


hoja importada de Importaciones.xls al archivo
Histrico.xls. Este archivo contiene las mismas
columnas del archivo Importaciones (el archivo
Histrico.xls se encuentra en su disquete de trabajo).
Se trata de copiar los datos de Importaciones (sin los
encabezados) a la primera celda vaca, debajo de la
base de datos Histrico.xls.

1. Activar alguna de las hojas que tenga la fecha.


2. Hacer los pasos para grabar una macro. Asigne
nombre BaseDatos y grbelo en el mismo libro
Importaciones.xls.
3. Seleccionar la fila A1.
4. Del men Edicin seleccionar la opcin Eliminar.
5. Presionar Control +* para seleccionar toda la tabla.
6. Hacer un clic en Copiar.
7. Abrir el archivo Histrico.xls
8. Presionar CONTROL + FLECHA ABAJO para
activar la ltima fila de la base de datos.
9. Presionar FLECHA ABAJO para seleccionar la
primera celda debajo de la base de datos.
10. Hacer un clic en el botn Pegar.
11. Presionar la tecla Esc para desactivar el modo
copia.
12. Presionar CONTROL + * para seleccionar toda la
tabla.
13. Del men Insertar seleccionar la opcin Nombre
y luego Definir.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 111

14. Escribir como nombre a la base Base_de_Datos.


Hacer un clic en Aceptar. De esta forma se incluirn
todos los datos, incluidos los datos nuevos en el
nombre de rango Base_de_Datos.

15. Del men Archivo seleccionar la opcin Cerrar.


No grabar cambios, por ahora no grabaremos los
cambios en el archivo histrico hasta probar la
macro.

16. Hacer clic en A1.

17. Detener la grabacin.

Ahora recorreremos la macro paso a paso.

Estas son las primeras lneas de la macro:

Sub BaseDatos()
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Selection.CurrentRegion.Select
Selection.Copy

Estas sentencias son las que eliminan la fila,


seleccionan la regin actual y ejecutan el comando
copiar.

Workbooks.OpenFilename:="C:\ExcelVBA\Ejercicios\Histrico.xls
"

Esta sentencia es la que abre el archivo histrico.


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 112
Selection.End(xlDown).Select

Esta instruccin equivale a CONTROL + FLECHA


ABAJO. Parte desde la celda activa, busca la ltima
celda que contiene informacin y la selecciona.

Range("A358").Select

Esta sentencia es la que selecciona la celda A358.


Celda de abajo de la ltima celda ocupada del libro
histrico.

ActiveSheet.Paste
Application.CutCopyMode = False

Esta instruccin es la que pega las nuevas filas a la


base de datos y desactiva el modo copia.

Selection.CurrentRegion.Select
ActiveWorkbook.Names.Add Name:="Database", _
RefersToR1C1:="=Hoja1!R1C1:R535C6"
La primera instruccin selecciona el rango actual de
datos. La segunda asigna el nombre Base_de_datos a
un rango especfico, A1:E535

ActiveWorkbook.Close

Esta sentencia cierra el libro activo (Histrico). Al


ejecutar la macro preguntar siempre si guarda los
cambios.

Range("A1").Select

Con esto se activa la celda A1.


Tal cual como tenemos la macro, funcionar en
condiciones especficas, con el mismo archivo y con la
misma base de datos histrica.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 113

Si el archivo histrico va a ir aumentando sus registros


el rea de datos no siempre va a ser el mismo.

Modificaremos entonces la macro para hacerla ms


general.

La sentencia Selection.End(xlDown).Select activara la


ultima celda con informacin que encuentre hacia
abajo. Pero la sentencia Range("A358").Select
selecciona la celda A358 y cada vez que se ejecute la
macro seleccionar la misma celda , es decir , una
celda absoluta, debemos hacer que esta grabacin sea
relativa, teniendo en cuenta que mes a mes la base de
datos va a ir creciendo y la ultima celda vaca para
copiar datos importados va a ir cambiando.

1. Del men Herramientas seleccionar Grabar macro


y luego seleccionar el botn Usar referencias
relativas. De este modo la grabacin se har en
forma relativa.

2. Presionar la flecha hacia abajo para


grabar un movimiento relativo y detener la
grabacin Seleccionar la sentencia
Range("A358").Select y presionar Supr. En la macro
Base de datos

La sentencia que quedar grabada es la siguiente:


ActiveCell.Offset(1, 0).Range("A1").Select

Esta instruccin selecciona la celda que est abajo de la


celda activa.

ActiveWorkbook.Names.Add Name:="Database", RefersToR1C1:= _


"=Hoja1!R1C1:R535C6"
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 114

Esta sentencia es la que asigna nombre a un rango


especfico.

Cambie la sentencia completa por:

Selection.Name = "Base_de_datos"

Esta instruccin asignar el nombre Base_de_datos al


rango actualmente seleccionado.

ActiveWorkbook.Close

Esta instruccin es la que cierra el libro. Siempre


aparecer el cuadro preguntando si se guardan los
cambios.
Para que se guarden automticamente los cambios al
cerrar el libro histrico y sin preguntarlo, agregue lo
siguiente:

ActiveWorkbook.Close SaveChanges:=True

Finalmente la macro terminada quedara como se


muestra en la pgina siguiente:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 115
Sub BaseDatos()
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Selection.CurrentRegion.Select
Selection.Copy
Workbooks.Open Filename:= _
"C:\ExcelVBA\Ejercicios\Histrico.xls"
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.CurrentRegion.Select
Selection.Name = "Base_de_datos"
ActiveWorkbook.Close SaveChanges:=True
Range("A1").Select
End Sub
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 116

Crearemos ahora una macro para que elimine del libro


Importaciones la hoja en la que se importaron los
datos, ya que estos ya fueron copiados al archivo
Histrico.

1. Activar alguna hoja Informe del libro Importaciones.

2. Hacer los pasos para grabar una macro. Nombre de


la macro EliminarHoja, agregue descripcin y un
mtodo abreviado.

3. Del men Edicin seleccionar la opcin Eliminar


hoja y hacer un clic en Aceptar.

4. Detener la grabacin.

La macro quedara as:


'
Sub EliminarHoja()
ActiveWindow.SelectedSheets.Delete
End Sub

Prubela paso a paso.

Para que no pregunte si se acepta la eliminacin de la


hoja inserte abajo de la sentencia Sub EliminarHoja()
la siguiente instruccin:

Sub EliminarHoja()
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
End Sub

DisplayAlerts es una propiedad de la aplicacin Excel


que cuando se le asigna el valor False, todos los
mensajes de alerta se tratarn como si se hubiera
activado su opcin implcita.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 117

Haremos ahora una macro general que a su vez ejecuta


las macros ImportarArchivo, CopiarDatos,
AgregarColumnaFecha, BaseDatos y EliminarHoja.

Realice lo siguiente:

1. Hacer clic en Grabar macro. Asigne como nombre


a la macro Resumen. Hacer un clic en Aceptar.

2. Detener la grabacin.

No se ha grabado nada en la macro.

Edite la macro Resumen.

Sub Resumen()
End Sub

Incluiremos las instrucciones para que esta macro


ejecute a las dems. Realice lo siguiente:

1. Inerte un lnea en blanco entre las dos sentencias,


ubique el punto de insercin en esa lnea y presione
TAB.

2. De la barra de herramientas de Visual Basic, hacer


clic en el botn Examinador de objetos. Aparecer
el siguiente cuadro:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 118

3. A la izquierda de este cuadro aparece Mdulo 1, la


hoja donde estn grabadas las macros y a la derecha
la lista de macros.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 119

4. Seleccionar ImportarArchivo de la lista de la


derecha, hacer clic en copiar cmbiese a la ventana
de mdulo y diga pegar.

5. De la barra de herramientas de Visual Basic, hacer


clic en el botn Examinador de objetos.

6. Seleccionar CopiarDatos de la lista de la derecha,


hacer clic en copiar cmbiese a la ventana de
mdulo y diga pegar..

7. De la barra de herramientas de Visual Basic, hacer


clic en el botn Examinador de objetos.

8. Seleccionar AgregarColumnaFecha de la lista de la


derecha, hacer clic en copiar cmbiese a la ventana
de mdulo y diga pegar.

9. De la barra de herramientas de Visual Basic, hacer


clic en el botn Examinador de objetos.

10. Seleccionar BaseDatos de la lista de la derecha,


hacer clic en copiar cmbiese a la ventana de
mdulo y diga pegar..

11. De la barra de herramientas de Visual Basic, hacer


clic en el botn Examinador de objetos.

12. Seleccionar BaseDatos de la lista de la derecha,


hacer clic en copiar cmbiese a la ventana de
mdulo y diga pegar..
Sub Resumen()
ImportarArchivo
CopiarDatos
AgregarColumnaFecha
BaseDatos
EliminarHoja
End Sub

Ejecute paso a paso su macro Resumen.


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
MACROS SUBORDINADAS
Conjunto 2
Pgina 120

Oculte la macros subordinadas.


Vaya a la hoja del mdulo y ubique la macro
ImportarArchivo. Inserte la palabra Private delante de
la palabra Sub.
Private Sub ImportarArchivo()

Haga lo mismo para ocultar las otras macros


subordinadas.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 121

En este captulo trataremos el Ciclo Si, que permite que


una macro realice continuamente una determinada
accin mientras se cumplan ciertas condiciones.

Prepararemos nuestro trabajo.


Usted dispone de un archivo histrico (Histrico.xls)
en el cual se han agregado los informes mensuales que
se reciben.
Se trata entonces de hacer una tabla dinmica en la cual
se muestren las unidades importadas segn categoras.
Finalmente deber resaltar con algn formato aquellas
unidades que superan una determinada cantidad.

1. Abrir desde el disquete de trabajo el archivo


Histrico.xls.

2. Del men Datos seleccionar la opcin Informe de


Tablas y Grfico Dinmicos. Aparecer el siguiente
cuadro:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 122

3. Hacer clic en el botn Siguiente. Aparecer el paso


2 del asistente para tablas dinmicas. En el se
muestra el rango Base_de_Datos que corresponde a
su archivo histrico.

4. Hacer clic en Siguiente. Aparecer el paso tres.


Seleccione Hoja de clculo nueva y d clic en
Finalizar.

5. Ubicar la etiqueta Categora en el rea Fila,


Procedencia en el rea Columna, Precio en el rea
Pgina y Cantidad en el rea Datos.

6. Hacer un clic en Terminar.

Aparecer a la izquierda de la hoja 1, la hoja que


contiene la tabla dinmica.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 123

Grabe este archivo con el nombre Cantidades.


Elimine la hoja 1, hoja que contiene los datos
originales.

Ahora convertiremos los datos de la tabla dinmica a


porcentajes. Para ello:

1. Activar la celda que contiene la etiqueta Suma de


cantidades.

2. Hacer clic en el botn Campo de la tabla dinmica.

Aparecer el siguiente cuadro:

3. Hacer clic en el botn Opciones. Tendr entonces lo


siguiente:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 124

4. Escribir Porcentaje en el cuadro Nombre.

5. Seleccionar en la lista Mostrar datos como la


opcin % de la columna.

6. Hacer clic en el botn Nmero y cambiar la


cantidad de decimales a cero.

7. Hacer clic en Aceptar.

Crearemos ahora una macro que aplique un color de


celda rojo para resaltar todos aquellos valores
superiores al 20%.
La macro deber grabarse con referencia relativa.

1. Activar alguna celda que tenga valor superior a 20%.

2. Realizar los pasos para grabar la macro. Asigne


como nombre a la macro FormatoCeldas, asigne
algn mtodo abreviado y grbela en el mismo libro.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 125

3. Seleccionar el color rojo de la Paleta porttil color


de fondo.

4. Presionar una vez la tecla Flecha Abajo.

5. Detener la grabacin.

La macro quedar as:


'
Sub FormatoCeldas()
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub

Esta macro aplica el color slido rojo a la celda actual


y despus desplaza la seleccin una celda abajo de la
posicin en donde se encuentra.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 126

Modificaremos ahora la macro para que ella evale si


el valor que contiene es superior a 20% para aplicar el
color rojo.

1. En la hoja del mdulo modifique el nombre de la


macro. Escriba ElegirCelda.

2. Ubique el punto de insercin al final de esa lnea.


Presionar Enter y luego Tab para sangrar la nueva
lnea.

3. Escribir la siguiente sentencia:


If ActiveCell > 0.2 Then

Con esta sentencia la macro decidir si la celda


activa contiene un valor > a 20%.

4. Sangre con la tecla Tab las cuatro lneas siguientes


que aplican el color rojo. Esto es para indicarle a la
macro que estas lneas estn controladas por la
sentencia If.

5. Ubicar el punto de insercin al final de la lnea End


With y presionar Enter.

6. Presionar la tecla Retroceso para alinear el punto de


insercin con la sentencia If.

7. Escribir la sentencia:
End If

Su macro debera quedar as:

'
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 127

Sub ElegirCeldas()
If ActiveCell > 0.2 Then
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
End If
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub

Para observar como funciona la macro recrrala Paso a


Paso.

Como se dar cuenta la macro funciona bien, aplica el


formato cuando corresponde, pero de igual forma debe
ejecutarla usted mismo en cada celda.
La idea es que la macro recorra sola la tabla y aplique
el formato que corresponda. O sea, incluir la macro
dentro de un Bucle.

Para ello realice lo siguiente:

1. En el mdulo donde se encuentra la macro cambie el


nombre de la macro por BucleElegirCeldas.

2. Ubicar el punto de insercin al final de esa lnea y


presionar Enter y luego Tab, para generar una lnea y
sangrarla, respectivamente.

3. Escribir Do.

Con esta instruccin se le indica a la macro que entre


en un Bucle (Ciclo).
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 128

Sangrar con la tecla Tab las siguientes 7 lneas que


controlar la sentencia Do. Esta operacin se realiza
para que la macro sea de ms fcil lectura, y para
recordar que todas las lneas sangradas son
controladas por el Bucle.

4. Ubicar el punto de insercin al final de la lnea


ActiveCell.Offset(1, 0).Range("A1").Select.

5. Presionar Enter.

6. Presionar Retroceso para alinear el punto de


insercin con la sentencia Do.

7. Escribir la sentencia:
Loop

La macro debera quedar as:

'
Sub BucleElegirCeldas()
Do
If ActiveCell > 0.2 Then
With Selection.Interior
.ColorIndex = 3
End With
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
End Sub

Revise la macro , primero Paso a Paso y luego presione


el botn Reanudar macro y vera que la macro se
ejecuta cclicamente sin parar.
Presione la tecla Esc y aparecer el siguiente cuadro:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 129

Hacer clic en el botn Detener.

Modificaremos la macro ahora para que se detenga


cuando deba, o sea, cuando encuentre una celda vaca.

Para ello realice lo siguiente:

1. En la hoja del mdulo en donde se encuentra la


macro, cambiar la sentencia Do por:
Do Until ActiveCell = ""

La palabra Until hace que el bucle se detenga,


ActiveCell = indica que la celda activa sea igual
a vaco (no debe ir espacio entre las comillas).

Si ejecuta ahora la macro, ver que recorre la columna


en donde se encuentra el cursor, cuando encuentra la
primera celda vaca, se detiene. Si pasa a la siguiente
columna para ejecutar la macro, suceder lo mismo.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 130

La idea es que la macro se cambie de columna.


Usaremos el grabador de macros, para hacer que por s
sola pase a la siguiente columna. Para ello:

1. Grabe una nueva macro con direccin relativa.

2. Activar la hoja de la tabla dinmica.

3. Activar la primera celda vaca debajo de cualquier


columna con datos.

4. La idea ahora es desplazar el cursor una columna a


la derecha, luego activar la primera celda de esa
columna y desplazarse a la celda de abajo, que es la
primera celda que contiene un nmero a evaluar por
la macro. Para ello debe presionar una vez la tecla
Flecha Derecha, luego una vez Flecha Arriba, luego
Fin Flecha Arriba y finalmente Flecha Abajo.

5. Detener la grabacin.

Se han agregado a la macro las siguientes lneas:

ActiveCell.Offset(-1, 1).Range("A1").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select

La primera lnea desplaza el cursor una celda arriba y


un lugar a la derecha.
La segunda lnea desplaza la celda activa al lmite
superior de la columna. La tercera lnea la desplaza un
lugar hacia abajo.

Si prueba ahora la macro ver que aplica formatos a las


celdas de la columna y se desplaza sola al primer valor
de la siguiente.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 131

Haremos ahora una modificacin de tal forma que se


aplique formato a la tabla completa. Para ello:

1. En el mdulo, ubicar el punto de insercin al final de


la lnea Sub BucleElegirCeldas() y presionar Enter.

2. Sangrar la lnea.

3. Escribir:
Do Until ActiveCell = ""
4. Sangrar las siguientes 12 lneas que son controladas
por este Bucle.

5. Ubicar el punto de insercin delante de la sentencia


End Sub y presionar Enter.

6. Sangrar para alinear el punto de insercin con la


primera sentencia Do Until ActiveCell = "".

7. Escribir
Loop

Finalmente la macro deber quedar as:


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 132
Sub BucleElegirCeldas()
Do Until ActiveCell = ""
Do Until ActiveCell = ""
If ActiveCell > 0.2 Then
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
ActiveCell.Offset(-1, 1).Range("A1").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
End Sub

Como podr observar la macro funciona bastante bien,


y podr aplicar formatos a las celdas que contengan
valores superiores al 20%.

La macro anteriormente hecha aplica color de celda


rojo a todas las celdas cuyo valor sea superior al 20%.
Supongamos ahora que se desea asignar diferentes
colores a las celdas segn el valor que tengan: color
rojo a las celdas cuyo valor sea superior a 40%,
amarillo a las que tengan sobre 30%, verde a las que
tengan sobre 20%, azul a las superiores a 10% y
blancas el resto.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 133

Modificaremos entonces la macro:

Para evitar hacer toda la macro nuevamente, en la hoja


del mdulo copiaremos completa al final.
Cambiaremos el nombre de la macro por
BucleFormatoColor y la nueva descripcin ser:
Aplica color rojo a las celdas segn el valor que
tengan. Mtodo abreviado : CONTROL + SHIFT + V.
Todos estos cambios los puede hacer en la hoja del
mdulo, en la copia de la macro.
Sub BucleFormatoColor()

La sentencia que aplica color rojo a las celdas que son


superiores a 20% son:

If ActiveCell > 0.2 Then


With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
End If

El caso es que ahora tendremos que aplicar ms


condiciones y despus de cada una de ellas escribir las
sentencias:

With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With

cambiando el nmero de ColorIndex segn el color que


se aplicar.
Para la evitar la continua repeticin de estas lneas,
haremos un procedimiento principal que utilice un
procedimiento subordinado o procedimiento servidor.
Para ello:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 134

1. Seleccionar las siguientes lneas de la macro:

With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
2. Cortar y pegar al final de la macro, en la lnea de
abajo de End Sub.

3. Ubicar el punto de insercin al inicio de la lnea


With Selection.Interior y presionar Enter.

4. Escribir Sub Color()

5. Ubicar el punto de insercin al final de End With y


presionar Enter.

6. Escribir End Sub.

La macro subordinada quedar as:


Sub Color()
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
End Sub

7. Ubicar el punto de insercin al final de la lnea


If ActiveCell > 0.2 Then y presionar Enter.
8. Escribir Color.
La macro completa quedara as:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 135
Sub BucleFormatoColor()
Do Until ActiveCell = ""
Do Until ActiveCell = ""
If ActiveCell > 0.2 Then
Color
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
ActiveCell.Offset(-1, 1).Range("A1").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
End Sub
Sub Color()
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
End Sub
Cuando el procedimiento principal FormatoColor
necesita al procedimiento subordinado, tambin
llamada subrutina Color lo llama y ejecuta.

Pruebe la macro.

Ahora supongamos que en vez de asignar color rojo a


las celdas mayores a 20%, necesita aplicar otro color.
Tendra que crear otra subrutina, para que el
procedimiento principal FormatoColor lo llame y
ejecute. O bien, hacer que el procedimiento principal
de instrucciones a la subrutina Color de como quiere
que trabaje. Crearemos entonces una subrutina que
acepte argumentos cuando se le llame, o sea, que a
travs de este argumento sepa que color debe aplicar.
Para ello realice lo siguiente:
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 136

1. Ubicar el punto de insercin entre los parntesis de


la lnea Sub Color() de la macro subordinada.
2. Escriba OtroColor.
3. Reemplazar el nmero 3 que sigue a la palabra
ColorIndex por la palabra OtroColor.
La macro quedara as:
Sub Color(OtroColor)
With Selection.Interior
.ColorIndex = OtroColor
.Pattern = xlSolid
End With
End Sub

4. Ubicar el punto de insercin despus de la lnea


Color, digitar un espacio y escribir OtroColor:=6.
Aplicaremos color amarillo a las celdas.

Finalmente su macro quedara as:


Sub BucleFormatoColor()
Do Until ActiveCell = ""
Do Until ActiveCell = ""
If ActiveCell > 0.2 Then
Color OtroColor:=6
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
ActiveCell.Offset(-1, 1).Range("A1").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
End Sub

Sub Color(OtroColor)
With Selection.Interior
.ColorIndex = OtroColor
.Pattern = xlSolid
End With
End Sub
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 137

Pruebe la macro y vea que funciona igual.

Ahora podemos agregar ms condiciones a la macro


de manera que asigne color rojo a las celdas cuyo valor
sea superior a 40%, amarillo a las que tengan sobre
30%, verde a las que tengan sobre 20%, azul a las
superiores a 10% y blancas el resto.

1. En la macro FormatoColor reemplazar la lnea que


comienza por If con las siguientes instrucciones:
If ActiveCell >= 0.4 Then
Color OtroColor:=3
ElseIf ActiveCell >= 0.3 Then
Color OtroColor:=6
ElseIf ActiveCell >= 0.2 Then
Color OtroColor:=4
ElseIf ActiveCell >= 0.1 Then
Color OtroColor:=5
Else
Color OtroColor:=2
End If

La macro completa quedara as:

Sub BucleFormatoColor()
Do Until ActiveCell = ""
Do Until ActiveCell = ""
If ActiveCell >= 0.4 Then
Color OtroColor:=3
ElseIf ActiveCell >= 0.3 Then
Color OtroColor:=6
ElseIf ActiveCell >= 0.2 Then
Color OtroColor:=4
ElseIf ActiveCell >= 0.1 Then
Color OtroColor:=5
Else
Color OtroColor:=2
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
ActiveCell.Offset(-1, 1).Range("A1").Select
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 138
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
End Sub

Sub Color(OtroColor)
With Selection.Interior
.ColorIndex = OtroColor
.Pattern = xlSolid
End With
End Sub

Pruebe la macro y vea que asigna el color de celda


segn el valor que contiene.

Cuando el procedimiento FormatoColor llama a


Color le pasa la instruccin del color que debe aplicar
mediante un nmero. Puede que usted olvide a que
color corresponde cada nmero. Entonces definiremos
constantes asociadas a cada nmero de manera que la
lectura y el entendimiento de la macro sea ms fcil.
Realice lo siguiente:

1. Ubicar el punto de insercin al final de la sentencia


Sub BucleFormatoColor() y presione Enter.

2. Escriba lo siguiente:
Const Rojo = 3
Const Amarillo = 6
Const Verde = 4
Const Azul = 5
Const Blanco = 2
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 139

Const es una palabra de Visual Basic que define una


constante, para definirla se debe escribir seguida de
un signo igual y el valor que tendr.
3. En las sentencia que llaman al procedimiento Color
reemplace la constante 3 por Rojo, 6 por Amarillo, 4
por Verde, 5 por Azul y 2 por Blanco.
La macro completa quedara as:

Sub BucleFormatoColor()
Const Rojo = 3
Const Amarillo = 6
Const Verde = 4
Const Azul = 5
Const Blanco = 2
Do Until ActiveCell = ""
Do Until ActiveCell = ""
If ActiveCell >= 0.4 Then
Color OtroColor:=Rojo
ElseIf ActiveCell >= 0.3 Then
Color OtroColor:=Amarillo
ElseIf ActiveCell >= 0.2 Then
Color OtroColor:=Verde
ElseIf ActiveCell >= 0.1 Then
Color OtroColor:=Azul
Else
Color OtroColor:=Blanco
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
ActiveCell.Offset(-1, 1).Range("A1").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
End Sub

Sub Color(OtroColor)
With Selection.Interior
.ColorIndex = OtroColor
.Pattern = xlSolid
End With
End Sub
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 140

Pruebe ahora la macro y ver que funciona


perfectamente bien.

Veamos ahora lo siguiente. Esta macro distingue cinco


condiciones para dar formato:

If ActiveCell >= 0.4 Then


Color OtroColor:=Rojo
ElseIf ActiveCell >= 0.3 Then
Color OtroColor:=Amarillo
ElseIf ActiveCell >= 0.2 Then
Color OtroColor:=Verde
ElseIf ActiveCell >= 0.1 Then
Color OtroColor:=Azul
Else
Color OtroColor:=Blanco
End If

Todas estas condiciones son paralelas porque comparan


la celda activa con varios valores.
Modificaremos la macro con la estructura Select Case
que va a cumplir la misma funcin pero ms fcil de
entender.

1. Borrar las lneas indicadas anteriormente.

2. En su lugar escribir lo siguiente:


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
CICLO SI
Conjunto 3
Pgina 141
Select Case ActiveCell
Case Is >= 0.4
Color OtroColor:=Rojo
Case Is >= 0.3
Color OtroColor:=Amarillo
Case Is >= 0.2
Color OtroColor:=Verde
Case Is >= 0.1
Color OtroColor:=Azul
Case Else
Color OtroColor:=Blanco
End Select

Pruebe ahora su macro.


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 142

CREAR FUNCIONES Excel posee una serie de funciones que permiten


obtener rpidamente clculos. Es posible acceder a
ellas mediante la opcin Insertar Funcin.
Con Visual Basic es posible crear funciones
personalizadas para optimizar aquellos clculos que
usemos frecuentemente.
Por ejemplo, se necesita calcular una Nota Final que se
obtiene mediante un promedio ponderado en que se
suma el 70% del Promedio y el 30% de un Examen.
Haremos entonces una funcin:

1. En un libro nuevo donde tenga una hoja de mdulo


escribir lo siguiente:
Function NotaFinal(Promedio, Examen)
NotaFinal = Promedio * 0.7 + Examen * 0.3
End Function

Note que ahora la macro no se inicia con la palabra


Sub, sino que con Function, debido a que crearemos
una funcin.

El nombre de la funcin NotaFinal define el nombre


de la funcin. Las palabras Promedio y Examen,
escritas entre los parntesis, definen los argumentos
de la funcin.

La lnea

NotaFinal = Promedio * 0.7 + Examen * 0.3 define


como se obtendr la Nota Final.

2. End Function finaliza la funcin.


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 143

Pruebe ahora la funcin:

En una hoja del mismo libro en donde program la


funcin, escriba una valor para el Promedio y otro para
el examen.

Active la celda C2 y luego haga clic en la herramienta


pegar funcin o Autosuma y elija la opcin mas
funciones.

Aparecer el cuadro Asistente para Funciones, active


la categora Definidas por el usuario.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 144

Aparecer la funcin NotaFinal. Haga clic en


Aceptar.

En el argumento Promedio indicar A2 y en Examen B2.


Termine la funcin.
Tendr entonces en C2 el promedio ponderado.

Note que en el primer cuadro del Asistente para funciones


no tiene ayuda respecto a la funcin.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 145
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 146

Para que la funcin posea una descripcin respecto a lo que


hace realizaremos lo siguiente:

1. Activar la hoja del mdulo en donde se encuentra la


funcin.

2. Hacer clic en el botn Examinador de Objetos.


Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 147

3. En la lista Miembros de globales seleccionar el


nombre de la funcin y hacer clic con el botn
derecho del mouse para seleccionar propiedades.
Aparecer el cuadro de Opciones de miembro.

4. En Descripcin escriba la ayuda que quiere que


aparezca en el primer paso del Asistente para
Funciones..

5. Hacer un clic en Aceptar.

6. Cerrar el cuadro Examinador de Objetos.

Pruebe nuevamente la Funcin.

En una funcin definida por el usuario tambin es


posible insertar una funcin propia de Excel. Por
ejemplo en la funcin NotaFinal, se necesita redondear
hacia arriba o abajo en 1 decimal. Para ello realice lo
siguiente:

1. Ubicar el punto de insercin al final de la lnea


NotaFinal = Promedio * 0.7 + Examen * 0.3
y presionar Enter.

2. Escribir la siguiente lnea de instrucciones:

NotaFinal = Application.Round(NotaFinal, 1)

Con esta instruccin se est indicando que a la


funcin NotaFinal debe aplicarse la funcin Round
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 148

(Redondear) en un decimal. Cada vez que se utilice


una funcin de Excel en una funcin personalizada
debe escribirse antes del nombre de la funcin la
palabra Application..

La funcin completa quedara as:

Function NotaFinal(Promedio, Examen)


NotaFinal = Promedio * 0.7 + Examen * 0.3
NotaFinal = Application.Round(NotaFinal, 1)
End Function

Prueba nuevamente su funcin.

Esta funcin estar disponible slo cuando tenga


abierto el libro que contiene la hoja del mdulo donde
program la funcin.
Si quiere tenerla siempre disponible deber escribirla
en el libro Personal.xls.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 149

Anteriormente hemos visto el ciclo DoLoop que


repite un grupo de instrucciones mientras las
condiciones sean verdaderas.
Veremos ahora el ciclo For EachNext que repite
instrucciones para cada objeto del conjunto.

Haremos una macro que acte sobre cualquier


seleccin, y le instruiremos que si el valor es mayor a 5
aplique color rojo, en caso contrario que aplique
amarillo.

En una hoja de mdulo digite las siguientes


instrucciones:

Sub DosColores()
Dim miCelda
For Each miCelda In Selection
If miCelda >= 5 Then
With miCelda.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
Else
With miCelda.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End If
Next miCelda
End Sub

Analizaremos las lneas de esta macro:

Dim miCelda, esta lnea est declarando a miCelda


como una variable. Cuando se usa Dim se le est
indicando a Visual Basic que se tiene intencin de
utilizar el texto que le sigue como una variable.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 150

For Each miCelda In Selection, For Each le est


indicando a Visual Basic que ponga la primera celda
seleccionada en al variable miCelda.

If miCelda >= 5 Then


With miCelda.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
Else
With miCelda.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End If
Todas las lneas anteriores estn instruyendo que de
acuerdo al valor de la celda se asigne color rojo o azul.
Note que no se usa ActiveCell en la lnea del If, sino
que miCelda, ya que la celda activa se ha pasado a la
variable miCelda.
Next miCelda , esta sentencia indica a Visual Basic que
vuelva a la sentencia For Each y asigne al siguiente
elemento (la siguiente celda) de la coleccin (la
seleccin) a la variable miCelda y vuelva a ejecutar las
sentencia que hay dentro del bucle.

Para probar la macro digite en un rango cualquiera


nmero entre 1 y 30. Seleccione el rango de datos y
ejecute la macro.

Para evitar hacer la seleccin del rango antes de


ejecutar la macro, definiremos nombre al rango.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 151

1. Hacer otra lista de nmeros entre 1 y 30.

2. Seleccionar el rango de celda y definirle el nombre


Valores.

Modifique ahora la macro:

1. En la lnea For Each, reemplazar la palabra Selection


por Range(Valores)

La macro completa quedara as:

Sub DosColores()
Dim miCelda
For Each miCelda In Range("Valores")
If miCelda >= 5 Then
With miCelda.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
Else
With miCelda.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End If
Next miCelda
End Sub

Pruebe nuevamente la macro. No necesita seleccionar


el rango. Es ms puede tener activa cualquier celda de
cualquier hoja del libro y la macro se ejecutar sobre el
rango llamado Valores.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 152

Trabajar con Formularios Los formularios nos permiten personalizar nuestras


aplicaciones de manera de darle una forma mas
profesional y agradable a la vista del usuario. Tambin
nos permiten desarrollar una interfaz que haga
transparente el uso de Microsoft Excel para el usuario
que no est muy familiarizado con su funcionamiento.

Insertar un Formulario Desde el Editor de Visual Basic vaya al men insertar


y elija UserForm.
En la siguiente ilustracin se muestra la insercin de
un nuevo formulario, el cual se puede encontrar en el
men Insertar, submen Formulario. En este
formulario podremos insertar cuadros de texto,
etiquetas, listas, etc. Por medio de ellos podemos
manipular los datos, tanto de la hoja de clculo como
aquellos que podamos utilizar dentro del mismo
formulario.

Para insertar un nuevo control en el formulario


debemos seleccionar el control que deseemos insertar
y dibujarlo en el formulario dando un click y
movindolo hacia la derecha sin soltar el click.

Por ejemplo, si deseamos crear nuestra calculadora


bsica podramos crear un diseo de formulario como
se muestra en las figuras siguientes.

All podemos ver que se encuentran los casilleros


correspondientes para insertar los valores e ingresar el
signo respectivo a la operacin que se desea realizar.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 153
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 154

Creacin de un Para crear el formulario que necesitamos para el


Formulario ejercicio anterior seguiremos una serie de pasos que
detallaremos para una mejor comprensin.
Como dijimos anteriormente, podemos crear objetos y
en este caso, una ventana (o formulario como le
llamaremos aqu). Un formulario tiene propiedades,
que son las que le indicarn por ejemplo el nombre,
que es por medio del cual nos referiremos al objeto.
Por ejemplo, si queremos cambiar alguna propiedad
del formulario que creamos, deberemos hacer
referencia a sus atributos por medio del nombre que le
pusimos. O sea, si queremos ponerle un ttulo
(propiedad Caption) podemos escribir
Calculadora.Caption=Calculadora Bsica y lo
mismo para los dems atributos.

El nombre del formulario es distinto del Caption. El


nombre (Name) es el que utilizamos para referenciar
el objeto. En cambio el Caption es el ttulo, lo que se
ve por la pantalla.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 155

Insercin de Objetos en el Es aconsejable siempre poner un nombre a todos los


Formulario objetos que utilizamos en el formulario. Ahora
insertaremos los siguientes objetos en el formulario.
Vemos las siguientes imgenes.

Los objetos que se pueden insertar son los que


aparecen en el Cuadro de herramientas. La etiqueta
(que dice Operador 1) se puede insertar seleccionando
el control que se encuentra a la izquierda del control
cuadro de texto que se muestra en la imagen.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 156

Todos los objetos que insertemos en el formulario


tienen un nombre que puede variar segn los
requerimientos del usuario. El objeto etiqueta tambin
puede tener un nombre.
En las siguientes imgenes se muestra la finalizacin
del formulario, donde se insertarn los controles
respectivos al ingreso del segundo operador y el botn
con el cual ejecutaremos la macro.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 157
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 158

Ahora ya tenemos listo el formulario con el cual


realizaremos nuestra calculadora. Slo falta poner el
cdigo que realizar el clculo.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 159
Insercin de Cdigo de Debemos poner el cdigo en el evento click del botn
Programacin que hemos insertado (pues debern realizarse los
clculos al presionar dicho botn). Para ello haremos
doble click en el botn y se abrir una ventana en la
cual pondremos poner el cdigo que realizar el
clculo.
Lo que debemos hacer es poner el cdigo que realizar
el clculo de la operacin de acuerdo al smbolo que
se encuentre en el segundo cuadro de texto que hemos
puesto en el formulario.
Para ello deberemos crear un cdigo.
Veamos el cdigo resultante que realizar el clculo
de la operacin matemtica.
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 160
Veamos lnea por lnea el significado del cdigo anterior.

Private Sub Calcular_Click() Inicio de nuestro cdigo. Esta escrito en el


evento Click (o sea, cuando se hace click en
el botn).
Select Case Operacion.Text Realizamos un select de acuerdo a la
operacin que se haya escrito en el objeto
Operacion. La propiedad Text es la que nos
indica que es lo que hemos escrito en el
cuadro de texto.
Case "+" En caso de que lo que hayamos escrito
en el cuadro de texto Operacin un signo +
entonces se realiza lo que esta a
continuacin.

Resultado.Text = Val(Operador1.Text) + Val(Operador2.Text) Como lo


que haba en el cuadro Operacin era un
signo + entonces debemos sumar lo que
tenga el cuadro de texto Operador1 ms lo
de cuadro de texto Operador2.
Como lo que hay en los cuadros de texto
es Texto (lo mismo que pasa en las
celdas de Excel muchas veces) entonces
debemos transformarlo a un nmero. Para
ello se pone la funcin VAL antes del
contenido del cuadro de texto.

Case "-" Si es un signo entonces debemos


realizar la resta y poner el resultado en el
cuadro de texto resultado.
Resultado.Text = Val(Operador1.Text) - Val(Operador2.Text)

Case "*" Si es un signo * entonces multiplicamos.


Resultado.Text = Val(Operador1.Text) * Val(Operador2.Text)

Case "/" Si es el signo / debemos realizar la


verificacin de divisin por 0 y realizamos
la operacin que corresponde.

If (Val(Operador2.Text) = 0) Then
Resultado.Text = "Error: Intenta dividir por 0 y no est definido."
Else
Resultado.Text = Val(Operador1.Text) / Val(Operador2.Text)
Programacin de Macros con Visual Basic para Excel Pontificia Universidad Catlica de Chile
FUNCIONES
Conjunto 4
Pgina 161
End If

Case Else Si no es ningn smbolo vlido entonces se muestra el mensaje


de error.
Resultado.Text = "Operacin no Vlida"

End Select Fin del select.


End Sub Fin del cdigo del botn.

You might also like