Documentos de Académico
Documentos de Profesional
Documentos de Cultura
QUIQUE ARRANZ
Director de ExcelyVBA.com
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
1
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
ÍNDICE
Introducción __________________________________________________________________ 3
Objeto Worksheet_____________________________________________________________ 67
Instrucción Set________________________________________________________________ 73
Conclusión ___________________________________________________________________ 87
2
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
INTRODUCCIÓN
¡Enhorabuena! La compra del método M1M “Macros en 1 mes” te va a abrir "nuevos
horizontes" en tu día a día con Excel. Pero antes de nada tienes que saber que trabajar
con Visual Basic Applications (VBA) puede parecer muy difícil al principio, pero en muy
poco tiempo se convertirá en algo mágico. Durante este periodo de aprendizaje vas a
pasar por tres etapas que son consecutivas y que de ti depende que se conviertan
rápidamente en la última:
Rápido
Emoción Frustración
aprendizaje
Una pequeña y breve definición de estas etapas te ayudará durante las próximas semanas:
3
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Para aquellos que tienen formación en programación será mucho más rápido llegar a la
etapa de "Rápido aprendizaje". Para los que, como yo, no tienen esa formación, os costará
un poco más pero vuestro esfuerzo merecerá la pena.
Pero recuerda que nada se obtiene sin sacrificio. Para llegar a aprender a usar VBA con un
buen nivel vas a tener que dedicar un montón de ratos y luchar y luchar por encontrar la
solución a los problemas que se te plantean. La única manera de aprender VBA es
mediante la práctica así que ya sabes, remángate y a practicar.
Pero no quiero hacerte esperar más. Creo que con esta breve introducción estás más que
preparado para las semanas o meses que vienen. Mucha suerte y mucho ánimo en tu
aprendizaje.
4
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
El editor de VBA
El editor de VBA, también llamado VBE (Visual Basic Editor), es la pantalla donde,
fundamentalmente, vamos a trabajar en los próximos días. Esta pantalla es donde
podremos organizar nuestro código y donde nos dedicaremos a programar, probar,
ejecutar y corregir los posibles errores.
5
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Para añadir un nuevo módulo puedes hacerlo a través de la lista de Opciones de la barra
superior seleccionando la opción "Insertar" y después "Módulo". De esta manera, se
creará un nuevo módulo en el libro que tengamos seleccionado.
El módulo que hemos añadido aparecerá en la ventana de la izquierda tal y cómo vemos
en la siguiente imagen con el nombre "Módulo 1".
6
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Mi primera macro
En el lenguaje de programación llamamos macro a un conjunto de líneas de código que
nos permiten realizar ciertas tareas.
Sub Primera_Macro()
Código de la macro
End Sub
Donde, como podemos ver, hay varios elementos. Los diferentes elementos que vemos
son:
7
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
• Sub: Todas las macros empiezan por Sub. Bueno, no es exactamente así pero ya
explicaremos cómo empiezan y por qué empiezan diferente.
• Nombre: Después de Sub escribimos el nombre de nuestra macro. Podemos
escribir cualquier nombre, pero no podremos usar espacios entre palabras ni
caracteres especiales (/.,?...) y en general todo lo que se salga de letras, números y
una barra baja ( _ ).
• Paréntesis: Después del nombre insertaremos unos paréntesis (abierto y cerrado).
Esto tienen su significado, no pienses que es una tontería. Pero lo veremos más
adelante.
• Código: Después escribimos el código de la macro.
• End Sub: Finalmente debemos escribir End Sub para que VBA entienda que hemos
terminado nuestra macro.
Por ejemplo, si olvido poner la palabra "Sub" después de la palabra "End" al final de la
macro aparecerá un mensaje como el siguiente cuando intento ejecutar una macro.
8
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
El programa ha detectado que la macro no está completamente escrita, en este caso falta
escribir la palabra Sub al final de la macro. Como lo interpreta como un error, nos da un
mensaje y nos señala donde está el error para que podamos corregirlo.
Sub Saludo()
Msgbox "Hola amigo"
End Sub
Para ejecutarla debes hacer clic sobre el botón de "Play" que hay en la ventana superior
de VBE.
También puedes ejecutar una macro más rápidamente colocando el cursor dentro de la
macro y después pulsando la tecla F5 de tu teclado. Te recomiendo que lo hagas con las
dos la primera vez, pero después acostúmbrate a usar el atajo del teclado F5.
El resultado de ejecutar esta macro es muy sencillo. Aparecerá una ventana en Excel como
esta:
9
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Pero antes de nada quiero dedicarte un aplauso largo y sonado. Has llegado hasta aquí,
has leído unas pocas páginas. Es un poco rollo el principio, pero ten fe en mí y hazme caso.
Te va a encantar, pero todavía estamos en la fase de "Emoción" como te comentaba en el
capítulo de Introducción. Nos queda mucho que pasar y espero que lo podamos hacer
juntos.
Añadir comentarios
Es fundamental cuando estás programando que añadas comentarios a tu código. Pero,
¿por qué es fundamental? Pues bien, te lo voy a explicar muy sencillamente. Lo que hoy
hagas y te parezca muy intuitivo, quizás dentro de un mes te va a sonar a chino. Sí, sí, tal
cual… yo he reutilizado códigos que había escrito hace ya bastante tiempo y no había
comentado y he tardado casi más en entender lo que había escrito que en haberlo escrito
de nuevo.
Pero sé que no te he convencido y que no vas a añadir comentarios porque todos somos
así… no nos fiamos de lo que nos dicen hasta que uno mismo experimenta lo difícil que es
retomar el código o entender un código de 1.000 líneas sin ninguna explicación. Y si,
aunque pienses que tú no vas a escribir mil líneas de código ya verás cómo lo acabas
haciendo.
10
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Aun así, yo te lo cuento, que nunca está de más, y como es muy sencillo estoy seguro de
que te vas a acordar. De todas formas, en los diferentes ejercicios de este libro vas a ver
como el código está plagado de comentarios. Y lo hago para que aprendas que es muy
importante y porque a mí mismo me viene muy bien.
Los comentarios se pueden añadir en una línea de manera solitaria o después de una línea
de código. Para insertar un comentario simplemente tienes que añadir un apóstrofe
simple antes del comentario. Esto es un apóstrofe simple: (‘).
Sub Comentario_solo()
MsgBox "Hola amigo"
'Comentario
End Sub
En el ejemplo anterior hemos añadido el comentario en una línea él solo y en este segundo
ejemplo vemos el comentario justo detrás de una línea.
Sub Comentario_en_línea()
MsgBox "Hola amigo" 'Comentario
End Sub
Pero ojo, si escribimos el comentario justo delante de la línea, VBA interpreta que toda la
línea es un comentario. Al fin y al cabo, lo que delimita donde comienza el comentario es
la comilla simple (‘) y si esta está al principio de la frase pues toda la frase se convierte en
un comentario… pero te dejo una macro para que lo compruebes tú mismo.
Sub Comentario_en_línea()
'MsgBox "Hola amigo" Comentario
End Sub
Además, los comentarios son muy útiles para separar el código con un poco de
imaginación. Puedes utilizar este tipo de comentario para introducir una macro:
11
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Sub Macro1()
End Sub
'***********************************
'
' Macro escrita por Quique
'
'***********************************
Sub Macro2()
End Sub
Como puedes ver, los comentarios usados así son muy útiles para introducir un texto entre
dos macros que te permita diferenciar visualmente de manera muy rápida y además,
podrás añadir comentarios útiles acerca del uso que se le a dar o algo más complejo como
para qué se usa una variable o una función.
12
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Vamos a empezar el "show". Atenúa las luces, baja un poco la música, siéntate bien que
empezamos.
Referencias a celdas
Como ya sabrás a estas alturas de tu trabajo con Excel una celda es la mínima expresión
organizativa en Excel. Una celda es en lo que todo se resume. Una celda es donde
insertamos una función, escribimos un texto o número o damos formato. En inglés una
celda es cell, lo que coincide con célula, como la parte más pequeña de la que se compone
un organismo vivo.
Por lo tanto, en este caso vamos a empezar por lo más pequeño, por las celdas.
Para hablar con las celdas en Excel usaremos la palabra mágica "Cells". Esta palabra es un
miembro del objeto "Range", pero no me quiero entretener en estas cosas porque esto
no es una clase de universidad de la Escuela de Informática sino un curso rápido y ameno
para aprender a programar VBA con Excel.
Volviendo al tema, esta palabrita, "Cells" tiene dos argumentos muy sencillos. La fila y la
columna. Es decir, es:
Cells(Fila,Columna)
Donde:
13
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Cells(1, 1)
Cells(1, 1) = 8
No hace falta que separes el igual entre espacios, VBE lo hará automáticamente por ti.
Cells(1, 1) = "Hola"
Pero ten en cuenta que para escribir cualquier texto, con o sin espacios, debemos
comenzar por comillas dobles y terminar de la misma manera. Estas comillas, en un
teclado en castellano, se encuentran en la tecla 2, justo encima de la tecla W.
Pero hay más maneras de referenciar a celdas. Por ejemplo, podemos usar la letra de una
columna. En efecto, si quisiéramos referirnos a la celda B2 podríamos escribir:
Cells(2, "B")
Referencias a rangos
Si antes hablábamos de las celdas ahora hablaremos de la unidad organizativa superior:
los rangos.
14
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Range("A1")
Range("A1") = 8
También podremos traspasar el valor de una cadena de texto, poniendo dicho texto entre
comillas dobles, como puedes ver en el siguiente ejemplo:
Para los rangos que son de más de una celda deberemos señalar la esquina superior
izquierda y la esquina inferior derecha dentro del objeto Range.
Range("B2:C11") = 3
En la sentencia (frase de código) anterior hemos escrito las dos celdas de referencia del
rango de celdas separadas por dos puntos (:) y entre paréntesis. De esta manera Excel
interpreta que nos estamos dirigiendo a todo el rango que ocupan las celdas que están en
el rectángulo que va desde la celda B2 hasta la celda C11.
15
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Todas estas celdas dentro del recuadro pueden rellenarse con el mismo valor con una
sencilla macro teniendo en cuenta que, si damos un valor a un rango, este valor lo tomarán
cada una de las celdas de dicho rango.
Sub Referencias_range()
Range("B2:C11") = "Hola"
End Sub
Pero esta no es la única forma de referirnos a los rangos. También lo podremos hacer
mediante la propiedad Cells como comentábamos previamente. La propiedad Cells del
16
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
objeto Range nos permite dirigirnos a Excel con el mismo objetivo, pero de una manera
mucho más flexible.
Como puedes ver en el ejemplo anterior nos hemos referido a cada una de las celdas que
delimitan el rectángulo del rango mediante celdas y a cada una de las celdas les hemos
dado un valor de fila y columna.
Al principio esto puede ser un poco lioso, pero date tiempo, te acostumbrarás, es
simplemente una manera más de hablar.
¿Pero, para qué sirve esta manera tan complicada de referencia a las celdas? Básicamente
esto te permite mucha más flexibilidad a la hora de referenciar celdas puesto que puedes
sustituir los números de las celdas por variables que vayan cambiando en función de algo
que hayas determinado.
17
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
LAS VARIABLES
Poco a poco hemos ido avanzando en nuestro aprendizaje con Excel y ya sabemos cómo
hablar a las celdas de Excel. Es un gran paso para nosotros. Hemos aprendido a
comunicarnos con las celdas y esto es fundamental en el mundo de la programación con
Excel.
En este capítulo te voy a hablar de las variables en VBA. No hace falta que te explique
todos los tipos, pero creo que es conveniente que entiendas qué son las variables, así que
antes de meternos en materia quiero darte una breve explicación para que no te sientas
perdido.
Tipos de variables
Las variables pueden ser de varios tipos y se clasifican según la información que
contengan. Es importante que aprendas la diferencia, pues no todas las variables valen
para todos los tipos de información y no todas las variables ocupan lo mismo.
¿Y a mí qué más me da lo que ocupe una variable? Pues te va a importar si quieres que
tus macros vayan rápido y no te desesperes. Créeme, te va a acabar importando. De todas
formas, si no te importa es como si estuvieras en un curso de pintura y no hablamos de
los diferentes tipos de pinceles. Aunque vayas a pintar con brocha gorda te vendrá bien
conocer los diferentes tipos de pinceles y brochas que existen.
18
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Para una variable numérica de valores de -32.768 a 32.767. Para ello usaremos el tipo de
variable Integer.
El tipo Long de una variable es para valores enteros positivos o negativos, pero con la
diferencia de que puede almacenar valores mucho mayores, en concreto entre -
2.147.483.648 y 2.147.483.648.
Para almacenar valores numéricos decimales usaremos la variable tipo Single, aunque si
requerimos una mayor precisión usaremos variables tipo Double. Normalmente yo uso
directamente la variable tipo Double necesite o no precisión.
Nos permite almacenar valores de variables del tipo verdadero o falso. Para ello usaremos
el tipo Boolean.
Este tipo nos permite almacenar cualquier tipo de información, ya sea numérica, de texto
o del tipo verdadero o falso o cualquier otro que se nos ocurra. En definitiva, cuando no
19
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
sabemos qué tipo de variable vamos a tener usaremos el tipo Variant, donde entran todos
los tipos posibles. El inconveniente es que ocupa una gran cantidad de memoria.
Declaración de variables
Antes de usar las variables tenemos que aprender a declararlas. Pero, ¿qué es declarar
variables?
Pues bien, es decirle a Excel que una palabra en concreto es un identificador de tipo de
variable y no otro. Por ejemplo, si queremos declarar la variable "Nombre_Apellido" y en
ella guardaremos el nombre de una persona la declararemos como tipo String de la
siguiente manera:
Es muy importante saber que no podemos declarar cualquier palabra como una variable.
Hay palabras reservadas que no se pueden usar: If, Else, Case, Select,… y así un buen
montón de palabras. Estas palabras son los propios identificadores del lenguaje de VBA.
Pero no te preocupes, no necesitas sabértelos, simplemente saltará un aviso cuando
intentes usarlos. Además, tampoco podremos usar caracteres especiales, sólo cadenas de
texto con números.
20
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
La variable Long se usa para enteros más largos que la anterior. Su declaración es:
Pero si queremos almacenar valores numéricos decimales con más precisión (es decir, con
más decimales) usaremos la variable tipo Double. Su declaración es:
21
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Nos permite almacenar valores de variables del tipo verdadero o falso mediante la
variable Boolean. Esta variable tiene la siguiente sintaxis para su declaración:
Si queremos declarar tres variables tipo entero al comienzo del módulo las escribiremos
en la parte superior:
22
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
En la imagen anterior puedes ver cómo hemos declarado tres variables en la parte
superior. Estas tres variables, al estar fuera de la Macro1, se consideran variables
globales y pueden usarse en cualquier lado.
Estas tres variables, también podríamos haberlas declarado en una misma línea
separadas por comas como puedes ver en la siguiente línea de código:
Normalmente yo prefiero usar esta forma. Parece más ordenada y ocupa menos espacio.
Aunque también podríamos haber declarado las variables dentro de la Macro1 y entonces
sólo las tendríamos declaradas para ser usadas dentro de esta macro.
23
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Option Explicit
Sub Macro1()
Num1 = Num2 + Num3
End Sub
Pero, ¿qué pasa si no lo pongo? Pues la buena noticia es que no pasa nada, pero puede
que no estés declarando todas las variables.
¿Y cuál es el problema? Pues el problema es que Excel interpreta que todas las variables
son tipo Variant a no ser que en la declaración de variables indiquemos otra cosa y esto
ocupa una enorme cantidad de memoria lo que ralentiza el proceso enormemente.
Si quieres, copia estas dos macros y ejecútalas y lo verás con tus propios ojos.
Sub Macro_Sin_variables()
Tiempo_inicial = Timer
For i = 1 To 1000
For j = 1 To 100
24
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Cells(j, 1) = j
Next
Next
End Sub
Sub Macro_con_variables()
Tiempo_inicial = Timer
For i = 1 To 1000
For j = 1 To 100
Cells(j, 1) = j
Next
Next
End Sub
25
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Pero tampoco te "comas" mucho la cabeza. A no ser que vayas a hacer programas muy
pesados, con declarar las variables es más que suficiente. La diferencia entre declarar
como Integer o Double es prácticamente despreciable, aunque nunca está demás hacer
las cosas bien.
Ejemplos
Las variables en programación "dan mucho juego". Te permiten guardar información para
usarla posteriormente, hacer operaciones matemáticas y guardar su resultado, capturar
información…
Pero bueno, lo mejor para aprender es ver algunos ejemplos así que pon atención y
prepárate para ver ideas.
Ejemplo 1
En esta primera macro vamos a ver cómo capturar el valor de una celda en Excel, guardarlo
en una variable y después traspasar el valor de dicha variable a otra celda. Para ello, en la
celda A1 de la hoja en la que nos encontremos escribiremos un número entero cualquiera,
por ejemplo 10. Después, volvemos al editor de VBA y escribimos la siguiente macro y la
ejecutamos.
Sub Variables_ejemplo1()
NUM = Range("A1")
Range("B2") = NUM
End Sub
Como puedes ver, ahora en la celda B2 pone el número que hayas escrito. Esto lo hemos
conseguido gracias a la variable NUM.
26
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Ejemplo 2
En esta macro vamos a dar un valor inicial a nuestra variable NUM y después la vamos a
traspasar al rango A2:A4. Es decir, quiero que en las 3 celdas del rango se escriba el mismo
número.
Sub Variables_ejemplo2()
NUM = 25
Range("A2:A4") = NUM
End Sub
Ejemplo 3
En este ejemplo vamos a utilizar tres variables. Las dos primeras serán los valores que
obtengamos de las celdas A1 y A2 (en mi caso serán 10 y 25) y las vamos a sumar dentro
de una variable NUM_suma. Después, las traspasaremos a la celda C3.
Sub Variables_ejemplo3()
NUM_1 = Range("A1")
NUM_2 = Range("A2")
27
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Range("C3") = NUM_suma
End Sub
Ejemplo 4
Para poder realizar este ejemplo necesito un poco de tu colaboración. En la celda C2
escribe tu nombre y en la celda C3 escribe tu apellido. El objetivo de esta macro será
capturar ambos valores de texto y devolverlos en un mensaje en pantalla a través de un
MsgBox.
Sub Variables_ejemplo4()
Nombre = Range("C2")
Apellido = Range("C3")
MsgBox Nom_ap
End Sub
Ejemplo 5
Construimos un rango de celdas a través de la esquina superior izquierda y la esquina
inferior derecha tomando los valores de diferentes celdas. Después, a dicho rango le
damos un valor numérico obtenido de otra celda.
Sub Variables_ejemplo5()
Dim Fil1, Fil2, Col1, Col2 as Integer
Dim Valor_celda as Variant
Fil1 = Range("A1")
28
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Col1 = Range("B1")
Fil2 = Range("A2")
Col2 = Range("B2")
Valor_celda = Range("C1")
End Sub
29
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
• Condicional If
• Los bucles
En casi todas las macros o funciones que creemos con VBA usaremos estas dos
funcionalidades que harán el 90% del trabajo que queremos que nuestra macro haga.
Condicional If
Los condicionales son un tipo de instrucción muy utilizada en la programación que nos
permiten hacer una comprobación de una condición y después nos arrojarán un resultado
dependiendo de dicha condición.
Pero esto se entiende mucho mejor con una imagen, así que vamos a por ello:
Como puede verse en la imagen anterior esta instrucción condicional es muy parecida a
la que tenemos en Excel, pero con algunas diferencias y con algunas complicaciones más.
En la imagen anterior se muestra como se ejecuta la Instrucción 1 (es decir, unas líneas de
código o una sola) si se cumple que la Condición es verdadera y si es falsa se ejecutará la
Instrucción 2.
30
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Introducción al condicional If
If Condicion1 Then
'aquí pongo las instrucciones que quiero
End If
Esta instrucción siempre empieza con If y después escribimos la condición que queramos
verificar. Este caso que acabamos de ver es el más sencillo de todos los que podemos
tener, aunque podemos simplificar aún más su sintaxis si escribimos todo en la misma fila
como podemos ver en el siguiente ejemplo:
Sub Instruccion_SI_Ejemplo()
End Sub
Complicando el condicional If
Pero no sólo podemos hacer algo tan rudimentario como hacer una comprobación y
ejecutar unas líneas si se cumple. También podremos poner una instrucción o conjunto
de instrucciones cuando no se cumpla la condición.
1. Evaluar la condición
31
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
La sintaxis en este caso añade una pequeñísima palabra, Else. Esta pequeña nos permite
identificar que, si la condición no se cumple, entonces se ejecuten las sentencias B. Su
sintaxis es:
If condicion Then
Sentencias A
Else
Sentencias B
End If
Pero como casi todo en esta vida se entiende mejor con un ejemplo. Vamos a poner uno
que sea infalible y lo puedas entender a la perfección. En el siguiente ejemplo lo que vas
a ver es una pequeña macro que tiene la capacidad de enviar un mensaje al usuario si se
cumple la condición y un mensaje diferente si no se cumple.
Sub Instruccion_SI_Ejemplo2()
If 1 > 2 Then
MsgBox "Mensaje A"
Else
MsgBox "Mensaje B"
End If
End Sub
Como puedes ver este caso es mucho más útil que el anterior, pero no siempre necesario
pues no siempre necesitamos que nuestra macro haga algo si no se cumple la condición
inicial.
32
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Otra forma de indicar el mismo código es hacerlo en una sóla línea. La desventaja es que
su legibilidad empeora, pero, dependiendo del caso, puede venirnos bien ponerlo así:
Esta sintaxis de una única línea que acabamos de ver puede ser muy útil cuando las
instrucciones que tengamos que ejecutar son muy cortas como las que vemos en el bloque
anterior. En caso de que fueran varias instrucciones o fueran instrucciones largas
deberíamos hacerlo en diferentes líneas para aumentar la legibilidad de nuestra macro.
Hum… vaya lío ¿no? Mira, seguro que lo entiendes mejor con este diagrama.
Como puedes ver en el diagrama anterior lo que está sucediendo es que si la Condición 1
es falsa entonces pasamos a la condición 2. Que si es falsa entonces no pasará nada, pero
si es verdadera se ejecutará la Instrucción 2.
33
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Para poder hacer esto usaremos la sentencia ElseIf + condición 2 + Then. La sintaxis
entonces será:
If condición1 Then
'sentencias A
ElseIf condicion2 Then
'sentencias B
End If
Además, a esta sintaxis le podemos añadir un nuevo Else después de la segunda condición
para que ejecute una sentencia en caso de que tanto la condición 1 como la condición 2
sean falsas. Para ello la sintaxis sería:
If condición1 Then
'sentencias A
ElseIf condicion2 Then
'sentencias B
Else
'sentencias C
End If
Ejemplos
Ejemplo 1
En este ejemplo vamos a explicar cómo usar el condicional If a partir del valor de una
celda.
Sub Ejemplo1()
34
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
End If
End Sub
Ejemplo 2
En este ejemplo vamos a explicar cómo usar el condicional If a partir del valor de una celda
con dos condiciones y con opción de Verdadero y Falso.
Sub Ejemplo2()
MiValor = Range("A1")
End If
End If
End Sub
Como puedes ver en este ejemplo hemos anidado dos funciones tipo If. En la función
primera evaluamos si la variable MiValor tiene un valor mayor que 10. En el If que se
encuentra dentro evaluamos si es menor que 20 y si no lo es, después, evaluamos si es
menor que 30.
Ejemplo 3
Este ejemplo nos sirve para entender como anidar dos condicionales If mediante el
operador And.
35
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Sub Ejemplo3()
End Sub
Como puedes ver, es mucho más sencillo de entender y leer cuando tienes dos
condiciones que quieres anidar. No es necesario usar dos condicionales If.
Definición de bucle
Para el que nunca se ha acercado a la programación los bucles pueden dar cierto miedo,
pero son muy sencillos de entender pasados dos minutos. Los bucles son tan útiles que
cualquier adjetivo superlativo se quedaría corto hablando de ellos.
Vamos a hacer una breve introducción a cada uno de ellos, pero antes definiremos qué es
un bucle y daremos algunos ejemplos de cómo se usan y para qué.
Definición: un bucle en programación es una repetición de una parte del código hasta que
la condición del bucle deje de cumplirse.
Pongamos un ejemplo para que se entienda mejor. Imagina que tienes un libro con 10
hojas de Excel. Si quieres que tu macro recorra cada una de las hojas y que cambie el zoom
de cada hoja al 100% necesitarás un bucle que vaya recorriendo cada una de las hojas y,
en cada paso del bucle, ejecute la sentencia de modificar el zoom.
Hum… ¿Ahora ya es más interesante verdad? Pues estoy seguro de que ya te "pica el
gusanillo", pero te pondré algunos ejemplos más de para qué te pueden servir los bucles
para que no te saltes este capítulo que es importantísimo.
36
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
• Recorrer todas las hojas de un libro y poner la celda activa la celda A1.
• Recorrer todas las hojas de un libro y quitar la cuadrícula (a mí me parece muy fea).
• Recorrer ciertas filas de una hoja y aplicar el color negrita (por ejemplo, cada tres
filas).
• Recorrer una tabla de datos desde el final hasta el principio y eliminar las filas que
cumplan una o varias condiciones.
• Recorrer una tabla de datos y copiar ciertos elementos de la tabla a otra hoja.
• Copiar los datos de una tabla a otra hoja hasta que se cumpla una cierta condición.
• Colorear el fondo de una serie de celdas hasta que se deje de cumplir una
condición.
Y podríamos seguir con muchos, muchísimos de ellos… pero lo bueno de los bucles es que
son muy flexibles y podemos usarlos en casi cualquier ocasión.
¿Qué es lo que hace este tipo de bucle? Pues es muy sencillo de entender, como te decía.
Este bucle nos permitirá repetir una acción (o conjunto de acciones) un número
determinado de veces.
De lo más sencillo…
37
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Donde:
… a lo más complejo
Pero como te decía al principio, la sintaxis que acabamos de ver es la más básica para este
bucle. Si queremos que el contador avance de COMIENZO a FINAL, pero dando saltos (es
decir, no de uno en uno), por ejemplo, de dos en dos, usaremos la palabra Step seguida
del número que queremos utilizar.
Donde Num_salto es el valor que queremos utilizar para ir saltando desde el COMIENZO
hasta el FINAL.
For i = 1 To 30 Step 3
38
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
La variable i que vamos a usar como contador irá tomando los valores: 1, 4, 7, 10… y así
sucesivamente, es decir, es una serie aritmética donde siempre sumamos 3 al valor
anterior.
En ocasiones puede que nos interese, por el motivo que sea, terminar un bucle antes de
que se recorra entero. Esta práctica es muy útil cuando, dadas unas determinadas
circunstancias, queremos que bucle termine y siga con la macro. En este caso, lo que
haremos será colocar dentro del bucle la instrucción:
Exit For
Esta instrucción no es obligatoria y puede que no la necesites casi nunca, pero te vendrá
bien conocerla para el futuro.
Ejemplos
Como mejor se entienden las cosas es mediante ejemplos, así que vamos a poner varios
para que lo puedas entender mejor.
Ejemplo 1
En este ejemplo tenemos el bucle For Next en VBA más sencillo. El bucle cuenta de 1 a 10
y va poniendo en una columna el valor de diez veces el contador.
For CONTADOR = 1 To 10
fila = CONTADOR
Cells(fila, 1) = CONTADOR * 10
Next
39
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Es decir, la acción que repite es de guardar el número del contador en la variable "fila" y
después va escribiendo en cada celda que le corresponde el valor del CONTADOR
multiplicado por 10.
Ejemplo 2
En este ejemplo añadimos la propiedad Step que incrementará el contador de 2 en 2. Es
decir, inicialmente el contador valdrá 1, luego 3, luego 5 y así sucesivamente hasta que
llegue a 9 porque el siguiente valor será el 11 que está fuera del bucle (estamos indicando
que el valor FINAL es el 10).
Ejemplo 3
En este ejemplo, el bucle For Next va contando hacia atrás gracias al Step -1 y al contador
que empieza en vez de en 1 en 10 y acaba en 1. Es decir, es un bucle inverso.
¿Y para qué me sirve esto a mí? Por ejemplo, este ejemplo es muy útil cuando recorremos
una hoja y vamos eliminando ciertas filas. De esta manera, podemos indicar con el
contador la fila en la que situarnos e ir eliminando las filas desde abajo hacia arriba sin
que vayan cambiando de orden las filas que se encuentran por encima de la fila
seleccionada.
40
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Ejemplo 4
En este ejemplo utilizamos la expresión Exit For cuando el contador llega hasta el número
50 y lanzamos un mensaje en pantalla en este momento.
Como puedes ver en la macro anterior, lo que hemos hecho ha sido utilizar el condicional
If que veíamos previamente para poder localizar el valor de Contador = 50, es decir, esta
es nuestra condición.
Bucle Do While
Este tipo de bucle, como todos los bucles, se parece al anterior pero la diferencia es que
se ejecuta hasta que se cumpla una condición… o deje de cumplirse que es lo mismo.
Cómo se usa
La sintaxis de este bucle tiene dos variantes que sirven para lo mismo pero que tienen una
pequeña diferencia. Esta diferencia es cuándo se comprueba la condición que queremos
evaluar para que se repita el bucle. Esta comprobación puede realizarse al comienzo del
bucle o al final del mismo.
Do While Mi_condición
41
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
‘ejecutar sentencias
Loop
Es decir, lo que estoy haciendo con este bucle es repetir una serie de sentencias de código,
pero antes de nada evalúo que se cumpla la condición.
Mi_Variable=1
Do While Mi_Variable < 100
Mi_Variable = Mi_Variable + 1
‘ejecución de otras sentencias
Loop
Lo que hace esta macro es que asigna un valor a la variable Mi_Variable. Después
comienza el bucle y se repite tantas veces mientras se cumpla la condición Mi_Variable <
100. Esto implica que cuando Mi_Variable es 99 la condición se cumple y avanzamos
dentro del bucle. Dentro del bucle sumamos + 1 a Mi_Variable así que el nuevo valor será
100. Después, al volver a intentar pasar por el bucle la condición de que Mi_Variable sea
menor de 100 ya no se cumple así que terminaremos el bucle.
Do
‘ejecutar sentencias
Loop While Mi_condición
Las condiciones que puedo usar entro del bucle serán todas las que nos podamos
imaginar, aunque fundamentalmente usaremos los operadores aritméticos.
42
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Para salir de este bucle usaremos la expresión Exit Do cuando llegue el momento en el
que queramos que no continúe aún sin evaluar la condición.
Mi_Variable=1
Do While Mi_Variable < 100
Mi_Variable = Mi_Variable + 1
If Mi_Variable + Mi_Variable2 = 200
Exit Do
End if
Loop
Ejemplos
Para que puedas entender mejor lo que hemos visto en este apartado vamos a explicarlo
en 4 sencillos ejemplos que te ayudarán a entender con más claridad el bucle Do While.
Ejemplo 1
En este ejemplo vamos a sombrear en amarillo las celdas del rango cuyo valor sea igual a
1 hasta que dejen de serlo.
I = 1
Do While Cells(I,1) = 1
Cells(I,1).Interior.Color = vbYellow
I = I + 1
43
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Loop
Ejemplo 2
En el siguiente ejemplo vamos a sombrear en amarillo todas las celdas que sean menores
que 100, pero si encontramos una celda menor que 50 saldremos del bucle:
I = 1
Do While Cells(I,1).Value < 100
If Cells(I,1).Value < 50 Then Exit Do 'salgo del bucle
Cells(I,1).Interior.Color = vbYellow
I = I + 1
Loop
En este ejemplo hemos usado las propiedades de color de fondo de las celdas que
explicaremos un poco más adelante.
Ejemplo 3
En este tercer ejemplo vamos a poner a la derecha de la celda que se está evaluando un
OK si evaluamos que su valor es menor que 100 y mayor que 50. Esto nos permitirá ver
que en la condición lógica que vamos a evaluar podemos utilizar el operador And para
hacer una doble evaluación. Además, hemos usado la propiedad Offset que nos permite
seleccionar una celda en función de unos parámetros de fila y columna dados y de una
celda que actúe como punto de partida.
I = 1
Do
Cells(I,1).Offset(0, 1) = "OK"
I = I + 1
Loop While Cells(I,1).Value < 100 And Range(I,1).Value > 50
44
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Ejemplo 4
En el siguiente ejemplo vamos a ver cómo se puede también utilizar una expresión
anidada con Or para evaluar una condición.
I = 1
Do While Cells(I,1).Value > 60 Or Cells(I,1).Value < 20
Cells(I,1).Offset(0, 1) = "OK"
I = I + 1
Loop
Este bucle recorre cada uno de los elementos y va ejecutando las sentencias que hayamos
indicado dentro del bucle.
Cómo se usa
Este bucle es muy similar al resto de los bucles en cuanto a su sintaxis. La sintaxis es:
Donde:
Pero un ejemplo vale más que mil explicaciones así que mira con atención estas líneas de
código:
45
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Dim c As Range
For Each c In ActiveSheet.Range("A1:A10")
c.Interior.Color = vbYellow
Next c
Como puedes ver, en este ejemplo, lo primero que hemos hecho ha sido crear una variable
"c" de tipo Range.
Después hemos puesto el bucle For Each. Lo que hace este bucle es recorrer cada una de
las celdas del rango "A1:A10" y para cada una de las celdas cambia el color de fondo.
Dim c As Range
For Each c In ActiveSheet.Range("A1:A10")
If c.Value = 5 Then Exit For 'salimos del bucle
c.Interior.Color = vbYellow
Next c
Es decir, antes de cambiar el color de la celda, si detectamos que el valor de la celda que
se está recorriendo en este momento es igual a 5 entonces terminamos el bucle. Esta
comprobación la hacemos con la instrucción If.
Ejemplos
Para poder entender mejor estos conceptos vamos a ver unos sencillos ejemplos.
Ejemplo 1
El primer ejemplo que vamos a ver es una pequeña macro que recorre todas las hojas de
un libro y poner el zoom de cada hoja al 80%.
46
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Para ello, lo primero que hacemos es declarar la variable "sht" como tipo Worksheet.
Después recorreremos todas las hojas del libro una por una activándolas y modificando el
zoom de cada una. Recuerda, si hay alguna operación de la que no recuerdas su sintaxis
puedes grabar una macro y elegir el código que necesites para después modificarlo a tu
gusto.
Ejemplo 2
En este ejemplo vamos a recorrer todos los gráficos de una hoja y vamos a cambiar el
ancho de cada uno para ponerlos a todos iguales.
chrt.Width = 400
Next
Como puedes ver, lo que hemos hecho ha sido crear una variable de tipo objeto gráfico
ChartObject que hemos llamado "chrt". Después vamos a recorrer todos los gráficos de la
hoja activa y cambiaremos su ancho.
Ejemplo 3
En este ejemplo usamos el bucle For Each para recorrer todas las celdas de un rango de
celdas seleccionadas. Después, lo que haremos será comprobar que están vacías, y si lo
están, entonces les pondremos el fondo rojo.
47
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Dim c As Range
48
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
La lista es muy grande y no pretendemos en este libro explicaros todo lo que podéis
conseguir con estas operaciones, pero sí queremos que os hagáis una buena idea de todas
las opciones posibles.
Valor
Normalmente, para obtener el valor de una celda, no se necesita la propiedad Value.
Como ya hemos visto anteriormente en el capítulo de Referencias podemos obtener el
valor de una celda simplemente utilizando la referencia a dicha celda. La sintaxis de esta
propiedad es:
Range("…").Value
Copiar y pegar
Una de las operaciones más comunes que se llevan a cabo con macros. Esta operación se
compone de dos partes: la operación de copiar y la operación de pegar.
Range("A1").Copy
49
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Después, para pegar, deberemos seleccionar la celda donde queremos copiar y después
indicaremos la opción de pegado tal y como sigue (si quisiéramos pegar la celda copiada
en la celda C1, por ejemplo):
Range("C1").Select
ActiveSheet.Paste
Pero esta opción es la más básica y la que obtenemos si grabamos una macro.
Pegado Especial
Hay un método mucho más interesante y que nos permite Copiar y Pegar sin tener que
tener las hojas o celdas donde queremos copiar activas. Es el método SpecialPaste.
Este método es propiedad de un rango y no de una celda cómo veíamos antes. Además,
es mucho más maleable pues podremos usar los diferentes tipos de pegado especial que
vienen con Excel.
Range("C1").PasteSpecial xlPasteAll
Como se puede ver, el método de pegado especial para pegar tal y como lo tenemos en
origen en cuanto a fórmulas, valores y formatos usa la propiedad xlPasteAll. Otras
propiedades que podemos usar son:
50
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Lo bueno del Pegado Especial es que nos da mucha flexibilidad para copiar y pegar entre
hojas e, incluso, libros diferentes de Excel.
Por ejemplo, para copiar un rango de la hoja 1 y llevarlo a la hoja 2 pegando sólo los valores
usaremos la siguiente macro:
Sub Copiar_Valores()
Sheets(1).Range("A1:A10").Copy
Sheets(2).Range("C1").PasteSpecial xlPasteValues
End Sub
CutCopyMode
Un pequeño problema con el que nos encontramos al utilizar los comandos de copiar y
pegar es que las celdas, en la hoja de Excel, se quedan con un recuadro de líneas
discontinuas en torno al área copiada.
Application.CutCopyMode = False
51
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Lo que esta sentencia hace es terminar el modo de Copiar y Pegar. El equivalente a darle
a la tecla Escape cuando estamos en Excel.
Formato
Dentro del formato de una celda tenemos un montón de opciones. En este manual
tocaremos sencillamente las opciones de Fuente, Relleno y Borde que son las más
habituales y las más útiles en los comienzos de VBA.
Fuente
Para modificar la fuente de una celda o un conjunto de celdas usaremos las siguientes
sentencias después del rango (ya sea de una celda o de varias celdas):
La propiedad Fuente tiene otros atributos, pero los más usados son los que acabamos de
explicar.
A continuación, puedes ver un ejemplo donde se usan todos estos para la creación de un
título:
52
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
With Range("A1").Font
.Size = 16
.Color = RGB(250, 3, 19)
.Bold = True
.Italic = True
.Underline = False
End With
Relleno
Las principales opciones de relleno de una celda o varias celdas se pueden resumir en la
siguiente tabla:
Borde
Las opciones de borde pueden ser generales si usamos el método Borders o podemos
particularizarlas indicando a qué borde en concreto nos estamos refiriendo añadiendo el
indicador de borde que necesitemos.
Así pues, para usar la forma más general usaremos el método Borders de la siguiente
manera:
Range("B10:B20").Borders.Color = RGB(255,0,0)
53
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
De esta manera, todos los bordes de las celdas B10:B20 (excepto las diagonales) se
pondrán de color rojo.
Range("B10:B20").Borders(xlEdgeRight).Color = RGB(255,0,0)
De esta manera, solo el borde derecho tomará el color. El resto de los bordes no se
modificarán.
Range("A1").Borders(xlEdgeTop)
Range("A1").Borders(xlEdgeBottom)
Range("A1").Borders(xlEdgeRight)
Range("A1").Borders(xlEdgeLeft)
Las principales propiedades que podemos utilizar con la propiedad Borders, ya sea para
un borde en concreto o para todos los bordes son:
54
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
.LineStyle = xxxx Tipo de línea del borde. Las variables pueden ser:
xlContinuos, xlDash (guiones), xlDot (puntos),
xlDashDot (guiones y puntos), xlDoubl (línea
doble)…
.Weight = xxx Establece el grosor del borde. Puede ser por orden
de menor a mayor: xlHairLine, xlThin, xlMedium,
xlThick.
Insertar fórmula
Otra operación que podemos realizar con las celdas es insertar una fórmula. Esto puede
ser útil en determinadas circunstancias como, por ejemplo, cuando estemos creando una
plantilla en un libro de Excel desde cero.
Para insertar una fórmula deberemos usar el método Formula. Un ejemplo para insertar
una fórmula es:
Range("B1").Formula = "=A2+A3"
Donde es muy importante que añadamos entre comillas la fórmula que queremos añadir
sin olvidar el símbolo "=" que precede a todas las fórmulas en Excel.
55
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
OBJETO APPLICATION
Preámbulo
Antes de explicar el objeto Application creo que será muy útil hablar del concepto de
jerarquía de objetos en Excel.
Como puede verse en la siguiente imagen, dentro de un objeto Application podemos tener
varios libros diferentes de Excel (Workbook) y dentro de cada libro podemos tener varias
hojas… y así sucesivamente, dentro de una hoja podemos tener diferentes gráficos, o
celdas, o imágenes, o tablas…
Sheet1
Workbook1
Sheet2
Application
Workbook2 Sheet1
Es decir, el objeto Application es una instancia de Excel… y podemos tener varias de estas
instancias abiertas al mismo tiempo, aunque no es lo más común.
En VBA tenemos la suerte de no tener que referenciar toda la jerarquía para referirnos a
un objeto en concreto. Es decir, cuando en una macro estamos escribiendo:
Range("A1").Activate
Estamos activando la celda A1 de la hoja activa del libro activo de la instancia de Excel
activa…, pero si quisiéramos referirnos a otro libro y otra hoja deberíamos escribir el
conjunto de la jerarquía.
56
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Application.Workbooks("Libro1").Sheets("Hoja1").Range("A1")
Dependiendo de qué es lo que quieras hacer puede que en algunas ocasiones tengas que
referenciar las hojas incluso los libros que usas. Hay que tener en cuenta que Excel, por
defecto, piensa que estás trabajando en el libro activo y en la hoja activa. Si quieres hacer
operaciones entre diferentes hojas y diferentes libros te recomiendo que escribas la
referencia más completa posible.
Application.ScreenUpdating
Esta instrucción es muy interesante. Nos permite hacer que, cuando corremos una macro
complicada, la pantalla de Excel no parpadea mientras realiza las diferentes operaciones.
Para ello deberíamos escribir antes de que comience la macro la siguiente sentencia:
Application.ScreenUpdating = False
Application.ScreenUpdating = True
57
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Es decir, que lo que hacemos entre estas dos pantallas es que no se refresque la pantalla
hasta que volvamos a poner Application.ScreenUpdating = True.
Puedes hacer una sencilla comprobación con estas dos macros en un libro que tenga dos
hojas. La primera macro va a hacer que la hoja de Excel parpadee, la segunda macro hará
que la hoja no parpadee y se ejecutará mucho más deprisa que la primera.
Sub Prueba_con_parpadeo()
For i = 1 To 50
Sheets(1).Activate
val1 = Cells(i, 1).Copy
Sheets(2).Activate
Cells(i, 1).Select
ActiveSheet.Paste
Next i
End Sub
Y ahora la macro que ejecuta las mismas sentencias, pero sin parpadear.
Sub Prueba_sin_parpadeo()
Application.ScreenUpdating = False
For i = 1 To 50
Sheets(1).Activate
val1 = Cells(i, 1).Copy
Sheets(2).Activate
Cells(i, 1).Select
ActiveSheet.Paste
Next i
Application.ScreenUpdating = True
58
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
End Sub
Application.GetOpenFilename
Mediante esta sencilla instrucción se abrirá una ventana con la que poder seleccionar un
archivo. Aunque esta instrucción no abre dicho archivo, sino que te permite obtener su
nombre y ruta. La siguiente macro te ayudará a entender mejor a lo que me refiero:
Sub Get_open_file_name()
Nom_Archivo = Application.GetOpenFilename
MsgBox Nom_Archivo
End Sub
Como ves, esta macro nos devuelve en pantalla la variable "Nom_Archivo" a través del
método MsgBox.
Application.Display…
Hemos puesto unos puntos suspensivos porque hay un montón de propiedades que
empiezan por Display. En la siguiente tabla puedes ver las que hemos juzgado de mayor
interés.
59
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
60
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
OBJETO WORKBOOKS
En la jerarquía de Excel, el objeto Workbook es un objeto de segundo nivel, es decir, por
encima sólo podrá tener el objeto Application.
Workbooks
La manera más frecuente de llamar a un libro de Excel será a través del objeto Workbooks
y el índice del libro o el nombre del mismo.
Para utilizar el índice deberemos saber el número de libros que se han creado o que hay
abiertos, al igual que pasa con las hojas. Para seleccionar el segundo libro que se ha creado
o abierto en la instancia activa de Excel usaremos la siguiente sintaxis:
Workbooks(2).Activate
Aunque también podríamos usar el nombre del libro si lo conociéramos entre comillas:
Workbooks("Mi libro.xlsx").Activate
Esta segunda manera es más complicada pues no es frecuente que un libro tenga siempre
el mismo nombre y no vaya cambiando de versión. En cualquier caso, puede darse alguna
circunstancia en la que nos venga bien utilizar esta sentencia.
61
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
ActiveWorkbook
Esta instrucción te permite dirigirte directamente al libro que está abierto y activo en el
momento de ejecución de la macro. Es muy útil cuando estás utilizando un primer libro o
cuando no sabes el nombre del libro abierto o cuando no quieres escribir el nombre del
libro entero.
Por ejemplo, para dirigirme a una hoja en concreto del libro activo usaré la sentencia:
ActiveWorkbook.Sheet(1).Activate
ThisWorkbook
Nos permite dirigirnos al libro que contiene la macro que se está utilizando. Por ejemplo,
si quiero saber en qué libro he guardado la macro ejecuto la siguiente sentencia:
ThisWorkbook.Name
Open
Mi_libro = Application.GetOpenFilename
Workbooks.Open Filename:=Mi_libro
Mi_libro = "C:/Libro1.xlsx"
62
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Workbooks.Open Filename:=Mi_libro
Close
Este método permite cerrar un libro de Excel. Además, podremos añadir unas cuantas
propiedades como la ruta en la que queremos guardarlo o si queremos guardar los
cambios…, por ejemplo, en este caso vamos a cerrar el libro activo mediante una sencilla
sentencia y además guardaremos los cambios realizados desde la última vez que se
guardó:
ActiveWorkbook.Close savechanges:=True
Save
Para guardar el libro después de realizar una serie de cambios en el mismo usaremos la
sentencia:
ActiveWorkbook.Save
Una variante de Save es la de SaveAs mediante la cual podemos guardar el libro de Excel
en cuestión con un nombre concreto y en una ruta concreta.
Name
Sub Nomb_libro()
63
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Range("A1") = ThisWorkbook.Name
End Sub
Activate
Permite activar un libro en concreto para tenerlo visible en pantalla. Por ejemplo, si
tenemos varios libros abiertos y ejecutamos el siguiente código, el primer libro que se
abrió se pondrá en la ventana activa.
Workbooks(1).Activate
Como puedes ver, he usado el número 1 para referirme al primer libro que se ha abierto.
Para activar el último libro que se abrió puede utilizarse la siguiente sentencia:
Workbooks(Workbooks.Count).Activate
Ojo, no te confundas con Select. Esta propiedad no existe para los Workbooks, aunque sí
que existe para hojas, celdas, rangos y otros objetos de Excel.
Add
Este método lo usaremos para añadir un nuevo libro dentro de nuestra aplicación de
Excel. Para ello usaremos la siguiente sintaxis
Workbooks.Add
Ejemplos
Para poder entender mejor este capítulo vamos a ver algunos ejemplos.
64
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Ejemplo 1
En este ejemplo solo tendremos un libro activo y en este libro tendremos una única hoja.
En esta hoja escribiremos los números del 1 al 10 en el rango A1:A10. Lo que haremos
será copiar estos valores y pegarlos en un nuevo libro. Para ello utilizamos la siguiente
macro.
Sub Copiar_en_nuevo_libro()
Sheets(1).Range("A1:A10").Copy
Workbooks.Add
ActiveSheet.Paste
End Sub
Ejemplo 2
En este ejemplo vamos a crear un libro que guardaremos en la ruta "C:\Temp". Si no tienes
una carpeta que se llame "Temp" te recomiendo que la crees para poder hacer pruebas.
En esta carpeta vamos a guardar un libro con el nombre "Libro_prueba.xlsx". En este libro
vamos a dejar una única hoja y en la celda A1 escribiremos el número 1.
La macro que vamos a crear abrirá este libro, copiará el valor de la celda A1 en el libro que
tenemos abierto y lo cerrará.
Sub Abrir_copiar_cerrar()
'copio la celda A1
Sheets(1).Range("A1").Copy
65
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
End Sub
66
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
OBJETO WORKSHEET
Introducción
Este objeto se refiere a las hojas de un libro de Excel. Es decir, está un nivel por debajo del
objeto Workbook y un nivel por encima de los objetos Rango, Columna, Fila, etc.
Sheets(1)
Worksheets(1)
Ambas maneras funcionan, básicamente, de la misma manera así que es elección del
usuario una u otra sintaxis.
Yo, en mi caso, me suelo decantar por la forma Sheets puesto que es una manera
abreviada de referirse al objeto Sheets y casi todo en mi vida se basa en buscar una manera
más eficiente de hacer lo mismo.
Referencias a hojas
Para llamar a una hoja hay dos métodos. Uno es a través de su índice y otro es a través de
su nombre.
El índice es una propiedad numérica que tienen las hojas. Esta propiedad es un valor
entero que tiene cada hoja y es único. Este valor se otorga automáticamente a cada hoja
a medida que se van creando. Así, la primera hoja del libro siempre tiene el valor 1.
Para referirnos a la segunda hoja del libro que fue creada usaremos la siguiente sintaxis:
67
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Sheets(2)
El número dos puede sustituirse por una variable si en esta usáramos un valor válido para
referirnos a la hoja, es decir:
Por otro lado, una hoja tiene un nombre que puede modificarse a través de VBA o en la
pestaña de Excel de la parte inferior de cada hoja. Así pues, podremos referirnos a cada
hoja mediante su nombre. Si la hoja se llama "Prueba" usaremos el siguiente código para
referirnos a ella.
Sheets("Prueba")
Donde el nombre de la hoja siempre va entre comillas ("") y debe ser exactamente igual
al que nos referimos. Esta propiedad no hace diferencias entre mayúsculas y minúsculas
así que podremos usarlas indistintamente.
ActiveSheet
El método ActiveSheet se refiere a la hoja activa y visible que la aplicación Excel tiene en
el momento. De esta manera siempre nos podremos referir a la hoja activa
independientemente de si no conocemos su nombre o su índice.
Esta manera de usar la referencia a hojas puede resultar particularmente útil cuando
hacemos una llamada a un macro en la que no sabemos en qué hoja puede estar el
usuario, es decir, no sabemos ni el índice de la hoja ni su nombre.
68
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Principales propiedades
Las hojas tienen varias propiedades, pero en esta explicación queremos destacar las
siguientes:
Seleccionar (Select)
Esta propiedad nos permite seleccionar una hoja. Para llevar a cabo esta operación la hoja
tiene que estar visible (es decir, no oculta).
Sheets(índice).Select
De esta manera, la hoja seleccionada será la hoja activa en nuestra aplicación de Excel. Es
decir, la hoja que estamos viendo a través de la pantalla.
Activar (Activate)
Contar (Count)
Contar el número de hojas que tiene un libro puede resultar útil en algunas circunstancias.
Para ello usaremos la sentencia:
Sheets.Count
Copiar y pegar
69
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Sheets(índice).Copy
Sheets(índice).Copy After:=Sheets(Sheets.Count)
En este caso, para colocar la nueva hoja al final del libro indicamos que la hoja después de
la que queremos colocarlo tiene el índice de la hoja igual al número de hojas totales del
libro.
Añadir (Add)
Este método nos permite añadir una hoja de Excel en nuestro libro.
Sheets.Add
Si queremos añadir la hoja en una posición en concreto podremos usar las variables Before
o After indicando la hoja que irá antes o después de la que queremos añadir.
Sheets.Add Before:=Sheets(1)
Nombre (Name)
Un método muy sencillo y muy utilizado es el método Name. Nos permite identificar el
nombre de una hoja o modificarlo. Nos permite acceder al atributo Name de la hoja. La
sintaxis es:
70
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Sheets(índice).Name
Nombre_hoja = Sheets(índice).Name
Visible
Podemos ocultar o mostrar hojas mediante VBA. Para ello usaremos la propiedad Visible
que nos permitirá cambiar el estado de una hoja de visible a oculta.
Sheets(índice).Visible = False
Sheets(índice).Visible = True
Ejemplos
Ejemplo 1
En este ejemplo vamos a ver cómo añadir una hoja de Excel y cambiarle el nombre.
Sub Ejemplo1()
Sheets.Add
End Sub
71
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Utilizamos el método ActiveSheet porque siempre, al añadir una hoja, la hoja añadida es
la activa y es una manera muy sencilla de saber qué hoja hemos añadido.
Ejemplo 2
En la siguiente macro vamos a seleccionar una celda de una hoja y la vamos a guardar en
una variable. Esta variable la pondremos en otra celda de otra hoja.
Sub Ejemplo2()
Var1 = Sheets(1).Cells(1, 2)
Sheet(2).Select
Cells(2, 3) = Var1
End Sub
72
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
INSTRUCCIÓN SET
La instrucción Set permite atribuir un objeto a una variable. Es decir, guardaremos en una
variable un objeto en concreto, ya sea un libro, una hoja, un gráfico, un rango…
Sintaxis
Su sintaxis es muy sencilla como veremos a continuación:
Donde:
Por ejemplo, para asignar una hoja de un libro a una variable en concreto usaremos las
siguientes sentencias de código:
De esta manera, siempre que hagamos referencia a la hoja "Hoja de datos" podremos
sustituir toda la referencia:
Sheets("Hoja de datos")
shtDatos
73
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Así pues, una vez creada la variable shtDatos podremos referirnos a un rango en concreto
como:
shtDatos.Range("A1:A2")
Por ejemplo, si queremos ahora crear un rango dentro de "Hoja de datos" podremos
escribir lo siguiente:
Ejemplos
Los siguientes ejemplos servirán para poder entender mejor los conceptos explicados.
Ejemplo 1
En este ejemplo vamos a crear un rango (Rng1) de una hoja (Sht1) y lo vamos a copiar a la
hoja siguiente (Sht2). Para ello, necesitamos un libro que contenga al menos 2 hojas.
Sub Ejemplo1()
74
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Sht2.Activate
ActiveSheet.Paste
End Sub
Ejemplo 2
Creamos un nuevo libro que asignamos a la variable Nuevo_libro
75
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
EVENTOS EN VBA
Introducción
Los eventos en VBA son aquellos procedimientos de VBA que se ejecutan
automáticamente dadas unas circunstancias
Los eventos son particularmente útiles en ciertas ocasiones cuando no queremos que
haya botones asociados a nuestras macros, sino que dichas macros se ejecuten
automáticamente.
Por ejemplo, mediante eventos, podemos hacer que una macro se ejecute al abrir un libro
o al cerrarlo o cuando cambiamos de hoja.
Tipos de eventos
En VBA orientado a Excel tenemos un montón de eventos que podemos utilizar en nuestro
libro. En este libro no pretendemos explicar todos, pero sí los más relevantes como verás
a continuación.
Los eventos se clasifican en varios tipos dependiendo del objeto al que vayan orientados:
• Aplicación de Excel
• Libro
• Hoja
• Gráfico
• Tabla dinámica
• Hipervínculo
Pero como antes te decía, en este libro, no pretendo explicarlo todo. Los más importantes
son los que puedes ver a continuación.
76
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Los eventos de libro son aquellos que se ejecutan cuando se realizan determinadas
operaciones con un libro de Excel. Los más utilizados (y en mi opinión, los más útiles) son:
Workbook_Open
Este evento se utiliza para ejecutar una macro cuando se abre un libro de Excel. Algunos
de sus posibles usos son:
End Sub
Workbook_BeforeSave
Este evento se ejecuta justo antes de guardar un libro de Excel. El evento puede ejecutar
cualquier macro, pero algunos de sus ejemplos son:
77
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
End Sub
Ya sé que tiene una serie de argumentos, pero no te preocupes, más adelante te podrás
preocupar por ellos.
Workbook_BeforeClose
Este evento se ejecuta antes de cerrar el libro de Excel y puede servir para:
End Sub
Hay muchos otros eventos que se pueden usar en VBA aplicados a un objeto libro. Aunque
ya te hemos contado los más importantes quizás no esté de más que también puedes usar
estos otros. No es una lista completa, son sólo aquellos que he considerado más
representativos:
• Activate
• AfterSave
78
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
• BeforePrint
• Deactivate
• ….
Eventos de hoja
Los eventos de hoja son, en mi opinión, más interesantes que los eventos de libro pues
nos permiten realizar una serie de operaciones en la propia hoja que tienen un montón
de utilidades. Estos eventos se ejecutan cuando se realiza alguna operación sobre una
hoja en cuestión que actúa como disparador del evento. Algunos de estos eventos más
utilizados son:
Worksheet_SelectionChange
Permite ejecutar una macro cada vez que se selecciona una nueva celda en la hoja. Esta
macro es muy útil porque se puede limitar a un determinado rango de celdas o a única
celda.
Su sintaxis es:
End Sub
Worksheet_Change
79
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
End Sub
Worksheet_Calculate
Nos permite ejecutar una macro automáticamente cuando las fórmulas de una hoja se
calculan. La sintaxis de este evento es:
End Sub
Una vez que hayas hecho la selección del objeto deseado, aparecerá una pantalla en
blanco con los siguientes desplegables en la parte de arriba.
80
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Una vez hecho esto tan sólo tendrás que crear el código que quieras que se ejecute con
tu evento.
Ejemplos
Ejemplo On Open
En este ejemplo vamos a utilizar el evento OnOpen del libro para poner al usuario un
mensaje de bienvenida:
End Sub
81
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
En este ejemplo hemos usado la función MsgBox de manera un poco más elaborada. En
ella hemos indicado:
Ten en cuenta que en este ejemplo hemos usado el objeto ActiveWindow al que
pertenece la propiedad Zoom. Curiosamente, para cambiar el Zoom de cada hoja
tendremos que hacer referencia a la ventana activa y no a otra propiedad de las hojas.
82
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
End If
End Sub
83
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
CREAR FUNCIONES
Una función definida por el usuario o en inglés, por sus siglas UDF, es una función que
creamos en VBA para usar, o bien en nuestro código de VBA y para ello le asignaremos la
propiedad de Private, o para utilizar en nuestro libro de Excel como si de cualquier otra
fórmula se tratara y para ello la denominaremos Public.
Por defecto una función será Public a no ser que indiquemos que sea Private
explícitamente.
End Function
Donde:
84
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
Ejemplos
Como ya hemos dicho previamente, todo se entiende mejor con ejemplos así que vamos
a ver unos cuantos para que se entienda bien.
Ejemplo 1
Este es un ejemplo de función Public que calcula un área a partir de la altura y la longitud
de dos variables que se encuentran en celdas.
Como puedes ver, es una función muy sencilla que sólo está multiplicando dos variables
que obtenemos de dos celdas diferentes. Te animo a que la pruebes tú mismo.
Ejemplo 2
En este ejemplo vamos a crear una función que nos permite sustituir la letra ‘ñ’ por la letra
‘n’ en caso de que encontremos en un texto dicha letra. Es una función de tipo Private. O
sea que no se podrá usar en la hoja de Excel en ninguna celda.
85
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
QUITAR_LETRA = WorksheetFunction.Substitute(Palabra_original,
"ñ", "n")
Else
QUITAR_LETRA = Palabra_original
End If
End Function
Esta función devuelve el texto o palabra original si no encuentra la letra ‘ñ’ dentro de ella,
pero si la encuentra la sustituirá por la letra n.
Para poder llevar a cabo este ejemplo hemos usado una función propia de Excel, la
función Substitute (sustituir en español). Para llamar a una función nativa de Excel
deberemos utilizar el método WorksheetFunction tal y como puedes ver en el ejemplo
anterior.
86
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
CONCLUSIÓN
Como has podido ir viendo hasta ahora, las posibilidades de VBA son casi infinitas y eso
que hay muchas cosas que hemos dejado fuera del alcance de este manual de
introducción a VBA: más sobre eventos, uso de funciones de Excel en VBA, explicación
sobre funciones nativas de VBA, introducción a los formularios, etc.
Espero que este método con todos sus ejemplos y sus ejercicios te haya ayudado a mejorar
mucho sobre el uso de esta súper herramienta.
Si quieres saber más del tema puedes visitar la web www.excelyvba.com y ponerte en
contacto con ellos en www.excelyvba.com/about
87
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.
QUIQUE ARRANZ APRENDE A PROGRAMAR MACROS DESDE 0
88
Todos los derechos reservados. Queda totalmente prohibida su copia o reproducción parcial sin citar la fuente y sin consentimiento del autor.