Página 1 de 175
MANUAL DE VBA PARA EXCEL 2010
CENTRO DE FORMACIÓN
MSL Formación
Email: formacion@mslformacion.es
http://www.mslformacion.es/
Email: delatorre.miguelangel@gmail.com
(Octubre, 2014)
Página 2 de 175
MANUAL DE VBA PARA EXCEL 2010
INDICE
LECCIÓN 1. LA GRABACIÓN DE MACROS .................................................................. 6
Diferentes utilidades de una macro .............................................................................. 6
Crear una macro automáticamente .............................................................................. 8
Ejecutar una macro..................................................................................................... 11
LECCIÓN 2. ASPECTOS BÁSICOS DEL LENGUAJE VBA (VISUAL BASIC FOR
APPLICATIONS). ........................................................................................................... 18
El entorno del editor de Visual Basic.......................................................................... 22
La ventana de proyecto ........................................................................................... 23
La ventana de Propiedades .................................................................................... 23
La ventana de Código ............................................................................................. 24
La ventana de inmediato ......................................................................................... 24
El menú del editor de Visual Basic ......................................................................... 24
La barra de botones ................................................................................................ 24
Configuración del Editor de VBA ................................................................................ 28
Guardar archivos con Macros..................................................................................... 29
LECCIÓN 3. LOS MÓDULOS ........................................................................................ 31
Los procedimientos ..................................................................................................... 32
Los procedimientos de función ................................................................................... 33
Sintaxis o estructura de los procedimientos y funciones ........................................... 34
Llamadas a los procedimientos .................................................................................. 35
LECCIÓN 4. EL MODELO DE OBJETO DE EXCEL..................................................... 36
Objetos, colecciones habituales ................................................................................. 37
El complemento automático de las instrucciones. ..................................................... 38
Reglas de escritura de código .................................................................................... 39
Crear fórmulas con VBA. ............................................................................................ 41
Estilo Formula.......................................................................................................... 41
Estilo FormulaL1C1 ................................................................................................. 41
Algunos ejemplos de procedimientos que modifican las propiedades de objetos de
Excel:........................................................................................................................... 44
LECCIÓN 5.EL USO DE VARIABLES EN VBA............................................................. 56
Los tipos de variables ................................................................................................. 57
Variable de tipo texto (o cadena). ........................................................................... 58
Página 3 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 4 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 5 de 175
MANUAL DE VBA PARA EXCEL 2010
Anteriormente definimos a las macros como algo que nos permite expandir e
incrementar las prestaciones de la hoja Excel. A grandes rasgos podemos comentar
que las 4 grandes “áreas” donde se aplican las macros son:
1. Automatización de procesos
Supongamos que todos los días debemos trabajar en nuestro libro Excel en el cual
debemos seleccionar un rango, centrarlo, cambiarle la fuente, poner la fuente en
cursiva, aplicarle negrita y finalmente aplicarle bordes a toda la selección. Estas 6
acciones las hacemos manualmente y no parecen muchas, ¿pero qué tal si hay que
hacer esto en repetidas ocasiones y todos los días? Una macro nos permite ejecutar
los 6 pasos automáticamente, tan solo presionando un botón o una tecla. Las tareas
ideales para automatizar son aquellas que se hacen de forma repetida e involucran
muchos pasos, por ejemplo: imprimir informes, configurar la vista de la hoja, actualizar
datos de tablas dinámicas, modificar el diseño de una hoja, etc...
Página 6 de 175
MANUAL DE VBA PARA EXCEL 2010
Las funciones y fórmulas Excel son quizás la esencia de la hoja de cálculos (si no
se pudieran utilizar funciones y fórmulas no habría cálculos). Excel trae incorporada
más de 300 funciones estándar las cuales se pueden utilizar en forma aislada o en
forma combinada (anidadas). Sin embargo, suele suceder que justo la función que
necesitamos no existe. Así que con la programación podemos programar funciones a
medida que hagan exactamente lo que nosotros queremos. Y esas funciones se
comportarán igual que las de Excel, estas aparecerán en la categoría de funciones
Definidas por el usuario y tendrán los argumentos que hayamos decidido.
Excel trae una gran cantidad de comandos y menús predefinidos que nos asisten
para las operaciones más habituales. Las macros nos permiten crear nuestros propios
comandos y menús personalizados, e incorporarlos al Excel. La utilidad de los mismos
depende tan solo de nuestras necesidades. Los complementos Excel también están
creados con macros. Si acudes al menú Herramientas > Complementos verás una
lista de los que tienes instalado en tu Excel. Los mismos suelen ser distribuidos de
forma gratuita o también se compran. Su utilidad reside en agregar alguna
funcionalidad extra a Excel para mejorar su funcionamiento, o personalizar sus
comandos.
Excel es utilizado en diversos campos y por una gran cantidad de usuarios. Las
macros te permitirán construir complejas y elegantes aplicaciones para cualquier uso
que quieras darles. El límite está solo en tu imaginación. Una aplicación Excel consiste
en algo más que una simple plantilla con datos y fórmulas. Una aplicación Excel es un
verdadero programa de software con una serie de características que lo hacen
utilizable, por cualquier usuario, sin que el mismo tenga que entender la lógica de
Excel que hay por detrás.
Página 7 de 175
MANUAL DE VBA PARA EXCEL 2010
Para grabar una macro debemos acceder a la ficha Vista y desplegar el submenú
Macros y dentro de este submenú seleccionar la opción Grabar macro...
Página 8 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 9 de 175
MANUAL DE VBA PARA EXCEL 2010
NOTA: A partir de entonces debemos realizar las acciones que queramos grabar, es
conveniente no seleccionar ninguna celda a partir de la grabación, ya que si
seleccionamos alguna celda posteriormente, cuando ejecutemos la macro, la selección
nos puede ocasionar problemas de celdas fuera de rango.
Una vez finalizadas el conjunto de las acciones que queremos grabar, podemos
presionamos sobre el botón Detener de la barra de estado, por ejemplo. Es muy
importante estar pendiente de detener la grabación, cuando hayamos realizado
nuestra última acción, ya que si no detenemos la grabación, la macro seguirá
grabando el resto de acciones que estemos realizando.
Página 10 de 175
MANUAL DE VBA PARA EXCEL 2010
Una vez creada una macro, la podremos ejecutar las veces que queramos.
Página 11 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 12 de 175
MANUAL DE VBA PARA EXCEL 2010
Para agregar el botón a nuestra ficha de Mis macros, simplemente tendremos que
seleccionar el botón con el nombre de la macro que previamente habíamos creado por
la grabadora de macros, y pulsar el botón de Agregar >> que se encuentra entre las
dos listas.
Página 13 de 175
MANUAL DE VBA PARA EXCEL 2010
A partir de ese momento tendremos disponible dicho botón en nuestra ficha, para
poder ejecutar directamente la macro previamente creada.
Página 14 de 175
MANUAL DE VBA PARA EXCEL 2010
Una vez incorporada tendremos que seleccionarla, y haciendo uso del menú
contextual del ratón, seleccionaremos la opción Asignar macro.
Página 15 de 175
MANUAL DE VBA PARA EXCEL 2010
De estos controles el más adecuado para asociar una macro para su ejecución,
sería el botón (el primero de la fila superior), ya que en el momento de ser
seleccionado e insertado en nuestra hoja de cálculo, nos muestra de manera
inmediata la anterior ventana para la selección de la macro que queremos
asociarle.
Página 16 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 17 de 175
MANUAL DE VBA PARA EXCEL 2010
Un objeto es algo con entidad propia dentro de una clase. Y una clase es un
conjunto de objetos que tienen propiedades en común, y se comportan de una manera
igual o similar al resto de objetos pertenecientes a esa misma clase. Por ejemplo
tenemos la clase “persona” que tiene una serie de propiedades y comportamiento
claramente diferenciables de la clase “casa”, y dentro de la clase “persona”, existen
muchos objetos que son cada una de las personas, por ejemplo, pertenecientes a un
colegio. En nuestro caso de la hoja de cálculo, los objetos bien podrían ser el libro, la
hoja, la celda, o un rango.
Las propiedades hemos dicho que son aquellas características que definen a los
objetos de una clase, diferenciándolos del resto de clases, siguiendo con el ejemplo
persona unas propiedades podrán ser, la estatura, el peso, el color del pelo, el sexo, el
color de los ojos, y todas aquellas propiedades que puedan diferenciar m ás a cada
objeto dentro de una clase, como nombre, apellido, DNI, etc... En nuestro caso, como
te puedes imaginar las propiedades de una celda por ejemplo, puede ser el color de la
fuente, el color del fondo, el tipo de letra, etc.,
Además de las propiedades, hemos dicho que las clases se caracterizan por su
comportamiento, en la programación orientada a objetos se le suele llamar métodos,
que están diferenciados en funciones y procedimientos.
Página 18 de 175
MANUAL DE VBA PARA EXCEL 2010
La programación de macros se hace a través del lenguaje VBA (Visual Basic for
Applications) desde el editor VBA que trae incorporado Excel. Este tipo de
programación también se conoce como “Programación Orientada a Objetos” (OOP,
Objects Oriented Programming). La Programación orientada a Objetos nos permite
trabajar sobre los objetos propios de Excel, como así también crear nuestros propios
objetos.
Una de las grandes ventajas de la OOP, es que utiliza objetos ya definidos por
alguien, sin tener que conocer nada sobre su implementación, sólo debemos conocer
sus propiedades y métodos y utilizarlos de forma correcta.
El lenguaje VBA es muy fácil de entender y siempre gira en torno a seleccionar los
objetos, cambiar sus propiedades y/o ejecutarles distintos métodos. La única
particularidad es que el lenguaje VBA solo está en inglés, en las siguientes tablas
tienes unas cuantas traducciones de objetos de Excel a su correspondiente traducción
al español:
INGLES ESPAÑOL
Cell Celda
Range Rango
Worksheet Hoja
Workbook Libro
Color Color
Format Formato
Página 19 de 175
MANUAL DE VBA PARA EXCEL 2010
INGLES ESPAÑOL
Copy Copiar
Protect Proteger
Delete Borrar
El lenguaje VBA tiene miles de OPM, y existe una forma muy práctica de
conocerlos todos que es con la grabadora de macros tal y como has visto su utilización
en los apartados anteriores.
Aprender macros es mucho más fácil de lo que te imaginas. Es cierto que hay
macros muy complicadas que requieren un conocimiento muy avanzado del lenguaje
VBA. Pero es un lenguaje fácil y muy intuitivo. Además Excel posee una grabadora de
macros que las escribe de forma automática. Y luego siempre podrás retocarlas a tú
gusto.
Página 20 de 175
MANUAL DE VBA PARA EXCEL 2010
Está introducción es muy básica y sólo pretende mostrar algunos de los conceptos
más importante para empezar a realizar las primeras prácticas de programación.
Página 21 de 175
MANUAL DE VBA PARA EXCEL 2010
El Editor de Visual Basic es la aplicación que trae Excel desde donde se escriben y
guardan las macros, y se pueden escribir los procedimientos y funciones. Las
diferentes formas que tenemos de acceder al editor de Visual Basic son:
NOTA: Recuerda que en la versión de Excel 2010, las opciones del menú de
macros se encuentran en la ficha Programador. Si no tienes visible la ficha
Programador, puedes activarla de la siguiente forma:
Página 22 de 175
MANUAL DE VBA PARA EXCEL 2010
Una vez que hayas accedido al editor de Visual Basic, por cualquiera de los
métodos, botón de Visual Basic, o método abreviado ALT+F11, verás algo similar a la
figura siguiente (no importa si no lo ves estrictamente similar, eso dependerá de las
ventanas que tengas visibles y ocultas). Puedes mostrar u ocultar estas ventanas
desde el menú Ver.
Ventana proyectos
Ventana de código
Ventana de
propiedades
Ventana de
inmediato
La ventana de proyecto
La ventana de Propiedades
Esta ventana permite mostrar las propiedades relativas al libro, a las hojas de
cálculo, a las hojas gráficas y a los formularios.
Página 23 de 175
MANUAL DE VBA PARA EXCEL 2010
La ventana de Código
La ventana de inmediato
Esta es la barra de menú del editor de Visual Basic donde podemos acceder a las
diversas opciones y comandos del propio editor.
La barra de botones
Página 24 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 25 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 26 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 27 de 175
MANUAL DE VBA PARA EXCEL 2010
Así las palabras clave, las funciones y las instrucciones de VBA se muestran en
azul, los objetos, métodos y propiedades en negro y los comentarios en verde. Y las
instrucciones que contienen errores se suelen resaltar en rojo.
Para modificar el estilo (colores, tipo y tamaños) de las diferentes partes del
código, tenemos que acudir a las Opciones del menú de Herramientas, y seleccionar
por ejemplo, la ficha Formato de editor.
Para activar estas herramientas tenemos que acudir a la ficha Editor de las
Opciones del menú Herramientas que hemos comentado anteriormente.
Página 28 de 175
MANUAL DE VBA PARA EXCEL 2010
Cuando guardamos un archivo y queremos que las Macros que hemos creado se
almacenen con el resto de las hojas de cálculo deberemos utilizar un tipo de archivo
diferente.
Página 29 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 30 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 31 de 175
MANUAL DE VBA PARA EXCEL 2010
Los procedimientos
Los dos primeros son los que más se utilizan habitualmente que principalmente
tienen en común el que ambos tienen instrucciones y/o métodos de VBA, aceptan
argumento y pueden llamarse desde otras funciones o procedimientos Sub.
Página 32 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 33 de 175
MANUAL DE VBA PARA EXCEL 2010
NombreArgumento:=Valor
Ejemplo de procedimiento con referencia a argumentos con nombres:
Este procedimiento va mostrar una ventana tras su ejecución donde aparecerá el
título, el mensaje de la misma junto a dos botones, haciendo uso de los argumentos
Title, Buttons y Prompt.
Página 34 de 175
MANUAL DE VBA PARA EXCEL 2010
De modo predeterminado, los procedimientos son públicos por lo cual pueden ser
llamados desde cualquier procedimiento del proyecto de Excel, y hay que saber cómo
pueden ser llamados desde otros procedimientos dependiendo donde se encuentren.
Application.Run Nombredellibro!NombredelMódulo.NombrredelProcedimiento
Página 35 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 36 de 175
MANUAL DE VBA PARA EXCEL 2010
Las clases son modelos que permiten crear objetos de la misma naturaleza. Los
objetos procedentes de una misma clase heredan sistemáticamente todos los
métodos, propiedades y sucesos de su clase de origen. Es posible crear clases de
objetos con VBA Excel utilizando módulos de clase.
Una muestra de los objetos que podemos encontrar en Excel se encuentran los
siguientes:
Las colecciones a las cuales podemos acceder para recorrer sus elementos
podemos encontrar:
AddIns: Colección que contiene todas las macros creadas hasta ese
momento.
Workbooks: Colección de los libros abiertos (Workbook).
Worksheets: Colección de las hojas de cálculo (Worksheet).
Dialogs: Colección de los cuadros de diálogo integrados de Excel.
Página 37 de 175
MANUAL DE VBA PARA EXCEL 2010
Microsoft Excel utiliza muchas de ellas en sus objetos y suelen ser identificadas en
el desplegable automático de instrucción del editor, porque suelen ir precedidas por
prefijos como xl, vb o mso.
Página 38 de 175
MANUAL DE VBA PARA EXCEL 2010
Comentarios
Página 39 de 175
MANUAL DE VBA PARA EXCEL 2010
Carácter de continuación
Los sangrados
Página 40 de 175
MANUAL DE VBA PARA EXCEL 2010
- Range(Referencia).Formula
- Range(Referencia).FormulaLocal
- Range(Referencia).FormulaRC
- Range(Referencia).FormulaRCLocal
Estilo Formula
Además de la propiedad Value que tienen todas las celdas en Excel, cada una
de ellas también tendrá la propiedad Formula, la cual almacenará la fórmula asociada.
La distinción entre la propiedad Formula y FormulaLocal, la podemos establecer en
cuanto a fórmulas que se guardan con la referencia en el idioma local (en nuestro
caso, en castellano), o con la referencia en inglés. Así por ejemplo, si queremos
sumar los datos de un rango, el uso de una u otra propiedad, implicará la necesidad de
recurrir a los nombres de las funciones en el idioma en inglés, o a la designación local
del ordenador dependiendo de la configuración regional del mismo. En la siguiente
ilustración podemos comprobar la diferencia entre ambas:
Estilo FormulaL1C1
Página 41 de 175
MANUAL DE VBA PARA EXCEL 2010
Para entender cómo funciona este tipo de referencia tenemos que abandonar
las habituales referencias de columnas por letras, y filas por números, por la siguiente
sintaxis de L (línea o R, para versión en inglés, row) y la C (para columna, igual para la
versión en inglés). Si lo que necesitamos es desplazar la referencia hacia otras
ubicaciones, utilizaremos números positivos para desplazarnos hacia abajo en el caso
de las filas, o hacia la derecha en el caso de las columnas, y negativos para
desplazamientos hacia arriba, en el caso de las filas, y hacia la izquierda, en el caso
de las columnas. Así por ejemplo, desde la referencia E5, utilizaremos L[1]C para
hacer referencia a E6, y utilizaremos L[-1] para hacer referencia a E4.
Así por ejemplo, si se escribe =L[-1] C[-1] en la referencia D5, significa que se
está haciendo referencia a una celda de la fila de más arriba y a una columna a la
izquierda, en este caso sería a la celda C4.
Página 42 de 175
MANUAL DE VBA PARA EXCEL 2010
Una referencia mixta es aquella en la que la fila es fija y la columna puede ser
relativa, o a la inversa, donde la columna sea fija y la fila pueda ser relativa. Son
muchas las circunstancias donde este tipo de referencias puede ser de utilidad, todo
dependerá de la operación matemática que necesites realizar.
En algunas ocasiones puede ser necesario escribir una fórmula que tenga que
hacer referencia a toda una columna. Por ejemplo, es posible tener que obtener el
valor máximo de la columna D. Si no se sabe cuántas filas tiene la columna D, se
podría escribir una función como la siguiente: =MAX($D:$D) en estilo A1 o, =MAX (C4)
en estilo L1C1. Para saber el valor mínimo en la fila 2, tendríamos que escribir la
siguiente función en estilo A1 =MIN($2:$2), mientras que en estilo L1C1 sería la
siguiente: =MIN(L2). Para el caso de referencias relativas, cuando quisiéramos
calcular el promedio de la fila superior en la que estemos situados tendríamos que
utilizar la FormulaR1C1Local =PROMEDIO(L[-1]).
Para un caso de referencias del estilo L1C1, la fórmula sería =RC1*R1C, que
vendría a decir que se multiplicase la primera columna C1, por la primera fila R1.
Página 43 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 44 de 175
MANUAL DE VBA PARA EXCEL 2010
Para escribir datos de tipo texto o cadena simplemente hay que estar pendiente de
incorporar comillas (“) en el valor que incorporaremos en la referencia.
NOTA: En este procedimiento se ha hecho uso del objeto Debug.Print que nos
permite visualizar en la ventana Inmediato el resultado del procedimiento. Este objeto
es de mucha utilidad para la depuración del código introducido. Recuerda que la
ventana inmediato sirve para escribir, ejecutar y probar un código rápidamente.
También se puede comprobar el resultado de una instrucción copiando dicha
instrucción en la ventana precedido por el símbolo de interrogación (?).
En la siguiente ilustración podemos comprobar el resultado de una instrucción que
nos devuelve el número de hojas que tiene nuestro libro, antes de que forme parte de
un procedimiento más extenso.
Página 45 de 175
MANUAL DE VBA PARA EXCEL 2010
Con esta instrucción podemos acceder al valor de una referencia concreta desde
el objeto más superior que sería Application.
Página 46 de 175
MANUAL DE VBA PARA EXCEL 2010
Este procedimiento tiene por objetivo modificar el formato de los datos además de
incorporar cierta información previamente.
Página 47 de 175
MANUAL DE VBA PARA EXCEL 2010
NOTA: Recuerda que para comprobar el resultado del procedimiento de los estos
ejemplos deberás hacer uso del botón de Ejecutar Sub, que puedes encontrar en la
barra de herramientas.
Página 48 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 49 de 175
MANUAL DE VBA PARA EXCEL 2010
Con este procedimiento se van a realizar los cálculos de una tabla haciendo uso de
diferentes estilos de fórmulas.
Ejemplo 15: Añadir una hoja, y modificar algunas de sus propiedades, como
son, su nombre y ocultación.
Con este procedimiento vamos a modificar algunas de las propiedades más
comunes de las hojas, como son, añadir una nueva hoja, modificar su nombre u
ocultar su visibilidad a los usuarios, para lo cual tendremos que hacer uso del
método Add y las propiedades Name y Visible, asignando los valores adecuados
para su correcta modificación.
Página 50 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 51 de 175
MANUAL DE VBA PARA EXCEL 2010
1. Crea una fórmula en el rango E8:E13 y E15:E20 para que multiplique las
unidades compradas del mes de enero, por el precio de compra que se
encuentra en la referencia B4.
2. Haz los mismo para el caso de las ventas, en este caso la fórmula será el
precio de venta por las unidades vendidas, para el rango F8:F13 y F15:F20.
3. Incorporar una fórmula para sumar los semestres del producto.
4. Incorporar el resto de fórmulas de estilo Formulalocal y FórmulaRC.
5. Aplica un formato de moneda para el rango donde se ha copiado las fórmulas.
6. Muestra un mensaje final de confirmación, con el texto: Se han rellenado las
fórmulas correctamente.
Página 52 de 175
MANUAL DE VBA PARA EXCEL 2010
1. Añade una nueva hoja al final del libro con el nombre de Hojasdelibro.
2. En las referencias A1:A4 incorporar los tres primeros nombres de las hojas, y
en A4, el nombre de la penúltima hoja.
3. Oculta la hoja.
4. Muestra un mensaje al final del procedimiento que nos diga que ya se ha
realizado la Practica03.
Página 53 de 175
MANUAL DE VBA PARA EXCEL 2010
Solución Práctica01:
Solución Práctica02:
Página 54 de 175
MANUAL DE VBA PARA EXCEL 2010
Solución Práctica03:
Página 55 de 175
MANUAL DE VBA PARA EXCEL 2010
El uso de las variables tiene sentido ya que nos permiten guardar valores
intermedios durante la ejecución del código VBA para efectuar cálculos
posteriormente. La estructura básica de un procedimiento podría estar compuesta por
las siguientes partes.
Página 56 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 57 de 175
MANUAL DE VBA PARA EXCEL 2010
Las VARIABLES se identifican con un nombre que permite referenciar el valor que
estas contienen y un tipo que determina la naturaleza de los datos que pueden
almacenar.
Existen diferentes tipos de variables en base el tipo de valor que vayan a guardar,
así suele ser conveniente adaptar el tipo de variable al contenido que vaya a
almacenar para optimizar la memoria de almacenamiento.
Página 58 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 59 de 175
MANUAL DE VBA PARA EXCEL 2010
Una variable puede ser visible para todos los procedimientos o funciones de un
módulo, si está declarada en la sección de declaración del módulo (al principio del
módulo) mediante Private o Dim.
Una variable también puede ser pública para toda la aplicación (es decir, visible
desde cualquier parte de la aplicación), si está declarada en la sección de declaración
de un módulo con la instrucción Public.
Página 60 de 175
MANUAL DE VBA PARA EXCEL 2010
Dim : Con esta instrucción las variables declaradas están disponibles para todos los
procedimientos del módulo, y no son accesibles desde ningún otro módulo. Las
variables declaradas con la instrucción Dim a nivel de procedimiento (entre las
expresiones Sub y End Sub), sólo están disponibles dentro del procedimiento.
Private: A nivel de módulo (y no de procedimiento) las variables sólo están
disponibles para el módulo en el que se declaran.
Public: A nivel de módulo únicamente, las variables declaradas con las instrucción
Public son accesibles desde todos los módulos de todos los proyectos abiertos de
Excel.
Static: Es una instrucción utilizable sólo a nivel de procedimiento, las variables
declaradas mediante la instrucción Static conservan su valor durante todo el tiempo
de ejecución del código.
La declaración de variables
Declaración implícita.
En el momento de ejecutarse un procedimiento si VBA encuentra una variables
que no ha sido declarada de forma explícita a través de la expresión Dim, entonces se
hará de forma implícita a adjudicando a dicha expresión un tipo Variant.
Página 61 de 175
MANUAL DE VBA PARA EXCEL 2010
Declaración explícita.
Debido a la circunstancia anterior es conveniente declarar previamente el tipo de
variables con las cuales vamos a trabajar, ya que sino se encargará VBA de hacerlo
de manera implícita con la asignación de variables del tipo Variant, con el despilfarro
de recursos que supone tal circunstancia.
Página 62 de 175
MANUAL DE VBA PARA EXCEL 2010
Los operadores
Página 63 de 175
MANUAL DE VBA PARA EXCEL 2010
Operador &
Este operador nos permite unir o encadenar información de diferentes variables.
Variables estáticas
Página 64 de 175
MANUAL DE VBA PARA EXCEL 2010
Las constantes
Página 65 de 175
MANUAL DE VBA PARA EXCEL 2010
Las constantes a nivel de módulo son privadas por defecto. Sin embargo para
declarar una constante a nivel de módulo como pública, es necesario preceder la
expresión Const con la palabra clave Public.
Pero estas no son las únicas constantes con las cuales nos podemos
encontrar, Visual Basic dispone de una serie de constantes llamadas intrínsecas que
son visibles en el examinador de objetos, y pueden aparecer en el momento de
completar determinados argumentos de algunos objetos o funciones de VBA. El más
básico lo constituye la función MsgBox cuando queremos mostrar diferentes tipos de
botones en la ventana, para lo cual tenemos que seleccionar un tipo de constante
diferente.
De igual modo, existen constantes que nos van a permitir realizar tareas
habituales en los cuadros de mensaje, como pueda ser realizar saltos de línea para
ver en varias líneas el prompt del Msgbox, para lo cual tendremos que emplear
constantes del tipo vbCr, para realizar un salto de párrafo, o vbLf para realizar un salto
de línea, con la utilización de la constante vbCrLf, se puede realizar tanto un salto de
carro y un salto de línea.
Página 66 de 175
MANUAL DE VBA PARA EXCEL 2010
Las matrices
Una matriz se declara del mismo modo que las variables, mediante
instrucciones Dim, Static, Private o Public. Una matriz es una variable que contiene
diversas celdas que permiten almacenar el mismo número de valores. Mientras, que
una variable estándar sirve para guardar un único valor.
Página 67 de 175
MANUAL DE VBA PARA EXCEL 2010
Las matrices no tienen que tener siempre unos elementos estáticos, sino que
puede ser redefinidos sus elementos durante la ejecución del procedimiento porque
dichos elementos se han podido variar, por la eliminación o incorporación de algún
nuevo elemento.
Página 68 de 175
MANUAL DE VBA PARA EXCEL 2010
Dim Matriz ()
Página 69 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 70 de 175
MANUAL DE VBA PARA EXCEL 2010
Otra posibilidad para poder hacer uso de funciones desde el código de VBA lo
encontramos en el objeto VBA.
Página 71 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 72 de 175
MANUAL DE VBA PARA EXCEL 2010
Ejemplo 7: Procedimiento para localizar la fila que tiene el último dato, así
como el dato de la última fila.
Página 73 de 175
MANUAL DE VBA PARA EXCEL 2010
3. Crea variables para guardar toda la información solicitada, así como para los
rangos sobre los cuales se van a realizar los cálculos.
a. Escribe en las celdas reservadas de la factura los cálculos realizados.
Página 74 de 175
MANUAL DE VBA PARA EXCEL 2010
Solución Práctica04:
Página 75 de 175
MANUAL DE VBA PARA EXCEL 2010
Importe >1000
Operador de Significado
comparación
= Igual
<> No igual o distinto
> Mayor
< Menor
>= Mayor o igual
<= Menor o igual
Página 76 de 175
MANUAL DE VBA PARA EXCEL 2010
Instrucción IF
IF <condición> THEN
<instrucción>
ELSEIF <condición> THEN
<instrucción>
ELSE
<instrucción>
END IF
Página 77 de 175
MANUAL DE VBA PARA EXCEL 2010
Con este tipo de sintaxis el bloque de instrucciones puede tener varias líneas y
contiene las siguientes palabras claves para configurar su estructura como son If,
Elseif, Else y End If. Con este tipo de estructuras podemos establecer mayor número
de condiciones en base a nuestras necesidades.
Página 78 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 79 de 175
MANUAL DE VBA PARA EXCEL 2010
Pero puede ocurrir que necesitemos más posibilidades con la función lógica para
lo cual tendremos que crear condiciones anidadas. En el siguiente ejemplo, se crea un
diseño de funciones condicionales para evaluar la nota proporciona a través de un
Inputbox.
Página 80 de 175
MANUAL DE VBA PARA EXCEL 2010
Para este caso tendremos que hacer uso de una función denominada IsEmpty que
permite evaluar si una celda tiene contenido o no.
Con este procedimiento podemos generar una ventana donde nos permitirá elegir
entre permanecer o salir de la aplicación a través de un cuadro de mensaje que tiene
dos botones.
Página 81 de 175
MANUAL DE VBA PARA EXCEL 2010
Instrucción Select
Página 82 de 175
MANUAL DE VBA PARA EXCEL 2010
Con este ejemplo se va a evaluar la hora actual para generar diferentes tipos de
mensajes con una estructura de decisión.
Con este ejemplo se pueden comprobar los diferentes sistemas que tenemos
para hacer referencia a los casos, tanto a través de intervalos como a varios casos
determinados.
Página 83 de 175
MANUAL DE VBA PARA EXCEL 2010
END FUNCTION
El ejemplo más básico de función viene dado por la utilización de una única
variable la cual la multiplicares por una constante o valor, el caso, más sencillo lo
puede constituir una función que calcule el IVA, de una cantidad determinada.
Página 84 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 85 de 175
MANUAL DE VBA PARA EXCEL 2010
1. Crea variables para guardar el perfil mayoritario para cada grupo según sea
hombre o mujeres, de población urbana o rural, y por último, con estudios o sin
estudios.
2. Crea un sistema de condiciones para que el resultado sea el correcto en base a los
datos de la tabla.
3. Cuando ejecutes el procedimiento nos tiene que devolver el perfil en un cuadro de
mensaje.
Página 86 de 175
MANUAL DE VBA PARA EXCEL 2010
Solución Practica05:
Solución Practica06:
Página 87 de 175
MANUAL DE VBA PARA EXCEL 2010
Solución Convertir_claves:
Solución Practica07:
Página 88 de 175
MANUAL DE VBA PARA EXCEL 2010
Solución Practica08:
Página 89 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 90 de 175
MANUAL DE VBA PARA EXCEL 2010
Para esta estructura se necesitan las siguientes palabras claves For, To y Next, así
como el operador igual (=). La variable i, en este caso, sigue el rastro de una cuenta,
según los puntos de partida y finales del bucle. En el caso, que nos muestra la
ilustración el comienzo se sitúa en el valor 1 y el final en al 10. Mientras que la o las
líneas que se encuentran entre las expresiones For y Next son las instrucciones que
se repiten cada vez que se ejecuta el bucle.
<instrucciones>
Next <contador>
Página 91 de 175
MANUAL DE VBA PARA EXCEL 2010
<instrucciones>
Next <contador>
Página 92 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 93 de 175
MANUAL DE VBA PARA EXCEL 2010
<instrucciones>
Next <elemento>
Todas aquellas colecciones del modelo de objetos de Excel puede ser recorrido
a través de estructuras de este tipo, como por ejemplo, las celdas que componen un
rango como en el ejemplo siguiente:
Página 94 de 175
MANUAL DE VBA PARA EXCEL 2010
Estructuras en bucle
Do while <condición>
<instrucciones>
<modificación o incremento de la condición>
Loop
Página 95 de 175
MANUAL DE VBA PARA EXCEL 2010
Do
<instrucciones>
<modificación o incremento de la condición>
Página 96 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 97 de 175
MANUAL DE VBA PARA EXCEL 2010
Con este ejemplo se va a evaluar la hora actual para generar diferentes tipos de
mensajes para lo cual hay que hacer uso del objeto Cells (fila,columna) que permite
incorporar valores en una celda en base a dos argumentos numéricos.
Con este ejemplo se va a conseguir incorporar los nombres de las diferentes hojas
del libro, haciendo uso de una estructura de repetición que va a recorrer dos
colecciones diferentes: la colección Sheets para recuperar la propiedad name, además
de la colección Cells (fila,columna) que nos va a permitir grabar los diferentes nombres
de las hojas en celdas distintas.
Página 98 de 175
MANUAL DE VBA PARA EXCEL 2010
Página 99 de 175
MANUAL DE VBA PARA EXCEL 2010
OBJETIVO: “Diseñar un procedimiento crear una serie lineal desde 100, de cien en
cien hasta 10.000 de manera continua en una hoja en la columna A”.
OBJETIVO: “Diseñar un procedimiento para que guarde en una matriz los nombres de
las hojas del libro, y nos muestre los nombres de todas las hojas en un Msgbox en
columnas”.
OBJETIVO: “Modifica el siguiente código para que realice una comparación correcta
de los datos, para que si son todos iguales diga todos son iguales, o son distintos”.
OBJETIVO: “Diseña un procedimiento con una estructura de tipo bucle para que
localice la primera celda vacía de los datos situados en la hoja PRACTICA13, y nos
muestre en un Msgbox el número de la fila que se encuentra en blanco, y se situé en
dicha celda.”
OBJETIVO: “Diseña un procedimiento con una estructura de tipo bucle para que nos
muestre un Inputbox en el cual tengamos que incorporar un número mayor de 20, y
hasta que no lo hagamos no se cierre el Inputbox.”.
OBJETIVO: “Diseñar una función para separar los números del texto de una celda”
OBJETIVO: “Diseñar una función para contar los espacios que hay en una celda”
Solución Practica09:
Solución Practica10:
Solución Practica11:
Solución Practica12:
Solución Practica13:
Solución Practica14:
El lenguaje Visual Basic cuenta con numerosas funciones integradas, como las
funciones relativas a las fechas (day, week, year, format,…). Pero además de estas
funciones integradas, se pueden crear funciones propias personalizadas.
<Secuencia de instrucciones>
End function
Una función es lo mismo que un procedimiento con la salvedad que este devuelve
un valor al procedimiento o función que lo llama. Vea el siguiente ejemplo, es una
función muy sencilla ya que suma dos números (X e Y), que guarda en una variable
llamada Resultado, para posteriormente devolvérselo a la función Sumar.
Para poder utilizar esta función en nuestra hoja de cálculo tendremos que
acudir al asistente de funciones que podemos encontrar en la barra de fórmulas, para
posteriormente seleccionar la categoría de funciones Definidas por el usuario.
Ejemplo 06: Función para separar el texto de los números que tiene una
celda.
Con esta función vamos a conseguir separar parte del contenido de la celda
haciendo uso tanto de estructuras de repetición, junto a condicionales que nos
permitan valorar cada uno de los caracteres que componen el texto de una celda. Con
el siguiente ejemplo podemos ver como una función puede complicarse combinando
ambas estructuras.
OBJETIVO: “Diseñar una función para separar los números del texto de una celda”
OBJETIVO: “Diseñar una función para contar los espacios que hay en una celda”
Solución Practica15:
Solución Practica16:
LECCIÓN 9: FORMULARIOS
Los UserForms se utilizan mucho para crear aplicaciones Excel que luzcan de
forma profesional y permitan al usuario introducir datos o elegir opciones de una forma
guiada y más intuitiva.
Los formularios permiten diseñar interfaces de usuario simples y amigables
para la introducción, modificación o visualización de los datos. En estos formularios
personalizados podemos:
Incorporar controles ActiveX como cuadros de texto, listas
desplegables, cuadros combinados, casillas de verificación, botones de
comando …
Asociar código VBA que permita responder a los distintos sucesos o
eventos del usuario (como hacer un clic sobre un botón de comando,
entrar datos en un cuadro de texto, seleccionar un valor de una lista
desplegable …)
Crear un formulario
Un formulario se crea en una hoja UserForm.
El procedimiento para crear un Userform es muy sencillo, lo primero que hay
que hacer es Abrir el editor de VBA (por ejemplo, con CTRL+F11). Y a continuación
insertar una hoja UserForm a través del menú Insertar.
También podemos incorporar un formulario haciendo uso del botón derecho del
ratón sobre la ventana de proyectos, de forma similar a como lo hemos hecho
anteriormente.
Todos los controles incorporados, así como el formulario UserForm poseen una
serie de propiedades que podemos modificar para personalizar su apariencia, o
mejorar su funcionamiento. Algunas de las propiedades más destacables del
formulario son por el ejemplo:
La idea es que mediante estos controles podremos tanto capturar como enviar
información o datos desde o hacia las celdas de Excel respectivamente. También
podemos asociar macros a los controles que agreguemos al Userform
Si te posicionas sobre los Controles del Cuadro de herramientas, verás que
aparece su nombre. Simplemente hacemos clic izquierdo en el control deseado y
luego clic izquierdo en el Userform, en el sitio donde queramos agregar el control. En
nuestro caso hemos agregado algunos controles de forma desordenada dentro del
Userform.
distintas secciones.
Ejemplo: un userform con cuatro secciones: Norte, Sur, Este y Oeste. Dentro
de cada sección podemos ubicar distintos controles.
Página múltiple (MultiPage): en un mismo Userform se pueden crear
distintas páginas.
Ejemplo: un userform con 2 páginas: España y Resto del Mundo. Dentro de
cada página podemos ubicar distintos controles o distintas secciones.
Barra de desplazamiento (ScrollBar): si tenemos una lista con muchos
elementos el scrollbar nos permite navegarlos.
Ejemplo: tenemos una lista con 150 países. Con el ScrollBar podemos subir y
bajar por la lista de los mismos utilizando las flechas de desplazamiento.
Botón de número (SpinButton): permite aumentar o disminuir valores.
Ejemplo: tenemos una lista con tipos de interés y queremos que sean
incrementados o disminuidos en cantidades predeterminadas desde el
SpinButton.
Imagen (Image): permite introducir imágenes en el Userform.
Ejemplo: queremos introducir una fotografía como fondo del Userform para
darle un aspecto más profesional.
Referencia (RefEdit): permite hacer referencia a una celda de Excel.
Ejemplo: queremos que el usuario seleccione un dato que fue introducido
previamente en una celda Excel.
La elección del suceso más adecuado es esencial, para poder ejecutar nuestros
procedimientos una vez iniciado el comportamiento o el suceso seleccionado, para
conseguir que se ponga en marcha el código que lleva asociado. La elección de cada
suceso tiene que ver principalmente con la lógica que tengamos pensado aplicar a
nuestra aplicación, para que el usuario pueda utilizar nuestros controles del formulario
de la manera más intuitiva posible, sin incurrir en dudas o errores de funcionamiento.
Entre los sucesos o eventos más comunes a gran parte de los controles podemos
encontrar los siguientes:
OBJETIVO: Crear un Userform para que un usuario complete unos datos personales
(Nombre, Edad y Fecha de Nacimiento). Luego que el usuario complete sus datos, al
pulsar un botón, los mismos se volcarán en una tabla de Excel.
Los controles que utilizaremos en el formulario serán:
Cuadro de texto(Textbox): para que el usuario introduzca los datos
Etiqueta (Label): para darle el nombre a los Textbox
Botón de comando (CommandButton): para proceder con la introducción de
datos o cancelar
La secuencia de los pasos que deberemos seguir para realizar el ejercicio será:
1) Crear la tabla en la hoja Excel que contenga una tabla donde se volcarán los
datos del Userform. Para esto creamos un nuevo libro llamado Datos.xls xm?
donde crearemos una tabla con la siguiente estructura.
8) Haremos clic en alguna parte vacía del Userform para seleccionarlo y mostrar
el cuadro de herramientas, para que nos permita agregar el resto de controles
que faltan para completar el formulario. Intenta que el formulario quede como el
que se ve en la siguiente ilustración.
NOTA IMPORTANTE: Es muy importante que no olvides asignar bien los nombres
(Name) a los Cuadros de texto (Textbox), y a los botones de comando, de no
hacerlo correctamente el procedimiento puede dar lugar a errores por este sencillo
error de designación de los controles.
10) Por último agregaremos el código a los botones de comando para que puedan
adquirir cierta funcionalidad en nuestro formulario.
Empezaremos por el botón Grabar datos, que dando doble clic sobre él, y
pasaremos al editor de código de Vba, con una vista similar a la siguiente:
'Limpia el formulario
Me.FNombre.Value = ""
Me.FApellidos.Value = ""
Me.FFechanacimiento.Value = ""
Me.FNombre.SetFocus
End Sub
Si queremos volver a ver el formulario tendremos que elegir la opción Objeto del
menú Ver.
Unload Me
End Sub
NOTA: La tecla TAB sirve para moverse entre los distintos controles de un Userform.
Si al presionar TAB el orden del movimiento no es el correcto, es posible cambiarlo:
1. Clic derecho en una parte vacía del Formulario.
2. Elegimos Orden de Tabulación.
Ejemplo 02: Formulario para realizar diferentes cálculos con los datos de
la hoja para luego grabarlos en una hoja determinada.
NOTA: En ciertas ocasiones puede que necesitemos algún tipo de control especial
que no tiene por que aparecer de manera inmediata en el cuadro de controles. En tal
caso, tendremos que acudir a la opción Controles adicionales del menú Herramientas.
Y marcar el control que deseemos incorporar en una lista de controles para que
luego pueda aparecer en el cuadro de herramientas.
La secuencia de los pasos que deberemos seguir para realizar el ejercicio será:
1) Abrir un nuevo libro con dos hojas con el nombre de Datos y Resultados, que
contenga las siguientes estructuras que puedes ver en las siguientes
ilustraciones. Puedes guardar el libro con el nombre de Formulario02.xlsm
(libro habilitado para macros).
HOJA
HOJA RESULTADOS
DATOS
2) Lo primero que tendrías que hacer en este ejemplo activar los controles que
pudieras necesitar incorporar en nuestro formulario y que no esté, en el cuadro
de controles de nuestra configuración. En este caso concreto, el control
Referencia (RefEdit) suele ser uno de los casos, y tendrás que activarlo tal y
como lo has visto en la nota anterior.
Control
Referencia
(RefEdit) Control Botón de
opción (OptionButton)
Cuadro de texto
Botones (Textbox)
de
comando
Etiquetas (Labels)
NOTA IMPORTANTE: Es muy importante que no olvides asignar bien los nombres
(Name) a los Cuadros de texto (Textbox), a los botones de comando y al resto de
controles, de no hacerlo correctamente el procedimiento puede dar lugar a errores
por este sencillo error de mal designación de los controles.
7) Por último agregaremos el código a los botones de comando para que puedan
adquirir cierta funcionalidad en nuestro formulario.
a. Empezaremos por el botón Aceptar, que al hacer doble clic sobre él, nos
permitirá ir al editor de código de Vba, con una vista similar a la siguiente:
'Declaración de la variables
Dim Rango As String
Dim Maximo As Long
Dim Suma As Long
Dim Promedio As Single
End Sub
End Sub
Con este código podremos grabar el resultado del cáculo que se encuentra en
el cuadro de texto, en diferentes columnas de la hoja Resultados, en base a la
operación matemática que previamente hayamos seleccionado, con pulsar
simplemente el botón de Grabar.
Unload Me
End Sub
Por último una vez terminado el formulario nos quedará probarlo para
comprobar que todo funciona correctamente, para conseguirlo tendremos que poner
en marcha el formulario con el botón Ejecutar que se encuentra en la barra de
herramientas.
Las tablas dinámicas es una de las herramientas más potentes que tiene la hoja de
cálculo. Una tabla dinámica básica nos puede servir, por ejemplo, para generar
rápidamente un resumen de datos en cuestión de segundos.
Los conceptos previos que hay que tener en cuenta antes del diseño de
cualquier tabla dinámica es el de campo, que viene dado por el tipo de información de
la base de datos, y el de registro que es cada una de las filas del listado.
ejemplo, tiene sentido utilizar columnas dónde los datos estén repetidos como pueda
ser profesión, ciudad, país, empresa o situación laboral.
Aunque las tablas dinámicas es una de las herramientas más utilizadas por
todos los usuarios de Excel, detallaré los aspectos más relevantes de sus uso, para
que aquellos usuarios que queriéndose iniciar en el mundo de la programación,
todavía no hayan tenido contacto con las mismas.
Veamos cómo podemos crear una tabla dinámica a partir de unos datos que ya
tenemos. Para crear una tabla dinámica, Excel nos proporciona las tablas y gráficos
dinámicos, que se encuentra en la ficha Insertar.
Y el segundo bloque de
opciones nos solicitaría donde
queremos ubicar la tabla dinámica
que suele tener una estructura de
tabla de doble entrada (títulos de fila y
de columna).
Una vez confirmadas las opciones predeterminadas, nos aparecerá una nueva
hoja de cálculo con una vista similar a la de la siguiente ilustración. En donde la zona
más importante la constituye la zona de arrastre de los campos de nuestro listado.
Existe una serie de criterios generales a tener en cuenta para saber qué tipo de
campos está solicitando en cada zona:
Una vez eliminadas las posibles tablas dinámicas que estuvieran en la hoja de
destino, pasaremos a asignar referencias de objeto a las diferentes variables
previamente declaradas o valores, según sea el caso, lo cual nos va a permitir
modificar el diseño de la tabla dinámica de manera más eficaz y cómoda.
El siguiente paso importante a realizar una vez asignados los valores y objetos
a las variables es definir un área de entrada y establecer un caché dinámico, que lo
conseguiremos con la siguiente instrucción:
Como puedes ver para aquellos casos que tienen más de un campo en la zona
hacemos uso de una Array para poder contemplarlo.
Una vez que hayamos decidido cuáles van a ser los campos que van a
componer el diseño de nuestra tabla, y en qué zonas de la tabla los estableceremos,
pasaremos a configurarlos para decidir qué tipo de cálculo, en qué posición y valor
seleccionaremos, todo ello lo conseguiremos con propiedades como Orientation,
Position, Function o CurrentPage.
Mención especial merece el caso del área de valores, que es aquella zona de la
tabla dinámica donde se realizan los diferentes cálculos de recuento o suma de la
tabla de datos. Para lo cual, lo primero que tendremos que indicar es el campo
utilizado que reflejará los cálculos, justo en el bloque With podemos observar que ha
sido el campo PivotFields(“NIF”) el que se utilizará para el recuento, esta circunstancia
la explicitaremos estableciendo en la propiedad Orientation, el valor o la constante,
xlDataField. A parte de esta propiedad tendremos que modificar otras más para
conseguir establecer el tipo de función que nos interese realizar, si queremos contar
los registros tendremos que establecer el valor o constante de xlCount en la propiedad
Function, si lo que queremos es el promedio, entonces tendremos que hacer uso de la
constante xlAverage, y si lo que nos interesa es sumar el valor, entonces será la
xlSum. Además podremos cambiar el rótulo del campo por el texto que nos interese
modificando la propiedad Name. También podemos añadir varios cálculos a la tabla,
para lo cual tendremos que establecer dos zonas diferentes de código para conseguir
dicho resultado como se puede apreciar en la siguiente ilustración.
Una vez que se ha creado la tabla dinámica puede resultar interesante recuperar
algún tipo de información de la misma, a través del código de VBA. Entre la
información relevante que podríamos recuperar podría estar los campos que son el
origen de la tabla, un cálculo de alguno de los filtros, o incluso un dato de toda una
serie de valores.
Para poder realizar esta tarea lo primero que tendremos que hacer es saber que
clase, colección, propiedad o método tenemos que utilizar para recuperar la
información que necesitamos. Si por ejemplo, lo que necesitamos es el nombre de los
campos de una tabla, en tal caso, tendremos que hacer uso de la colección
PivotFields, que representaría el conjunto de campos que forman parte del origen de
los datos de la tabla dinámica que hemos creado.
Una vez que se han asignado los objetos o los valores a la variables, pasamos a
recorrer los diferentes elementos que integran la colección haciendo uso de una
estructura de repetición del tipo For…Next. Para pasar a visualizar dicha información
en la ventana de inmediato como se puede comprobar en la ilustración anterior.
Un caso parecido al anterior, vendría dado por la necesidad de recuperar cada uno
de los valores de un campo determinado. En tal circunstancia, lo primero que
tendremos que hacer es poder referenciar a través de la colección anterior de
PivotFields, el campo concreto sobre el cual queremos el detalle de todos sus valores.
La manera más cómoda de poder comprobarlo de manera inicial, sería haciendo
referencia de manera literal al campo que nos interesa, lo cual lo podemos hacer
incorporando entre paréntesis el nombre del campo después de la colección de la
siguiente manera PivotFields(“Categoría Laboral”). Y paso siguiente como en el caso
anterior, hacer uso de una estructura de repetición del tipo For … Next, o bien, del tipo,
For Each … Next, para poder conseguir acceder a cada uno de los diferentes valores
de la colección PivotItems.
Mientras que en el supuesto, de una estructura del tipo For Each… Next, y el
procedimiento sería como el de la siguiente ilustración:
También puede ocurrir que nos interese obtener o acceder a todos los valores
o ítems diferentes de cada uno de los campos, en tal caso, tendremos que recorrer
tanto los diferentes campos, así como los valores de cada uno, para lo cual tendremos
que hacer uso de dos estructuras de repetición.
Cuando la tabla dinámica ya ha sido creada puede ser también bastante útil el
poder recuperar algún dato de la tabla dinámica, en base a una serie de criterios, para
tal circunstancia podemos hacer uso del método GetPivotData, perteneciente a la
clase PivotData. Este método tiene una serie de argumentos que nos van a permitir
recuperar alguno de los datos de la tabla dinámica, en base, a uno o varios criterios.
La sintaxis del método es el siguiente:
El primer paso, sería poder detectar cada uno de los valores o ítems del c ampo
Categoría laboral que se encuentra en el filtro del informe. Esto lo podríamos
conseguir con el siguiente procedimiento que hemos visto anteriormente:
Una vez realizado este paso, el siguiente sería guardar cada uno de los valores
diferentes en una variable para poder utilizarla en el procedimiento
Crear_tabla_dinámica, para que se puedan ir sustituyendo los diferentes valores en el
área del filtro del informe. Para conseguir este objetivo necesitamos una nueva
variable que llamaremos ValorFiltro de tipo String (esta variable también podría ser de
tipo matriz para guardar cada uno de los valores), que nos va permitir guardar cada
uno de los valores del filtro, y además tendremos que poder utilizarlo en el
procedimiento Crear_tabla_dinámica. Para conseguir este objetivo tendremos que
declarar dicha variable como Pública en la cabecera del módulo, para utilizar su valor
desde dos procedimientos distintos, y justo paso siguiente, tendremos que llamar
desde la estructura de repetición al procedimiento Crear_tabla_dinámica, para que
inmediatamente detectemos el valor del filtro ponga en ejecución el procedimiento que
permite crear la tabla. Estas variaciones las podremos observar en la siguiente
ilustración:
Cuando hayamos realizado estos cambios, tendremos que hacer uso del valor de
la variable ValorFiltro, en el procedimiento Crear_tabla_dinámica para que se tenga en
cuenta esta variación en el momento de recuperar el dato del promedio del salario. Es
decir, que primero lo haga con el Administrador de pedidos, y posteriormente con el
resto de categoría laborales. Esta modificación la realizaremos en la línea del código
donde se establece el valor del filtro del informe.
Errores de sintaxis.
Es común que cuando ejecutamos una macro la misma tenga algún error. Los
errores pueden ser errores de estructuras mal escritas. El editor de macros tiene un
autocontrol que permite corregir estos errores comunes.
En este primer ejemplo utilizaremos una macro sencilla cuya única función es
seleccionar la celda A2. Si escribimos correctamente la macro, el editor asigna
automáticamente los colores azules, lo que significa que ha reconocido la estructura
Sub() - End Sub.
Ejemplo:
Sub Macro()
Range("A2").Select
End Sub
Cuando sucede esto aparece un aviso que nos indica el error cometido. Si
vemos que la línea está roja es señal que debemos corregir algo (usualmente falta o
sobra algún carácter). En nuestro caso, hemos olvidado poner la comilla (el objeto
Range siempre requiere que la celda esté entre comillas y luego entre paréntesis).
Errores de compilación.
En otras ocasiones, la macro arrastra un error pero el mismo no aparece hasta
ejecutarla. Los errores de compilación se detectan cuando Excel intenta compilar el
código. El código se puede compilar de dos maneras:
Sub Macro()
If Range("a2").value = 2 Then
MsgBox "Mal"
End Sub
De esta forma se irá resaltando con amarillo y ejecutando cada fila, hasta que
llegues a la que produce el error.
Errores de ejecución.
Errores de lógica.
Estos errores son los más difíciles de localizar, ya que no suponen un error de
ejecución, pero se traducen en un resultado distinto al esperados. En este caso, la
aplicación no nos ofrecerá ninguna ayuda para realizar su corrección. En tales casos
se resulta de gran ayuda hacer uso de los diferentes sistemas de depuración del
código para identificar donde hemos cometido el error de razonamiento que no
percibimos tras la ejecución del código.
Ventana Locales
Ventana Inmediato
Muestra la ventana de ejecución y permite ejecutar interactivamente una
instrucción, también podemos activarla haciendo uso del método abreviado Control+G.
On Error
Sintaxis 1:
Con esta sintaxis se activa la rutina de gestión de error que empieza en el lugar
especificado por el argumento línea. El argumento línea deber ser una línea o un
número de línea. La línea debe pertenecer al mismo procedimiento que la instrucción
One Error. Si el argumento línea es un número de línea, éste tiene que ser
obligatoriamente el primer carácter no vacío de la línea.
Línea:
<Instrucciones>
Resume
Sintaxis 2:
Sintaxis 3:
On Error GoTo 0
El cuadro que se abrirá será similar al siguiente, en donde podrás activar los
complementos que nos e encuentren con la casilla de verificación para poder hacer
uso de los mismos:
2. Una vez que la tengamos diseñada deberemos guardar dicho archivo Excel
desde el menú Archivo > Guardar como...y en la parte inferior deberemos
seleccionar el desplegable que tiene el título de tipo, para elegir en dicha lista
la opción Complemento de Microsoft Excel.
6. Al ser una función podremos localizarla en cualquier opción que nos dé acceso
a las funciones de la hoja de cálculo como pueda ser el botón de funciones de
la barra de fórmulas, para luego seleccionar la categoría de funciones
Definidas por el usuario.
Una vez que ya este creada la ficha simplemente tendremos que cambiar la
selección de la lista desplegable de comandos disponibles, para elegir la opción de
Macros, donde podremos encontrar el nombre de la macro o procedimiento que
hemos instalado, en este caso, el nombre se corresponderá con el del procedimiento y
no con el del complemento instalado, es decir, que este caso se llamara
Separarnombreyapellidos.
Otra opción muy interesante que ofrece Excel 2010 es la de generar "Carpetas
de confianza", de tal modo que para cualquier archivo que esté guardado en esas
carpetas, se habilitarán automáticamente las macros (nos evitaremos el molesto
mensaje de "Habilitar macros"). Para configurar esto vamos al Centro de Confianza,
seleccionamos Ubicaciones de confianza y luego indicamos una carpeta desde el
botón de Agregar nueva ubicación...
En el mismo figuran los nombres de las macros creadas, así que solo tienes
que seleccionar la macro y luego hacer clic en el botón de Ejecutar.
Si deseas ocultar las macros del libro en dicho cuadro puedes hac erlo
utilizando la instrucción Private cuando escribas tu macro. Debes utilizar dicha
instrucción delante de la palabra Sub. De este modo solo ocultarás la macro en
cuestión. Ejemplo:
OptionPrivate Module
Pero la opción más fiable para evitar que puedan verse los procedimientos que
hemos diseñados es protegerlos con una contraseña, y esto lo podemos hacer
accediendo al editor de VBA, y seleccionar el proyecto que queremos proteger desde
la ventana proyectos, y seleccionar la opción Propiedades de VBAProject…
Una vez seleccionada esta opción aparecerá un cuadro de diálogo con dos
fichas General y Protección. En la primera ficha podremos cambiar el nombre de
nuestro proyecto, así como detallar una breve descripción del mismo.
Acelerar el código
Sub SuperMacro()
Application.ScreenUpdating=False
'El código de la macro aquí
Application.ScreenUpdating=True
End Sub
Al final, volvemos a dejarla en True, que es como debe quedar por defecto.
Sub SuperMacro()
Application.Calculation = xlCalculationManual
'El código de la macro aquí
Application.Calculation = xlCalculationAutomatic
End Sub
Sub CambiarFormatoRango()
With Range("A1")
.Value = 10
.Font.Bold = True
.Interior.ColorIndex = 5
End With
End Sub
Sub CopiarFormula()
Range("A1:A10").FormulaR1C1 = "=SUM(RC[1]:RC[5])"
End Sub
Sub CopiaRango()
Range("C10:C12").Select
Selection.Copy
Range("E10").Select
ActiveSheet.Paste
End Sub
Sin embargo hay una forma más directa donde evitamos el Select, el Selection
y el Paste:
Sub CopiaRango()
Range("C10:C12").Copy Range("E10")
End SuB