Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MACROS Básico For MacroAntoni
MACROS Básico For MacroAntoni
MACROS Básico For MacroAntoni
By Antoni
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 1
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Queremos felicitarte por decidirte a efectuar este curso, con el se te abrirán un conjunto de
posibilidades tanto profesionales, como de conocimiento sobre informática.
Una macro, esconde tras de si un autentico lenguaje de programación que te servirá como
base para el estudio de los principales lenguajes de bases de datos e Internet.
Con las macros conseguirás llevar tus conocimientos sobre Excel donde ni siquiera lo imaginas
en este momento.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 2
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
1.-MACROS-Definición
Trabajando en nuestra hoja, nos encontramos a menudo, el tener que realizar tareas tediosas
y repetitivas, una macro es la herramienta que nos va a permitir automatizar dichas tareas.
El termino macro, es un poco ambiguo, porque no en todos los entornos informáticos tiene el
mismo significado, veremos muchas veces que cuando hablamos de macro, programa,
procedimiento, formulario, estamos hablando de lo mismo.
Absolutamente todas las acciones que realizamos en nuestra hoja tienen su traducción en
“lenguaje macro”, desde el simple hecho de seleccionar una celda hasta la creación de una
tabla dinámica.
También podemos interactuar con el resto de aplicaciones de Microsoft Office gracias a los
objetos incluidos dentro de Visual Basic for Applications.
Incluso podemos dialogar con el propio Windows, gracias a unos “pequeños programas”
denominados Windows Application Program Interface, comúnmente conocidos como APIS.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 3
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Dado que estamos en un curso de iniciación, todas las referencias que se hagan a Excel y VBA,
pueden no estar completas en relación a sus opciones y utilidades.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 4
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
VBA, es un conjunto de instrucciones con una estructura específica en función de lo que hace
cada una de ellas.
Los procedimientos pueden contener parámetros y pueden ser ejecutados desde otros
procedimientos.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 5
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 6
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Las variables, pueden ser de muchos tipos, en función de los datos que vaya a contener.
VBA, utilizará el tipo de dato definido en la variable en las instrucciones donde aparezca la
variable.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 7
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
No obstante, es conveniente definir las variables para evitar errores, imaginemos que no
definimos las variables, y usamos una variable con nombre SelecciónDeDatos. Cuando la
utilicemos la primera vez, quedara autodefinida con el tipo de dato que precise la instrucción.
Imaginemos ahora que usamos esa variable en otra parte de la macro, y nos equivocamos al
escribirla, y escribimos SeleccionDeDatos (Sin el acento en la letra o), VBA definirá de forma
automática otra variable ya que es la primera vez que aparece, lo que nos conducirá a un
funcionamiento erróneo de la macro, y que a veces es muy difícil de detectar.
OPTION EXPLICIT
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 8
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 9
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
VBA, no es tan flexible como Excel a la hora de manipular variables, tal como lo hace Excel con
las celdas, por lo tanto, hemos de procurar utilizar variables de acuerdo a como lo requiere la
instrucción a utilizar.
Hay una serie de funciones VBA para la conversión de los tipos de datos de variables.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 10
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Asignarles un valor
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 11
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Ahora, ya sabemos asignar valores a las variables, pero a menudo nos encontraremos que el
valor de una variable está condicionada por el valor de otra variable o expresión, vamos a ver
como se hace esto.
ELSE
END IF
Igual que =
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 12
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 13
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Casi estamos en condiciones de hacer una macro, lástima que no sabemos ni donde escribirla,
ni como mostrar resultados, bueno, que no cunda el pánico, vamos a empezar por la forma de
cómo mostrar los resultados de una macro, explicando como se puede ver el contenido de una
variable.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 14
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 15
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Para no tener que hacer el control de forma manual, VBA nos proporciona la instrucción
FOR/NEXT. El formato de la instrucción es el siguiente:
<Código>
NEXT variable
La ficha del programador aparece en la cinta de opciones de Excel, pero como es opcional,
puede que no aparezca, si es este el caso:
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 17
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 18
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Para abrir el Editor de VBA desde Excel, seleccionar la ficha del Programador, y pulsar sobre la
opción de Visual Basic:
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 19
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
El Editor de VBA, aparece configurado de acuerdo con la visualización que tenía la última vez
que se cerró.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 20
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
No os preocupéis si creeis que vamos demasiado rápido, mas adelante, volveremos sobre
nuestros pasos para explicar en detalle lo que ya hemos visto.
En estos momentos lo que nos interesa es llegar cuanto antes al lugar donde podemos
empezar a escribir nuestras macros. Este es el aspecto del Editor de VBA para un libro vacio.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 21
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Pulsar sobre “Hoja1”, nuevamente menú Ver, y luego escogemos la opción Código.
Y por fin hemos llegado a donde queríamos, por fin ya podemos escribir nuestro código VBA.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 22
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Todo esto, que parece engorroso, y lo es, pero podemos acortarlo así:
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 23
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Ya hemos dicho que VBA esta basado en el lenguaje Visual Basic y ha sido adaptado para cada
uno de los distintas aplicaciones de Microsoft Office.
Una gran parte del código desarrollado para Visual Basic, es compatible con VBA, sin embargo,
nuestro código VBA difícilmente será compatible con Visual Basic.
De la misma manera, las macros desarrolladas con VBA para Excel, no serán compatibles con
el resto de módulos de Microsoft Office.
Ya sabemos entrar en el Editor de VBA, si no es así, abandonar este capítulo y volver a releer el
capítulo anterior, “La ficha del Programador”.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 24
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
El Proyecto VBA contiene todo el código VBA asociado al libro que acabamos de abrir.
Ya hemos comentado que el código VBA está organizado por procedimientos y funciones.
Los procedimientos y funciones, deben estar asociados a un Objeto del Proyecto VBA
Objetos Excel
Formularios
Módulos normales
Módulos de clase
Los Objetos Excel (1 por cada hoja y 1 por libro), se crean de forma automática.
Para crear un Objeto, click derecho sobre la ventana del Proyecto VBA y:
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 25
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 26
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Las hojas, el libro y los formularios, tienen eventos asociados, los módulos no.
Abrir o cerrar un libro, seleccionar un rango en una hoja, descargar un formulario, son
ejemplos de eventos.
Por supuesto, no es necesario asociar código VBA a un evento, o lo que es lo mismo, solo se
ejecutarán los eventos que tengan código VBA asociado.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 27
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Las propiedades de los objetos son como el equipamiento de nuestro vehículo, pero a
diferencia de estas, en los objetos se pueden cambiar, aunque no todas.
PROPIEDADES DE LA HOJA2
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 28
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Al igual que las propiedades, todos los objetos, excepto los módulos, pueden soportar una
serie de acciones denominadas métodos.
Abrir un libro, añadir una hoja, eliminar una columna, son ejemplos de métodos.
En definitiva podemos resumir que, cualquier hecho en el proyecto lleva implícitas 4 preguntas
fundamentales:
COMO: PROPIEDAD
CUANDO: EVENTO
DONDE. OBJETO/VARIABLE
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 29
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Vamos a decir otra vez, que VBA esta basado en el lenguaje Visual Basic y ha sido adaptado
para cada uno de los distintas aplicaciones de Microsoft Office, en nuestro curso, solo
hablaremos de la adaptación a Excel.
Esta adaptación ha sido posible gracias al denominado Modelo de Objetos de VBA para Excel.
El Modelo de Objetos de VBA para Excel, en adelante Modelo de Objetos está formado por
una infinidad de objetos, los cuales tienen una estructura jerárquica.
Esta estructura jerárquica, es similar a la que tienen los ficheros en una unidad de
almacenamiento de nuestro PC.
Para VBA todo aquello que no forma parte de las instrucciones y funciones básicas, son
objetos.
Un objeto VBA, tiene, o puede tener, sus propiedades, métodos y eventos, recordad el QUE, el
COMO, el CUANDO y el DONDE, donde el Objeto es el DONDE.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 30
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Alguna de las propiedades cambiadas a nivel de este objeto serán permanentes, hasta que no
sean cambiadas de nuevo. Por ello, debemos ser muy cuidadosos a la hora de manipular este
objeto, y hemos de restaurar a sus valores iniciales aquellas propiedades que hayamos
cambiado.
A lo largo del curso, iremos viendo las propiedades y métodos de utilización mas frecuente.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 31
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Cuando abrimos Excel, estamos “abriendo” el objeto Application, pero también estamos
“abriendo” el objeto Workbooks con un libro vacío.
Si después, abrimos otro libro, el objeto Workbooks, pasará a tener 2 libros, mientras el objeto
Application permanecerá inalterable
Cuando abrimos un libro, se realiza una entrada en el objeto Workbooks, con un nombre, y
con una posición ordinal, por ejemplo, si abrimos el libro C:\MiCarpeta\MiLibro.xlsx, en el
objeto Workbooks, tendremos un nombre: MiLibro.xlsx y un número: 1
Workbooks(“MiLibro.xlsx”)
O:
Workbooks(1)
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 32
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
El objeto Workbooks contiene los libros abiertos y cada uno de estos libros, contiene un
objeto Worksheets con sus respectivas hojas.
Worksheets(“MiHoja”)
O:
Worksheets (1)
Si ahora añadiéramos otra hoja, pasaría a ser el número 2, la siguiente la 3,4,5,……n.
A la hoja activa, a parte de las formas descritas, nos podemos referir a ella como:
ActiveSheet
Podemos convertir una hoja en hoja activa de esta forma:
Worksheets(“MiHoja”).Activate
Todos los objetos que son colecciones, tienen una propiedad que nos indica en todo momento
el número de objetos que contiene la colección, se trata de la propiedad Count, y para saber
el número de hojas, nos referiremos a ella de esta forma:
Worksheets.Count
Una hoja puede asignarse a una variable tipo Worksheet .
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 33
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
El objeto Range puede contener desde 1 hasta la totalidad de las celdas de una hoja .
Si no indicamos a que hoja pertenece un objeto Range, se asumirá que el rango, pertenece a la
hoja activa.
Vamos a ver las diferentes formas de referirnos a una rango, supondremos que todos los
ejemplos se refieren a la hoja activa.
Range(“A1”)
Para referirnos a un rango de mas de una celda:
Range(“A1:B2”)
Para referirnos a dos celdas no contiguas:
Range(“A1, B2”)
Para referirnos a mas de un rango no contiguo de varias celdas:
Range(“A1:B2, D4:E6”)
Para referirnos a una fila
Range(“3:3”)
Para referirnos a una columna
Rango(“A:A”)
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 34
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Range(“3:5”)
Para referirnos a mas de una columna
Range(“A:B”)
Para referirnos a varios rangos de celdas, filas y columnas
Resumiendo, los rangos continuos de celdas en un objeto Range van separados por dos puntos
[:]
Si hay mas de un rango en un objeto Range, van separados por comas [,]
De la misma forma que hay una hoja activa, existe una celda activa
La celda activa es la que aparece seleccionada por el cursor al hacer click sobre una celda.
Activecell
Podemos activar una celda de esta forma:
Range(“A1”).Activate
Podemos referirnos a un objeto Range de una sola celda:
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 35
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
La grabadora de macros, una vez arrancada, va registrando todo lo que hacemos en nuestra
hoja, pero en lenguaje VBA.
Las macros que genera la grabadora de macros genera un código VBA idéntico a si lo
hubiéramos escrito de forma manual.
Para arrancar la grabadora de macros, pulsar el botón grabar macro en la ficha del
programador.
Pulsar Aceptar, y seguir trabajando con la hoja normalmente, hasta dar por terminada la
macro.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 36
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Expandir Módulos, doble click en Módulo1, y debería aparecer una imagen parecida a
esta:
Ya hemos dicho anteriormente que Excel y VBA son aplicaciones distintas, y que por lo tanto
nuestras macros, no pueden escribirse en una hoja, deben escribirse en el lugar adecuado para
ello dentro de VBA y ese lugar es el Editor de VBA.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 38
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Una macro es un conjunto de instrucciones escritas en lenguaje VBA (Visual Basic for
Applications).
Las macros son un concepto de Excel, para VBA todo son procedimientos.
El código VBA se encuentra dentro de un objeto VBA. Los tipos de objetos VBA son:
Hoja Excel
Libro Excel
Formulario
Módulo
Cualquier instrucción VBA se halla obligatoriamente dentro de un procedimiento, que
obligatoriamente debe estar dentro de un objeto
El acceso al proyecto VBA, y por tanto a sus objetos y procedimientos se realiza a través de
Editor de VBA.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 39
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 40
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Paralelamente, hemos aprendido también que Excel, de igual modo que el proyecto VBA, está
estructurado de forma jerárquica por objetos.
Excel, soporta una infinidad de objetos pero nuestro modelo básico para empezar va ser:
Workbooks (Libros)
Worksheets (Hojas)
Range (Celdas)
En principio, para referirnos a una celda, al igual que a un fichero, deberíamos proporcionarle
todo el camino, así para referirnos a la celda A1 de la Hoja1 del libro Facturas.xlsx,
deberíamos escribir:
Application.Workbooks(“Facturas.xlsx”).Worksheets(“Hoja1”).Range(“A
1”)
Esto sería demencial, afortunadamente Excel nos proporciona una forma de evitar escribir la
totalidad de la estructura, para ello tenemos:
Por ejemplo, si abrimos Excel, y escribimos en el Editor de Vba, en la parte del código:
Workbooks(“Libro1.xlsx”).Worksheets(“Hoja1”).Range(“A1”)
Application, es asumido de forma automática salvo para los métodos y propiedades del propio
objeto, por lo que a partir de este punto se omitirá salvo que sea necesario.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 41
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Bien, empecemos.
Abrir Excel
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 42
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Vamos a insertar un Módulo, recordad que las macros, son procedimientos públicos que se
escriben dentro de un Módulo.
Insertar\Módulo:
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 43
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Lo primero que vamos a hacer es a obligarnos a definir todas las variables que vayamos a
utilizar en nuestra macro, si recordais, eso lo conseguimos con una opción a nivel de objeto.
Option Explicit
Y se detendrá la ejecución.
Bien vamos a continuar. Ahora hemos de escoger el nombre de nuestra macro, en principio,
cualquier nombre nos vale.
Por ejemplo. GGG752 es un nombre válido. No obstante no nos dice nada acerca de lo que
hace, y aunque tampoco es excesivamente importante, si nos va a ayudar dentro de un tiempo
cuando queramos localizarla.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 44
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
MiPrimeraMacroCursoBasico
Otro punto importante es poner una pequeña explicación de su cometido.
Vamos a realizar nuestra macro dentro del entorno de la Hoja1 del libro que tenemos abierto.
Por tanto para olvidarnos de tener que ir calificando todos nuestros rangos cada vez que los
utilicemos, activaremos la Hoja1 al principio de la macro.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 45
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
La primera opción:
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 46
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 47
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 48
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Pues la respuesta, francamente, es un si rotundo. Pero ahora, imaginemos que en vez de tener
que llenar el rango A1:A5, hemos de rellenar el rango A1:A200, simplemente cambiando el
bucle lo tendríamos solucionado:
Si habeis estado atentos, habréis observado que hemos eliminado la propiedad value del
objeto Range:
El motivo no es otro, que hacer notar que todos los objetos tienen una propiedad por defecto.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 49
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
Ya hemos comentado que el nombre de una variable es una combinación de letras, números y algunos
caracteres especiales con la obligación de empezar por una letra.
Es aconsejable que el nombre de una variable tenga alguna relación con su contenido.
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 50
CURSO: MACROS-BASICO
By Antoni
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
10/01/2011 9:36:20 488360029.doc 51