Curso MACROS

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 63

CURSO DE

AUTOMATIZACION DE
EXCEL

MACROS:
CONCEPTOS GENERALES

INTRODUCCIÓN A LAS MACROS

Una macro es una combinación de instrucciones que pueden ser ejecutadas


automáticamente con una simple pulsación de teclas. La palabra macro es una abreviatura
de la palabra macroinstrucción que viene a ser lo mismo que hemos definido. En ocasiones,
nos vemos en la necesidad de realizar una serie de tareas repetitivas de forma rutinaria.
Podemos crear una macro que nos evite ese trabajo. Una macro en sí es un pequeño
programa en código visual basic que se graba con un nombre y que podemos invocar en
cualquier momento. También podemos asignar una combinación de teclas como Control+V
para invocarla. La ejecución de una macro es muy rápida, aunque depende de la cantidad
de instrucciones que deba realizar.
Imaginemos que diariamente tenemos que arreglar una tabla de datos poniéndole colores,
formato, bordes, etc para posteriormente imprimirla. La siguiente ilustración de la izquierda
muestra la tabla normal, y la de la derecha arreglada a mano:

Para arreglar la tabla tendríamos que:

1. Seleccionarla
2. Abrir la paleta de bordes y colocar un borde exterior
3. Abrir la paleta de color de fondo y escoger un color
4. Abrir la paleta de color de texto y escoger un color
5. Pulsar un click en el botón del formato monetario
6. Pulsar un click en el botón del formato cursiva
7. Pulsar un click fuera de la tabla y extasiarnos con su belleza

Estos han sido sólo 7 pasos. Imagine una tarea rutinaria de 200 pasos. Para ello, podemos
crear una macro que nos realice el trabajo automáticamente. Evidentemente, los pasos de
la macro han de ser los correctos, evitando abrir y cerrar menús y opciones
innecesariamente, por lo que la macro tardaría más en ejecutarse.

CREACIÓN DE UNA MACRO PASO A PASO

- Cree una tabla más o menos como en el ejemplo superior

e-mail: infosysar@ciudad.com.ar -1-


CURSO DE
AUTOMATIZACION DE
EXCEL
- Haga una copia de la tabla en otra hoja (para probar luego la macro) La copia la puede
hacer arrastrando la pestaña inferior con la tecla de control pulsada hacia su derecha, de
forma que hacemos una copia de la Hoja1 tal y como se ve en la Ilustración:

- Sitúese en la Hoja1

- Abra el menú Herramientas - Macro - Grabar nueva macro. Aparecerá una ventana
donde deberá escribir un nombre para la macro o aceptar el que le ofrece Excel (Macro1)

- Acepte el cuadro de diálogo. Sale un pequeño botón con el que podemos finalizar la
grabación o hacer una pausa en la macro.

IMPORTANTE: a partir de este momento, la macro comienza a grabar cualquier pulsación,


selección, apertura de menús, click, etc que realizemos, por lo que debemos tener cuidado
en hacer los pasos poco a poco. A continuación deberá realizar poco a poco los pasos
comentados anteriormente.

1. Seleccione la tabla

e-mail: infosysar@ciudad.com.ar -2-


CURSO DE
AUTOMATIZACION DE
EXCEL
2. Abra la paleta de bordes y colocar un borde exterior
3. Abra la paleta de color de fondo y escoger un color
4. Abra la paleta de color de texto y escoger un color
5. Pulsar un click en el botón del formato monetario
6. Pulsar un click en el botón del formato cursiva
7. Pulsar un click fuera de la tabla.

- Pulse en el botón Detener grabación

MODIFICACIÓN DE LA MACRO

- Abra el menú Herramientas - Macro - Macros y pulse en Opciones


Desde aquí podemos asignarle la macro a una combinación de teclas como Control+Z, por
ejemplo.

- Cancele el cuadro y pulse ahora en el botón Modificar


Aquí aparece una pantalla que si no sabe algo de Visual Basic, mejor ni la mire. Para los
que tengan nociones con VB, las órdenes que ve le serán entendibles. Aquí se muestran
paso a paso todas las acciones que hemos realizado en la macro. Excel lo ha traducido al
lenguaje VB. Desde aquí podemos también modificar cualquier línea con lo que
modificaremos el comportamiento de la macro.

Observe que muchas órdenes hay que leerlas de derecha a izquierda


Range("A1:C6").Select significa que hemos seleccionado el rango A1:C6

La rutina del programa tiene la siguiente estructura:


Sub Tabla_Dabuten()
Órdenes y acciones...
End Sub

Sub y End Sub marcan el inicio y el fin de la rutina, respectivamente. De momento no nos
comeremos mucho la cabeza con las rutinas. Simplemente tendremos una idea de cómo
trata Excel las macros. En posteriores lecciones veremos cómo modificar el código de una
macro a nuestro gusto.

- Cierre la ventana. Observe que deberá cerrar una ventana especial (Visual Basic) para
retornar a la ventana de Excel normal

EJECUCIÓN DE LA MACRO

Una Macro escrita por nosotros se ejecuta exactamente igual que si se tratase de
cualquier otra Macro.

1.- Abra el libro donde tienes guardada la Macro que creamos en la lección
anterior.

e-mail: infosysar@ciudad.com.ar -3-


CURSO DE
AUTOMATIZACION DE
EXCEL
2.- Despliega el menú: Herramientas - Macro

Una vez allí podrá ver como aparece un pequeño submenú.

3.- Seleccione la opción Macros... Aparecerá una nueva ventana en la que


podrá ver el nombre que nosotros escribimos detrás del comando Sub.

4.- Haga un clic sobre este nombre y después pulse el botón Ejecutar.

La Macro se pone en funcionamiento, podemos observar como la ahora activa pasa


a ser la segunda.

Ya hemos visto como crear, guardar y ejecutar Macros creadas utilizando el Editor
de Visual Basic.

A partir de esta lección iremos viendo pequeñas Macros que realizarán cosas muy
concretas. Estas Macros se podrán ir entrelazando para así poder conseguir lo que
nosotros deseamos.

COMO ESCRIBIR UNA MACRO UTILIZANDO EL EDITOR DE VISUAL BASIC

Las macros que vamos a ver a lo largo de este curso las vamos a ir programando
directamente con el Editor de Visual Basic que viene incorporado con el mismo Excel.

Para ponerlo en funcionamiento deberemos realizar los siguientes pasos:

1.- Dentro de Herramientas - Macro deberemos escoger la opción: Editor de


Visual Basic.

Una vez seleccionada se abrirá una nueva ventana con dos ventanas acopladas a la
izquierda. La superior es la ventana que llamamos: de Proyecto y la inferior la de
Propiedades. En la primera aparecerán los elementos que forman parte de cada
Proyecto (grupo de macros y hojas de Excel) y la segunda son las propiedades de los
objetos que se pueden incorporar a nuestras macros. Más adelante veremos como se
utilizan estas dos ventanas y todas sus características.

Vamos a prepararnos para poder escribir nuestra primera macro

2.- Escoja la opción Módulo del menú Insertar.

Observe como en la ventana superior aparece una nueva carpeta llamada Módulos
y en su interior un nuevo elemento llamado Módulo1. Dentro de este módulo será
donde guardemos las macros que iremos creando.

e-mail: infosysar@ciudad.com.ar -4-


CURSO DE
AUTOMATIZACION DE
EXCEL
También podrá ver como la parte derecha de la ventana ahora es completamente
blanca. Aquí es donde podemos escribir las instrucciones que formarán parte de
nuestra Macro.

Vamos a crear una Macro y esta nos servirá de ejemplo para ver como se deben
escribir.

Crearemos una Macro muy sencilla la cual nos servirá para que la página activa
pase a ser la segunda.

3.- En la página en blanco de la derecha escriba lo siguiente:

Sub Cambiardehoja()
Worksheets(2).Activate
End Sub

Ya tenemos escrita nuestra primera Macro.

El comando Sub indica el principio de la Macro, mientras que End Sub marca el
final de esta. A continuación del comando Sub hemos puesto el nombre que deseamos
dar a nuestra Macro. Observe como después del nombre aparece un paréntesis que se
cierra y otro que se abre.

Entre el principio y el final de la Macro escribimos las instrucciones que deseamos se


realicen en esta Macro.

Si deseamos guardar la Macro simplemente deberemos guardar el libro activo con el


nombre que deseamos. Ambos elementos se guardarán juntos.

En la siguiente lección veremos como podemos poner en funcionamiento una Macro


creada por nosotros.

MACROS CON LIBROS.

Vamos a ver tres Macros que trabajarán directamente con libros. Con ellas
podremos abrir un libro existente, activar un libro y por último crear un libro nuevo.

a) Abrir un libro existente.

Para abrir un libro utilizaremos la siguiente Macro:

Sub AbrirLibro()
Workbooks.Open("C:\Misdocumentos\Ejemplo.xls")
End Sub

Observe como entre paréntesis y comillas dobles hemos escrito el camino y el


nombre del archivo que deseamos abrir. Este archivo debe existir, si no fuera así esta
Macro nos daría error.

b) Activar un libro ya abierto.

e-mail: infosysar@ciudad.com.ar -5-


CURSO DE
AUTOMATIZACION DE
EXCEL
Con esta Macro podemos cambiar el libro activo. Es muy importante que el
libro ya esté abierto, si no fuera así, la Macro daría error.

Sub ACtivarLibro()
Workbooks("Ejemplo.xls").Activate
End Sub

Observe como en esta Macro no indicamos el camino donde se encuentra el archivo,


no hace falta ya que este debe estar abierto.

c) Crear un libro nuevo.

Con la siguiente Macro podremos crear un libro nuevo. Esta Macro es exactamente
igual que si activásemos la opción Archivo - Nuevo.

Sub NuevoLibro()
Workbooks.Add
End Sub

Si modificásemos este libro después Excel nos preguntaría si deseamos guardar


los cambios.

Los nombres de las Macros no tienen porqué ser necesariamente los mismos que
hemos puesto nosotros. Le recomiendo escriba estas MAcros y las ejecute para ver
como funcionan.

MOVERNOS POR UN LIBRO.

Vamos a ver Macros que nos permitan movernos por las celdas que contiene un
libro.

a) Buscar el final de una lista.

Podemos utilizar esta Macro para poder situarnos al final de una lista de
elementos. Interpretaremos que el final de la misma está en el momento en el que
encontramos una celda vacía.

Sub Final()
While ActiveCell.Value <> ""

ActiveCell.Offset(1,0). Select
Wend
End Sub

Deberemos observar que con esta Macro siempre queda activada la primera
celda que está en blanco después de toda la lista.

b) Buscar el final de una lista y situarnos en la última entrada.

e-mail: infosysar@ciudad.com.ar -6-


CURSO DE
AUTOMATIZACION DE
EXCEL
Esta Macro es exactamente igual que la anterior pero con la única diferencia
que la celda activada es la última entrada de la lista.
Sub FinalLista()
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Wend
ActiveCell.Offset(-1, 0).Select
End Sub
En esta Macro se realiza el bucle hasta que se encuentra la celda vacía y después
subimos una posición para situarnos en la última entrada de la tabla.

c) Buscar una entrada en una lista y borrar toda la fila.

Vamos a imaginar que tenemos una tabla de datos en la cual nos interesa
buscar un elemento determinado y borrar todos los datos que hay en la misma fila.
Pongamos el caso que tenemos una tabla con nombre, población y teléfono y
deseamos buscar todos los datos de una población determinada y borrar el nombre y
la población Para hacer la búsqueda deberemos situarnos en la fila que se encuentra la
población.

Sub BorrarFilas()
While ActiveCell.Value <> ""
If ActiveCell.Value <> "Mendoza" Then
ActiveCell.Offset(1, 0).Select
Else
Selection.EntireRow.Delete
End If
Wend
End Sub

Es importante hacer notar que si ejecutamos esta Macro no se podrá deshacer el


borrado de las filas que se han eliminado con la Macro.

d) Buscar el final de una lista con espacios en blanco dentro de ella.

Imaginemos que tenemos una lista de datos dentro de la que hay espacios en
blanco, como mucho un espacio en blanco entre dato y dato. Si utilizásemos la primera
macro que hemos creado esta interpretaría como final de la lista el primer espacio en
blanco que encontrara. Realizaremos una macro que interpretará el final de la lista
cuando encuentre 2 espacios en blanco seguidos.
Sub FinalListaEspecial()
Salir = "No"
While Salir = "No"
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Wend
ActiveCell.Offset(1, 0).Select

e-mail: infosysar@ciudad.com.ar -7-


CURSO DE
AUTOMATIZACION DE
EXCEL
If ActiveCell.Value <> "" Then
Salir = "No"
Else
Salir = "Si"
End If
Wend
End Sub
Sería interesante probar estas macros para ver su funcionamiento.

Los nombres de las Macros no tienen porqué ser necesariamente los mismos que
hemos puesto nosotros. Le recomendamos escribir estas Macros y ejecutarlas para ver
como funcionan.

TRABAJANDO CON VARIAS MACROS

Supongamos una empresa ficticia llamada "Libros Gromepeich" la cual se dedica a repartir
en las 4 provincias de Cataluña (Barcelona, Tarragona, Lérida y Gerona) sus libros,
clasificados por módulos (Venta minorista y venta mayorista), dentro de cada módulo por
categorías (Infantil, Arte, etc) y dentro de cada categoría por distintos niveles de precios
(Bajo, medio y alto) tal y como se muestra en la figura de la derecha. Tenemos, aparte una
pequeña hoja (si baja el archivo lo verá) con los tres tipos de precios.

Vamos a automatizar una serie de tareas a base de macros para recoger un informe de los
pedidos del mes anterior extrayéndolo del sistema de proceso de pedidos. El secreto de un
buen sistema de macros no está en crear una súper-macro largísima, sino en crear
pequeñas macros que realicen tareas y luego unirlas.

Si intentamos hacer toda la macro seguida, habrá que realizar cuatrocientos pasos, cruzar
los dedos, desearse lo mejor, y.... que no hayan demasiados fallos.

e-mail: infosysar@ciudad.com.ar -8-


CURSO DE
AUTOMATIZACION DE
EXCEL
Para las macros que vamos a practicar, recomendamos siempre hacer una copia de la
hoja para practicar con la copia... (por si acaso). Vamos con las tareas....

a) Tarea UNO: Rellenar celdas vacías


Cuando el sistema de pedidos produce un informe, introduce una etiqueta en una columna
la primera vez que aparece la etiqueta. Vamos a rellenar las celdas vacías con el contenido
de la etiqueta superior.

- Acceda a Herramientas - Macro - Grabar nueva macro y dele el nombre


RellenarEtiquetas. Acepte.

- Pulse Ctrl+Inicio para situarse en la celda A1

- Pulse Ctrl+* para seleccionar todo el rango de celdas

- Acceda a Edición - Ir a... (o bien pulsa F5), Especial... activa la casilla Celdas en
blanco y acepte.

- Escriba =C2 y pulse Ctrl+Intro

- Pulse Ctrl+Inicio para ir a la celda A1 y vuelva a pulsar Ctrl+*

- Acceda a Edición - Copiar y luego a Edición - Pegado especial

- Seleccione la opción Valores y acepte

- Finalice la grabación de la macro (botón Detener grabación o Herramientas - Macro


- Detener grabación).

b) Observar la macro
Vamos a ver cómo es el código de nuestra macro:

- Acceda a Herrramientas - Macro - Macros - Modificar y observaremos el código


generado:

Sub RellenarEtiquetas()
'
' RellenarEtiquetas Macro
' Macro grabada el 22/01/01 por Miguel Laffont
'

Range("A1").Select
Selection.CurrentRegion.Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "=R[-1]C"
Range("A1").Select
Selection.CurrentRegion.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

e-mail: infosysar@ciudad.com.ar -9-


CURSO DE
AUTOMATIZACION DE
EXCEL
End Sub

Como siempre, la macro comienza con Sub y finaliza con EndSub, y en su interior están
las sentencias que corresponden a las tareas.

La sentencia:

Range("A1").Select sitúa el cursor en la celda A1

Selection.CurrentRegion.Select selecciona la región actual de la selección


original. Las sentencias de una macro deben leerse siempre de derecha a
izquierda.

Selection.SpecialCells(xlCellTypeBlanks).Select selecciona las celdas en


blanco de la selección original.

Selection.FormulaR1C1 = "=R[-1]C" significa: "La fórmula para todo lo


seleccionado es... =R[-1]C (leer el valor de la celda que se encuentra justo
encima de mi)". Cuando utilizamos Ctrl+Intro para rellenar celdas, la macro
tendrá la palabra Selection delante de la palabra Formula. Cuando sólo se
introduce Intro para rellenar una celda, la macro tendrá la palabra ActiveCell
delante de la palabra Formula.

Las restantes sentencias de la macro, convierten las fórmulas en valores.

c) Ejecución de la macro

Para probar la macro, realice una copia de la hoja original y acceda a Herramientas -
Macro - Macros... y pulse el botón Ejecutar. La macro se ejecuta llenando las celdas
vacías.

Observe que al finalizar la ejecución de la macro, aún existe un rango de celdas que queda
seleccionado en color negro. Podríamos haber pulsado la tecla Esc y un click en cualquier
celda para desactivar esta zona, pero lo hemos hecho así porque vamos a ver cómo
podemos modificar y "tocar" el código de la macro.

- Acceda a Herramientas - Macros - Macro y pulse en Modificar


- Añada estas líneas antes de la sentencia final EndSub:
Application.CutCopyMode = False
Range("A1").Select
Con esto le decimos a la macro que desactive el modo Copiar y salte a la celda A1.
- Haga una copia más de la hoja original y ejecute ahora la macro. La selección final
desaparece

d) Ver cómo trabaja nuestra macro


La ejecución de las macros es muy rápida. A veces nos puede interesar ver paso a paso lo
que hace una macro, sobre todo cuando hay algún fallo para localizarlo y corregirlo.

- Vuelva a hacer una copia de la hoja original.

e-mail: infosysar@ciudad.com.ar -10-


CURSO DE
AUTOMATIZACION DE
EXCEL
Acceda a Herramientas - Macros - Macro y pulse el botón Paso a paso. Se encontrará
en la ventana de aplicaciones en Visual Basic. Puede cambiar el tamaño de las dos
ventanas (la de Visual Basic y la de Excel) para poder verlas al mismo tiempo. En la
ventana de VB pulse el botón Continuar de la barra de herramientas y observe en la
ventana de Excel como se va ejecutando la macro.

e) Tarea DOS: Añadir columnas de fechas


Nuestro informe no incluye la fecha en cada fila, así que vamos a añadir una nueva
columna para añadir el mes de cada registro. Para ello, deberá ejecutar la macro recién
creada y hacer un par de copias de esa hoja. Una copia será para crear la macro y la otra
para probar su funcionamiento.

- Con la macro anterior ejecutada, sitúe el cursor en la celda A1

- Cree una nueva macro llamada AñadirFecha

- Acceda a Insertar - Columnas

- Escriba en la celda A1: Fecha y pulse Intro

- Suba hasta A1 y coloque los colores de texto (negrita) y fondo (azul claro) como en las
celdas de su derecha.

- Seleccione el rango A2:A115, escriba Mar-98 y pulse Ctrl+Intro

- Pulse Ctrl+Inicio y finalice la grabación de la macro.

Evidentemente, el próximo mes no será Marzo, sino Abril (a veces me asombro de mi


mismo...).

La macro volvería a colocar el mes de Marzo en el informe del próximo mes. Una solución
sería cambiar la macro cada mes con la nueva fecha, pero no parece la solución más
adecuada. Lo que haremos será que Excel nos pregunte la fecha a introducir.

- Acceda al código de la macro.

- Seleccione el texto Mar-98 y escriba en su lugar: InputBox("Introduce la fecha:")

Lo que hacemos es insertar la función InputBox que nos pedirá mediante un cuadro que le
introduzcamos un dato. A continuación, la macro rellenará las celdas con el dato que le
introduzcamos.

- Ejecute la macro y compruebe que el control InputBox funciona correctamente


introduciendo por ejemplo el texto: Abril-98

f) Tarea TRES: Añadir columnas calculadas

e-mail: infosysar@ciudad.com.ar -11-


CURSO DE
AUTOMATIZACION DE
EXCEL
Observe que en la hoja tenemos tres precios por diseño: Bajo, Medio y Alto. Si queremos
comparar el valor de los pedidos sin descuento con el de los mismos con descuento,
precisaremos añadir en cada fila la lista de precios. Una vez que hayamos observado la lista
de precios de cada fila, podremos calcular el importe total de los pedidos, multiplicando las
unidades por los precios. Finalmente, convertiremos las fórmulas en valores como
preparación para añadir los pedidos al archivo histórico permanente.

- Cree una nueva macro llamada: AñadirColumnas

- Vaya a la celda H1 e introduzca el texto: Tarifa

- Vaya a la celda I1 e introduzca el texto: Bruto

- Coloque esta última celda con el formato negrita y fondo azul claro

- Vaya a la celda H2 e introduzca: =BUSCARV(E2;Precios!$A$1:$C$4;SI(C2="Minorista";2;3))

- Copie la fórmula hacia abajo hasta la celda H115

Esta fórmula busca el precio Medio (E2) de la primera columna del rango A1:C4 de la hoja
Precios. A continuación devuelva el valor de la columna número 2 de la lista. Así pues, el
precio para la venta Minorista de un libro con un precio medio es de 4,5 pesos.

- Vaya a la celda I2 y escriba: =F2*H2

- Copie la fórmula hacia abajo hasta la celda I115

- Finalice la grabación de la macro

EJERCICIOS DE APLICACIÓN:

COMPARACIÓN ENTRE COLUMNAS.

En esta lección vamos a ver una macro la cual nos permitirá comparar dos columnas
de elementos, eliminando de la primera los elementos que existan en la segunda. Esta
macro me la pidieron para hacer borrar muchos elementos de una lista sin tener que
buscar uno a uno. En la primera columna están todos los elementos que forman parte
de la lista y en la segunda columna se van colocando los elementos que se desean
buscar y eliminar de la primera.

A continuación escribiremos la macro completa y después explicaremos que realiza


cada una de las líneas.

1 Sub Repetidos()
2 Range("B1").Select
3 Posicion = 1
4 While ActiveCell.Value <> ""

e-mail: infosysar@ciudad.com.ar -12-


CURSO DE
AUTOMATIZACION DE
EXCEL
5 valorcomparacion = ActiveCell.Value
6 Range("a1").Select
7 Salir = "no"
8 While ActiveCell.Value <> "" And Salir = "no"
9 If ActiveCell.Value = valorcomparacion Then
10 respuesta = MsgBox("¿Deseas borrar esta
entrada?", 4, "¡¡Encontrado!!")
11 If respuesta = vbYes Then
12 Selection.Delete Shift:=xlUp
13 End If
14 Salir = "si"
15 Else
16 ActiveCell.Offset(1, 0).Select
17 End If
18 Wend
19 Posicion = Posicion + 1
20 Range("b1").Select
21 ActiveCell.Offset(Posicion - 1, 0).Select
22 Wend
23 End Sub

Antes de realizar la explicación tenemos que dejar muy claro que la columna A, será
donde tengamos todos los datos de nuestra lista y la columna B, los datos que
deseamos buscar y eliminar de la primera columna.

Línea 2: Con esta instrucción nos situamos en la primera celda de la columna B para
empezar a buscar los datos que deseamos borrar.

Línea 3: Creamos una variable llamada Posición para controlar en que fila nos
encontramos de la segunda columna

Línea 4: Aquí creamos un bucle que se repetirá hasta que no se terminen los
elementos a buscar.

Línea 5: Creamos una variable llamada valorcomparacion con la que trabajaremos


para ir comparando los elementos de la primera y segunda columna. El valor de la
celda en la que nos encontramos en la columna B, pasa a estar en la variable
valorcomparacion.

Línea 6: Cambiamos a la columna A para iniciar el proceso de comparación.

Línea 7: Creamos una nueva variable llamada Salir con la que controlaremos si
debemos salir del bucle o no. Solamente saldremos en el momento en el que se
encuentre un elemento que está en la segunda y primera columna.

Línea 8: Aquí iniciamos un bucle que se repetirá hasta que se llegue al final de la
primera columna, (caso que se dará cuando no existan elementos comunes) o hasta
que se encuentre un elemento común, (esto nos lo indicará la variable Salir).

Línea 9: En esta línea preguntaremos si la celda en la que nos encontramos (primera


columna) es igual que el valor que tenemos dentro de la variable: valorcomparacion.

e-mail: infosysar@ciudad.com.ar -13-


CURSO DE
AUTOMATIZACION DE
EXCEL
Línea 10: Si se ha producido la coincidencia de elementos procedemos a preguntar si
realmente deseamos borrar este elemento.

Línea 11: Miramos si la respuesta del usuario ha sido afirmativa.

Línea 12: Si el usuario contesta afirmativamente eliminamos la celda y desplazamos


la lista hacía arriba, de esta forma no tenemos huecos en medio de la lista.

Línea 13: Terminamos la estructura Si que hemos iniciado en la línea 11.

Línea 14: Como se ha localizado un elemento coincidente pondremos la variable Salir


con valor Si.

Línea 15: Aquí empezamos el caso en el que el valor que tenemos seleccionado en la
primera columna con el valor de la variable valorcomparacion no sea coincidente.

Lìnea 16: Si no coinciden los datos lo que hacemos es avanzar una posición dentro de
la primera columna.

Línea 17: Aquí terminamos la estructura If iniciada en la línea 9.

Línea 18: Terminamos el bucle iniciado en la línea 8.

Línea 19: Incrementamos en uno el valor de la variable Posición ya que estamos


avanzando una posición dentro de la segunda columna.

Línea 20: Pasamos a la segunda columna para continuar con la comparación de los
elementos.

Línea 21: Avanzamos en la segunda columna tantas veces como se nos indique en la
variable Posición para iniciar nuevamente el proceso de comparación entre los
elementos de ambas columnas.

Línea 22: Terminamos el bucle principal de esta macro.

Línea 23: Terminamos la macro.

Esta macro es bastante completa, le recomendamos repasarla cuantas veces crea


oportuno hasta que quede completamente clara. Para probar la macro simplemente
deberá copiar una serie de elementos en la primera columna y en la segunda poner
algunos de los elementos que están en la primera.

BARRA DE HERRAMIENTAS PERSONALIZADA.

Hasta este momento hemos visto como poner en funcionamiento una macro utilizando
el menú de herramientas Herramientas - Macro tal y como explicamos en lecciones
anteriores. En muchas ocasiones puede ser que realicemos una macro la cual
tengamos que poner en funcionamiento muchas veces con lo que el hecho de abrir el
menú y buscar dicha macro nos puede ser un poco engorroso.

e-mail: infosysar@ciudad.com.ar -14-


CURSO DE
AUTOMATIZACION DE
EXCEL
En esta lección vamos a ver una forma de crear una nueva barra de herramientas en
la que pondremos un botón para que al pulsarlo se ponga en funcionamiento la macro.

Explicaremos los pasos necesarios para conseguir esto.

a) Crear una barra de herramientas nueva

1.- Abrir el menú Ver - Barras de herramientas y seleccionar la opción:


Personalizar.

A continuación aparecerá una nueva ventana llamada: Personalizar.

2.- De esta ventana pulsar sobre el botón: Nueva...

Nos aparecerá una ventana llamada: Nueva barra de herramientas en la que


deberemos especificar el nombre que le deseamos dar a nuestra barra para poderla
diferenciar del resto.

3.- Para nuestro ejemplo podríamos poner como nombre: Mis macros.

4.- A continuación pulsar Aceptar.

Podremos observar como en la lista de barras de herramientas disponibles aparece el


nombre que acabamos de poner. A la derecha del nombre aparecerá una indicación
conforme esta barra está visible. Si no la ve puede mover la ventana Personalizar.

Ahora ya tenemos nuestra nueva barra de herramientas creada. Veamos como


podemos crear un botón dentro de esta barra para que al pulsarlo se ejecute una de
nuestras macros.

b) Crear un botón en la nueva barra de herramientas

5.- Dentro de la ventana Personalizar deberemos activar la pestaña: Comandos.

6.- En la lista de Categorías deberíamos hacer un clic sobre: Macros.

En la parte derecha de esta misma ventana aparecerán dos opciones: Personalizar


elemento de menú y Personalizar botón, en esta ocasión utilizaremos la segunda
de las opciones.

7.- Deberemos hacer un clic sobre la opción Personalizar botón para


seleccionarla.

8.- Seguidamente deberemos desplazar este botón a la nueva barra de


herramientas que hemos creado. Para ello simplemente deberemos situarnos encima,
pulsaremos el botón izquierdo del ratón y mientras lo tenemos pulsado nos
desplazaremos hasta situarnos encima de la barra de herramientas que hemos creado
anteriormente.

e-mail: infosysar@ciudad.com.ar -15-


CURSO DE
AUTOMATIZACION DE
EXCEL
9.- Una vez situado el cursor dentro de la barra de herramientas soltaremos el
botón.

Podremos ver como dentro de la barra: Mis macros aparece el botón que hemos
arrastrado.

Ahora que ya tenemos creado el botón en nuestra barra de herramientas, vamos a


personalizarlo para que cumpla con su función.

Observe como en la ventana actual está activado el botón: Modificar selección.

10.- Pulse este botón, muevase hasta la opción: Cambiar imagen del botón.

11.- De la lista, seleccione el icono que más le guste.

Observe como la imagen del botón de nuestra barra de herramientas ha cambiado.

12.- Pulse nuevamente el botón: Modificar selección.

Ahora lo que cambiaremos es el texto que aparecerá en el momento en el que


pongamos el ratón encima de este botón, así de esta forma siempre podremos
recordar que función hace dicho botón.

13.- Seleccione la opción Nombre: y escriba: Repetir con informe.

Ahora lo único que nos falta es asignar la macro a este botón.

c) Asignar una macro a un botón personalizado

14.- Abra nuevamente el botón: Modificar selección.

15.- Seleccione la opción: Asignar macro...

Aparecerá una nueva ventana llamada: Asignar macro.

16.- De esta nueva ventana escoja la macro que desea asignar a este botón. En
nuestro caso seleccionaremos: EliminarRepetidosyRegistro, macro que servía para
eliminar elementos repetidos de una lista y crear un informe con el número de
repeticiones.

17.- Una vez seleccionada la macro, pulse Aceptar.

18.- Cierre la ventana Personalizar.

Ahora ya puede poner la barra en el lugar que más le convenga y utilizar este botón
siempre que quiera.

e-mail: infosysar@ciudad.com.ar -16-


CURSO DE
AUTOMATIZACION DE
EXCEL

REFERENCIAS
DEL LENGUAJE
Y
EJEMPLOS

-17-
CURSO DE
AUTOMATIZACION DE
EXCEL
ACTIVAR UN LIBRO

Al activar un libro utilizando el método Activate, el libro se coloca en la ventana activa. El siguiente
procedimiento activa el libro abierto denominado "MiLibro.xls".

Sub Activar()
Workbooks("MiLibro.xls").Activate
End Sub

CREAR UN NUEVO LIBRO

Para crear un nuevo libro en Visual Basic, utilize el método Add. El siguiente procedimiento crea un
nuevo libro. Microsoft Excel asigna automáticamente el nombre LibroN al libro, donde N es el siguiente
número disponible. El nuevo libro se convertirá en el libro activo.

Sub AgregarUno()
Workbooks.Add
End Sub

Una manera mejor de crear un nuevo libro es asignarlo a una variable de objeto. En el siguiente
ejemplo, el objeto Workbook devuelto por el método Add se asigna a la variable de objeto, nuevoLibro. A
continuación, se establecen varias de las propiedades de nuevoLibro. Puede controlar fácilmente el
nuevo libro utilizando la variable de objeto.

Sub AgregarNuevo()
Set nuevoLibro = Workbooks.Add
With nuevoLibro
.Title = "Ventas 1995"
.Subject = "Ventas"
.SaveAs filename:="Ventas95.xls"
End With
End Sub

ABRIR UN LIBRO EXISTENTE:

Al abrir un nuevo libro utilizando el método Open, se convierte en un miembro del conjunto Workbooks.
El siguiente procedimiento abre un libro denominado MiLibro.xls, ubicado en la carpeta "MiCarpeta", en
la unidad C.

Sub AbrirLo()
Workbooks.Open("C:\MiCarpeta\MiLibro.xls")
End Sub

ELEGIR UNA HOJA MEDIANTE INDICE:

Un número de índice es un número secuencial asignado a una hoja, según la posición de su etiqueta,
contando desde la izquierda, respecto a las hojas del mismo tipo. El siguiente procedimiento utiliza la
propiedad Worksheets para activar la hoja de cálculo uno del libro activo.

Sub LaPrimera()
Worksheets(1).Activate
End Sub

Si desea trabajar con todos los tipos de hojas (hojas de cálculo, de gráficos, de módulos y de diálogo),
utilice la propiedad Sheets. El siguiente procedimiento activa la hoja cuatro del libro.

Sub LaCuarta()

-18-
CURSO DE
AUTOMATIZACION DE
EXCEL
Sheets(4).Activate
End Sub

Nota El orden del índice puede variar al mover, agregar o eliminar hojas.

SELECCIONAR HOJA POR EL NOMBRE:

Puede identificar las hojas por su nombre, utilizando las propiedades Worksheets y Charts. Las
siguientes instrucciones activan varias hojas del libro activo.

Worksheets("Hoja1").Activate
Charts("Gráfico1").Activate

DialogSheets("Diálogo1").Activate

Puede utilizar la propiedad Sheets para devolver una hoja de cálculo, de gráficos, de módulo o de
cuadro de diálogo, incluidos todos en el conjunto Sheets. El siguiente ejemplo activa la hoja denominada
"Gráfico1" del libro activo.

Sub ActivarGráfico()
Sheets("Gráfico1").Activate
End Sub

Nota Los gráficos incrustados en una hoja de cálculo son miembros del grupo ChartObjects, aunque
los gráficos que poseen sus propias hojas pertenecen al conjunto Charts.

COMO HACER REFERENCIA A CELDAS Y RANGOS:

Una tarea común cuando se utiliza Visual Basic es especificar una celda o rango y, a continuación,
realizar alguna acción en ellas, como escribir una fórmula o cambiar el formato. Normalmente esto se
realiza en una instrucción que identifica el rango y, además, cambia una propiedad o aplica un método.
Un objeto Range en Visual Basic puede ser una celda individual o un rango de celdas. Los siguientes
temas muestran las maneras más usuales de identificar y trabajar con objetos Range.

¿De qué manera desea hacer referencia a celdas?

Hacer referencia a celdas y rangos usando notación A1

Puede hacer referencia a una celda o rango de celdas del estilo de referencia A1
utilizando el método Range. El siguiente procedimiento Sub cambia el formato de las
celdas A1:D5 a negrita.

Sub FormatoRango()
Workbooks("Libro1").Sheets("Hoja1").Range("A1:D5") _
.Font.Bold = True
End Sub

La siguiente tabla muestra algunas referencias de estilo A1 utilizando el método Range.

Referencia Significado
Range("A1") Celda A1
Range("A1:B5") Celdas de la A1 a la B5
Range("C5:D9,G9:H16")Selección de varias áreas
Range("A:A") Columna A
Range("1:1") Fila uno
Range("A:C") Columnas de la A a la C
Range("1:5") Filas de la uno a la cinco
Range("1:1,3:3,8:8") Filas uno, tres y ocho

-19-
CURSO DE
AUTOMATIZACION DE
EXCEL
Range("A:A,C:C,F:F") Columnas A, C y F

Hacer referencia a celdas usando números de índice

Puede utilizar la propiedad Cells para hacer referencia a una sola celda utilizando los
números de fila y de columna. Esta propiedad devuelve un objeto Range que representa
una sola celda. En el siguiente ejemplo, Cells(6,1) devuelve la celda A6 de la Hoja1.
Entonces, la propiedad Value se establece en 10.

Sub EscribirValor()
Worksheets("Hoja1").Cells(6, 1).Value = 10
End Sub

La propiedad Cells funciona bien para ejecutar bucles en un rango de celdas, ya que
puede sustituir las variables por los números de índice, como se muestra en el siguiente
ejemplo.

Sub BucleAtravés()
Dim contador As Integer
For contador = 1 To 20
Worksheets("Hoja1").Cells(contador, 3).Value = contador
Next contador
End Sub

Nota Si desea cambiar las propiedades de un rango de celdas, o aplicar un método a


todo un rango a la vez, utilice la propiedad Range. Para obtener más información vea
Hacer referencia a celdas y rangos usando notación A1.

Hacer referencia a filas y columnas

Utilice la propiedad Rows o Columns para trabajar con filas o columnas enteras. Estas
propiedades devuelven un objeto Range que representa un rango de celdas. En el
siguiente ejemplo, Rows(1) devuelve la fila uno de la Hoja1. A continuación, la propiedad
Bold del objeto Font del rango se establece en True.

Sub FilaNegrita()
Worksheets("Hoja1").Rows(1).Font.Bold = True
End Sub

La siguiente tabla muestra algunas referencias de fila y columna, utilizando las


propiedades Rows y Columns.

Referencia Significado
Rows(1) Fila uno
Rows Todas las filas de la hoja de cálculo
Columns(1) Columna uno
Columns("A") Columna uno
Columns Todas las columnas de la hoja de cálculo
Para trabajar con varias filas o columnas al mismo tiempo, cree una variable de objeto y
utilice el método Union, combinando varias llamadas a la propiedad Rows o Columns. El
siguiente ejemplo cambia a negrita el formato de las filas uno, tres y cinco de la hoja de
cálculo uno del libro activo.

Sub VariasFilas()
Worksheets("Hoja1").Activate
Dim miUnión As Range
Set miUnión = Union(Rows(1), Rows(3), Rows(5))

-20-
CURSO DE
AUTOMATIZACION DE
EXCEL
miUnión.Font.Bold = True
End Sub

Hacer referencia a celdas usando una notación abreviada

Puede utilizar el estilo de referencia A1 o un rango con nombre entre paréntesis como
método abreviado para la propiedad Range. No es necesario escribir la palabra "Range" o
utilizar comillas, como se muestra en los siguientes ejemplos.

Sub BorrarRango()
Worksheets("Hoja1").[A1:B5].ClearContents
End Sub

Sub EstablecerValor()
[MiRango].Value = 30
End Sub

Hacer referencia a rangos con nombre

Es más sencillo identificar los rangos por nombre que por la notación A1. Para asignar un
nombre a un rango seleccionado, haga clic en el cuadro de nombre situado a la izquierda
de la barra de fórmulas, escriba un nombre y, a continuación, presione la tecla ENTRAR.

Hacer referencia a rangos con nombre

El siguiente ejemplo hace referencia al rango denominado "MiRango" en el libro


"MiLibro.xls".

Sub FormatoRango()
Range("MiLibro.xls!MiRango").Font.Italic = True
End Sub

El siguiente ejemplo hace referencia al rango de hojas de cálculo específico denominado


"Hoja1!Ventas" en el libro "MiLibro.xls".

Sub FormatoVentas()
Range("[Informe.xls]Hoja1!Ventas").BorderAround weight:=xlthin
End Sub

Para seleccionar un rango con nombre utilice el método GoTo, que activa el libro y la hoja
de cálculo y, a continuación, selecciona el rango.

Sub BorrarRango()
Application.Goto Reference:="MiLibro.xls!MiRango"
Selection.ClearContents
End Sub

El siguiente ejemplo muestra cómo se escribiría el mismo procedimiento para el libro


activo.

Sub BorrarRango()
Application.Goto Reference:="MiRango"
Selection.ClearContents
End Sub

Ejecutar un bucle en las celdas de un rango con nombre

-21-
CURSO DE
AUTOMATIZACION DE
EXCEL
El siguiente ejemplo ejecuta un bucle en cada celda del rango con nombre, utilizando el
bucle For Each...Next. Si el valor de alguna celda del rango excede el valor de limit, el
color de la celda cambia a amarillo.

Sub AplicarColor()
Const limit As Integer = 25
For Each c In Range("MiRango")
If c.Value > limit Then
c.Interior.ColorIndex = 27
End If
Next c
End Sub

Hacer referencia a celdas relacionadas con otras celdas

Una manera de trabajar con una celda relacionada con otra es utilizar la propiedad Offset.
El siguiente ejemplo asigna un formato de doble subrayado al contenido de la celda
situada una fila más abajo y a tres columnas de la hoja de cálculo activa.

Sub Subrayar()
ActiveCell.Offset(1, 3).Font.Underline = xlDouble
End Sub

Nota Puede grabar macros que utilicen la propiedad Offset en lugar en referencias
absolutas. En el menú Herramientas, señale Grabar macro y, a continuación, haga clic en
Usar referencias relativas.

Para ejecutar un bucle en un rango de celdas, utilice en el rango una variable con la
propiedad Cells. El siguiente ejemplo rellena las primeras 20 celdas de la tercera columna
con valores entre 5 y 100, en incrementos de 5. La variable contador se utiliza como
índice de fila para la propiedad Cells.

Sub BucleAtravés()
Dim contador As Integer
For contador = 1 To 20
Worksheets("Hoja1").Cells(contador, 3).Value = contador * 5
Next contador
End Sub

Hacer referencia a celdas usando un objeto Range

Si establece una variable de objeto para un objeto Range, puede manipular fácilmente el
rango utilizando el nombre de la variable.
El siguiente procedimiento crea la variable de objeto miRango y, a continuación, asigna la
variable al rango A1:D5 de la Hoja1 del libro activo. Las instrucciones posteriores
modifican las propiedades del rango, sustituyendo el nombre de la variable por el objeto
del rango.

Sub Aleatorio()
Dim miRango As Range
Set miRango = Worksheets("Hoja1").Range("A1:D5")
miRango.Formula = "=ALEATORIO()"
miRango.Font.Bold = True
End Sub

Hacer referencia a todas las celdas de una hoja de cálculo

-22-
CURSO DE
AUTOMATIZACION DE
EXCEL
Al aplicar la propiedad Cells a una hoja de cálculo sin especificar un número de índice, el
método devuelve un objeto Range que representa todas las celdas de la hoja de cálculo.
El siguiente procedimiento Sub borra el contenido de todas las celdas de la Hoja1 del libro
activo.

Sub BorrarHoja()
Worksheets("Hoja1").Cells.ClearContents
End Sub

Hacer referencia a varios rangos

Utilizando el método apropiado puede hacer referencia fácilmente a varios rangos. Utilice
los métodos Range y Union para hacer referencia a cualquier grupo de rangos; utilice la
propiedad Areas para hacer referencia al grupo de rangos seleccionados en una hoja de
cálculo.

Usar la propiedad Range

Puede hacer referencia a varios rangos con la propiedad Range, pero debe poner comas
entre dos o más referencias. El siguiente ejemplo borra el contenido de los tres rangos de
la Hoja1.

Sub BorrarRangos()
Worksheets("Hoja1").Range("C5:D9,G9:H16,B14:D18").ClearContents
End Sub

Los rangos con nombre permiten que la propiedad Range funcione más fácilmente con
varios rangos. El siguiente ejemplo funciona cuando los tres rangos con nombre están en
la misma hoja.

Sub BorrarNombrada()
Range("MiRango, TuRango, SuRango").ClearContents
End Sub

Usar el método Union

Puede combinar varios rangos en un objeto Range utilizando el método Union. El


siguiente ejemplo crea un objeto Range denominado misVariosRangos, los define como
A1:B2 y C3:D4 y, a continuación, asigna el formato de negrita a los rangos combinados.

Sub RangosVarios()
Dim r1, r2, misVariosRangos As Range
Set r1 = Sheets("Hoja1").Range("A1:B2")
Set r2 = Sheets("Hoja1").Range("C3:D4")
Set miVariosRangos = Union(r1, r2)
miVariosRangos.Font.Bold = True
End Sub

Usar la propiedad Areas

Puede utilizar la propiedad Areas para hacer referencia al rango o conjunto de rangos
seleccionados en una selección de varias áreas. El siguiente procedimiento cuenta las
áreas de la selección. Si existe más de un área, se muestra un mensaje de advertencia.

Sub EncontrarVarios()
If Selection.Areas.Count > 1 Then
MsgBox "Imposible realizar una selección múltiple."
End If

-23-
CURSO DE
AUTOMATIZACION DE
EXCEL
End Sub

BUCLES EN UN RANGO DE CELDAS

Al utilizar Visual Basic, con frecuencia necesitará ejecutar el mismo bloque de instrucciones en cada una
de las celdas de un rango. Para ello, combine una instrucción de repetición y uno o más métodos para
identificar cada celda, una a la vez, y ejecutar la operación.
Una manera de ejecutar un bucle en un rango es utilizar el bucle For...Next con la propiedad Cells. Al
utilizar la propiedad Cells, puede sustituir el contador del bucle, u otras variables o expresiones, por el
número de índice de las celdas. En el siguiente ejemplo se sustituye la variable contador por el índice de
fila. El procedimiento ejecuta un bucle en el rango C1:C20, estableciendo en 0 (cero) cualquier número
cuyo valor absoluto sea menor que 0.01.

Sub RedondeoACero1()
For contador = 1 To 20
Set Celda_a = Worksheets("Hoja1").Cells(contador, 3)
If Abs(Celda_a.Value) < 0.01 Then Celda_a.Value = 0
Next contador
End Sub

Otra manera sencilla de ejecutar un bucle en un rango es utilizar el bucle For Each...Next en el conjunto
de celdas devuelto por el método Range. Visual Basic establece automáticamente una variable de
objeto para la siguiente celda cada vez que se ejecuta el bucle. El siguiente procedimiento realiza un
bucle en el rango A1:D20, estableciendo en 0 (cero) cualquier número cuyo valor absoluto sea menor
que 0.01.

Sub RedondeoACero2()
For Each c In Worksheets("Hoja1").Range("A1:D10").Cells
If Abs(c.Value) < 0.01 Then c.Value = 0
Next
End Sub

Si no conoce los límites del rango en que desea ejecutar el bucle, puede utilizar la propiedad
CurrentRegion para devolver el rango que rodea la celda activa. Por ejemplo, el siguiente procedimiento,
cuando se ejecuta desde una hoja de cálculo, ejecuta un bucle en el rango que rodea la celda activa,
estableciendo en 0 (cero) todos los números cuyo valor absoluto sea menor que 0.01.

Sub RedondeoACero3()
For Each c In ActiveCell.CurrentRegion.Cells
If Abs(c.Value) < 0.01 Then c.Value = 0
Next
End Sub

HACER REFERENCIA A TODAS LAS CELDAS DE UNA HOJA DE CALCULO


Al aplicar la propiedad Cells a una hoja de cálculo sin especificar un número de índice, el método
devuelve un objeto Range que representa todas las celdas de la hoja de cálculo. El siguiente
procedimiento Sub borra el contenido de todas las celdas de la Hoja1 del libro activo.

Sub BorrarHoja()
Worksheets("Hoja1").Cells.ClearContents
End Sub

HACER REFERENCIA A CELDAS Y RANGOS UTILIZANDO LA NOTACION A1

-24-
CURSO DE
AUTOMATIZACION DE
EXCEL
Puede hacer referencia a una celda o rango de celdas del estilo de referencia A1 utilizando el método
Range. El siguiente procedimiento Sub cambia el formato de las celdas A1:D5 a negrita.

Sub FormatoRango()
Workbooks("Libro1").Sheets("Hoja1").Range("A1:D5") _
.Font.Bold = True
End Sub

La siguiente tabla muestra algunas referencias de estilo A1 utilizando el método Range.

Referencia Significado
Range("A1") Celda A1
Range("A1:B5")Celdas de la A1 a la B5
Range("C5:D9,G9:H16") Selección de varias áreas
Range("A:A") Columna A
Range("1:1") Fila uno
Range("A:C") Columnas de la A a la C
Range("1:5") Filas de la uno a la cinco
Range("1:1,3:3,8:8") Filas uno, tres y ocho
Range("A:A,C:C,F:F") Columnas A, C y F

HACER REFERENCIA A CELDAS RELACIONADAS CON OTRAS CELDAS


Una manera de trabajar con una celda relacionada con otra es utilizar la propiedad Offset. El siguiente
ejemplo asigna un formato de doble subrayado al contenido de la celda situada una fila más abajo y a
tres columnas de la hoja de cálculo activa.

Sub Subrayar()
ActiveCell.Offset(1, 3).Font.Underline = xlDouble
End Sub

Nota Puede grabar macros que utilicen la propiedad Offset en lugar en referencias absolutas. En el
menú Herramientas, señale Grabar macro y, a continuación, haga clic en Usar referencias relativas.

Para ejecutar un bucle en un rango de celdas, utilice en el rango una variable con la propiedad Cells. El
siguiente ejemplo rellena las primeras 20 celdas de la tercera columna con valores entre 5 y 100, en
incrementos de 5. La variable contador se utiliza como índice de fila para la propiedad Cells.

Sub BucleAtravés()
Dim contador As Integer
For contador = 1 To 20
Worksheets("Hoja1").Cells(contador, 3).Value = contador * 5
Next contador
End Sub

HACER REFERENCIA A CELDAS USANDO EL OBJETO RANGE


Si establece una variable de objeto para un objeto Range, puede manipular fácilmente el rango
utilizando el nombre de la variable.
El siguiente procedimiento crea la variable de objeto miRango y, a continuación, asigna la variable al
rango A1:D5 de la Hoja1 del libro activo. Las instrucciones posteriores modifican las propiedades del
rango, sustituyendo el nombre de la variable por el objeto del rango.

Sub Aleatorio()
Dim miRango As Range
Set miRango = Worksheets("Hoja1").Range("A1:D5")
miRango.Formula = "=ALEATORIO()"
miRango.Font.Bold = True

-25-
CURSO DE
AUTOMATIZACION DE
EXCEL
End Sub

HACER REFERENCIA A CELDAS USANDO NUMEROS DE INDICE


Puede utilizar la propiedad Cells para hacer referencia a una sola celda utilizando los números de fila y
de columna. Esta propiedad devuelve un objeto Range que representa una sola celda. En el siguiente
ejemplo, Cells(6,1) devuelve la celda A6 de la Hoja1. Entonces, la propiedad Value se establece en 10.

Sub EscribirValor()
Worksheets("Hoja1").Cells(6, 1).Value = 10
End Sub

La propiedad Cells funciona bien para ejecutar bucles en un rango de celdas, ya que puede sustituir las
variables por los números de índice, como se muestra en el siguiente ejemplo.

Sub BucleAtravés()
Dim contador As Integer
For contador = 1 To 20
Worksheets("Hoja1").Cells(contador, 3).Value = contador
Next contador
End Sub
Nota Si desea cambiar las propiedades de un rango de celdas, o aplicar un método a todo un rango a
la vez, utilice la propiedad Range. Para obtener más información vea Hacer referencia a celdas y rangos
usando notación A1.

HACER REFERENCIA A CELDAS USANDO NOTACION ABREVIADA


Puede utilizar el estilo de referencia A1 o un rango con nombre entre paréntesis como método abreviado
para la propiedad Range. No es necesario escribir la palabra "Range" o utilizar comillas, como se
muestra en los siguientes ejemplos.

Sub BorrarRango()
Worksheets("Hoja1").[A1:B5].ClearContents
End Sub

Sub EstablecerValor()
[MiRango].Value = 30
End Sub

REFERENCIA A MAS DE UNA HOJA


Utilice la función Array para identificar un grupo de hojas. El siguiente ejemplo selecciona tres hojas del
libro activo.

Sub Varias()
Worksheets(Array("Hoja1", "Hoja2", "Hoja4")).Select
End Sub

HACER REFERENCIA A VARIOS RANGOS:


Utilizando el método apropiado puede hacer referencia fácilmente a varios rangos. Utilice los métodos
Range y Union para hacer referencia a cualquier grupo de rangos; utilice la propiedad Areas para hacer
referencia al grupo de rangos seleccionados en una hoja de cálculo.

Usar la propiedad Range

Puede hacer referencia a varios rangos con la propiedad Range, pero debe poner comas entre dos o
más referencias. El siguiente ejemplo borra el contenido de los tres rangos de la Hoja1.

-26-
CURSO DE
AUTOMATIZACION DE
EXCEL
Sub BorrarRangos()
Worksheets("Hoja1").Range("C5:D9,G9:H16,B14:D18").ClearContents
End Sub

Los rangos con nombre permiten que la propiedad Range funcione más fácilmente con varios rangos. El
siguiente ejemplo funciona cuando los tres rangos con nombre están en la misma hoja.+

Sub BorrarNombrada()
Range("MiRango, TuRango, SuRango").ClearContents
End Sub

Usar el método Union

Puede combinar varios rangos en un objeto Range utilizando el método Union. El siguiente ejemplo crea
un objeto Range denominado misVariosRangos, los define como A1:B2 y C3:D4 y, a continuación,
asigna el formato de negrita a los rangos combinados.

Sub RangosVarios()
Dim r1, r2, misVariosRangos As Range
Set r1 = Sheets("Hoja1").Range("A1:B2")
Set r2 = Sheets("Hoja1").Range("C3:D4")
Set miVariosRangos = Union(r1, r2)
miVariosRangos.Font.Bold = True
End Sub

Usar la propiedad Areas

Puede utilizar la propiedad Areas para hacer referencia al rango o conjunto de rangos seleccionados en
una selección de varias áreas. El siguiente procedimiento cuenta las áreas de la selección. Si existe
más de un área, se muestra un mensaje de advertencia.

Sub EncontrarVarios()
If Selection.Areas.Count > 1 Then
MsgBox "Imposible realizar una selección múltiple."
End If
End Sub

HACER REFERENCIA A RANGOS CON NOMBRE:


Es más sencillo identificar los rangos por nombre que por la notación A1. Para asignar un nombre a un
rango seleccionado, haga clic en el cuadro de nombre situado a la izquierda de la barra de fórmulas,
escriba un nombre y, a continuación, presione la tecla ENTRAR.

Hacer referencia a rangos con nombre

El siguiente ejemplo hace referencia al rango denominado "MiRango" en el libro "MiLibro.xls".

Sub FormatoRango()
Range("MiLibro.xls!MiRango").Font.Italic = True
End Sub

El siguiente ejemplo hace referencia al rango de hojas de cálculo específico denominado "Hoja1!Ventas"
en el libro "MiLibro.xls".

Sub FormatoVentas()
Range("[Informe.xls]Hoja1!Ventas").BorderAround weight:=xlthin
End Sub

-27-
CURSO DE
AUTOMATIZACION DE
EXCEL
Para seleccionar un rango con nombre utilice el método GoTo, que activa el libro y la hoja de cálculo y,
a continuación, selecciona el rango.

Sub BorrarRango()
Application.Goto Reference:="MiLibro.xls!MiRango"
Selection.ClearContents
End Sub

El siguiente ejemplo muestra cómo se escribiría el mismo procedimiento para el libro activo.

Sub BorrarRango()
Application.Goto Reference:="MiRango"
Selection.ClearContents
End Sub

Ejecutar un bucle en las celdas de un rango con nombre

El siguiente ejemplo ejecuta un bucle en cada celda del rango con nombre, utilizando el bucle For
Each...Next. Si el valor de alguna celda del rango excede el valor de limit, el color de la celda cambia a
amarillo.

Sub AplicarColor()
Const limit As Integer = 25
For Each c In Range("MiRango")
If c.Value > limit Then
c.Interior.ColorIndex = 27
End If
Next c
End Sub

HACER REFERENCIA A FILAS Y COLUMNAS:


Utilice la propiedad Rows o Columns para trabajar con filas o columnas enteras. Estas propiedades
devuelven un objeto Range que representa un rango de celdas. En el siguiente ejemplo, Rows(1)
devuelve la fila uno de la Hoja1. A continuación, la propiedad Bold del objeto Font del rango se
establece en True.

Sub FilaNegrita()
Worksheets("Hoja1").Rows(1).Font.Bold = True
End Sub

La siguiente tabla muestra algunas referencias de fila y columna, utilizando las propiedades Rows y
Columns.

Referencia Significado
Rows(1) Fila uno
Rows Todas las filas de la hoja de cálculo
Columns(1) Columna uno
Columns("A") Columna uno
Columns Todas las columnas de la hoja de cálculo
Para trabajar con varias filas o columnas al mismo tiempo, cree una variable de objeto y utilice el
método Union, combinando varias llamadas a la propiedad Rows o Columns. El siguiente ejemplo
cambia a negrita el formato de las filas uno, tres y cinco de la hoja de cálculo uno del libro activo.

Sub VariasFilas()
Worksheets("Hoja1").Activate
Dim miUnión As Range
Set miUnión = Union(Rows(1), Rows(3), Rows(5))

-28-
CURSO DE
AUTOMATIZACION DE
EXCEL
miUnión.Font.Bold = True
End Sub

SELECCIONAR Y ACTIVAR CELDAS


Al trabajar con Microsoft Excel, normalmente se selecciona una o varias celdas y, a continuación, se
realiza una acción, como darles formato o escribir valores. En Visual Basic normalmente no es
necesario seleccionar las celdas antes de modificarlas.
Por ejemplo, si desea escribir una fórmula en la celda D6 utilizando Visual Basic, no es necesario
seleccionar el rango D6. Sólo necesita devolver el objeto Range y, a continuación, establecer la
propiedad Formula en la fórmula que desee, como se muestra en el siguiente ejemplo.

Sub EscribirFórmula()
Worksheets("Hoja1").Range("D6").Formula = "=SUMA(D2:D5)"
End Sub

Para obtener ejemplos acerca de cómo utilizar métodos para controlar las celdas sin seleccionarlas, vea
Cómo hacer referencia a celdas y rangos.

Usar el método Select y la propiedad Selection

El método Select activa las hojas y los objetos de las hojas; la propiedad Selection devuelve un objeto
que representa la selección actual de la hoja activa del libro activo. Antes de poder utilizar la propiedad
Selection, debe activar un libro, activar o seleccionar un hoja y, a continuación, seleccionar un rango, u
otro objeto, utilizando el método Select.

La grabadora de macros con frecuencia creará una macro que utilice el método Select y la propiedad
Selection. El siguiente procedimiento Sub se creó utilizando la grabadora de macros, y muestra cómo
trabajan juntas Select y Selection.

Sub Macro1()
Sheets("Hoja1").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "Nombre"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Dirección"
Range("A1:B1").Select
Selection.Font.Bold = True
End Sub

El siguiente ejemplo realiza la misma tarea, sin activar o seleccionar la hoja de cálculo o las celdas.

Sub Etiquetas()
With Worksheets("Hoja1")
.Range("A1") = "Nombre"
.Range("B1") = "Dirección"
.Range("A1:B1").Font.Bold = True
End With
End Sub

Seleccionar celdas en la hoja de cálculo activa

Si utiliza el método Select para seleccionar celdas, recuerde que Select sólo funciona en la hoja de
cálculo activa. Si ejecuta el procedimiento Sub desde el módulo, el método Select fallará a menos que el
procedimiento active la hoja de cálculo antes de utilizar el método Select en un rango de celdas. Por
ejemplo, el siguiente procedimiento copia una fila de la Hoja1 a la Hoja2 del libro activo.

Sub CopiarFilas()
Worksheets("Hoja1").Rows(1).Copy

-29-
CURSO DE
AUTOMATIZACION DE
EXCEL
Worksheets("Hoja2").Select
Worksheets("Hoja2").Rows(1).Select
Worksheets("Hoja2").Paste
End Sub

Activar una celda en una selección

Puede utilizar el método Activate para activar una celda en una selección. Sólo puede haber una celda
activa, aunque se haya seleccionado un rango de celdas. El siguiente procedimiento selecciona un
rango y, a continuación, activa una celda del rango sin cambiar la selección.

Sub Activar()
Worksheets("Hoja1").Activate
Range("A1:D4").Select
Range("B2").Activate
End Sub

TRABAJAR CON RANGOS 3D

Si trabaja con el mismo rango en más de una hoja, utilice la función Array para especificar dos o más
hojas a seleccionar. El ejemplo siguiente da formato al borde de un rango tridimensional de celdas.

Sub FormatoHojas()
Sheets(Array("Hoja2", "Hoja3", "Hoja5")).Select
Range("A1:H1").Select
Selection.Borders(xlBottom).LineStyle = xlDouble
End Sub

El ejemplo siguiente aplica el método FillAcrossSheets para transferir los formatos y datos del rango de
la Hoja2 a los rangos correspondientes de todas las hojas de cálculo del libro activo.

Sub RellenarTodo()
Worksheets("Hoja2").Range("A1:H1") _
.Borders(xlBottom).LineStyle = xlDouble
Worksheets.FillAcrossSheets (Worksheets("Hoja2") _
.Range("A1:H1"))
End Sub

TRABAJAR CON LA CELDA ACTIVA:

La propiedad ActiveCell devuelve un objeto Range que representa la celda que está activa. Puede
aplicar cualquiera de las propiedades o los métodos de un objeto Range a la celda activa, como en el
ejemplo siguiente.

Sub EstablecerValor()
Worksheets("Hoja1").Activate
ActiveCell.Value = 35
End Sub

Nota Sólo se puede trabajar con la celda activa cuando la hoja de cálculo en la que se encuentra sea la
hoja activa.

Mover la celda activa

-30-
CURSO DE
AUTOMATIZACION DE
EXCEL
Puede utilizar el método Activate para designar cuál es la celda activa. Por ejemplo, el siguiente
procedimiento convierte a B5 en la celda activa y, a continuación, le da formato de negrita.

Sub EstablecerActivo()
Worksheets("Hoja1").Activate
Worksheets("Hoja1").Range("B5").Activate
ActiveCell.Font.Bold = True
End Sub

Nota Para seleccionar un rango de celdas, utilice el método Select. Para convertir una sola celda en
activa, utilice el método Activate.

Puede utilizar la propiedad Offset para pasar a la celda activa. El siguiente procedimiento inserta texto
en la celda activa del rango seleccionado y, a continuación, mueve la celda activa una celda a la
derecha, sin cambiar la selección.

Sub MoverActivo()
Worksheets("Hoja1").Activate
Range("A1:D10").Select
ActiveCell.Value = "Totales mensuales"
ActiveCell.Offset(0, 1).Activate
End Sub

Seleccionar las celdas que rodean la celda activa

La propiedad CurrentRegion devuelve un rango de celdas limitadas por filas y columnas en blanco. En el
siguiente ejemplo, la selección se amplía para incluir las celdas contiguas a la celda activa que contiene
datos. A continuación, se asigna el estilo Moneda a este rango.

Sub Región()
Worksheets("Hoja1").Activate
ActiveCell.CurrentRegion.Select
Selection.Style = "Moneda"
End Sub

DEVOLVER UN OBJETO DE UN CONJUNTO:


La propiedad Item devuelve un objeto de un conjunto. El ejemplo siguiente establece la variable
primerLibro como un objeto Workbook que representa el libro uno.

Set primerLibro = Workbooks.Item(1)

La propiedad Item es la propiedad predeterminada de la mayoría de los conjuntos, por lo que puede
escribir la misma instrucción de una manera más precisa omitiendo la palabra clave Item.

Set primerLibro = Workbooks(1)

Para obtener más información acerca de un conjunto específico, consulte el tema de la Ayuda
correspondiente a dicho conjunto o bien la propiedad Item del conjunto.

Objetos con nombre

-31-
CURSO DE
AUTOMATIZACION DE
EXCEL
Aunque normalmente puede especificar un valor entero con la propiedad Item, puede ser más
conveniente que se devuelva un objeto por su nombre. Para poder usar un nombre con la propiedad
Item, debe asignar un nombre al objeto. Normalmente, esto se realiza estableciendo la propiedad Name
del objeto. El siguiente ejemplo crea una hoja de cálculo con nombre en el libro activo y después hace
referencia a la hoja por su nombre.

ActiveWorkbook.Worksheets.Add.Name = "una hoja nueva"


With Worksheets("una hoja nueva")
.Range("a5:a10").Formula = "=aleatorio()"
End With

Valores de índice predefinidos

Algunos conjuntos tienen valores de índice predefinidos, que pueden emplearse para devolver objetos
únicos. Cada valor de índice predefinido está representado por una constante. Por ejemplo, especifique
una constante XlBordersIndex con la propiedad Item del conjunto Borders para que se devuelva un solo
borde.

El ejemplo siguiente establece el borde inferior de las celdas A1:G1 de la Hoja1 como una línea doble.

Worksheets("Hoja1").Range("a1:g1"). Borders.Item(xlEdgeBottom).LineStyle = xlDouble

-32-
CURSO DE
AUTOMATIZACION DE
EXCEL
OBJETOS DE MICROSOFT OFFICE:

OBJETO APLICACIÓN:
Application

Objetos Relacionados

Representa la aplicación completa Microsoft Excel. El objeto Application contiene:

 · Valores y opciones de toda la aplicación (por ejemplo, muchas de las opciones del cuadro de
diálogo Opciones, en el menú Herramientas).

 · Métodos que devuelven objetos de nivel superior, como ActiveCell, ActiveSheet, etc.

Uso del objeto Application

Use la propiedad Application para devolver el objeto Application. El ejemplo siguiente aplica la propiedad
Windows al objeto Application.

Application.Windows("libro1.xls").Activate

El ejemplo siguiente crea un objeto hoja de cálculo de Microsoft Excel en otra aplicación y, a
continuación, abre un libro en Microsoft Excel.

-33-
CURSO DE
AUTOMATIZACION DE
EXCEL
Set xl = CreateObject("Excel.Hoja")
xl.Application.Workbooks.Open "nuevolib.xls"

Comentarios

Muchas propiedades y métodos que devuelven los objetos de interfaz de usuario más frecuentes, como
la celda activa (propiedad ActiveCell) pueden emplearse sin el calificador de objeto Application. Por
ejemplo, en lugar de escribir Application.ActiveCell.Font.Bold = True, puede escribir ActiveCell.Font.Bold
= True.

OBJETO DE CONJUNTO WORKBOOKS


Application

WorkBooks (Workbook)

Objetos Relacionados

Un conjunto de todos los objetos Workbook abiertos actualmente en la aplicación Microsoft Excel.

Uso del conjunto Workbooks

Use la propiedad Workbooks para devolver el conjunto Workbooks. El ejemplo siguiente cierra todos los
libros abiertos.

Workbooks.Close

Use el método Add para crear un nuevo libro vacío y agregarlo al conjunto. El ejemplo siguiente agrega
un libro nuevo vacío a Microsoft Excel.

Workbooks.Add

Use el método Open para abrir un archivo. Así creará un libro nuevo para el archivo abierto. El ejemplo
siguiente abre el archivo Matriz.xls como un libro de sólo lectura.

Workbooks.Open fileName:="matriz.xls", readOnly:=True

Para obtener más información acerca de cómo usar un solo objeto Workbook, vea el objeto Workbook.

OBJETOS DEL CONJUNTO WOORKSHEETS:


WorkBooks (Workbook)

WorkSheets (WorkSheet)

Objetos Relacionados

Un conjunto de todos los objetos Worksheet del libro especificado o activo. Cada objeto Worksheet
representa una hoja de cálculo.

Use la propiedad Worksheets para devolver el conjunto Worksheets. El ejemplo siguiente mueve todas
las hojas de cálculo al final del libro.

-34-
CURSO DE
AUTOMATIZACION DE
EXCEL
Worksheets.Move after:=Sheets(Sheets.Count)

Use el método Add para crear una nueva hoja de cálculo y agregarla al conjunto. El ejemplo siguiente
agrega dos nuevas hojas de cálculo antes de la hoja uno del libro activo.

Worksheets.Add count:=2, before:=Sheets(1)

Para devolver un solo objeto Worksheet, use Worksheets(índice), donde índice es el nombre o número
de índice de la hoja de cálculo. El ejemplo siguiente oculta la hoja de cálculo uno del libro activo.

Worksheets(1).Visible = False

El objeto Worksheet también es un elemento del conjunto Sheets. El conjunto Sheets contiene todas las
hojas del libro (hojas de gráficos y hojas de cálculo).

OBJETO DE CONJUNTO CHARTS:

WorkBooks (Workbook)

WorkSheets (WorkSheet)

Charts (Chart)

Objetos Relacionados

Un conjunto de todas las hojas de gráficos del libro especificado o activo. Cada hoja de gráficos está
representada por un objeto Chart. No se incluyen los gráficos incrustados en hojas de cálculo o de
diálogo. Para obtener más información acerca de gráficos incrustados, vea los objetos Chart o
ChartObject.

Uso del conjunto Charts

Use la propiedad Charts para devolver el conjunto Charts. El ejemplo siguiente imprime todas las hojas
de gráficos del libro activo.

Charts.PrintOut

Utilice el método Add para crear una nueva hoja de gráficos y agregarla al libro. El ejemplo siguiente
agrega una nueva hoja de gráficos al libro activo y sitúa la hoja nueva inmediatamente después de la
hoja de cálculo llamada "Hoja1".

Charts.Add after:=Worksheets("Hoja1")

Puede combinar el método Add con el método ChartWizard para agregar un nuevo gráfico que contenga
datos de una hoja de cálculo. El ejemplo siguiente agrega un gráfico de líneas nuevo basado en las
celdas A1:A20 de la hoja de cálculo llamada "Hoja1".

With Charts.Add
.ChartWizard source:=Worksheets("Hoja1").Range("a1:a20"), _
gallery:=xlLine, title:="Datos de febrero"
End With

Para devolver un solo objeto Chart, use Charts(índice), donde índice es el nombre o número de índice
de la hoja de gráficos. El ejemplo siguiente cambia a rojo el color de la serie uno de la hoja de gráficos
uno.

-35-
CURSO DE
AUTOMATIZACION DE
EXCEL
Charts(1).SeriesCollection(1).Interior.Color = RGB(255, 0, 0)

El conjunto Sheets contiene todas las hojas del libro (hojas de gráficos y hojas de cálculo). Para
devolver un sola hoja, use Sheets(índice), donde índice es el nombre o número de la hoja.

PROPIEDAD BUILTINDOCUMENTPROPERTIES
Devuelve un conjunto DocumentProperties que representa todas las propiedades de documento
incorporadas en el libro especificado. Es de sólo lectura.

Comentarios

Esta propiedad devuelve el conjunto completo de propiedades de documento incorporadas. Use el


método Item para devolver un solo miembro del conjunto (un objeto DocumentProperty) especificando el
nombre de la propiedad o el índice del conjunto (en forma de número).

Puede hacer referencia a las propiedades de documento por el valor de índice o por nombre. En la
siguiente lista se muestran los nombres de todas las propiedades de documento incorporadas
disponibles:

Título Fecha de creación Organización


Asunto Fecha de modificación Bytes
Autor Tiempo de edición Líneas
Palabras clave Páginas Párrafos
Comentario Palabras Diapositivas
Plantilla Caracteres Notas
Último autor Seguridad Diapositivas ocultas
Número de revisión Categoría Secuencias multimedia
Nombre de aplicación Formato Base de hipervínculo
Fecha de impresión Director Caracteres (con espacios)

Las aplicaciones contenedor deben definir valores para todas las propiedades de documento
incorporadas. Si Microsoft Excel no define un valor para alguna de las propiedades de documento
incorporadas, la lectura de la propiedad Value para la propiedad de dicho documento causará un error.

Dado que Item es el método predeterminado para el conjunto DocumentProperties, los enunciados
siguientes son idénticos:

BuiltinDocumentProperties.Item(1)
BuiltinDocumentProperties(1)

Use la propiedad CustomDocumentProperties para devolver el conjunto de las propiedades de


documento personalizadas.

PROPIEDAD VBPROYECT
Devuelve un objeto VBProject que representa el proyecto Visual Basic del libro especificado. Es de sólo
lectura.

OBJETO CUSTOMVIEWS
WorkBooks (Workbook)

CustomViews (CustomView)

-36-
CURSO DE
AUTOMATIZACION DE
EXCEL
Un conjunto de vistas personalizadas de libro. Cada vista está representada por un objeto CustomView.

Utilizar el conjunto CustomViews

Utilice la propiedad CustomViews para obtener el conjunto CustomViews. Utilice el método Add para
crear una nueva vista personalizada y agregarla al conjunto CustomViews. El siguiente ejemplo crea
una vista personalizada llamada “Resumen”.

ActiveWorkbook.CustomViews.Add "Resumen", True, True

OBJETO PivotCaches
WorkBooks (Workbook)

PivotCaches (PivotCache)

Representa el conjunto de memorias caché de tabla dinámica en un libro. Cada memoria caché está
representada por un objeto PivotCache .

Utilizar el conjunto PivotCaches

Utilice el método PivotCaches para obtener el conjunto PivotCaches. El siguiente ejemplo establece la
propiedad RefreshOnFileOpen para todas las memorias caché del libro activo.

For Each caché In ActiveWorkbook.PivotCaches


caché.RefreshOnFileOpen = True
Next

OBJETO DE CONJUNTO Styles


Objetos Relacionados

Styles (Style)

Border

Font

Interior

Un conjunto de todos los objetos Style del libro especificado o activo. Cada objeto Style representa la
descripción de un estilo de un rango. El objeto Style contiene todos los atributos de estilo (fuente,
formato numérico, alineación, etc.) en forma de propiedades. Existen varios estilos incorporados, como
Normal, Moneda y Porcentaje, que aparecen en el cuadro Nombre de estilo del cuadro de diálogo Estilo
(menú Formato).

Uso del conjunto Styles

Use la propiedad Styles para devolver el conjunto Styles. El ejemplo siguiente crea una lista de nombres
de estilo de la hoja de cálculo uno del libro activo.

For i = 1 To ActiveWorkbook.Styles.Count
Worksheets(1).Cells(i, 1) = ActiveWorkbook.Styles(i).Name
Next

-37-
CURSO DE
AUTOMATIZACION DE
EXCEL
Use el método Add para crear un estilo nuevo y agregarlo al conjunto. El ejemplo siguiente crea un
nuevo estilo basado en estilo Normal, modifica el borde y la fuente y, a continuación, aplica el nuevo
estilo a las celdas A25:A30.

With ActiveWorkbook.Styles.Add(name:="bookman borde superior")


.Borders(xlTop).LineStyle = xlDouble
.Font.Bold = True
.Font.Name = "bookman"
End With
Worksheets(1).Range("a25:a30").Style = "bookman borde superior"

Para devolver un solo objeto Style del conjunto Styles del libro, use Styles(índice), donde índice es el
nombre o número de índice del estilo. El ejemplo siguiente cambia el estilo Normal del libro activo por el
valor de su propiedad Bold.

ActiveWorkbook.Styles("Normal").Font.Bold = True

OBJETO DE CONJUNTO Borders


Objetos Relacionados

Border

Un conjunto de cuatro objetos Border que representan los cuatro bordes de un objeto Range o Style.

Uso del conjunto Borders

Use la propiedad Borders para devolver el conjunto Borders, que contiene los cuatro bordes. El ejemplo
siguiente agrega un borde doble a la celda A1 de la hoja de cálculo uno.

Worksheets(1).Range("a1").Borders.LineStyle = xlBorderStyleDouble

Para devolver un solo objeto Border, use Borders(índice), donde índice identifica al borde. El siguiente
ejemplo establece en rojo el color del borde inferior de las celdas A1:G1.

Worksheets("Hoja1").Range("a1:g1"). _
Borders(xlEdgeBottom).Color = RGB(255, 0, 0)

Índice puede ser una de las siguientes constantes XlBorderType: xlInsideHorizontal, xlInsideVertical,
xlDiagonalDown, xlDiagonalUp, xlEdgeBottom, xlEdgeLeft, xlEdgeRight o xlEdgeTop.

Comentarios

Sólo es posible establecer las propiedades de un borde individual con los objetos Range y Style. Otros
objetos con borde, como casillas de verificación y áreas de gráficos, tienen un borde que se trata como
una sola entidad, independientemente de los lados que tenga. Para estos objetos, deberá devolver y
establecer las propiedades del borde completo de una sola vez. Para obtener más información, vea el
objeto Border.

OBJETO Font

Objetos Relacionados

Font

-38-
CURSO DE
AUTOMATIZACION DE
EXCEL

Contiene los atributos de fuente (nombre, tamaño, color, etc.) de un objeto.

Uso del objeto Font

Use la propiedad Font para devolver el objeto Font. El ejemplo siguiente da formato de negrita a las
celdas A1:C5.

Worksheets("Hoja1").Range("a1:c5").Font.Bold = True

Si no desea dar el mismo formato a todo el texto contenido en una celda o un gráfico, use la propiedad
Characters para devolver un subconjunto del texto.

OBJETO Interior

Objetos Relacionados

Interior

Representa el interior de un objeto.

Uso del objeto Interior

Use la propiedad Interior para devolver el objeto Interior. El siguiente ejemplo establece en rojo el color
del interior de la celda A1.

Worksheets("Hoja1").Range("a1").Interior.ColorIndex = 3

OBJETO DE CONJUNTO Windows


Application

WorkBooks (WorkBook)

Windows (Window)

Panes (Pane)

Un conjunto de todos los objetos Window de Microsoft Excel. El conjunto Windows del objeto Application
contiene todas las ventanas de la aplicación, mientras que el conjunto Windows del objeto Workbook
sólo contiene las ventanas del libro especificado.

Uso del conjunto Windows

Use la propiedad Windows para devolver el conjunto Windows. El ejemplo siguiente organiza en
cascada todas las ventanas que se muestran actualmente en Microsoft Excel.

Windows.Arrange arrangeStyle:=xlCascade

-39-
CURSO DE
AUTOMATIZACION DE
EXCEL
Use el método NewWindow para crear una ventana nueva y agregarla al conjunto. El ejemplo siguiente
crea una nueva ventana para el libro activo.

ActiveWorkbook.NewWindow

Para devolver un solo objeto Windows, use Windows(índice), donde índice es el nombre o número de
índice de la ventana. El ejemplo siguiente maximiza la ventana activa.

Windows(1).WindowState = xlMaximized

Tenga en cuenta que la ventana activa siempre es Windows(1).

OBJETO DE CONJUNTO Panes


Windows (Window)

Panes (Pane)

Un conjunto de todos los objetos Pane mostrados en la ventana especificada. Los objetos Pane sólo
existen para las hojas de cálculo y las hojas de macros de Excel 4.0.

Uso del conjunto Panes

Use la propiedad Panes para devolver el conjunto Panes. El ejemplo siguiente inmoviliza las secciones
de la ventana activa si ésta contiene más de una sección.

If ActiveWindow.Panes.Count > 1 Then ActiveWindow.FreezePanes = True

Para devolver un solo objeto Pane, use Panes(índice), donde índice es el número de índice de la
sección. El ejemplo siguiente se desplaza en la sección superior izquierda de la ventana donde se
muestra Hoja1.

Worksheets("Hoja1").Activate
Windows(1).Panes(1).LargeScroll down:=1

OBJETO DE CONJUNTO Names


Application

WorkBooks (WorkBook)

Names (Name)

WorkSheets (Worksheet)

Names (Name)

Range

Name

-40-
CURSO DE
AUTOMATIZACION DE
EXCEL
Un conjunto de todos los objetos Name del libro o la aplicación. Cada objeto Name representa un
nombre definido para un rango de celdas. Los nombres pueden ser incorporados, como Base_de_datos,
Área_de_impresión y Auto_abrir, o personalizados.

Uso del conjunto Names

Use la propiedad Names para devolver el conjunto Names. El ejemplo siguiente crea una lista de todos
los nombres del libro activo, así como las direcciones a las que hacen referencia.

Set nms = ActiveWorkbook.Names


Set hoja = Worksheets(1)
For r = 1 To nms.Count
hoja.Cells(r, 2).Value = nms(r).Name
hoja.Cells(r, 3).Value = nms(r).RefersToRange.Address
Next

Use el método Add para crear un nombre y agregarlo al conjunto. El ejemplo siguiente crea un nombre
nuevo que hace referencia a las celdas A1:C20 de la hoja de cálculo llamada "Hoja1."

Names.Add Name:="prueba", RefersTo:="=sheet1!$a$1:$c$20"

El argumento RefersTo debe especificarse en notación de estilo A1, incluidos signos de dólar ($) donde
corresponda. Por ejemplo, si la celda A10 está seleccionada en la Hoja1 y se define un nombre usando
el argumento RefersTo "=hoja1!A1:B1", el nuevo nombre en realidad hará referencia a las celdas
A10:B10 (puesto que se ha especificado una referencia relativa). Para especificar una referencia
absoluta, use "=hoja1!$A$1:$B$1".

Para devolver un solo objeto Name, use Names(índice), donde índice es el nombre definido o número
de índice del nombre. El ejemplo siguiente elimina el nombre "miRangoOrden" del libro activo

ActiveWorkbook.Names("miRangoOrden").Delete

OBJETO RoutingSlip
WorkBooks (Workbook)

Routing Slip

Representa la lista de distribución de un libro. La lista de distribución se emplea para enviar un libro a
través del sistema de correo electrónico.

Uso del objeto RoutingSlip

Use la propiedad RoutingSlip para devolver el objeto RoutingSlip. El ejemplo siguiente establece el estilo
de entrega de la lista de distribución adjunta al libro activo. Para obtener un ejemplo más detallado, vea
la propiedad RoutingSlip.

ActiveWorkbook.HasRoutingSlip = True
ActiveWorkbook.RoutingSlip.Delivery = xlOneAfterAnother

Comentarios

El objeto RoutingSlip no existe y no es posible usarlo a menos que la propiedad HasRoutingSlip del libro
sea True.

-41-
CURSO DE
AUTOMATIZACION DE
EXCEL
OBJETO Mailer
Application

WorkBooks (Workbook)

Routing Slip

Representa el formulario de PowerTalk para un libro. Este objeto sólo está disponible en Macintosh, con
la ampliación del sistema PowerTalk instalada.

Uso del objeto Mailer

Use la propiedad Mailer para devolver el objeto Mailer. El ejemplo siguiente establece la propiedad
Subject del formulario adjunto al libro activo.

ActiveWorkbook.HasMailer = True
ActiveWorkbook.Mailer.Subject = "Este es el libro."

OBJETO DE CONJUNTO AddIns

Application

AddIns (AddIn)

Un conjunto de objetos AddIn que representa todas las macros automáticas disponibles en Microsoft
Excel, con independencia de si están instaladas. Esta lista corresponde a lista que se muestra en el
cuadro de diálogo Macros automáticas (menú Herramientas).

Uso del conjunto Addins

Use el método AddIns para devolver el conjunto AddIns. El ejemplo siguiente crea una lista con los
nombres y estados de instalado de todas las macros automáticas disponibles.

Sub MostrarMacrosAuto()
Worksheets("Hoja1").Activate
rw = 1
For Each mcraut In Application.AddIns
Worksheets("Hoja1").Cells(rw, 1) = mcraut.Name
Worksheets("Hoja1").Cells(rw, 2) = mcraut.Installed
rw = rw + 1
Next
End Sub

Use el método Add para agregar una macro automática a la lista de macros automáticas disponibles. El
método Add agrega una macro automática a la lista, pero no instala la macro. Defina la propiedad
Installed de la macro automática como True para instalarla. Para instalar una macro que no aparece en
la lista de macros automáticas disponibles, primero debe usar el método Add y después establecer la
propiedad Installed. Puede hacerlo en un solo paso, como se muestra en el ejemplo siguiente (tenga en
cuenta que, con el método Add se usa el nombre de la macro automática, no su título).

AddIns.Add("genérica.xll").Installed = True

Para devolver un solo objeto AddIn, use AddIns(índice), donde índice es el título de la macro automática
o su número de índice. El ejemplo siguiente instala la macro automática Herramientas para análisis.

-42-
CURSO DE
AUTOMATIZACION DE
EXCEL
AddIns("Herramientas para análisis").Installed = True

No confunda el título de la macro automática, que aparece en el cuadro de diálogo Macros automáticas,
con su nombre, que es el nombre de archivo de la macro. Debe escribir el título de la macro automática
correctamente, tal como se muestra en el cuadro de diálogo Macros automáticas, aunque no es
necesario que coincidan las letras mayúsculas y minúsculas.

OBJETO AutoCorrect
Application

AutoCorret

Contiene los atributos de Autocorrección de Microsoft Excel (uso de mayúsculas en nombres de días,
corrección de dos mayúsculas iniciales, lista de corrección automática, etc.).

Utilizar el objeto AutoCorrect

Utilice la propiedad AutoCorrect para obtener el objeto AutoCorrect. El siguiente ejemplo tiene como
efecto que Excel corrija aquellas palabras que comiencen con dos mayúsculas consecutivas.

With Application.AutoCorrect
.TwoInitialCapitals = True
.ReplaceText = True
End With

PROPIEDAD Assistant

Devuelve un objeto Assistant de Microsoft Excel.

Comentarios

El uso de esta propiedad sin un calificador de objeto equivale a usar Application.Assistant.

Debug (OBJETO)

El objeto Debug envía la salida a la ventana Depuración en tiempo de ejecución.

OBJETO DE CONJUNTO Dialogs


Application

Dialogs (Dialog)

Un conjunto de todos los objetos Dialog de la aplicación Microsoft Excel. Cada objeto Dialog representa
un cuadro de diálogo incorporado. No se pueden crear cuadros de diálogo incorporados nuevos ni
agregarlos al conjunto. Lo único que puede hacerse con un objeto Dialog es emplearlo con el método
Show para mostrar el cuadro de diálogo correspondiente.

-43-
CURSO DE
AUTOMATIZACION DE
EXCEL
Uso del conjunto Dialogs

Use la propiedad Dialogs para devolver el conjunto Dialogs. El ejemplo siguiente muestra el número de
cuadros de diálogo incorporados en Microsoft Excel disponibles.

MsgBox Application.Dialogs.Count

Para devolver un solo objeto Dialog, use Dialogs(índice), donde índice es la constante incorporada que
identifica al cuadro de diálogo. El ejemplo siguiente ejecuta el cuadro de diálogo incorporado Abrir
archivo.

dlgAnswer = Application.Dialogs(xlDialogOpen).Show

La biblioteca de objetos de Microsoft Excel Visual Basic incluye constantes incorporadas para
numerosos cuadros de diálogo incorporados. Cada constante se forma con el prefijo "xlDialog" seguido
del nombre del cuadro de diálogo. Por ejemplo, la constante del cuadro de diálogo Aplicar nombres es
xlDialogApplyNames y la constante del cuadro de diálogo Buscar archivo es xlDialogFindFile. Estas
siguientes constantes son elementos del tipo enumerado XlBuiltinDialog. Para obtener más información
acerca de las constantes disponibles, vea Listas de argumentos de los cuadros de diálogo incorporados.

PROPIEDAD CommandBars

Devuelve un objeto CommandBars que representa las barras de comandos de Microsoft Excel. Es de
sólo lectura.

Comentarios

Utilizado con el objeto Application, esta propiedad devuelve el grupo de barras de comandos
incorporadas y personalizadas disponibles en la aplicación.
When a workbook is embedded in another application and activated by the user by double-clicking the
workbook, using this property with a Workbook object returns the set of Microsoft Excel command bars
available within the other application. At all other times, using this property with a Workbook object
returns Nothing.

There is no programmatic way to return the set of command bars attached to a workbook.

OBJETO DE CONJUNTO Names


Application

WorkBooks (WorkBook)

Names (Name)

WorkSheets (Worksheet)

Names (Name)

Range

Name

Un conjunto de todos los objetos Name del libro o la aplicación. Cada objeto Name representa un
nombre definido para un rango de celdas. Los nombres pueden ser incorporados, como Base_de_datos,
Área_de_impresión y Auto_abrir, o personalizados.

Uso del conjunto Names

-44-
CURSO DE
AUTOMATIZACION DE
EXCEL
Use la propiedad Names para devolver el conjunto Names. El ejemplo siguiente crea una lista de todos
los nombres del libro activo, así como las direcciones a las que hacen referencia.

Set nms = ActiveWorkbook.Names


Set hoja = Worksheets(1)
For r = 1 To nms.Count
hoja.Cells(r, 2).Value = nms(r).Name
hoja.Cells(r, 3).Value = nms(r).RefersToRange.Address
Next

Use el método Add para crear un nombre y agregarlo al conjunto. El ejemplo siguiente crea un nombre
nuevo que hace referencia a las celdas A1:C20 de la hoja de cálculo llamada "Hoja1."

Names.Add Name:="prueba", RefersTo:="=sheet1!$a$1:$c$20"

El argumento RefersTo debe especificarse en notación de estilo A1, incluidos signos de dólar ($) donde
corresponda. Por ejemplo, si la celda A10 está seleccionada en la Hoja1 y se define un nombre usando
el argumento RefersTo "=hoja1!A1:B1", el nuevo nombre en realidad hará referencia a las celdas
A10:B10 (puesto que se ha especificado una referencia relativa). Para especificar una referencia
absoluta, use "=hoja1!$A$1:$B$1".

Para devolver un solo objeto Name, use Names(índice), donde índice es el nombre definido o número
de índice del nombre. El ejemplo siguiente elimina el nombre "miRangoOrden" del libro activo

ActiveWorkbook.Names("miRangoOrden").Delete

OBJETO DE CONJUNTO Windows

Application

WorkBooks (WorkBook)

Windows (Window)

Panes (Pane)

Un conjunto de todos los objetos Window de Microsoft Excel. El conjunto Windows del objeto Application
contiene todas las ventanas de la aplicación, mientras que el conjunto Windows del objeto Workbook
sólo contiene las ventanas del libro especificado.

Uso del conjunto Windows

Use la propiedad Windows para devolver el conjunto Windows. El ejemplo siguiente organiza en
cascada todas las ventanas que se muestran actualmente en Microsoft Excel.

Windows.Arrange arrangeStyle:=xlCascade

Use el método NewWindow para crear una ventana nueva y agregarla al conjunto. El ejemplo siguiente
crea una nueva ventana para el libro activo.

ActiveWorkbook.NewWindow

Para devolver un solo objeto Windows, use Windows(índice), donde índice es el nombre o número de
índice de la ventana. El ejemplo siguiente maximiza la ventana activa.

-45-
CURSO DE
AUTOMATIZACION DE
EXCEL
Windows(1).WindowState = xlMaximized

Tenga en cuenta que la ventana activa siempre es Windows(1).

OBJETO DE CONJUNTO Panes

Windows (Window)

Panes (Pane)

Un conjunto de todos los objetos Pane mostrados en la ventana especificada. Los objetos Pane sólo
existen para las hojas de cálculo y las hojas de macros de Excel 4.0.

Uso del conjunto Panes

Use la propiedad Panes para devolver el conjunto Panes. El ejemplo siguiente inmoviliza las secciones
de la ventana activa si ésta contiene más de una sección.

If ActiveWindow.Panes.Count > 1 Then ActiveWindow.FreezePanes = True

Para devolver un solo objeto Pane, use Panes(índice), donde índice es el número de índice de la
sección. El ejemplo siguiente se desplaza en la sección superior izquierda de la ventana donde se
muestra Hoja1.

Worksheets("Hoja1").Activate
Windows(1).Panes(1).LargeScroll down:=1

OBJETO WorksheetFunction

Application

WorkSheetFunction

Utilizado como contenedor de las funciones de hoja de cálculo de Microsoft Excel que pueden llamarse
desde Visual Basic.

Usar el objeto WorksheetFunction

Utilice la propiedad WorksheetFunction para obtener el objeto WorksheetFunction. El siguiente ejemplo


muestra el resultado de aplicar la función de hoja de cálculo Min al rango A1:A10.

Set miRango = Worksheets("Hoja1").Range("A1:C10")


respuesta = Application.WorksheetFunction.Min(miRango)
MsgBox respuesta

Comentarios

En anteriores versiones de Microsoft Excel, las funciones de hoja de cálculo estaban contenidas en el
objeto Application.

OBJETO RecentFiles

-46-
CURSO DE
AUTOMATIZACION DE
EXCEL
Application

RecentFiles (RecentFile)

Representa la lista de archivos recientemente utilizados. Cada archivo está representado por un objeto
RecentFile.

Utilizar el conjunto RecentFiles

Utilice la propiedad RecentFiles para obtener el conjunto RecentFiles. El siguiente ejemplo establece el
número máximo de archivos en la lista de archivos recientemente utilizados.

Application.RecentFiles.Maximum = 6

PROPIEDAD FileSearch

Devuelve un objeto FileSearch, que se puede utilizar en búsquedas de archivo. Esta propiedad sólo está
disponible en Microsoft Windows.

PROPIEDAD FileFind

Devuelve un objeto FileFind, que se puede utilizar en búsquedas de archivo. Esta propiedad sólo está
disponible en Macintosh.

PROPIEDAD VBE

Devuelve un objeto VBE que representa el Editor de Visual Basic. Es de sólo lectura.

OBJETO ODBCErrors
Application

ODBCErrors (ODBCError)
Representa un error devuelto por la consulta de ODBC más reciente. Si la consulta de ODBC se ejecuta
sin errores, el conjunto ODBCErrors estará vacío. Los errores del conjunto se indexan en el orden en
que los genera la fuente de datos de ODBC. No pueden agregarse miembros al conjunto.

Uso del conjunto ODBCErrors

Utilice la propiedad ODBCErrors para devolver el conjunto ODBCErrors. El ejemplo siguiente actualiza
la tabla de consulta uno y muestra los errores de ODBC ocurridos.

With Worksheets(1).QueryTables(1)
.Refresh
Set errs = Application.ODBCErrors
If errs.Count > 0 Then
Set r = .Destination.Cells(1)
r.Value = "Han ocurrido los siguientes errores:"
c=0

-47-
CURSO DE
AUTOMATIZACION DE
EXCEL
For Each er In errs
c=c+1
r.offset(c, 0).value = er.ErrorString
r.offset(c, 1).value = er.SqlState
Next
Else
MsgBox "Consulta completa: se han devuelto todos los registros."
End If
End With

EJEMPLO DE MACRO PARA REALIZAR UNA ESTADISTIA DESCRIPTIVA:

Sub Descriptiva()
'
' Descriptiva Macro
' Macro grabada el 11/08/01 por Miguel Laffont
'
'
Application.Run "ATPVBAEN.XLA!Descr", ActiveSheet.Range("$E$5:$E$17"), _
ActiveSheet.Range("$C$21"), "C", False, True

End Sub

Observación: Esta macro fue generada Con la opción Grabar Nueva Macro de la Barra de
Herramientas - Macros

-48-
CURSO DE
AUTOMATIZACION DE
EXCEL

EJEMPLOS
DE
APLICACION

-49-
CURSO DE
AUTOMATIZACION DE
EXCEL
TAREAS REPETITIVAS UTILIZANDO BUCLES.
A menudo es necesario repetir un tipo de tarea específica para un grupo de elementos, que
pueden ser celdas, celdas en un rango, hojas de cálculo de un libro o libros en una
aplicación.
A pesar de que una macro no puede grabar bucles, se puede grabar la tarea principal y
luego, mediante pequeñas modificaciones en el código, se pueden crear distintos tipos de
bucles según las necesidades del proyecto.

Los ejemplos siguientes se centran en un escenario donde el programador tiene un rango


de celdas con números en la columna A, y dependiendo del valor de la celda, desea
cambiar el color de la celda correspondiente en la columna B.

Primero grabaremos el proceso de cambiar el color de fondo de la celda:

(Para grabar la macro, en el menú Herramientas haga clic en Macro y luego en Grabar
nueva macro)
Mientras graba, haga clic en Celdas en el menú Formato, luego haga clic en la ficha Tramas
y seleccione un color. En este ejemplo se usará amarillo (.ColorIndex=6). A continuación
pare la grabación mediante el botón Detener grabación de la barra de herramientas Grabar
macro.
La celda seleccionada cambiará el color y se grabará la macro siguiente:

Sub Macro_Grabada()
'
' Macro grabada el 6-30-97
'
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End Sub

Nota: Si al grabar seleccionó una celda, puede aparecer en la macro el texto


Range("A3").Select. Si deja esta línea sin modificar, cada vez que ejecute la macro se
seleccionará la celda especificada en el objeto Range. No quite esta línea de la macro si
desea seleccionar la celda.

A continuación se puede modificar ligeramente el código y agregar alguna estructura de


bucle en el código grabado.

Bucle For Each…Next

Para usar el bucle For Each…Next se debe conocer el rango de celdas al que deseamos
aplicar la acción grabada.
Como condición de este ejemplo, sólo será afectada la celda en la columna B si la celda en
A es mayor que 20. Se agregará el enunciado If al enunciado With utilizado. El color
cambiará sólo si If es verdadero.
Por último, debido a que se desea desplazar la celda correspondiente una columna hacia la
derecha de la columna A (columna B), se reemplazará la propiedad Selection en el código
usando el método Offset en la celda en la que se aplicará el bucle (celda_en_bucle).
El código resultante será:

-50-
CURSO DE
AUTOMATIZACION DE
EXCEL
Sub Ejemplo_For_Each_Next()
'
' Macro grabada el 6-30-97
'
For Each celda_en_bucle In Range("A1:A5")
If celda_en_bucle.Value > 20 Then
With celda_en_bucle.Offset(0, 1).Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End If
Next
End Sub

Bucle For…Next

Si conoce el número de veces que desea realizar un bucle en el código, puede usar el bucle
For..Next. En el ejemplo siguiente, si se desea comprobar 10 celdas hacia abajo a partir de
la celda seleccionada, el código será:

Sub Ejemplo_For_Next()

For Contador = 0 To 9
If Selection.Offset(Contador, 0).Value > 20 Then
With Selection.Offset(Contador, 1).Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End If
Next
End Sub

En este ejemplo, el objeto Selection se utiliza para que el código no especifique ningún
rango y realice un bucle diez celdas hacia abajo de la celda activa (de 0 a 9). La variable
Contador aumenta progresivamente a medida que avanza el bucle y se puede usar
internamente en la estructura del mismo. Aquí se utiliza como argumento Offset para
indicar el número de filas que se desplaza Selection desde la celda activa. Si al iniciar la
macro la celda activa es A1, en la primera vuelta del bucle, la variable Contador será igual
a 0 y se desplazará 0 filas a partir de A1, como se muestra en el enunciado
Selection.Offset(Contador, 0).Value.

Do…Loop

Para establecer cuándo detener un bucle basado en una condición determinada, puede ser
apropiado utilizar Do…Loop. Esta estructura de bucle permite comprobar las propiedades o
condiciones de la variable antes de ejecutar el bucle. En el ejemplo siguiente, el bucle
continúa hasta que el número de fila al que se hace referencia en
Selection.Offset(Contador, 0).Row es mayor que 100. Esto puede ser útil si no desea
ejecutar el bucle mas allá de la fila 100.

Sub Ejemplo_Do_Loop()

Contador = 0
Do Until Selection.Offset(Contador, 0).Row > 100

-51-
CURSO DE
AUTOMATIZACION DE
EXCEL
If Selection.Offset(Contador, 0).Value > 20 Then
With Selection.Offset(Contador, 1).Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End If
Contador = Contador+ 1
Loop

Nota: Existen otros tipos de bucle Do…Loop disponibles, que ofrecen más flexibilidad en
determinadas circunstancias.

Si desea obtener más información y detalles acerca de otras estructuras de bucle, consulte
en la Ayuda del entorno de Visual Basic la palabra bucles.

AGREGAR ROTULOS A GRAFICOS


En Microsoft Excel no existe un método para agregar rótulos automáticamente a un gráfico
XY (Dispersión). Sin embargo, puede usar una macro para realizar esta tarea.

La macro adjunta muestra cómo aplicar rótulos en un gráfico XY (Dispersión) y asume que
los datos y rótulos asociados están ordenados del mismo modo que en las celdas
sombreadas anteriores.

Sub VincularRótulosAPuntos()
'Comprueba que sólo se ejecuta la subrutina
'una vez restablecido el gráfico
If reiniciarcódigo = False Then
MsgBox "Restablezca el gráfico antes de aplicar los rótulos", vbCritical
Exit Sub
End If
' Variables de dimensión.
Dim Contador As Integer
Dim HojaOrigen As Variant, xVals As Variant, xCelda As Variant
Dim xRótulo As Variant

' Deshabilita la actualización de pantalla mientras se ejecuta la subrutina.


Application.ScreenUpdating = False

' Guarda el nombre de la hoja activa en "ChartName".


ActiveSheet.ChartObjects(1).Select

' Guarda la definición de la primera serie en "xVals".


xVals = ActiveChart.SeriesCollection(1).Formula

' Estas líneas extraen el nombre de la hoja de cálculo de origen desde xVals.
HojaOrigen = Left(xVals, InStr(1, xVals, "!") - 1)
HojaOrigen = Right(HojaOrigen, Len(HojaOrigen) - _

-52-
CURSO DE
AUTOMATIZACION DE
EXCEL
InStr(1, HojaOrigen, "("))
If Left(HojaOrigen, 1) = "," Then
HojaOrigen = Right(HojaOrigen, Len(HojaOrigen) - 1)
End If

' Reemplaza el nombre de la hoja de cálculo actual con "xlSheet" para que
' las búsquedas funcionen correctamente si el nombre de la hoja de cálculo
' contiene comas.
xVals = Application.Substitute(xVals, HojaOrigen, "xlSheet")

' Otros procesos en el nombre xVals.


xVals = Right(xVals, Len(xVals) - InStr(1, xVals, ","))

' Si el gráfico usa valores de x "asumidos",


' muestra un mensaje de alerta
If Left(xVals, 1) = "," Then

' NOTA: debe escribir las dos líneas siguientes


' como una sola línea.
MsgBox "Este gráfico X-Y usa valores de X predefinidos." & _
" Imposible continuar la macro."

' Sale de la subrutina si los valores de x "asumidos" están en uso.


Exit Sub
End If

' Otros procesos en el nombre xVals.


xVals = Left(xVals, InStr(1, xVals, ",") - 1)

' Escribe el nombre original de la hoja de cálculo de origen inicial nuevamente en xVals,
' reemplazando "xlSheet".
xVals = Application.Substitute(xVals, "xlSheet", HojaOrigen)

' Inicia un contador.


Contador = 1

' Para cada celda del rango xVals...


For Each xCell In Range(xVals)

' Obtiene el valor del rótulo a continuación del valor de x siguiente.


xLabel = xCell.Offset(0, -1).Value

' Agrega un rótulo al punto de datos actual en el gráfico.


ActiveChart.SeriesCollection(1).Points(Contador).HasDataLabel = _
True

' Sitúa el texto ("Punto de datos 1", por ejemplo) en


' el rótulo adjunto.
ActiveChart.SeriesCollection(1).Points(Contador).DataLabel.Text = _
xLabel

' Realiza un incremento en el contador.


Contador = Contador + 1
Next xCell 'realiza un bucle hasta terminar

-53-
CURSO DE
AUTOMATIZACION DE
EXCEL
' Comprueba que no hay nada seleccionado en el gráfico.
Application.ExecuteExcel4Macro "SELECT("""")"
resetcode = False
End Sub

Sub RestablecerGráfico()
'
'Esta subrutina restablece el gráfico para poder aplicar rótulos.
'
Application.ScreenUpdating = False

ActiveSheet.ChartObjects.Select
Selection.Delete
Charts.Add

With ActiveChart
.ChartType = xlXYScatter
.SetSourceData Source:=Sheets("Rótulos de gráficos").Range("B2:C6"),
PlotBy:=xlColumns
.Location Where:=xlLocationAsObject, Name:="Rótulos de gráficos"
End With

Application.ScreenUpdating = True
reiniciarcódigo = True
End Sub

ACCESO A DATOS
Los objetos de acceso a datos (DAO), permiten la manipulación directa de una base de
datos. Para usar este tipo de objetos, deberá crear una referencia a la biblioteca de objetos
Microsoft DAO 3.5 (cuadro de diálogo Referencias en el menú Herramientas) en el Editor de
Visual Basic. Además, es necesario tener instalados los controladores de ODBC o ISAM
apropiados. Para obtener más información acerca de los controladores de ODBC, consulte
en la Ayuda ""Instalar un controlador ODBC para tener acceso a una fuente de datos
externa"". Para instalar DAO o ISAM, consulte el tema de la Ayuda ""Instalar o quitar
componentes individuales de Microsoft Office o Microsoft Excel"". Las rutas utilizadas en los
ejemplos apuntan hacia la ubicación predeterminada de la instalación. Si instaló Microsoft
Office en una ubicación diferente, modifique las rutas en el Editor de Visual Basic antes de
ejecutar los ejemplos."

EJEMPLO DE RDO
Este ejemplo recupera datos desde un archivo dBase usando RDO y los sitúa en una tabla
de Query en una hoja de cálculo nueva. Utilice este método al conectarse a bases de datos
SQL. RDO no utiliza DAO ya que este último disminuye la memoria disponible.

Sub EjemploRDO()
Dim ws As Workspace
Dim rs As Recordset
Dim qt As QueryTable
Dim c As Connection
Dim CadConec As String
Dim HojaNueva As Object
'Si no instaló Microsoft Office en la ubicación predeterminada,

-54-
CURSO DE
AUTOMATIZACION DE
EXCEL
'cambie la ruta para indicar la carpeta adecuada antes de ejecutar el código
CadConec = ""odbc;Driver={Microsoft dBase Driver (*.dbf)};DBQ=c:\archivos de
programa\microsoft office\office;""
'Crea un área de trabajo que no utiliza DAO
Set ws = CreateWorkspace(""w1"", ""admin"", """", dbUseODBC)
'Abre la conexión con el directorio que contiene los archivos DBF
Set c = ws.OpenConnection("""", 1, 0, ConnectStr)
'Obtiene todos los registros de la tabla y sólo permite desplazarse
'hacia adelante por los registros (método más rápido)"
Set rs = c.OpenRecordset(""select * from pedidos"", dbOpenForwardOnly)
'Inserta una nueva hoja de cálculo en el libro activo
Set HojaNueva = Worksheets.Add
'Crea una nueva tabla de Query basada en el conjunto de registros en la nueva hoja
Set qt = HojaNueva.QueryTables.Add(rs, Range(""a1""))
'Realiza una actualización sincronizada en la tabla de Query
qt.Refresh False
'Cierra el conjunto de registros
rs.Close
'Cierra la conexión
c.Close
End Sub"

RESTABLECER UN CONJUNTO DE REGISTROS DAO


Este ejemplo utiliza la base de datos de muestra Neptuno.mdb de Microsoft Access para
crear la tabla de Query en una nueva hoja de cálculo y, a continuación, restablecer el
conjunto de registros en una tabla diferente de la base de datos.

Sub ResettingDAORecordset()
Dim bd As Database
Dim rs As Recordset
Dim qt As QueryTable
Dim NewSheet As Object
Dim Neptuno As String
'Ruta predeterminada a la base de datos de ejemplo Neptuno.mdb
Neptuno = ""C:\Archivos de programa\microsoft office\office\ejemplos\Neptuno.mdb""
'Abre la base de datos Neptuno.mdb
Set bd = DBEngine.Workspaces(0).OpenDatabase(neptuno)
'Abre un conjunto de registros con todos los registros de la tabla clientes
Set rs = bd.OpenRecordset(""clientes"")
'Inserta una hoja de cálculo nueva en el libro activo
Set HojaNueva = Worksheets.Add
'Inserta una tabla de Query con información acerca del conjunto de registros en la hoja
nueva
Set qt = NewSheet.QueryTables.Add(rs, Range(""a1""))

'Realiza una actualización sincronizada en la tabla de Query


qt.Refresh False
'Cierra el conjunto de registros
rs.Close
'Abre un conjunto de registros con todos los registros de la tabla pedidos
Set rs = bd.OpenRecordset(""pedidos"")
'Cambia el conjunto de registros de la tabla de Query existente
Set qt.Recordset = rs
'Realiza una actualización sincronizada de la tabla de Query para presentar los datos
qt.Refresh False

-55-
CURSO DE
AUTOMATIZACION DE
EXCEL
'Cierra el conjunto de registros
rs.Close
'Cierra la base de datos
bd.Close
End Sub"

RECUPERAR DATOS DESDE MICROSOFT ACCESS


Este ejemplo utiliza DAO para crear una consulta basada en dos tablas en el archivo de
muestra Neptuno.mdb. Si la consulta ya existe, la rutina de control de errores la eliminará.

Sub RetrieveAccessData()
Dim Nsql As String, Ncriterios As String, Nvínculo As String
Dim Neptuno As String
Dim h As Integer
Dim bd As Database, qry As Object
Dim reg As Recordset, HojaNueva As Object
'Instalación predeterminada de la base de datos Neptuno.mdb
Neptuno = ""C:\Archivos de programa\microsoft office\office\ejemplos\Neptuno.mdb""
'Si encuentra un error va a la etiqueta ControlErrores
On Error GoTo controlErrores
'Abre la base de datos
Set bd = DBEngine.Workspaces(0).OpenDatabase(neptuno)
'Enunciado SQL para la consulta (copia desde la ventana SQL de MS Query)
Nsql = ""SELECT DISTINCTROW Categories.CategoryName, Products.ProductName,
Products.QuantityPerUnit, Products.UnitPrice """
Nvínculo = ""FROM Categorías INNER JOIN Productos ON Categorías.IdCategoría =
Productos.IdCategoría ""
Ncriteria = ""WHERE ((([Productos].Suspendido)=No) AND
(([Products].UnidadesEnExistencia)>20));""
'Crea una consulta denominada QueryTemp
Set qry = bd.CreateQueryDef(""QueryTemp"")
'Envía un enunciado SQL a QueryTemp
qry.sql = Nsql & Nvínculo & Ncriterios
'Abre el conjunto de registros resultante creado por QueryTemp
Set reg = qry.OpenRecordset()
'Agrega una nueva hoja de cálculo en el libro que contiene este código
Set HojaNueva = ThisWorkbook.Sheets.Add(after:=Worksheets(""Acceso a datos""),
Type:=xlWorksheet)
'Sitúa los nombres de campo en la fila 1 de la nueva hoja de cálculo
For h = 0 To reg.Fields.Count - 1
HojaNueva.[a1].Offset(0, h).Value = rec.Fields(h).Name
Next h
'Copia el conjunto de registros en Excel
HojaNueva.[a2].CopyFromRecordset rec
'Elimina la consulta temporal
db.QueryDefs.Delete ""QueryTemp""
'Cierra la base de datos
db.Close
'Si no encuentra errores, detiene la ejecución del código
Exit Sub
'Controlador de errores para eliminar la consulta si ya existe
controlErrores:
If DBEngine.Errors(0).Number = 3012 Then
db.QueryDefs.Delete ""QueryTemp""
'Comienza a ejecutar el código en la línea que causó el error

-56-
CURSO DE
AUTOMATIZACION DE
EXCEL
Resume
Else
MsgBox Error(Err)
End If
End Sub"

RECUPERAR DATOS CON CONTROLADORES ISAM


Este ejemplo muestra cómo recuperar datos desde un archivo dBase y sitúa el resultado en
una nueva hoja de cálculo. Debe tener previamente instalados los controladores ISAM
apropiados.

Sub RetrieveISAMdata()
Dim Db As database, rec As Recordset
dPath As String
Dim h As Integer, NewSheet As Object
'Ruta de instalación predeterminada de los archivos dbf
dPath = ""C:\Archivos de programa\microsoft office\office""
'Abre la base de datos
Set Db = DBEngine.Workspaces(0).OpenDatabase(dPath, 0, 0, ""dBase III"")"
'Abre un conjunto de registros con todos los registros de pedidos.dbf
Set reg = Db.OpenRecordset(""SELECT * FROM pedidos"")
'Agrega una nueva hoja de cálculo al libro que contiene este código
Set HojaNueva = ThisWorkbook.worksheets.Add(after:=Worksheets(""Acceso a
datos""))
'Realiza un bucle en los campos y devuelve los nombres de los campos a la hoja de
cálculo
For h = 0 To reg.Fields.Count - 1
HojaNueva.[a1].Offset(0, h).Value = rec.Fields(h).Name
Next h
'Copia el conjunto de registros en Excel
HojaNueva.[a2].CopyFromRecordset reg
'Cierra la base de datos
Bd.Close
End Sub"

REALIZAR UNA LISTA DE TABLAS EN LA BASE DE DATOS


Este ejemplo realiza una lista de los nombres de la tabla en la base de datos de muestra
Neptuno.mdb de Microsoft Access.
NOTA: Para ejecutar este código deberá tener Microsoft Access 97 instalado."

Sub TablasLista()
Dim bd As Database, CuentaTabla As Long, i As Long
Dim dRuta As String
'Ubicación predeterminada de Neptuno.mdb
dRuta = ""C:\Archivos de programa\microsoft office\office\ejemplos\Neptuno.mdb""
'Abre Neptuno.mdb
Set bd = DBEngine.Workspaces(0).OpenDatabase(neptuno)
'Establece una variable para enumerar las tablas
CuentaTabla = bd.TableDefs.Count
'Realiza un bucle a través de las tablas
For i = 0 To CuentaTabla - 1
'Presenta el nombre de la tabla
MsgBox db.TableDefs(i).Name
Next
'Cierra la base de datos

-57-
CURSO DE
AUTOMATIZACION DE
EXCEL
db.Close
End Sub

REALIZAR UNA LISTA DE CAMPOS EN UNA BASE DE DATOS


Este ejemplo realiza una lista los nombres de campos de la tabla Clientes. Si no tiene
instalado clientes.dbf, consulte el tema de la Ayuda "Instalar o quitar componentes
individuales de Microsoft Office o Microsoft Excel

Sub Campos_Lista()
Dim bd As Database, reg As Recordset
Dim cuentacampo As Long, i As Long, dRuta As String
'Ubicación predeterminada de los archivos dbf de ejemplo
dRuta = ""C:\Archivos de programa\microsoft office\office""
'Abre la base de datos
Set bd = OpenDatabase(dRuta, 0, 0, ""dBase III"")
'Abre todos los registros de clientes.dbf
Set reg = db.OpenRecordset(""SELECT * FROM clientes"")
'Cuenta el número de campos
cuentacampo = rec.Fields.Count
'Realiza un bucle por cada campo existente
For i = 0 To cuentacampo - 1
'Presenta los nombres de los campos
MsgBox rec.Fields(i).Name
Next
'Cierra la base de datos
bd.Close
End Sub

CONECTAR CON UNA BASE DE DATOS SQL


Este ejemplo devuelve los nombres de una tabla de una base de datos SQL. Deberá tener
acceso a una base de datos SQL y un DSN válido (nombre de fuente de datos). Para
obtener más información acerca de DSN, haga clic en el icono 32bit ODBC en el Panel de
control de Windows.

Sub ODBC_Conexión()
Dim bd As Database, i As Long
'Presenta el cuadro de diálogo de DSN, que permite seleccionar la DSN
'para, a continuación, pedir información adicional si es necesario
Set bd = DBEngine.Workspaces(0).OpenDatabase("""", , , ""ODBC;"")
'Cuenta el número de tablas
CuentaTabla = db.TableDefs.Count
'Realiza un bucle para presentar todos los nombres en la tabla
For i = 0 To CuentaTabla - 1
MsgBox db.TableDefs(i).Name
Next
'Cierra la base de datos
bd.Close
End Sub

LOCALIZAR ERRORES DAO


El ejemplo siguiente demuestra cómo localizar errores DAO. La presentación de una
descripción del error es generalmente de utilidad para el usuario. Conocer el número de
errores permite al programador localizar y controlar errores específicos.

Sub Controlar_DAO_Error()

-58-
CURSO DE
AUTOMATIZACION DE
EXCEL
Dim d As database, r As Recordset
'Si encuentra un error va la etiqueta controladorErrores
On Error GoTo controladorErrores
'Impide presentar mensajes de error integrados
Application.DisplayAlerts = False
'Intenta abrir una base de datos que no existe
Set d = DBEngine.Workspaces(0).OpenDatabase(""c:\xl95\db4.mdb"")
Exit Sub 'Sale de la subrutina si no hay errores
controladorErrores:
MsgBox DBEngine.Errors(0).Description 'Texto del mensaje de error
MsgBox DBEngine.Errors(0).Number 'Número del error
MsgBox DBEngine.Errors(0).Source 'Ubicación del error
MsgBox DBEngine.Errors(0).HelpContext
End Sub

CREAR UNA TABLA


Este ejemplo muestra cómo crear una nueva tabla dentro de una base de datos existente.
En el ejemplo siguiente se utiliza la base de datos de muestra Neptuno instalada con
Microsoft Access 97.

Sub Crear_Tabla()
Dim t As Object, f As Object, d As Database
Dim dRuta As String
'Si encuentra un error va a la etiqueta controladorErrores
On Error GoTo controladorErrores
'Ruta predeterminada de la base de datos de muestra Neptuno.mdb
dRuta = ""C:\Archivos de programa\microsoft office\office\ejemplos\Neptuno.mdb""
'Abre la base de datos Neptuno
Set d = DBEngine.Workspaces(0).OpenDatabase(dRuta)
'Crea una nueva tabla TableDef
Set t = d.CreateTableDef(""TablaNueva"")
'Agrega campos a TablaNueva.
Set f = t.CreateField(""Campo1"", dbDate)
t.Fields.Append f 'Agrega campos al conjunto de campos
Set f = t.CreateField(""Campo2"", dbText)
t.Fields.Append f
Set f = t.CreateField(""Campo3"", dbLong)
t.Fields.Append f
'Guarda la definición TableDef adjuntándola al conjunto de definiciones de TableDef.
d.TableDefs.Append t
'Cierra la base de datos
d.Close
Exit Sub
controladorErrores:
MsgBox DBEngine.Errors(0)
End Sub"

PROGRAMAR CON EVENTOS

-59-
CURSO DE
AUTOMATIZACION DE
EXCEL
Con frecuencia los programadores necesitan que un evento desencadene una macro una
macro para ejecutar una tarea. Microsoft Excel 97 ofrece la posibilidad de realizar esta
acción. Los eventos están siempre asociados con objetos, como puede ser el caso de una
hoja de cálculo o un libro. En este ejemplo sólo se mencionará algunos de los eventos
disponibles y se usará un MsgBox como relleno para demostrar dónde puede ir el código.
Para obtener más información acerca de eventos, haga clic en el Ayudante desde el Editor
de Visual Basic y use el nombre del objeto y la palabra "eventos" como palabras clave (por
ejemplo, eventos de hoja de cálculo).

BeforeDoubleClick

Un tipo de evento muy utilizado es BeforeDoubleClick en una hoja de cálculo. Un ejemplo


sencillo puede ser:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As


Boolean)
MsgBox "Hizo doble clic en la celda " & Target.Address
Cancel = True
End Sub

Este evento se desencadenará cada vez que el usuario haga doble clic en una celda de la
hoja de cálculo. El parámetro Target se incorpora a la macro para que el programador sepa
sobre que celda se hizo doble clic. El argumento Cancel tiene un valor predeterminado de
False pero se puede cambiar a True en el código. Al establecer Cancel como True se
cancelará la acción predeterminada para el evento. En este caso, la acción predeterminada
al hacer doble clic en una celda es cambiar al modo de edición para esa celda. Debido a que
Cancel está establecido como True, esto no ocurrirá. Si desea obtener la acción
predeterminada, quite la línea Cancel=True.

Change

Otro evento de gran utilidad en una hoja de cálculo, es Change. Se desencadena cada vez
que el usuario escribe un valor nuevo en una celda.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)


MsgBox "Esta hoja cambió en la celda " & Target.Address
End Sub

Nota: Este evento no ocurrirá si la hoja acaba de ser recalculada. Existe otro evento
denominado Calculate que funciona con hojas de calculo recalculadas.

BeforeClose

Un evento útil relacionado con libros es BeforeClose. Se puede utilizar este tipo de eventos
para realizar tareas de limpieza antes de guardar o cerrar un archivo.

Sub Workbook_BeforeClose(Cancel As Boolean)


a = MsgBox("¿Desea cerrar el libro?", vbYesNo)
If a = vbNo Then Cancel = True
End Sub

En este ejemplo, se pide al usuario que cierre el archivo independientemente de si lo


guardó previamente o no.

-60-
CURSO DE
AUTOMATIZACION DE
EXCEL
Usar eventos con el objeto Application
Antes de usar eventos con el objeto Application puede crear un nuevo módulo de clase y
declarar un objeto del tipo Application con eventos. Por ejemplo, suponga que se crea un
nuevo módulo de clase denominado EventClassModule con el siguiente código:

Public WithEvents App As Application

Después de declarar los eventos del nuevo objeto, aparecerá la lista desplegable de Object,
con el objeto incluido en el módulo de clase. A continuación puede escribir los
procedimientos para el nuevo objeto. Al seleccionar el nuevo objeto en el cuadro Object, los
eventos válidos para ese objeto se presentarán en el cuadro de lista desplegable Procedure.

Antes de ejecutar los procedimientos debe conectar el objeto declarado en el módulo de


clase con el objeto Application. Puede utilizar el siguiente código con cualquier módulo.

Dim X As New EventClassModule

Sub IniciarAp()
Set X.App = Application
End Sub

Después de ejecutar el procedimiento IniciarAp, el objeto App en el módulo de clase


apuntará al objeto Aplicación de Microsoft Excel y los procedimientos del evento se
ejecutarán cuando el evento ocurra.

AUTOMATIZACION DE OFFICE
La automatización es una opción de COM (Component Object Model), una tecnología que
usan las aplicaciones para exponer los objetos a las herramientas de desarrollo, lenguajes
de macro y otras aplicaciones que admiten automatización. Por ejemplo, una aplicación de
hoja de cálculo puede presentar una hoja de cálculo, un gráfico, una celda o un rango de
celdas, cada uno con un tipo diferente de objeto. Un procesador de texto puede presentar
objetos tales como una aplicación, un documento, un párrafo, una frase, un marcador o
una selección. En los ejemplos siguientes se muestran tareas de automatización entre
Microsoft Excel y otras aplicaciones de Microsoft."
Para obtener más información acerca de la automatización, consulte Automatización de
tareas repetitivas en la Ayuda de VBA.
MICROSOFT ACCESS
Este ejemplo devuelve la ubicación de las bases de datos de muestra de Microsoft Access.

Sub MS_Access()
Dim AccDir As String
Dim acc As Object
'Automatización OLE de Access
Set acc = CreateObject(""access.application"")
'Devuelve la ruta de msaccess.exe
AccDir = acc.SysCmd(Action:=acSysCmdAccessDir)
'Presenta la ruta
MsgBox ""La ubicación de MSAccess.exe es "" & AccDir
'Libera espacio de disponibilidad variable
Set acc = Nothing
End Sub

-61-
CURSO DE
AUTOMATIZACION DE
EXCEL
MICROSOFT WORD
Este ejemplo copia el gráfico desde la hoja Rótulos de gráficos a un documento nuevo de
Microsoft Word.

Sub MS_Word()
Dim wd As Object
'Crea una sesión de Microsoft Word
Set wd = CreateObject(""word.application"")
'Copia el gráfico en la hoja Rótulos de gráficos
Worksheets(""Rótulos de gráficos"").ChartObjects(1).Chart.ChartArea.Copy
'Hace visible el documento
wd.Visible = True
'Activa MS Word
AppActivate wd.Name
With wd
'Crea un documento nuevo en Microsoft Word
.Documents.Add
'Inserta un párrafo
.Selection.TypeParagraph
'Pega el gráfico
.Selection.PasteSpecial link:=True, DisplayAsIcon:=False, Placement:=wdInLine
End With
Set wd = Nothing
End Sub"

MICROSOFT POWERPOINT
Este ejemplo copia el gráfico desde Rótulos de gráficos a una nueva presentación de
Microsoft PowerPoint.

Sub MS_PowerPoint()
Dim ppt As Object, pres As Object
'Crea una sesión de Microsoft PowerPoint
Set ppt = CreateObject(""powerpoint.application"")
'Copia el gráfico en la hoja Rótulos de gráficos
Worksheets(""Rótulos de gráficos"").ChartObjects(1).Copy
'Abre un documento nuevo en Microsoft PowerPoint
Set pres = ppt.Presentations.Add
'Agrega una diapositiva
pres.Slides.Add 1, ppLayoutBlank
'Hace visible PowerPoint
ppt.Visible = True
'Activa PowerPoint
AppActivate ppt.Name
'Pega el gráfico
ppt.ActiveWindow.View.Paste
Set ppt = Nothing
End Sub"

MICROSOFT OUTLOOK
"Este ejemplo crea y agrega información en una tarea nueva de Outlook. Ejecute Outlook y
haga clic en Tareas en la barra de Outlook para ver la nueva tarea.
NOTA: La tarea puede demorar unos minutos en aparecer."

Sub MS_Outlook()
Dim ol As Object, miElem As Object

-62-
CURSO DE
AUTOMATIZACION DE
EXCEL
'Crea una sesión de Microsoft Outlook
Set ol = CreateObject(""outlook.application"")
'Crea una tarea
Set miElem = ol.CreateItem(olTaskItem)
'Agrega información a la nueva tarea
With miElem
.Subject = ""Nueva tarea de VBA""
.Body = ""Esta tarea se creó mediante Automatización de Microsoft Excel""
.NoAging = True
.Close (olSave)
End With
'Quita el objeto de la memoria
Set ol = Nothing
End Sub"

CUADERNO DE MICROSOFT
Este ejemplo crea un archivo nuevo del Cuaderno de Microsoft, agrega secciones, manipula
la sección de Microsoft Excel y luego guarda el archivo.

Sub MS_Binder()
Dim MiCuadernoNuevo As Object, Sección As Object
Dim MyVar As String, MyFile As String
'Crea una sesión del Cuaderno de Microsoft
Set MiCuaderno = CreateObject(""office.binder"")
'Hace visible la sesión del Cuaderno
MiCuaderno.Visible = True
'Agrega una nueva sección de Word
MiCuaderno.Sections.Add Type:=""word.document""
'Agrega un archivo de Excel existente, antes de la primera sección
MiArchivo = Application.Path & ""\ejemplos\solver\muestra.xls""
Set SecciónNUeva = MiCuaderno.Sections.Add(FileName:=MiArchivo, Before:=1)
With SecciónNueva
'Cambia el nombre de la sección
.Name = ""Ejemplos de Solver""
'Obtiene el valor de la celda A2 en la tercera hoja del libro
MiVar = .Object.Worksheets(3).Range(""A2"").Value
End With
'Guarda el cuaderno como micuaderno.obd o lo sobrescribe si ya existe
MiCuaderno.SaveAs Application.Path & ""\micuaderno.obd"", bindOverwriteExisting
'Oculta el cuaderno
MiCuaderno.Visible = False
'Desasocia el objeto y como consecuencia libera recursos
Set MiCuaderno = Nothing
'Coloca el valor de A2 en la tercera hoja de la sección de Excel
MsgBox ""Los datos siguientes pertenecen a la celda A2 de la sección Ejemplos de Solver
"" &
Chr(10) & Chr(10) & MyVar
End Sub"

-63-

También podría gustarte