Manual VBA Excel 2016
Manual VBA Excel 2016
Además de los elementos básicos del lenguaje VBA (estructura del lenguaje y conceptos de programación orientada a
objetos) que permitirán automatizar el manejo de sus datos, aprenderá a crear tablas dinámicas y gráficos, a diseñar
formularios, a personalizar la interfaz de Excel, especialmente la cinta de opciones, a comunicarse con las otras
aplicaciones de Office, a importar o publicar páginas web y archivos XML y a aprovechar las funciones API de
Windows.
Cada capítulo incluye numerosos ejemplos. El libro concluye con un ejercicio integrador que lo guiará a través de la
creación completa de una aplicación Excel.
Michèle AMELOT
Formadora y, a la vez, especialista en el desarrollo de aplicaciones ofimáticas, Michèle AMELOT ayuda desde hace más
de quince años a las empresas en sus proyectos informáticos. Es este profundo conocimiento de las necesidades de los
usuarios y de los desarrolladores, lo que le permite, a través de sus libros (VBA Excel y VBA Access, todas las
versiones), facilitar el aprendizaje y la práctica en la programación en lenguaje VBA.
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
2 - 1-
Introducción
Este libro está dirigido a usuarios de Excel o a programadores que deseen automatizar el manejo de datos bajo Excel
o desarrollar aplicaciones de gestión, reporte o análisis aprovechando las capacidades de la hoja Excel.
El objetivo del libro es presentar, de una manera accesible, todo el abanico de posibilidades del lenguaje VBA. Los
diferentes ejemplos incluidos, que se pueden descargar desde la página Información, le permitirán llevar a la
práctica, fácilmente y de manera progresiva, los conocimientos adquiridos.
El único requisito necesario para aprovechar el contenido de este libro es un buen conocimiento de la interfaz de
Excel. Nociones de programación o el conocimiento de algún lenguaje le ayudarán a manejar el lenguaje aunque no
es imprescindible para aprovechar este libro.
En primer lugar, se familiarizará con el código VBA y aprenderá a usarlo para manejar los objetos de Excel (tales como
libros, hojas de cálculo, rangos de celdas, tablas dinámicas, gráficos...), especialmente en la automatización de ciertos
procedimientos.
En una segunda etapa, descubrirá progresivamente cómo crear aplicaciones profesionales en Excel a través de los
siguientes conceptos:
z Creación de formularios personalizados para la introducción y presentación de datos de Excel o cualquier otro tipo de
datos.
z Optimización de la confiabilidad del código VBA gracias a la integración de opciones para el tratamiento de errores.
z Acceso a las capacidades de Internet: importar y publicar páginas web y archivos XML.
z Control del sistema operativo a través de la llamada a funciones API de Windows (Application Programming Interface).
Finalmente, el último capítulo lo guiará a través de la creación completa de una aplicación de Excel. Esta aplicación
permite manejar presupuestos a través de las siguientes características: creación de presupuestos en formato Excel
a partir de datos tomados de una base de datos de Access, registro de los presupuestos en carpetas especificadas
según el cliente, búsqueda de presupuestos según diversos criterios y otras opciones.
Al terminar el libro, usted quedará convencido de que el lenguaje VBA no se limita a automatizar tareas en Excel, sino
que también le permite realizar aplicaciones profesionales dotadas de una interfaz amigable.
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
3 - 1-
Presentación del lenguaje VBA
Visual Basic para Aplicaciones (VBA) es el lenguaje de programación común a todas las aplicaciones del paquete
Microsoft Office 2016 (Word, Access, Excel, Outlook y PowerPoint).
z Automatizar acciones repetitivas: con VBA puede realizar en una única operación todo un grupo de comandos de
Excel.
z Interactuar sobre los libros de Excel: el contenido y la presentación de todos los elementos incluidos en un libro
(hojas, celdas, gráficos, etc.) se pueden modificar a través de código VBA.
z Crear formularios personalizados: los formularios son los cuadros de diálogo compuestos por controles ActiveX
(cuadros de texto, listas desplegables, etc.), a los que se les puede asociar código VBA. Los formularios permiten
crear interfaces amigables para la entrada o la salida de información.
z Generar automáticamente tablas dinámicas y gráficos: así podrá automatizar la creación de estadísticas a
partir de sus datos de Excel (o de los datos de la empresa exportados a Excel).
z Personalizar la interfaz de Excel: la cinta de opciones de Office 2016 es totalmente personalizable y se pueden
asociar macros creadas en lenguaje VBA a los comandos de la cinta o a la barra de herramientas de acceso rápido.
z Modificar las opciones de Excel: a cada opción de Excel le corresponde una propiedad de un objeto VBA. Por
ejemplo, puede modificar el tipo de fuente por defecto a partir de las propiedades StandardFont (fuente) y
StandardFontsize (tamaño de fuente) del objeto Application.
Ejemplo:
Application.StandardFont = «Arial»
Application.StandardFontSize = «10»
z Comunicar Excel con otras aplicaciones de Microsoft Office: VBA permite intercambiar información entre las
aplicaciones de Office usando objetos específicos propios de cada uno. Por ejemplo, usted puede insertar una tabla o
un gráfico de Excel en un archivo de Word, crear mensajes de Outlook con un archivo de Excel adjunto, etc.
2. Algunas definiciones
Proyecto
Cada libro abierto en Excel tiene asociado un proyecto que contiene todos los módulos de código VBA
agrupados en categorías.
Módulo
Los módulos contienen las macros grabadas y sus propios procedimientos y funciones escritos en VBA.
Los módulos se pueden exportar como archivos independientes para luego ser importados en otros
libros.
Procedimiento
Los procedimientos son subprogramas escritos en VBA. Cada macro grabada genera un procedimiento
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
4 - 1-
con el mismo nombre de la macro. De la misma manera, puede crear procedimientos usando la
instrucción Sub.
Función
Las funciones son procedimientos que devuelven un valor. Para crear una función, se debe utilizar la
instrucción Function.
z Escribir directamente el código del procedimiento en el Editor de Visual Basic (o entorno VBE).
La primera solución es más sencilla, pero mucho más limitada que la segunda. Los procedimientos generados
automáticamente solo permiten automatizar acciones repetitivas realizadas con Excel (formato de celdas, ordenar
datos, etc.).
Si desea efectuar operaciones específicas, como algoritmos de cálculo, intercambio de mensajes y de información
con el usuario, controlar la coherencia de datos en un libro o cualquier otra operación que haga uso de estructuras
repetitivas o condicionales, debe crear sus propios procedimientos en el editor de VBA.
- 2- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
5
Las macros de Excel
Para escribir macros, ejecutar macros grabadas o crear aplicaciones de Excel, debe mostrar la pestaña
Desarrollador de la siguiente manera:
Haga clic en el botón Aceptar: la pestaña Desarrollador se añadirá a la cinta de opciones de Excel, a la
derecha de la pestaña Vista.
a. Grupo Código
b. Grupo Complementos
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
6 - 1-
Permite descargar complementos de Office.
c. Grupo Controles
Veamos cómo crear una macro que aplique un borde y un relleno en las celdas seleccionadas.
- 2- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
7
Haga clic en el botón Aceptar para iniciar la grabación.
Realice en Excel las operaciones que desee grabar. Por ejemplo, aplique un relleno y un borde al rango
actualmente seleccionado.
Haga clic en el botón de la pestaña Desarrollador o pulse el método abreviado de teclas [Alt]
[F8] y luego haga doble clic en el nombre de la macro que desea ejecutar.
Para visualizar la información relativa a una macro (método abreviado de teclado y descripción), seleccione la
macro en la lista y haga clic en el botón Opciones.
Si graba una macro en modo de referencias absolutas (modo por defecto), los rangos de celdas referenciados en
las operaciones de selección, desplazamientos... serán fijos. Por ejemplo: Range("A2") designa la celda A2.
Si graba una macro en modo de referencias relativas, los rangos de celdas serán expresados en relación con la
posición de la primera celda activa. Por ejemplo: ActiveCell.range("A2") designa la celda ubicada bajo la celda
activa, ActiveCell.range("B1") designa la celda ubicada a la derecha de la celda activa.
ActiveCell.range("A1") siempre hace referencia a la primera celda activa. A1 se puede considerar la referencia
relativa a la primera celda activa.
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
8 - 3-
Para grabar una macro con referencias relativas:
Ejemplo
La misma secuencia de operaciones se ha registrado en dos macros: la primera (RefRelativa) se grabó con la opción
referencias relativas; la segunda (RefAbsoluta), con la opción referencias absolutas.
Sub RefRelativa()
’ Referencias relativas
ActiveCell.Range(”A1:B7").Select
Selection.Cut Destination:=ActiveCell.Offset(2, 1).Range(”A1:B7")
ActiveCell.Offset(2, 1).Range(”A1:B7").Select
End Sub
___________________________________________________________________
Sub RefAbsoluta()
’ Referencias absolutas
Range(”B2:C8").Select
Selection.Cut Destination:=Range(”C4:D10")
Range(”C4:D10").Select
End Sub
- 4- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
9
Si elige Libro de macros personal, la macro se grabará en el libro personal.xlsb; la macro será accesible desde
todos los libros Excel.
Seleccione la macro que desea eliminar y haga clic en el botón Eliminar. Haga clic en el botón Sí para
confirmar la eliminación.
Si ha creado macros en un libro y lo guarda por primera vez, aparecerá el siguiente mensaje:
En el cuadro Guardar como, abra la lista Tipo y seleccione Libro de Excel habilitado para macros
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
10 - 5-
(*.xlsm).
Los libros que contienen macros tienen la extensión xlsm (en vez de xslx) y su icono se distingue por un signo de
exclamación.
También puede grabar un nuevo libro con macros mediante las siguientes operaciones:
En el cuadro Guardar como, abra la lista Tipo y seleccione la opción Libro de Excel habilitado para
macros (*.xlsm).
La configuración de seguridad de las macros permite controlar lo que ocurre al abrir un libro que contiene macros.
Las modificaciones de la configuración de seguridad de macros rigen solamente en Excel y no afectan al resto de las
aplicaciones de Microsoft Office.
Si se cambia la configuración de seguridad, las nuevas opciones se aplicarán a todos los libros, excepto a los libros
actualmente abiertos. Para aplicarlas a estos libros, debe cerrarlos y abrirlos nuevamente.
Es la opción por defecto. Las macros serán deshabilitadas pero aparecerá una advertencia de
seguridad en la barra de mensajes (bajo la cinta de opciones) para los libros que contienen macros.
- 6- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
11
Si las macros de un libro tienen firma digital de un origen aprobado, las macros se podrán ejecutar. Si
el origen no está autorizado, aparecerá una notificación: en este caso es posible habilitar las macros
firmadas o aprobar el origen. Las macros sin firma digital no se podrán habilitar.
Si selecciona esta opción, todas las macros serán habilitadas. Se recomienda no usar esta opción de
forma permanente.
Cualquiera que sea la opción elegida, si instala un programa antivirus compatible con Microsoft Office System 2016,
los libros que contengan macros serán analizados antes de abrirse.
Este parámetro es para los desarrolladores y sirve para controlar o autorizar el acceso por programa
al modelo de objetos VBA (formularios, módulos y módulos de clase). La manipulación de los objetos
se hace a través de la propiedad VBComponents, que devuelve la colección de componentes de un
proyecto.
Si ha seleccionado la opción Deshabilitar todas las macros con notificación, aparecerá la siguiente advertencia
bajo la cinta de opciones cuando abra un libro que contiene macros:
Para habilitar las macros del libro, haga clic en el botón Habilitar contenido. A partir de ahora, el libro pasará a ser
un documento confiable y la advertencia de seguridad no aparecerá la próxima vez que lo abra.
Un documento se considera confiable para una determinada ubicación: si cambia la ubicación de un documento
aprobado, volverá a aparecer la advertencia de seguridad la próxima vez que lo abra.
Las macros se pueden habilitar solo para una sesión (es decir, hasta que cierre el libro que las contiene):
Dentro de Advertencia de seguridad, haga clic en Habilitar contenido y luego en Opciones avanzadas.
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
12 - 7-
En el cuadro Opciones de seguridad de Microsoft Office, seleccione la opción Habilitar contenido para
esta sesión.
Desaparecerá la advertencia de seguridad, aunque volverá a aparecer la próxima vez que abra el libro.
Puede definir una lista de ubicaciones de confianza para que los libros que se encuentren en ella se consideren
confiables:
Haga clic en el botón Examinar. Localice y seleccione la carpeta deseada y luego haga clic en Aceptar: la
ruta seleccionada se agregará a la lista de ubicaciones de confianza.
z Obtener un certificado digital de parte de una autoridad de certificación comercial, como Verisign (www.verisign.es) o
Thawte (www.thawte.com), e instalarlo.
z Firmar digitalmente su proyecto. Para ello, pase al entorno VBE (accesible desde el comando de
la pestaña Desarrollador) y seleccione la opción Firma digital del menú Herramientas. Haga clic en el
botón Elegir para seleccionar su certificado.
Para probar sus proyectos macros en su ordenador, puede crear su propio certificado de autofirma con la ayuda de
Selfcert.exe (programa distribuido con Microsoft Office 2016 y con los ejemplos de este libro).
Una macro es un procedimiento escrito en lenguaje VBA. Un procedimiento VBA es una secuencia de instrucciones
agrupadas en un bloque de código que comienza con Sub y termina con End Sub.
El código de la macro aparecerá en una ventana del entorno Microsoft Visual Basic (ver El entorno de desarrollo VBE,
en este capítulo).
- 8- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
13
Puede modificar o completar el código dentro de este procedimiento.
Ejemplo
...
MsgBox "El formato de celdas " & Selection.Address _
& vbCr & "se ha modificado correctamente"
End Sub
Para probar su procedimiento, haga clic en el icono o use la tecla [F5]. Aparecerá el siguiente mensaje:
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
14 - 9-
Asignar una macro
z Controles u objetos insertados en las hojas de Excel (botones de comando, imágenes, etc.).
Microsoft Office 2016 ofrece la posibilidad de personalizar la cinta de opciones: puede agregar, eliminar o reasignar
las pestañas, grupos y comandos de la cinta para disponer de aplicaciones personalizadas.
Haga clic en el botón derecho del ratón sobre la cinta y seleccione la opción Personalizar la cinta de
opciones.
Haga clic en la pestaña Archivo, luego en Opciones y seleccione la categoría Personalizar cinta de
opciones.
Haga clic en el botón Nueva pestaña. Se agregará una pestaña y un grupo a la lista de pestañas
principales.
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
15 - 1-
Para cambiar el nombre de la pestaña y del grupo que acaba de crear, haga clic en el botón Cambiar
nombre. El menú contextual también le permite agregar pestañas o grupos.
Despliegue las opciones dentro de Comandos disponibles en: (a la izquierda y arriba) y seleccione
Macros. Aparecerá la lista de macros disponibles.
Para modificar el nombre y el icono de la macro haga clic en el botón Cambiar nombre.
También puede cambiar el orden de las pestaña, grupos y comandos con las flechas situadas a la
derecha de la lista.
Ejemplo de personalización:
Para confirmar esta personalización, haga clic en Aceptar. La nueva pestaña aparecerá en la cinta de
opciones de Excel 2016:
Usted puede restablecer la cinta de opciones en cualquier momento desde el cuadro de diálogo para personalizar la
cinta, haciendo clic en el botón Restablecer (puede restablecer toda la cinta o solamente una pestaña).
También puede importar una cinta personalizada haciendo clic en el botón Importar o exportar.
También puede insertar un comando para ejecutar una macro en la barra de herramientas de acceso rápido:
- 2- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
16
Haga clic en el botón derecho del ratón sobre la cinta de opciones y seleccione la opción Personalizar
barra de herramientas de acceso rápido.
Seleccione la macro que desee y haga clic en el botón Agregar. La macro pasará a la lista de la derecha.
Haga clic en el botón Modificar... para seleccionar un nuevo icono para la macro.
Puede modificar el orden de los comandos con las flechas ubicadas a la derecha de la lista.
Puede seleccionar un libro en la lista desplegable Personalizar barra de herramientas de acceso rápido
situada arriba y a la derecha. En ese caso las modificaciones solamente afectarán al libro indicado.
Aparecerá un nuevo comando en la barra de acceso rápido para ejecutar la macro Bordes.
formulario).
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
17 - 3-
Inserte una imagen haciendo clic en el botón de la pestaña Insertar.
Haga clic en el botón derecho del ratón y seleccione la opción Asignar macro.
Inserte un objeto gráfico (imagen, imagen prediseñada, forma o SmartArt, accesibles desde el grupo
Ilustraciones de la pestaña Insertar).
Para definir en el objeto una zona que permita ejecutar una macro, haga clic en (en la pestaña
Insertar), seleccione la forma deseada y dibuje la forma dentro del objeto que acaba de crear.
Haga clic en el botón derecho del ratón y seleccione la opción Asignar macro.
Seleccione la forma insertada. Aparecerá la sección Herramientas de dibujo; haga clic en la pestaña
Formato.
luego en .
Active el modo Diseño (si no está activo) haciendo clic en el botón de la pestaña Desarrollador.
Dibuje una imagen con la herramienta (dentro de los controles ActiveX) y suelte el botón del ratón.
Ahora puede mostrar y modificar las propiedades de la imagen (en particular, asociar una imagen por
- 4- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
18
medio de la propiedad Picture), haciendo clic en el botón de la pestaña
Desarrollador.
Dentro del procedimiento VBA asociado a la imagen, escriba la instrucción Call seguida del nombre de la
macro que desea ejecutar.
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
19 - 5-
El entorno de desarrollo VBE
VBE (Visual Basic Editor) es el entorno en el que puede escribir, modificar y probar su código VBA. Este entorno se
llama también IDE (Integrated Development Environment) o editor de VBA.
El entorno VBE pone a su disposición numerosas herramientas para facilitar la programación y la puesta a punto de
su código VBA: herramientas de depuración, introducción asistida, explorador de objetos, etc.
Para acceder al entorno VBE desde Excel, haga clic en el botón de la pestaña Desarrollador o
Haga clic en el aspa roja ubicada arriba a la derecha de la ventana principal del entorno VBE.
Haga clic en la opción Cerrar y volver a Microsoft Excel del menú Archivo.
3. Volver a Excel
Para volver a Excel sin cerrar el entorno VBE, use cualquiera de estas dos posibilidades:
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
20 - 1-
Todas las ventanas del entorno VBE se pueden visualizar desde el menú Ver.
Cada libro abierto en Excel tiene asociado un proyecto. El explorador de proyectos permite ver todos los proyectos y
todos los módulos de cada proyecto según una estructura en árbol. Los módulos se agrupan en cuatro categorías:
- 2- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
21
z Módulos estándares.
z Módulos de clase.
Muestra las propiedades relativas al libro, a las hojas de cálculo, a las hojas gráficas y a los formularios.
z La zona procedimiento (11) muestra los procedimientos o los eventos del objeto seleccionado en la zona objeto. Los
eventos ya usados aparecen en negrita.
Cuando se escribe el nombre de un objeto seguido de un punto, aparece automáticamente una lista desplegable
con los métodos, propiedades y constantes disponibles para ese objeto.
Si la lista no aparece, seleccione Opciones en el menú Herramientas y marque la casilla Lista de miembros
automática de la pestaña Editor.
Contiene todos los valores de las variables que hayan sido definidas previamente como expresiones de inspección.
Permite mostrar los valores de las variables, modificarlas, y ejecutar las instrucciones.
Las ventanas Inmediato, Locales e Inspecciones se usan principalmente para la depuración de aplicaciones (ver
capítulo Depuración y administración de errores).
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
22 - 3-
Proyectos Ver - Explorador de proyectos [Ctrl] R
- 4- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
23
Configuración del editor VBA
1. Configuración de la tipografía
Las palabras clave, las funciones y las instrucciones VBA aparecen en azul; los objetos, métodos y propiedades, en
negro, y los comentarios, en verde. Las instrucciones que contienen errores se destacan en rojo.
Para modificar el estilo (color, tipo de letra, tamaño) de los diferentes tipos de código, seleccione
Opciones en el menú Herramientas y haga clic en la pestaña Formato del editor.
Existen diferentes herramientas que facilitan la introducción y la actualización del código VBA: por ejemplo, la
comprobación automática de la sintaxis, la declaración obligatoria de las variables, las instrucciones que se
completan automáticamente, etc.
Para activar estas opciones, seleccione Opciones en el menú Herramientas y haga clic en la pestaña
Editor.
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
24 - 1-
3. Manejo de errores
Las opciones de interceptación de errores permiten establecer si la ejecución del código se interrumpirá al ocurrir un
error de ejecución.
Para activar esta opción, seleccione Opciones en el menú Herramientas y haga clic en la pestaña
General.
Si su código VBA incluye una gestión de errores, seleccione la opción Interrumpir en errores no
controlados o no se tendrán en cuenta las instrucciones de gestión de errores.
Ciertos ejemplos de este libro incluyen una gestión de errores; es importante que active esta opción para que
funcionen correctamente.
- 2- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
25
La gestión de errores se explica en el capítulo Depuración y administración de errores.
Una ventana acoplada se coloca automáticamente cuando la mueve. Una ventana no está acoplada si puede
ubicarse en cualquier lugar de la pantalla y permanecer ahí.
Para definir las ventanas que desea acoplar, seleccione Opciones en el menú Herramientas y haga clic
en la pestaña Acoplar.
Active las ventanas que desea acoplar y desactive las otras. Luego haga clic en Aceptar.
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
26 - 3-
Módulos
1. Presentación
El código VBA asociado a un libro está agrupado en un proyecto que contiene varias carpetas:
La carpeta Microsoft Excel Contiene un módulo de clase asociado al libro del proyecto (llamado por
Objetos defecto ThisWorkbook) y un módulo de clase por cada una de las hojas de
cálculo u hojas de gráfico del libro. En particular, en estos módulos de clase se
encuentran los procedimientos de eventos asociados al libro y a las hojas.
La carpeta Formularios Contiene los formularios (UserForm) del proyecto y el código VBA asociado.
La carpeta Módulos Agrupa los diferentes módulos estándares (compuestos por uno o más
procedimientos) que pueden ser llamados desde cualquier procedimiento del
proyecto.
La carpeta Módulos de clase Contiene los módulos de clase usados para la creación de nuevas clases de
objetos. Los módulos de clase se utilizan especialmente para la escritura
de los procedimientos de eventos asociados a los objetos Application y Chart
(ver capítulo Administración de eventos).
La lista de todos los módulos aparece en forma jerárquica en el Explorador de proyectos del entorno VBE.
Si el explorador de proyectos no está visible, elija la opción Explorador de proyectos del menú Ver o pulse el
método abreviado [Ctrl] R.
Para ver el código asociado a un módulo, haga doble clic en el nombre del módulo.
Los elementos del lenguaje VBA descritos en este capítulo se pueden usar en los diferentes módulos.
Para insertar un nuevo módulo en el entorno VBE, use la opción Módulo del menú Insertar, o haga clic en el icono
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
27 - 1-
de la barra de herramientas Estándar y seleccione la opción .
Si la ventana Módulo está maximizada, el nombre del módulo aparece sobre la barra de título de Microsoft Visual
Basic.
Para pasar de un módulo a otro, en la ventana Proyecto, haga doble clic en el nombre del módulo que
desea activar.
Para eliminar un módulo, en la ventana Proyecto, haga clic derecho en el nombre del módulo que desea
eliminar, elija la opción Quitar Módulo e indique si desea exportar el módulo o no (ver Importar y exportar
código VBA).
Para dar nombre a un módulo, active el módulo y cambie la propiedad Nombre en la ventana de
Propiedades.
Los módulos y formularios pueden exportarse a un archivo para luego importarlo a otro proyecto de Excel.
Para exportar un archivo, haga clic en el nombre del archivo en el explorador de proyectos, luego
seleccione la opción Exportar archivo del menú Archivo (o del menú contextual) o pulse la combinación
de teclas [Ctrl] E.
Para importar un archivo, haga clic en el nombre del archivo en el explorador de proyectos, luego
seleccione la opción Importar archivo del menú Archivo (o del menú contextual) o pulse la combinación
de teclas [Ctrl] M.
z Los módulos de clase (módulos asociados al libro y a las hojas y módulos de clase independientes) tienen la
extensión .cls.
- 2- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
28
Procedimientos
1. Definiciones
Los procedimientos son subprogramas que permiten descomponer una tarea de programación compleja en un
conjunto de tareas más breves y simples. Permiten organizar el código dentro de módulos para obtener un código
de mantenimiento más simple y fácilmente reutilizable.
En este capítulo, solamente nos interesan los dos primeros, que son los más utilizados.
Devuelven un valor.
Para acceder a un procedimiento desde la ventana de código de un módulo, abra la segunda lista de la
ventana del módulo, haga clic en el nombre del procedimiento al que desea acceder o recorra los
procedimientos con [Ctrl][Flecha arriba] y [Ctrl][Flecha abajo].
Para seleccionar una línea, sitúe el puntero del ratón a la izquierda de la línea y haga clic cuando el
puntero se convierta en una flecha.
Para seleccionar un grupo de caracteres, use la técnica de arrastrar y soltar o haga [Mayús] clic.
Para seleccionar un procedimiento completo, sitúe el puntero del ratón a la izquierda de cualquier línea
del procedimiento. Cuando el puntero se transforme en una flecha, haga doble clic.
Para ejecutar un procedimiento, haga clic en el procedimiento que desea ejecutar y pulse [F5] o .
3. Procedimientos Sub
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
29 - 1-
z Los procedimientos Sub generales,
Un procedimiento asociado a un evento es un procedimiento que se ejecuta automáticamente ante ciertos eventos
de un objeto. Su nombre se forma con el nombre del objeto, seguido del guión bajo "_" y del nombre del evento
(ej.: Workbook_Open). La llamada a estos procedimientos es implícita, es decir, el procedimiento se ejecuta
automáticamente cuando se produce el evento asociado.
Ejemplo
El siguiente procedimiento general pide al usuario que confirme su deseo de abandonar la aplicación, y sale de Excel si el
usuario responde que Sí. Este código se puede ejecutar con un botón de comando o una opción de menú que permita
abandonar la aplicación.
El siguiente procedimiento asociado a un evento abre automáticamente el libro Ventas.xlsx cuando se abre el libro
Resumen.xlsx. Este procedimiento está asociado al evento Open del objeto Workbook y se encuentra en el módulo
ThisWorkbook del libro Resumen.xlsx.
4. Procedimientos Function
Los procedimientos Function, llamados comúnmente funciones, devuelven un valor resultado de un cálculo. El valor
se devuelve a través del nombre de la función.
El lenguaje Visual Basic incluye numerosas funciones integradas, tales como las usadas en cálculos con fechas (day,
week, year, format, etc.).
Además de estas funciones integradas, puede crear sus propias funciones personalizadas.
Ejemplo
La siguiente función pide al usuario que confirme su deseo de abandonar la aplicación y devuelve True si el usuario responde
que Sí, y False en caso contrario.
- 2- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
30
Function Terminar() As Boolean
If MsgBox("¿Desea salir del programa?", _
vbQuestion + vbYesNo) = vbYes Then
Terminar = True
Else
Terminar = False
End If
End Function
5. Declaración de procedimientos
Para crear un procedimiento Sub o Function, se deben respetar los siguientes pasos:
z Declare el procedimiento según su tipo con la palabra clave Sub o Function, seguida del nombre del procedimiento.
z Defina los argumentos que se deban pasar como parámetros al procedimiento e indíquelos entre paréntesis después
del nombre del procedimiento.
z En el caso de una función, si es necesario, indique el tipo del valor devuelto después de la palabra clave As.
z Escriba el código que permita efectuar la operación deseada. Si es necesario, use Exit Sub o Exit Function para
salir del procedimiento. En el caso de una función, asigne el resultado al nombre de la función.
Un procedimiento Public se puede llamar desde todos los módulos de todos los proyectos de Excel.
Un procedimiento Private solamente se puede llamar desde un procedimiento dentro del mismo módulo.
La palabra clave Static indica que las variables locales del procedimiento se mantienen entre una llamada y otra.
Si no se indica Public o Private o Friend, los procedimientos son públicos por defecto.
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
31 - 3-
7. Argumentos de los procedimientos
Los argumentos se usan para transferir a los procedimientos parámetros en forma de datos. La cantidad de
argumentos puede variar de 0 a varios.
Para declarar un argumento, basta con especificar su nombre. Sin embargo, la sintaxis completa para declarar un
argumento es la siguiente:
La opción Optional indica que el argumento es opcional y puede omitirse. Los argumentos opcionales
se deben ubicar al final de la lista de argumentos y ser de tipo Variant.
La opción Byval indica que el argumento se pasa por valor. El procedimiento accede a una copia de
la variable; su valor inicial no se modifica por el procedimiento al que se pasa.
La opción Byref (opción por indica que el argumento se pasa por referencia. En este caso, el procedimiento
defecto) puede acceder a la variable propiamente dicha; de esta manera, su valor real se
puede modificar por el procedimiento al que se pasa.
La palabra clave ParamArray se usa únicamente como último argumento de la lista para indicar que se trata de
una matriz opcional de elementos de tipo Variant. No se puede usar con las
palabras clave ByVal, ByRef u Optional.
Variable especifica el nombre del argumento. Para las variables de matriz, no especificar su
dimensión.
Type especifica el tipo de datos del argumento que se pasa al procedimiento (Byte,
Boolean, Integer, Long, etc.).
Los argumentos con nombre facilitan la transferencia de argumentos gracias a las siguientes ventajas:
NomArg := valor
Ejemplo
- 4- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
32
puede transformarse en:
El nombre de los argumentos aparece automáticamente en el entorno VBE a medida que se escribe la instrucción.
Los argumentos opcionales aparecen entre corchetes.
9. Llamar a un procedimiento
Sintaxis
Si se indica la palabra clave Call, debe colocar la lista de argumentos entre paréntesis.
Para almacenar el resultado de una función en una variable, use la siguiente sintaxis:
NomMódulo.NomProcedimiento
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
33 - 5-
Ejemplo
ThisWorkbook.Salir_Apli
Application.Run "NomLibro!NomMódulo.NomProcedimiento"
Ejemplo
Application.Run "Ventas.xlsm!ThisWorkbook.Salir_Apli"
Las funciones VBA se pueden usar en las fórmulas de Excel. Todas las funciones declaradas en Public están
disponibles en el asistente para funciones de Excel (categoría Funciones Definidas por el usuario).
Ejemplo
Este ejemplo usa una función VBA que calcula la edad de una persona a partir de su fecha de nacimiento.
En el cuadro de diálogo Insertar función, en la lista O seleccionar una categoría, elija Definida por el
usuario; la función CalcEdad estará ahora accesible:
- 6- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
34
Seleccione la función y haga clic en Aceptar; el cuadro de diálogo le pedirá los argumentos de la función,
como se ve aquí:
Este ejemplo muestra la importancia del nombre de los argumentos de las funciones: cuanto más explícitos sean
estos, más fácil resultará usar la función en Excel.
Ahora puede modificar la fórmula para incluir el texto "años" y extender la fórmula a toda la lista.
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
35 - 7-
11. Ejemplos de procedimientos y funciones
Sub Mostrar_Tabla()
Dim vTabVal As Variant
Dim oCelda As Range
Dim i As Integer
’ Muestra el contenido de la tabla en la hoja de cálculo activa
vTabVal = Array("Buenos Días", 1.244, "=A1+12", "=A2+12")
For i = 0 To 3
Set oCelda = Range("A" & i + 1)
If MCell(oCelda, vTabVal(i)) Then
MsgBox "La celda se actualizó con éxito"
Else
MsgBox "La celda no se pudo actualizar"
End If
Next i
End Sub
La función MCell informa sobre el valor asignado a una celda. Devuelve True si la celda se actualizó correctamente, y
False en caso contrario.
- 8- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
36
End Function
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
37 - 9-
Variables
Las variables permiten almacenar valores intermedios durante la ejecución del código VBA para usarlos luego en
cálculos, comparaciones, pruebas…
Las variables se identifican por un nombre que permite hacer referencia al valor que contienen y un tipo que
determina la naturaleza de los datos que pueden almacenar.
1. Tipos de variables
Numéricas
Byte 0 a 255 1
Currency (monetario de -922 337 203 685 477,5808 a 922 337 203 685 477,5807 8
punto fijo)
Decimal +/-79 228 162 514 264 337 593 543950 335 sin separador 12
decimal;
+/-7,9228162514264337593543950335 con 28 cifras a la
derecha del separador decimal;
el menor número distinto de cero es +/-
0.0000000000000000000000000001
Cadenas de caracteres
z Las cadenas de longitud variable pueden contener aproximadamente dos mil millones de caracteres.
Ejemplo
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
38 - 1-
Boolean o lógica
El tipo es Boolean (o booleano). La variable puede tomar los valores True (Verdadero) o False (Falso), que es su
valor por defecto. Ocupa dos bytes.
Fecha
El tipo es Date. La variable puede tomar los valores de fecha y de hora del 1 de enero del año 100 al 31 de
diciembre de 9999. Ocupa ocho bytes.
Variant
Las variables de tipo Variant pueden contener datos de todo tipo, además de los valores especiales Empty, Error y
Null.
Usar el tipo de dato Variant ofrece más flexibilidad en el tratamiento de datos. Por ejemplo, si una variable de tipo
Variant contiene cifras, se puede usar su valor real o su representación en forma de cadena, según el contexto.
De todas formas, las variables de tipo Variant requieren 16 bytes de memoria para números y 22 bytes más la
longitud de la cadena para los caracteres; esto puede ser perjudicial en el caso de procedimientos largos o en
módulos complejos.
Ejemplo
Sub Variable_Variant()
’ Declaración de la variable "Valx" como Variant
Dim Valx As Variant
’ Asignación de una sucesión de valores a la variable
’ y mostrar el tipo del resultado
’ 10 retorna un valor de tipo Integer
Valx = 10
MsgBox Valx & " es de tipo " & TypeName(Valx)
’ Ejemplo que retorna un valor de tipo String
Valx = "Ejemplo"
MsgBox Valx & " es de tipo " & TypeName(Valx)
’ Esta multiplicación retorna un valor de tipo Double
Valx = 12500.32 * 1E+21
MsgBox Valx & " es de tipo " & TypeName(Valx)
’#1/1/99# retorna un valor de tipo Date
Valx = #1/1/99#
MsgBox Valx & " es de tipo " & TypeName(Valx)
’ True retorna un valor de tipo Boolean
Valx = True
MsgBox Valx & " es de tipo " & TypeName(Valx)
End Sub
Objeto
El tipo es Object. Para crear una variable que contenga un objeto, comience por declarar la variable como tipo
- 2- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
39
Objeto y luego asígnele un objeto.
Ejemplo
Sub Variables_Objeto()
’ oTest se declara como objeto
’ ShtNomCli se declara como hoja de cálculo
’ oGrafico se declara como gráfico
Dim oTest As Object
Dim ShtNomCli As Worksheet
Dim oGrafico As Chart
End Sub
Ejemplo
Declaración de una variable ZonaTest destinada a contener un objeto Range y asignación de las celdas A6 a B15 a esta
variable:
Para finalizar la asociación entre una variable y un objeto determinado, use la siguiente sintaxis:
Los tipos de datos personalizados se crean con la instrucción Type usada a nivel de módulo.
Sintaxis
Type NomTipoPerso
NomElemento1 As TipoDatos
NomElemento2 As TipoDatos
...
End Type
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
40 - 3-
La definición del tipo solamente se puede hacer en la sección de declaración de un módulo.
Ejemplo
Declaración de un tipo personalizado constituido por una letra y un número entero en el módulo de código ProGene.
Uso del tipo personalizado para controlar los códigos de artículos introducidos de la celda B6 a la celda B11 de la hoja de cálculo
activa. En caso de error, se muestra un mensaje.
2. Declaración de variables
Para crear una variable, debe declararla, es decir, darle un nombre. Luego puede usar ese nombre para modificar el
valor de la variable, usar ese valor, etc.
a. Declaraciones implícitas
- 4- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
41
Se hacen directamente al asignar un valor a un nombre de variable. El tipo de datos será entonces el tipo por
defecto, o sea, Variant.
Ejemplo
i = 12
dImporte = 12000
sNombre = "Juan Carlos"
b. Declaraciones explícitas
Requieren el uso de una instrucción de declaración (Dim, Public, Private, etc.). Si el tipo de la variable no se
indica, la variable resultará del tipo por defecto, o sea, Variant.
Se puede imponer la declaración implícita de variables usando la instrucción Option Explicit en la sección de
declaración de cada módulo. Para insertar esta instrucción automáticamente en cada nuevo módulo, active la
opción Requerir declaración de variables del menú Herramientas - Opciones - pestaña Editor.
Ejemplo
Dim I
Private dImporte As Double
Public sNombre as String
Para optimizar la velocidad de ejecución del código VBA, se recomienda declarar las variables en forma explícita.
Donde InstruccióndeDeclaración corresponde a una de las siguientes cuatro instrucciones: Dim, Public, Private o
Static.
Dim Las variables declaradas con la instrucción Dim a nivel de módulo están disponibles para todos
los procedimientos del módulo. No son accesibles desde ningún otro módulo. Las variables
declaradas con la instrucción Dim a nivel de procedimiento solamente están disponibles
dentro del procedimiento.
Private Solamente a nivel de módulo. Las variables Private solamente están disponibles para el
módulo en el que son declaradas.
Public Solamente a nivel de módulo. Las variables declaradas con la instrucción Public son
accesibles desde el conjunto de módulos de todos los proyectos de Excel abiertos. Si la
instrucción Option Private Module se especifica en la sección de declaración del módulo, las
variables solamente son públicas dentro del proyecto que las recibe.
Static Solamente a nivel de procedimiento. Las variables declaradas con la instrucción Static
conservan su valor mientras dure la ejecución del código.
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
42 - 5-
3. Declaración de los tipos de variables
Ejemplo
Sub TotalAcum()
Dim iTotal As Integer
Static iAcum As Integer
iTotal = iTotal + 10
iAcum = iAcum + 10
’ Devuelve 10 en cada ejecución del procedimiento
MsgBox iTotal
’ Devuelve 10 en la primera ejecución, luego 20 la segunda vez,
’ 30 la tercera, etc.
MsgBox iAcum
End Sub
Puede declarar más de una variable en una misma instrucción, pero atención, el tipo de datos solo se tendrá en
cuenta para la última variable, el tipo Variant se asignará a las otras.
El tipo de variable se declara usando un sufijo en el momento de su utilización o por la instrucción DefType.
Empleo de un sufijo
% Integer
& Long
! Single
# Double
@ Currency
$ String
Ejemplo
Dim Nombre$
- 6- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
43
Dim Deuda@
DefType
Estas instrucciones se emplean en la zona de declaración del módulo, para definir los tipos de datos por defecto
de las variables cuyos nombres comienzan por los caracteres especificados.
DefBool Boolean
DefDbl Double
DefInt Integer
DefDate Date
DefLng Long
DefStr String
DefCur Currency
DefObj Object
DefSng Single
DefVar Variant
DefByte Byte
Ejemplo
Todas las variables cuyos nombres comienzan por una letra comprendida entre I y K y por la letra N son variables de tipo
entero (Integer).
DefInt I-K,N
Las variables que comienzan por una letra comprendida entre A y H serán de tipo cadena (String).
DefStr A-H
La instrucción siguiente declara la variable Identificador como tipo Variant y las variables Superficie y Latitud como tipo
Entero.
Se recomienda utilizar una convención de nombres para las variables. Permiten estandarizar el código y hacerlo
más legible y más fácil de mantener por diferentes desarrolladores.
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
44 - 7-
La convención consiste en utilizar dos prefijos en el nombre de las variables:
z El primero para indicar el ámbito de la variable: p o pb o pb_ para pública, m o mo para módulo, y ningún prefijo
para las locales.
4. Matrices
Puede crear una variable matriz cuando necesite trabajar con un grupo de valores relacionados.
z Si se indica LimiteInf To LimiteSup: la matriz tendrá un número de elementos determinado y números de índice
específicos.
Para modificar el valor menor del índice, use la instrucción Option Base MenorValorÍndice en la sección de
declaración del módulo o use la sintaxis LimiteInf To LimiteSup en el argumento (índices).
Para definir el contenido de una matriz, use la función Array (la variable debe ser una tabla de dimensión
libre) o despliegue los datos en una hoja o asigne una por una cada variable de la matriz usando los
índices.
Ejemplo
El siguiente ejemplo muestra, en la hoja activa de Excel, la lista de los factores de conversión a euros para cinco países.
- 8- © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
45
Const FacITL = 1936.27
----------------------------------------------------------------
Sub Muestra_Factor()
Dim Pais As Variant
Dim Factor(5) As Double
Dim i As Integer
’ Lista de países
Pais = Array("Francia", "Bélgica", "Alemania", _
"España", "Italia")
End Sub
En este ejemplo, también es posible usar una matriz de dos índices. El código VBA del procedimiento queda como sigue:
Sub Muestra_Factor2
’ Matriz de dos índices
Dim TabFactor(5, 1)
Dim i As Integer
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
46 - 9-
End Sub
5. Constantes
a. Constantes personalizadas
La declaración de una constante se hace con la instrucción Const en la sección de declaración de un módulo o en
un procedimiento.
expresión No puede ser una función definida por el usuario, ni una función intrínseca de
Visual Basic.
Ejemplo
Sub Constantes()
’ Ejemplos de constantes autorizadas:
Const Val1 = "Mega+"
Const Val2 = 148
Const Val3 = 125.45
’ El tipo de datos es Double
Const Val4 As Single = 125.45
’ Permite ahorrar memoria
Const Val5 = Val2 * Val3
Const Val6 = Val1 & " cuesta " & Val2
’ Ejemplo de constante no autorizada:
’ Por el uso de una función VB
Const Val6 = Fix(Val4)
End Sub
Para crear una constante accesible a todos los libros abiertos, se debe declarar en la sección de declaración de un
módulo y situar la instrucción Public antes de la instrucción Const.
b. Constantes integradas
Las constantes usadas por los objetos de Microsoft Excel van precedidas por las letras "xl"; las constantes usadas
con otras instrucciones y funciones de Visual Basic van precedidas por las letras "vb", y las constantes de Microsoft
Office van precedidas por las letras "mso".
Para mostrar la lista de constantes integradas, abra el examinador de objetos haciendo clic en el icono
o pulsando la tecla de función [F2]. Escriba la palabra constants en la lista desplegable Texto de
- 10 - © Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
47
búsqueda (la segunda situada a la izquierda) y luego haga clic en el icono .
© Editions ENI – Tous droits réservés – Copie personnelle de RODOLFO MONTES VALDIVIA
48 - 11 -