VBA Excel 2016 - Ediciones ENI · Ediciones ENI VBA Excel 2016 Programación en Excel: Macros y...

35
Ediciones ENI VBA Excel 2016 Programación en Excel: Macros y lenguaje VBA Colección Recursos Informáticos Contenido

Transcript of VBA Excel 2016 - Ediciones ENI · Ediciones ENI VBA Excel 2016 Programación en Excel: Macros y...

Ediciones ENI

VBA Excel 2016Programación en Excel: Macros y lenguaje VBA

Colección Recursos Informáticos

Contenido

1Contenido

Podrá descargar algunos elementos de este libro en la página web de Ediciones ENI: http://www.ediciones-eni.com.

Escriba la referencia ENI del libro RIT16EXCV en la zona de búsqueda y valide. Haga clic en el título y después en el botón de descarga.

Prólogo

Capítulo 1Presentación

1. Presentación del lenguaje VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.1 Objetivos del lenguaje VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.2 Algunas definiciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.3 Escritura de código VBA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2. Las macros de Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.1 Mostrar la pestaña Desarrollador en la cinta de opciones . . . . . 192.2 Descripción de la pestaña Desarrollador . . . . . . . . . . . . . . . . . . . 20

2.2.1 Grupo Código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.2.2 Grupo Complementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.2.3 Grupo Controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.3 Grabar una macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.3.1 Grabar la primera macro . . . . . . . . . . . . . . . . . . . . . . . . . . 222.3.2 Ejecutar una macro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.3.3 Grabar una macro con referencias relativas . . . . . . . . . . . 232.3.4 Definir el lugar de almacenamiento

de una nueva macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.3.5 Eliminar una macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.3.6 Guardar un libro con macros . . . . . . . . . . . . . . . . . . . . . . . 26

2.4 Las macros y la seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.4.1 Modificar la configuración de seguridad . . . . . . . . . . . . . . 272.4.2 Descripción de las diferentes opciones de seguridad . . . . 272.4.3 Habilitar las macros cuando aparece la advertencia

de seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

2Programación en Excel: macros y lenguaje VBA

VBA Excel 2016

2.4.4 Activar las macros en una ubicación dada . . . . . . . . . . . . 292.4.5 Firmas electrónicas de macros . . . . . . . . . . . . . . . . . . . . . . 30

2.5 Modificar el código de una macro . . . . . . . . . . . . . . . . . . . . . . . . 30

3. Asignar una macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.1 Acceso a una macro desde la cinta de opciones

de Office 2016 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.2 Asociar una macro a un icono de la barra de herramientas

de acceso rápido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.3 Asociar una macro a un botón de comando . . . . . . . . . . . . . . . . 363.4 Asignar una macro a una imagen . . . . . . . . . . . . . . . . . . . . . . . . 363.5 Asociar una macro a una zona de un objeto gráfico. . . . . . . . . . 373.6 Asociar una macro a una imagen Control ActiveX . . . . . . . . . . 37

4. El entorno de desarrollo VBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.1 Acceso al entorno VBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.2 Cerrar el entorno VBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.3 Volver a Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.4 Descripción del entorno VBE. . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.5 Elegir las ventanas que hay que mostrar . . . . . . . . . . . . . . . . . . . 43

5. Configuración del editor VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435.1 Configuración de la tipografía . . . . . . . . . . . . . . . . . . . . . . . . . . . 435.2 Configuración de la introducción de código . . . . . . . . . . . . . . . . 445.3 Manejo de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455.4 Acoplar una ventana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Capítulo 2El lenguaje VBA

1. Módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471.2 Acceso a los módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.3 Importar y exportar código VBA . . . . . . . . . . . . . . . . . . . . . . . . . 49

3Contenido

2. Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502.1 Definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502.2 Acceso a los procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512.3 Procedimientos Sub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512.4 Procedimientos Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522.5 Declaración de procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . 532.6 Alcance de los procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . 542.7 Argumentos de los procedimientos . . . . . . . . . . . . . . . . . . . . . . . 542.8 Argumentos con nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.9 Llamar a un procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572.10 Llamar a una función VBA en una fórmula de Excel . . . . . . . . . 572.11 Ejemplos de procedimientos y funciones . . . . . . . . . . . . . . . . . . 60

3. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613.1 Tipos de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613.2 Declaración de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

3.2.1 Declaraciones implícitas. . . . . . . . . . . . . . . . . . . . . . . . . . . 663.2.2 Declaraciones explícitas . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.2.3 Sintaxis de las instrucciones de declaración . . . . . . . . . . . 67

3.3 Declaración de los tipos de variables . . . . . . . . . . . . . . . . . . . . . . 683.3.1 Declaraciones explícitas del tipo . . . . . . . . . . . . . . . . . . . . 683.3.2 Declaraciones implícitas del tipo . . . . . . . . . . . . . . . . . . . . 693.3.3 Convención de nombres de variables . . . . . . . . . . . . . . . . 71

3.4 Matrices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.5 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

3.5.1 Constantes personalizadas. . . . . . . . . . . . . . . . . . . . . . . . . 733.5.2 Constantes integradas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

4. Estructuras de decisión. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754.1 Instrucción If . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764.2 Instrucción Select Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

5. Estructuras en ciclo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805.1 Instrucción Do...Loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815.2 Instrucción While...Wend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

4Programación en Excel: macros y lenguaje VBA

VBA Excel 2016

5.3 Instrucción For...Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835.4 Instrucción For Each...Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845.5 Salir de las estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . 86

6. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866.1 Operadores aritméticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876.2 Operadores de comparación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876.3 Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886.4 Operador de concatenación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896.5 Prioridad de los operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

7. Reglas de escritura del código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907.1 Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907.2 Carácter de continuación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907.3 Sangrías . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917.4 Nombres de los procedimientos, variables y constantes . . . . . . 91

Capítulo 3La programación de objetos en Excel

1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

2. El modelo de objeto de Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942.2 Principales objetos y colecciones . . . . . . . . . . . . . . . . . . . . . . . . . 95

3. Principios de uso de los objetos y las colecciones . . . . . . . . . . . . . . . . 983.1 Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983.2 Propiedades que representan objetos. . . . . . . . . . . . . . . . . . . . . . 983.3 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003.4 Eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013.5 Colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023.6 Redacción automática de instrucciones . . . . . . . . . . . . . . . . . . 104

4. Instrucciones usadas con los objetos. . . . . . . . . . . . . . . . . . . . . . . . . 1064.1 La instrucción With . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064.2 La instrucción For Each...Next. . . . . . . . . . . . . . . . . . . . . . . . . . 107

5Contenido

4.3 La instrucción If TypeOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074.4 La instrucción Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

5. El Examinador de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095.2 Búsqueda en el Examinador de objetos . . . . . . . . . . . . . . . . . . . 111

Capítulo 4Objetos de Excel

1. El objeto Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1131.1 Propiedades que representan las opciones de Excel . . . . . . . . . 114

1.1.1 Opciones de la categoría General. . . . . . . . . . . . . . . . . . . 1141.1.2 Opciones de la categoría Fórmulas . . . . . . . . . . . . . . . . . 1151.1.3 Opciones de la categoría Revisión . . . . . . . . . . . . . . . . . . 1171.1.4 Opciones de la categoría Guardar . . . . . . . . . . . . . . . . . . 1181.1.5 Opciones de la categoría Avanzadas . . . . . . . . . . . . . . . . 119

1.2 Propiedades relativas a la presentación de la aplicación. . . . . . 1261.3 Propiedades varias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1281.4 Métodos del objeto Application . . . . . . . . . . . . . . . . . . . . . . . . 132

1.4.1 Métodos que actúan sobre las fórmulas y los cálculos. . 1321.4.2 Métodos que actúan sobre las celdas. . . . . . . . . . . . . . . . 1331.4.3 Métodos que actúan sobre las listas personalizadas. . . . 1331.4.4 Métodos que muestran los cuadros de diálogo. . . . . . . . 1341.4.5 Métodos relacionados con las acciones en Excel. . . . . . . 1341.4.6 Métodos relativos al correo . . . . . . . . . . . . . . . . . . . . . . . 1351.4.7 Otros métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

1.5 Ejemplos de códigos que usan el objeto Application . . . . . . . . 1371.5.1 Modificación de la interfaz de Excel . . . . . . . . . . . . . . . . 1371.5.2 Creación de una lista personalizada . . . . . . . . . . . . . . . . 1371.5.3 Selección de columnas no consecutivas . . . . . . . . . . . . . 1381.5.4 Evaluación del resultado de una fórmula . . . . . . . . . . . . 138

6Programación en Excel: macros y lenguaje VBA

VBA Excel 2016

2. Objeto Workbook. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392.1 Objetos y colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402.2 Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

2.2.1 Propiedades relativas a la actualización y registro de libros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

2.2.2 Propiedades relativas a libros compartidos . . . . . . . . . . . 1432.2.3 Otras propiedades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

2.3 Lista de métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1482.3.1 Métodos que actúan directamente sobre los libros . . . . 1482.3.2 Métodos relativos a la seguridad . . . . . . . . . . . . . . . . . . . 1502.3.3 Métodos relativos a libros compartidos . . . . . . . . . . . . . 1502.3.4 Métodos relacionados con datos vinculados. . . . . . . . . . 1512.3.5 Métodos relativos al envío de libros . . . . . . . . . . . . . . . . 1522.3.6 Otros métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

2.4 Ejemplos de códigos que usan el objeto Workbook . . . . . . . . . 1532.4.1 Creación de un libro de Excel. . . . . . . . . . . . . . . . . . . . . . 1532.4.2 Importar una base de datos y exportarla al formato

HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1542.4.3 Mostrar las propiedades de un libro . . . . . . . . . . . . . . . . 1552.4.4 Exportar un libro al formato PDF . . . . . . . . . . . . . . . . . . 156

3. El objeto Worksheet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1563.1 Lista de objetos y colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . 1573.2 Objetos y colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1573.3 Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1603.4 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1623.5 Ejemplos de códigos que usan el objeto Worksheet . . . . . . . . . 165

3.5.1 Ordenar las hojas de cálculo de un libro . . . . . . . . . . . . . 1653.5.2 Protección de las hojas de cálculo de un libro . . . . . . . . . 1663.5.3 Ordenar una tabla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

4. El objeto Range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1674.1 Propiedades y métodos que devuelven un objeto Range . . . . . 1674.2 Sintaxis de las propiedades que devuelven un objeto Range . . 1704.3 Lista de objetos y colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . 174

7Contenido

4.4 Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1764.4.1 Propiedades relacionadas con la posición y el formato

de las celdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1764.4.2 Propiedades que se relacionan con el contenido

de celdas y con las fórmulas. . . . . . . . . . . . . . . . . . . . . . . 1774.4.3 Otras propiedades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

4.5 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1794.5.1 Métodos que devuelven un objeto . . . . . . . . . . . . . . . . . 1794.5.2 Métodos que se relacionan con la presentación

de las celdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1794.5.3 Métodos relacionados con el contenido de las celdas. . . 1814.5.4 Métodos relacionados con los nombres de celdas. . . . . . 1834.5.5 Métodos relacionados con los filtros . . . . . . . . . . . . . . . . 1834.5.6 Métodos relacionados con el modo esquema . . . . . . . . . 1844.5.7 Métodos que se relacionan con la herramienta

de Auditoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1844.5.8 Otros métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

5. Ejemplos de uso de los objetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1865.1 Cálculo del importe de una prima . . . . . . . . . . . . . . . . . . . . . . . 1865.2 Asignar comentarios a las celdas . . . . . . . . . . . . . . . . . . . . . . . . 188

Capítulo 5Tablas dinámicas y gráficos

1. Las tablas dinámicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1911.1 El objeto PivotTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

1.1.1 Colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1911.1.2 Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1921.1.3 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

1.2 Creación de una tabla dinámica. . . . . . . . . . . . . . . . . . . . . . . . . 196

2. Los gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1972.1 El objeto Shape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

2.1.1 Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

8Programación en Excel: macros y lenguaje VBA

VBA Excel 2016

2.1.2 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1982.2 El objeto Chart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

2.2.1 Colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1982.2.2 Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1982.2.3 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

2.3 Creación de un gráfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

3. Ejemplo de aplicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2013.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2013.2 Código VBA del ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

4. Creación de una tabla dinámica con minigráficos . . . . . . . . . . . . . . 210

Capítulo 6Cuadros de diálogo

1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

2. Cuadros de diálogo integrados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2162.1 El objeto Dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2162.2 Los métodos GetOpenFileName y GetSaveAsFileName . . . . . 217

3. Cuadros de diálogo predefinidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2193.1 La función InputBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2193.2 El método InputBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2203.3 La función MsgBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2213.4 Constantes usadas en los cuadros de diálogo . . . . . . . . . . . . . . 225

Capítulo 7Formularios

1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

2. Crear un formulario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

3. Personalizar un formulario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2373.1 Escribir procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2373.2 Lista de eventos asociados a los principales controles . . . . . . . 238

9Contenido

3.3 Ejecutar y cerrar un formulario . . . . . . . . . . . . . . . . . . . . . . . . . 244

4. Ejemplo de formulario personalizado . . . . . . . . . . . . . . . . . . . . . . . . 2454.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2454.2 Código asociado al botón macro de la pestaña Empleados . . . 2474.3 Código VBA asociado al formulario . . . . . . . . . . . . . . . . . . . . . 247

Capítulo 8Mejoras en la interfaz de usuario

1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

2. Personalización de la cinta con la utilidad Custom UI Editor . . . . . 2542.1 Presentación de la utilidad Custom UI Editor . . . . . . . . . . . . . 2542.2 Ejemplo de código XML de personalización . . . . . . . . . . . . . . . 2562.3 Etiquetas XML correspondientes a los distintos elementos

de la cinta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2592.3.1 Pestañas y grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2592.3.2 Principales controles de la cinta de opciones . . . . . . . . . 2602.3.3 Atributos de los controles de la cinta de opciones . . . . . 2632.3.4 Resumen de los atributos para cada control . . . . . . . . . . 2652.3.5 Imágenes de la galería de iconos de Microsoft Office . . 2672.3.6 Funciones de llamadas Callbacks. . . . . . . . . . . . . . . . . . . 2672.3.7 Uso de las funciones de llamada Callbacks . . . . . . . . . . . 270

3. Ejemplo de cinta personalizada con el Custom UI Editor . . . . . . . . 2713.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2713.2 Código XML de la cinta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2733.3 Código VBA de personalización de la cinta (módulo "Cinta"). 275

4. Personalización de la cinta de opciones mediante la colección CommandBars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

5. Ejemplos de barras de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2805.1 Barras de herramientas personalizadas . . . . . . . . . . . . . . . . . . . 2805.2 Comandos de menús en formato Office 2016 . . . . . . . . . . . . . 2805.3 Agregar el grupo a la barra de herramientas de acceso rápido . 281

10Programación en Excel: macros y lenguaje VBA

VBA Excel 2016

6. Barras de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2826.1 Terminología. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

6.1.1 Barra de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2826.1.2 Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

6.2 Crear una barra de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . 2826.3 Eliminar una barra de comandos . . . . . . . . . . . . . . . . . . . . . . . . 2846.4 Mostrar una barra de comandos . . . . . . . . . . . . . . . . . . . . . . . . 284

7. Controles (opciones o botones de comando) de las barras de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2857.1 Agregar un control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2857.2 Especificar el título de un control . . . . . . . . . . . . . . . . . . . . . . . 2867.3 Eliminar un control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2877.4 Asociar un procedimiento a un control. . . . . . . . . . . . . . . . . . . 2877.5 Otras propiedades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2877.6 Lista de imágenes asociadas a los botones de comando . . . . . . 289

8. Ejemplos de menús personalizados . . . . . . . . . . . . . . . . . . . . . . . . . . 2908.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2908.2 Código de los ejemplos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2928.3 Código del módulo de clase ThisWorkbook . . . . . . . . . . . . . . . 2928.4 Código de la hoja "Nota de Gastos" . . . . . . . . . . . . . . . . . . . . . . 2938.5 Código del módulo ProcMenus . . . . . . . . . . . . . . . . . . . . . . . . . 2938.6 Código del módulo ProcAction . . . . . . . . . . . . . . . . . . . . . . . . . 298

Capítulo 9Administración de eventos

1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

2. Escritura de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3022.1 Eventos de libro, de hoja o de formulario . . . . . . . . . . . . . . . . . 3022.2 Eventos del objeto Application . . . . . . . . . . . . . . . . . . . . . . . . . 3042.3 Evento asociado a un gráfico incrustado. . . . . . . . . . . . . . . . . . 307

3. Eventos del objeto Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

11Contenido

4. Eventos del objeto Workbook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

5. Eventos del objeto Worksheet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

6. Eventos del objeto Chart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

Capítulo 10Depuración y administración de errores

1. Diferentes tipos de error. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3211.1 Errores de sintaxis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3211.2 Errores de compilación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3221.3 Errores de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3231.4 Errores de lógica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

2. Depuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3252.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3252.2 La barra de herramientas Depuración . . . . . . . . . . . . . . . . . . . . 3252.3 El objeto Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

3. Administración de errores en VBA . . . . . . . . . . . . . . . . . . . . . . . . . . 3283.1 El objeto Err. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

Capítulo 11Comunicación con las aplicaciones de Office 2016

1. La tecnología Automation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3331.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3331.2 Uso de la tecnología Automation . . . . . . . . . . . . . . . . . . . . . . . 334

2. Comunicación con Word desde Excel . . . . . . . . . . . . . . . . . . . . . . . . 3362.1 El modelo de objeto de Word . . . . . . . . . . . . . . . . . . . . . . . . . . . 3362.2 Principales colecciones del modelo de objeto de Word. . . . . . . 3372.3 Principales objetos del modelo de objeto de Word . . . . . . . . . . 3382.4 La colección Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3392.5 Objetos Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3402.6 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

12Programación en Excel: macros y lenguaje VBA

VBA Excel 2016

3. Comunicación con Access desde Excel . . . . . . . . . . . . . . . . . . . . . . . 3453.1 El modelo de objeto de Access . . . . . . . . . . . . . . . . . . . . . . . . . . 3453.2 Principales colecciones del modelo de objeto de Access . . . . . . 3463.3 Principales objetos del modelo de objeto de Access . . . . . . . . . 3463.4 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

3.4.1 Listar tablas de una base de Access . . . . . . . . . . . . . . . . . 3483.4.2 Mostrar una tabla de Access en Excel . . . . . . . . . . . . . . . 3483.4.3 Abrir una tabla o consulta de Access

en un nuevo libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

4. Comunicación con Outlook desde Excel. . . . . . . . . . . . . . . . . . . . . . 3514.1 Objetos de Outlook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3514.2 Acceso a los objetos de Outlook . . . . . . . . . . . . . . . . . . . . . . . . 352

4.2.1 Creación de un objeto (e-mail, contacto...) en Outlook 3524.2.2 Acceso a los objetos (contactos, citas…) de Outlook. . . 353

4.3 Ejemplo de uso del objeto MailItem . . . . . . . . . . . . . . . . . . . . . 354

5. Objetos vinculados o incrustados . . . . . . . . . . . . . . . . . . . . . . . . . . . 3555.1 Métodos del objeto OLEObject . . . . . . . . . . . . . . . . . . . . . . . . . 3565.2 Propiedades del objeto OLEObject . . . . . . . . . . . . . . . . . . . . . . 356

6. Métodos y propiedades relativos a los vínculos con Excel . . . . . . . . 3576.1 Métodos y propiedades del objeto Workbook . . . . . . . . . . . . . 3576.2 Métodos y propiedades de otros objetos. . . . . . . . . . . . . . . . . . 359

Capítulo 12Internet

1. Consultas por Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361

2. El objeto QueryTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3632.1 Propiedades del objeto QueryTable . . . . . . . . . . . . . . . . . . . . . . 3642.2 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368

3. Publicación de páginas web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3703.1 Asociación de un elemento de libro a una página web . . . . . . 3713.2 Publicación de la página web . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

13Contenido

3.3 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

4. Los objetos WebOptions y DefaultWebOptions . . . . . . . . . . . . . . . 3734.1 Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374

4.1.1 Opciones de la pestaña General . . . . . . . . . . . . . . . . . . . . 3744.1.2 Opciones de la pestaña Exploradores . . . . . . . . . . . . . . . 3754.1.3 Opciones de la pestaña Archivos . . . . . . . . . . . . . . . . . . . 3764.1.4 Otras propiedades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

4.2 Método del objeto WebOptions . . . . . . . . . . . . . . . . . . . . . . . . 377

5. Importar, exportar y asignar archivos XML . . . . . . . . . . . . . . . . . . . 3775.1 Colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3785.2 Métodos del objeto Workbook . . . . . . . . . . . . . . . . . . . . . . . . . 3795.3 Eventos del objeto Workbook . . . . . . . . . . . . . . . . . . . . . . . . . . 3805.4 Métodos del objeto XmlMap . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

6. El objeto HyperLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3816.1 Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3816.2 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382

Capítulo 13Programación en Windows

1. Presentación de las API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383

2. Llamar a una función de la API de Windows . . . . . . . . . . . . . . . . . . 3852.1 Sintaxis de la instrucción Declare . . . . . . . . . . . . . . . . . . . . . . . 3852.2 Paso de argumentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

3. Lista de funciones API de Windows . . . . . . . . . . . . . . . . . . . . . . . . . 386

4. Ejemplos de uso de funciones API de Windows . . . . . . . . . . . . . . . . 3874.1 Recuperar el directorio Windows . . . . . . . . . . . . . . . . . . . . . . . 3874.2 Abrir la calculadora de Windows. . . . . . . . . . . . . . . . . . . . . . . . 388

5. El objeto FileSystemObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3905.1 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3905.2 Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3925.3 Ejemplo: copia de archivos de Excel . . . . . . . . . . . . . . . . . . . . . 392

14Programación en Excel: macros y lenguaje VBA

VBA Excel 2016

Capítulo 14Código de una miniaplicación

1. Presentación general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

2. Descripción de la aplicación GestPresupuesto . . . . . . . . . . . . . . . . . 394

3. Cinta de Office 2013 personalizada. . . . . . . . . . . . . . . . . . . . . . . . . . 3963.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3963.2 Código XML de la cinta personalizada . . . . . . . . . . . . . . . . . . . 397

4. Módulo ThisWorbook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3984.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3984.2 Código VBA del módulo ThisWorkbook . . . . . . . . . . . . . . . . . 398

5. Formulario NuevoPresupuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3995.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3995.2 Lista de controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3995.3 Lista de celdas con nombre del modelo Presupuesto.xltx . . . . 4005.4 Código VBA del formulario NuevoPresupuesto . . . . . . . . . . . . 400

6. Formulario BuscarPresupuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4036.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4036.2 Lista de controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4036.3 Código VBA del formulario BuscarPresupuesto . . . . . . . . . . . . 404

7. Módulos ProcCinta y ProcGene. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4077.1 Código VBA del módulo ProcCinta. . . . . . . . . . . . . . . . . . . . . . 4077.2 Código VBA del módulo ProcGene . . . . . . . . . . . . . . . . . . . . . . 409

Anexos1. Lista de instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

1.1 Cadenas de caracteres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4131.2 Fecha Hora/Matemáticas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4141.3 Declaración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4141.4 Error. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416

15Contenido

1.5 Archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4171.6 Estructuración. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4211.7 Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4221.8 Diversas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

2. Lista de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4242.1 Conversiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4242.2 Cadenas de caracteres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4262.3 Matemáticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4292.4 Financieras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4312.5 Fechas y horas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4332.6 Archivos, Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4362.7 Verificación de variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4382.8 Interacción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4392.9 Matrices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4392.10 SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4402.11 Diversas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4412.12 Solver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442

3. Constantes VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4443.1 Constantes de color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4443.2 Constantes de fecha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4443.3 Constantes de teclas correspondientes a letras y números . . . 4453.4 Constantes de teclas de función . . . . . . . . . . . . . . . . . . . . . . . . 4453.5 Constantes de teclas diversas. . . . . . . . . . . . . . . . . . . . . . . . . . . 446

Índice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449

Ediciones ENI

VBA Excel 2016 Cree aplicaciones profesionales:

Ejercicios y correcciones

Colección Prácticas Técnicas

Contenido

PrefacioA quién va dirigido el libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Objetivo del libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Utilización del libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Ayuda en la realización de las prácticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

EnunciadosCapítulo 1: ProcedimientosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Enunciado 1.1 Crear y utilizar un procedimiento privado . . . . . . . . . . . . . . . . . . . . . . 39Enunciado 1.2 Crear y utilizar un procedimiento público . . . . . . . . . . . . . . . . . . . . . . 40Enunciado 1.3 Llamar a un procedimiento desde otro procedimiento . . . . . . . . . . . . . 40Enunciado 1.4 Llamar a un procedimiento a partir de otro módulo . . . . . . . . . . . . . . . 41Enunciado 1.5 Llamar a un procedimiento desde un control VBA . . . . . . . . . . . . . . . . 41Enunciado 1.6 Utilizar un procedimiento desde una hoja de cálculo Excel . . . . . . . . . . 42Enunciado 1.7 Utilizar un procedimiento a partir de un libro Excel . . . . . . . . . . . . . . . 42Enunciado 1.8 Crear una función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Enunciado 1.9 Utilizar una función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Enunciado 1.10 Utilizar parámetros con nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Capítulo 2: Variables - Constantes - Tipos de datosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45Enunciado 2.1 Declarar y utilizar una variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48Enunciado 2.2 Declarar y utilizar una constante . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Enunciado 2.3 Utilizar la fecha del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52Enunciado 2.4 Crear un tipo de datos "PezTropical" definido por el usuario . . . . . . . . . 52Enunciado 2.5 Utilizar el tipo "PezTropical" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53Enunciado 2.6 Renombrar una hoja de cálculo Excel . . . . . . . . . . . . . . . . . . . . . . . . 54

Capítulo 3: Funciones - OperadoresRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55Enunciado 3.1 Dividir dos números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57Enunciado 3.2 Obtener el resto de una división entera . . . . . . . . . . . . . . . . . . . . . . . 57Enunciado 3.3 Comparar números y buscar el más pequeño de ellos . . . . . . . . . . . . . 58Enunciado 3.4 Dar el resultado de un número elevado a la potencia N . . . . . . . . . . . . 59Enunciado 3.5 Comparar dos cadenas de caracteres. . . . . . . . . . . . . . . . . . . . . . . . . 60

2

Enunciado 3.6 Realizar un cálculo factorial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60Enunciado 3.7 Calcular el porcentaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61Enunciado 3.8 Formatear una palabra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Enunciado 3.9 Buscar una palabra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Enunciado 3.10 Extraer información de una cadena de caracteres . . . . . . . . . . . . . . . . 63

Capítulo 4: Estructuras de controlRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65Enunciado 4.1 Comprobar que se introduce un número . . . . . . . . . . . . . . . . . . . . . . 67Enunciado 4.2 Despedida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Enunciado 4.3 Controlar la introducción de una consonante o una vocal . . . . . . . . . . 70Enunciado 4.4 Mostrar un mensaje según la edad y el sexo . . . . . . . . . . . . . . . . . . . 70Enunciado 4.5 Mostrar buenos días N veces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72Enunciado 4.6 Contar de N en N hasta M. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72Enunciado 4.7 Hacer obligatoria la introducción de un dato y controlar la salida . . . . . 73Enunciado 4.8 Invertir el orden de los caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . 75Enunciado 4.9 Comprobar si un número es primo . . . . . . . . . . . . . . . . . . . . . . . . . . 75Enunciado 4.10 Contar el número de ocurrencias de un número . . . . . . . . . . . . . . . . . 76

Capítulo 5: TablasRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77Enunciado 5.1 Declarar una tabla accesible por todos los procedimientos del proyecto 79Enunciado 5.2 Declarar una tabla accesible solo por los procedimientos del módulo . . 79Enunciado 5.3 Utilizar una tabla declarada en un procedimiento. . . . . . . . . . . . . . . . 79Enunciado 5.4 Utilizar una tabla a nivel de módulo . . . . . . . . . . . . . . . . . . . . . . . . . 80Enunciado 5.5 Inicializar una tabla con un bucle . . . . . . . . . . . . . . . . . . . . . . . . . . . 80Enunciado 5.6 Declarar y utilizar una tabla de dos dimensiones . . . . . . . . . . . . . . . . 81Enunciado 5.7 Declarar y utilizar una tabla de más de dos dimensiones. . . . . . . . . . . 81Enunciado 5.8 Declarar y utilizar una tabla dinámica. . . . . . . . . . . . . . . . . . . . . . . . 82Enunciado 5.9 Hacer más grande una tabla dinámica

con servando los valores iniciales . . . . . . . . . . . . . . . . . . . . . . . . . . . 82Enunciado 5.10 Trabajar con una tabla mediante un bucle. . . . . . . . . . . . . . . . . . . . . 83Enunciado 5.11 Mostrar una tabla en un formulario. . . . . . . . . . . . . . . . . . . . . . . . . . 83

3

Capítulo 6: Introducción a la programación orientada a objetosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85Enunciado 6.1 Acceder a un objeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87Enunciado 6.2 Leer las propiedades de un objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Enunciado 6.3 Modificar las propiedades de un objeto . . . . . . . . . . . . . . . . . . . . . . . 89Enunciado 6.4 Utilizar los métodos de un objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Enunciado 6.5 Gestionar las colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Enunciado 6.6 Gestionar los eventos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92Enunciado 6.7 Administrar los errores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Enunciado 6.8 Crear una clase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94Enunciado 6.9 Utilizar la clase creada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95Enunciado 6.10 Crear y utilizar una colección de objetos . . . . . . . . . . . . . . . . . . . . . . 96

Capítulo 7: LibrosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Enunciado 7.1 Conocer el libro activo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Enunciado 7.2 Mostrar el libro activo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Enunciado 7.3 Cambiar el libro activo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100Enunciado 7.4 Grabar el libro activo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100Enunciado 7.5 Agregar un nuevo libro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100Enunciado 7.6 Grabar un libro especificando la carpeta de destino. . . . . . . . . . . . . . 100Enunciado 7.7 Obtener la ruta completa donde se encuentra el libro . . . . . . . . . . . . 101Enunciado 7.8 Cerrar todos los libros ofreciendo la posibilidad de grabarlos . . . . . . . 102Enunciado 7.9 Dar la bienvenida al usuario con un mensaje cuando se abra el libro. . 102Enunciado 7.10 Seleccionar la hoja de cálculo al abrir el fichero . . . . . . . . . . . . . . . . 103Enunciado 7.11 Actualizar todos los cálculos antes del cierre del libro . . . . . . . . . . . . 103Enunciado 7.12 Actualizar todos los cálculos antes de la impresión . . . . . . . . . . . . . . 104Enunciado 7.13 Consolidar datos a partir de varios libros . . . . . . . . . . . . . . . . . . . . . 105Enunciado 7.14 Actualizar datos consolidados al abrir el libro . . . . . . . . . . . . . . . . . . 106Enunciado 7.15 Actualizar los datos a partir de varios libros permanentemente . . . . . . 107Enunciado 7.16 Crear una portada de acceso a varios libros . . . . . . . . . . . . . . . . . . . 107

Capítulo 8: Hojas de cálculoRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109Enunciado 8.1 Averiguar el nombre de la hoja activa . . . . . . . . . . . . . . . . . . . . . . . 111Enunciado 8.2 Renombrar la hoja activa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112Enunciado 8.3 Avisar al cambiar la hoja activa recordando

el nombre de la hoja activa anterior. . . . . . . . . . . . . . . . . . . . . . . . . 112

4

Enunciado 8.4 Realizar una vista previa de la hoja activa . . . . . . . . . . . . . . . . . . . . 113Enunciado 8.5 Desencadenar una acción cuando se active una hoja . . . . . . . . . . . . 113Enunciado 8.6 Desencadenar una acción cuando se activa una celda

de la hoja activa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114Enunciado 8.7 Desencadenar una acción cuando se modifica

una celda de la hoja activa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115Enunciado 8.8 Desencadenar una acción cuando

se haga doble clic en una celda de la hoja activa . . . . . . . . . . . . . . . 115Enunciado 8.9 Agregar una nueva hoja de cálculo . . . . . . . . . . . . . . . . . . . . . . . . . 116Enunciado 8.10 Eliminar una hoja de cálculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116Enunciado 8.11 Copiar una hoja de cálculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117Enunciado 8.12 Averiguar el número de hojas del libro . . . . . . . . . . . . . . . . . . . . . . 117Enunciado 8.13 Averiguar los nombres de todas las hojas de cálculo. . . . . . . . . . . . . 117Enunciado 8.14 Mostrar los nombres de todas las hojas de cálculo en forma de lista. . 118Enunciado 8.15 Buscar una hoja de cálculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Enunciado 8.16 Proteger todas las hojas de cálculo. . . . . . . . . . . . . . . . . . . . . . . . . 119Enunciado 8.17 Desproteger todas las hojas de cálculo . . . . . . . . . . . . . . . . . . . . . . 119

Capítulo 9: Celdas y rangosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121Enunciado 9.1 Activar una celda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123Enunciado 9.2 Averiguar la dirección de la celda activa . . . . . . . . . . . . . . . . . . . . . 123Enunciado 9.3 Recuperar el valor de una celda . . . . . . . . . . . . . . . . . . . . . . . . . . . 124Enunciado 9.4 Recuperar la fórmula de una celda . . . . . . . . . . . . . . . . . . . . . . . . . 124Enunciado 9.5 Modificar el contenido de una celda . . . . . . . . . . . . . . . . . . . . . . . . 124Enunciado 9.6 Modificar el formato de una celda . . . . . . . . . . . . . . . . . . . . . . . . . 125Enunciado 9.7 Seleccionar la columna donde está la celda activa . . . . . . . . . . . . . . 125Enunciado 9.8 Seleccionar todas las celdas de una hoja de cálculo . . . . . . . . . . . . . 126Enunciado 9.9 Seleccionar todas las celdas de un rango definido . . . . . . . . . . . . . . 126Enunciado 9.10 Seleccionar toda una tabla a partir de una de sus celdas. . . . . . . . . . 127Enunciado 9.11 Seleccionar una tabla o lista con nombre a partir de su nombre . . . . 127Enunciado 9.12 Indicar la dirección de la celda bajo la celda activa y seleccionarla. . . 128Enunciado 9.13 Encontrar la última celda que contenga un valor de una columna . . . 128Enunciado 9.14 Asignar la fórmula de una celda a otra celda . . . . . . . . . . . . . . . . . . 129Enunciado 9.15 Asignar una fórmula a una celda . . . . . . . . . . . . . . . . . . . . . . . . . . 129Enunciado 9.16 Asignar la referencia absoluta de una celda a otra celda . . . . . . . . . . 130Enunciado 9.17 Asignar un valor a un rango de celdas. . . . . . . . . . . . . . . . . . . . . . . 130Enunciado 9.18 Agregar un comentario a una celda. . . . . . . . . . . . . . . . . . . . . . . . . 130Enunciado 9.19 Llenar una tabla con números . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Enunciado 9.20 Mostrar el número de columnas, de líneas y de celdas de un rango . . 131

5

Enunciado 9.21 Buscar un valor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132Enunciado 9.22 Crear una serie de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132Enunciado 9.23 Ordenar un rango de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133Enunciado 9.24 Copiar un rango de datos con vínculo a los datos origen . . . . . . . . . . 133Enunciado 9.25 Borrar los valores de un rango de datos pidiendo confirmación . . . . . . 134

Capítulo 10: GráficosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135Enunciado 10.1 Crear un gráfico en una hoja aparte. . . . . . . . . . . . . . . . . . . . . . . . . 137Enunciado 10.2 Renombrar una hoja que contiene un gráfico . . . . . . . . . . . . . . . . . . 138Enunciado 10.3 Mover una hoja que contiene un gráfico. . . . . . . . . . . . . . . . . . . . . . 138Enunciado 10.4 Crear un gráfico incrustado en una hoja de cálculo . . . . . . . . . . . . . . 138Enunciado 10.5 Extender el origen de datos de un gráfico incrustado . . . . . . . . . . . . . 139Enunciado 10.6 Extender el origen de datos de un gráfico

implantado en una hoja gráfica. . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Enunciado 10.7 Modificar el diseño de un gráfico. . . . . . . . . . . . . . . . . . . . . . . . . . . 141Enunciado 10.8 Exportar un gráfico a un fichero de imagen. . . . . . . . . . . . . . . . . . . . 141Enunciado 10.9 Desencadenar una acción cuando se seleccione el gráfico . . . . . . . . . 142Enunciado 10.10 Desencadenar una acción después de un clic en el gráfico . . . . . . . . . 142

Capítulo 11: Intercambio de funciones entre Excel y VBARequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Enunciado 11.1 Calcular una comisión en una hoja

de cálculo Excel con una función VBA . . . . . . . . . . . . . . . . . . . . . . . 144Enunciado 11.2 Calcular con una función VBA el precio sin IVA a partir del porcentaje

de IVA y del precio con IVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145Enunciado 11.3 Calcular el valor acumulado de una inversión con una función VBA. . . 145Enunciado 11.4 Buscar el valor más pequeño en un rango de

celdas con una función Excel en el código VBA. . . . . . . . . . . . . . . . . 146Enunciado 11.5 Generar un número aleatorio a partir de código

VBA utilizando una fórmula Excel . . . . . . . . . . . . . . . . . . . . . . . . . . 146Enunciado 11.6 Calcular la anualidad constante con Excel a partir de una función VBA 147Enunciado 11.7 Eliminar todos los espacios inútiles y redundantes de un rango

de celdas que contenga texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

6

Capítulo 12: Cuadros de diálogo estándaresRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149Enunciado 12.1 Mostrar un mensaje simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150Enunciado 12.2 Pedir una introducción de datos sin ningún control en concreto . . . . . 151Enunciado 12.3 Llamar al cuadro de diálogo "Abrir" de Windows . . . . . . . . . . . . . . . 151Enunciado 12.4 Llamar al cuadro de diálogo "Colores" de Windows. . . . . . . . . . . . . . 152Enunciado 12.5 Seleccionar botones para los cuadros de diálogo . . . . . . . . . . . . . . . 153Enunciado 12.6 Determinar el botón predeterminado de entre los disponibles . . . . . . 154Enunciado 12.7 Elegir y agregar un icono a un cuadro de diálogo . . . . . . . . . . . . . . . 154Enunciado 12.8 Controlar la introducción de datos . . . . . . . . . . . . . . . . . . . . . . . . . 155Enunciado 12.9 Realizar una acción según la elección del usuario. . . . . . . . . . . . . . . 155Enunciado 12.10 Realizar un proceso mientras el usuario

introduzca los datos que se le piden . . . . . . . . . . . . . . . . . . . . . . . . 156Enunciado 12.11 Grabar un libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156Enunciado 12.12 Modificar la fuente de la hoja de cálculo . . . . . . . . . . . . . . . . . . . . . 157Enunciado 12.13 Modificar el color de un rango de celdas . . . . . . . . . . . . . . . . . . . . . 158

Capítulo 13: FormulariosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159Enunciado 13.1 Mostrar un formulario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160Enunciado 13.2 Mostrar un formulario en modo no modal . . . . . . . . . . . . . . . . . . . . 161Enunciado 13.3 Mostrar un formulario detallando su contenido. . . . . . . . . . . . . . . . . 161Enunciado 13.4 Cerrar un formulario y liberar la memoria . . . . . . . . . . . . . . . . . . . . 162Enunciado 13.5 Gestionar el desplazamiento del ratón en el formulario . . . . . . . . . . . 163Enunciado 13.6 Gestionar el doble clic del ratón en el formulario . . . . . . . . . . . . . . . 164Enunciado 13.7 Mostrar un formulario desde otro formulario . . . . . . . . . . . . . . . . . . 164Enunciado 13.8 Modificar el formulario mediante código . . . . . . . . . . . . . . . . . . . . . 165Enunciado 13.9 Desactivar la cruz de cierre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

Capítulo 14: ControlesRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167Enunciado 14.1 Agregar controles mediante programación . . . . . . . . . . . . . . . . . . . . 169Enunciado 14.2 Ocultar y volver a mostrar los controles. . . . . . . . . . . . . . . . . . . . . . 170Enunciado 14.3 Mover los controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170Enunciado 14.4 Hacer que un control dependa de otro . . . . . . . . . . . . . . . . . . . . . . 171Enunciado 14.5 Hacer que los controles respondan a las pulsaciones del teclado . . . . 172Enunciado 14.6 Hacer que los controles respondan al ratón . . . . . . . . . . . . . . . . . . . 172

7

Enunciado 14.7 Mostrar una columna de datos de Excel con el título en el encabezado en un cuadro de lista . . . . . . . . . . . . . . . . 173

Enunciado 14.8 Mostrar en Excel un dato seleccionado en un cuadro de lista . . . . . . . 174Enunciado 14.9 Informar varias líneas de un cuadro de lista en celdas Excel . . . . . . . . 174Enunciado 14.10 Asignar a una tabla Excel el dato introducido

en una lista desplegable modificable . . . . . . . . . . . . . . . . . . . . . . . . 175Enunciado 14.11 Ordenar una tabla Excel desde una lista desplegable modificable . . . . 176Enunciado 14.12 Utilizar una lista desplegable con dos columnas

y asignar la selección a un rango Excel . . . . . . . . . . . . . . . . . . . . . . 176Enunciado 14.13 Utilizar botones de opción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177Enunciado 14.14 Utilizar casillas de verificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178Enunciado 14.15 Capturar una combinación de teclas . . . . . . . . . . . . . . . . . . . . . . . . 179Enunciado 14.16 Utilizar un botón interruptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180Enunciado 14.17 Preparar un cuadro de texto con información

ya introducida y seleccionada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181Enunciado 14.18 Gestionar imágenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

Capítulo 15: Agregar objetos vinculados e insertadosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183Enunciado 15.1 Incrustar una imagen o una fotografía . . . . . . . . . . . . . . . . . . . . . . . 185Enunciado 15.2 Incrustar WordPad en Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185Enunciado 15.3 Incrustar un documento Word en Excel . . . . . . . . . . . . . . . . . . . . . . 187Enunciado 15.4 Vincular un documento externo a Excel . . . . . . . . . . . . . . . . . . . . . . 187Enunciado 15.5 Incrustar un vídeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188Enunciado 15.6 Vincular un vídeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189Enunciado 15.7 Crear un menú para los objetos vinculados o incrustados. . . . . . . . . . 190

Capítulo 16: Colaboración con las aplicaciones MicrosoftRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191Enunciado 16.1 Ejecutar Word. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193Enunciado 16.2 Crear un documento Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194Enunciado 16.3 Abrir un documento Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194Enunciado 16.4 Modificar un documento Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194Enunciado 16.5 Ejecutar Outlook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195Enunciado 16.6 Enviar un mail con Outlook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195Enunciado 16.7 Ejecutar Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196Enunciado 16.8 Crear una base de datos Access . . . . . . . . . . . . . . . . . . . . . . . . . . . 196Enunciado 16.9 Importar una tabla entera Access (con QueryTables) . . . . . . . . . . . . . 196

8

Enunciado 16.10 Importar algunos campos de una tabla Access (con ADO) . . . . . . . . . 197Enunciado 16.11 Importar algunos registros de una tabla Access . . . . . . . . . . . . . . . . 197Enunciado 16.12 Importar algunos registros de varias tablas Access . . . . . . . . . . . . . . 198Enunciado 16.13 Importar los registros de una base

de datos utilizando un vínculo ODBC . . . . . . . . . . . . . . . . . . . . . . . 198

Capítulo 17: Programación WebRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199Enunciado 17.1 Crear una página web estática desde un libro Excel . . . . . . . . . . . . . 200Enunciado 17.2 Crear una página web estática desde un libro

Excel cargado en memoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201Enunciado 17.3 Mostrar el cuadro de diálogo "Publicar como página web" . . . . . . . . . 201Enunciado 17.4 Publicar el libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202Enunciado 17.5 Publicar una hoja del libro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203Enunciado 17.6 Publicar un rango de datos de una hoja del libro . . . . . . . . . . . . . . . 203Enunciado 17.7 Actualizar todas las páginas web . . . . . . . . . . . . . . . . . . . . . . . . . . 204Enunciado 17.8 Actualizar todas las páginas web según ciertos criterios . . . . . . . . . . 204Enunciado 17.9 Agregar un vínculo hipertexto a una celda . . . . . . . . . . . . . . . . . . . . 204

Capítulo 18: Programación del formato XMLRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205Enunciado 18.1 Grabar un libro Excel en formato XML. . . . . . . . . . . . . . . . . . . . . . . 206Enunciado 18.2 Importar datos en formato XML . . . . . . . . . . . . . . . . . . . . . . . . . . . 206Enunciado 18.3 Exportar datos Excel al formato XML. . . . . . . . . . . . . . . . . . . . . . . . 207Enunciado 18.4 Abrir un fichero XML en Excel 2016. . . . . . . . . . . . . . . . . . . . . . . . 208Enunciado 18.5 Crear un fichero GPX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208Enunciado 18.6 Leer directamente un fichero XML . . . . . . . . . . . . . . . . . . . . . . . . . 209Enunciado 18.7 Realizar un consulta en un fichero XML . . . . . . . . . . . . . . . . . . . . . 209

Capítulo 19: Programación de sistema WindowsRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Enunciado 19.1 Generar un sonido breve (bip) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212Enunciado 19.2 Conocer los tipos de las unidades lógicas . . . . . . . . . . . . . . . . . . . . 212Enunciado 19.3 Ocultar la cruz de cierre de los formularios personalizados . . . . . . . . 212Enunciado 19.4 Calcular el tiempo de ejecución de un procedimiento . . . . . . . . . . . . 213Enunciado 19.5 Recuperar la carpeta temporal y la carpeta de sistema Windows . . . . 214

9

Capítulo 20: Matrices y tablas dinámicasRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215Enunciado 20.1 Buscar un dato en un rango de datos . . . . . . . . . . . . . . . . . . . . . . . 216Enunciado 20.2 Buscar un valor con duplicados en un rango de datos . . . . . . . . . . . . 217Enunciado 20.3 Establecer el volumen de negocio por representantes y por país . . . . . 218Enunciado 20.4 Crear una tabla dinámica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219Enunciado 20.5 Gestionar las etiquetas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220Enunciado 20.6 Administrar los campos de valores . . . . . . . . . . . . . . . . . . . . . . . . . 220Enunciado 20.7 Actualizar una tabla dinámica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

Capítulo 21: Herramienta Power QueryRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223Enunciado 21.1 Obtener datos a partir de la Web . . . . . . . . . . . . . . . . . . . . . . . . . . 224Enunciado 21.2 Crear una consulta simple sobre una página web . . . . . . . . . . . . . . . 225Enunciado 21.3 Crear una consulta con filtro sobre una página web. . . . . . . . . . . . . . 225Enunciado 21.4 Generalizar una consulta con filtro sobre una página web . . . . . . . . . 226Enunciado 21.5 Crear una consulta Power Query sobre una base de datos Access . . . . 226Enunciado 21.6 Fusionar dos consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

SolucionesCapítulo 1: ProcedimientosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229Solución 1.1 Crear y utilizar un procedimiento privado . . . . . . . . . . . . . . . . . . . . . 230Solución 1.2 Crear y utilizar un procedimiento público . . . . . . . . . . . . . . . . . . . . . 230Solución 1.3 Llamar a un procedimiento desde otro procedimiento . . . . . . . . . . . . 230Solución 1.4 Llamar a un procedimiento a partir de otro módulo . . . . . . . . . . . . . . 231Solución 1.5 Llamar a un procedimiento desde un control VBA . . . . . . . . . . . . . . . 231Solución 1.6 Utilizar un procedimiento desde una hoja de cálculo Excel . . . . . . . . . 232Solución 1.7 Utilizar un procedimiento a partir de un libro Excel . . . . . . . . . . . . . . 232Solución 1.8 Crear una función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233Solución 1.9 Utilizar una función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233Solución 1.10 Utilizar parámetros con nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

10

Capítulo 2: Variables - Constantes - Tipos de datosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235Solución 2.1 Declarar y utilizar una variable. . . . . . . . . . . . . . . . . . . . . . . . . . . . 236Solución 2.2 Declarar y utilizar una constante . . . . . . . . . . . . . . . . . . . . . . . . . . 237Solución 2.3 Utilizar la fecha del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238Solución 2.4 Crear un tipo de datos "PezTropical" definido por el usuario. . . . . . . . 238Solución 2.5 Utilizar el tipo "PezTropical". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Solución 2.6 Renombrar una hoja de cálculo Excel . . . . . . . . . . . . . . . . . . . . . . . 239

Capítulo 3: Funciones - OperadoresRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241Solución 3.1 Dividir dos números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241Solución 3.2 Obtener el resto de una división entera . . . . . . . . . . . . . . . . . . . . . . 242Solución 3.3 Comparar números y buscar el más pequeño de ellos . . . . . . . . . . . . 242Solución 3.4 Dar el resultado de un número elevado a la potencia N. . . . . . . . . . . 243Solución 3.5 Comparar dos cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . 244Solución 3.6 Realizar un cálculo factorial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244Solución 3.7 Calcular el porcentaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246Solución 3.8 Formatear una palabra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246Solución 3.9 Buscar una palabra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247Solución 3.10 Extraer información de una cadena de caracteres . . . . . . . . . . . . . . . 247

Capítulo 4: Estructuras de controlRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249Solución 4.1 Comprobar que se introduce un número . . . . . . . . . . . . . . . . . . . . . 249Solución 4.2 Despedida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250Solución 4.3 Controlar la introducción de una consonante o una vocal . . . . . . . . . 250Solución 4.4 Mostrar un mensaje según la edad y el sexo . . . . . . . . . . . . . . . . . . 251Solución 4.5 Mostrar buenos días N veces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252Solución 4.6 Contar de N en N hasta M. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253Solución 4.7 Hacer obligatoria la introducción de un dato y controlar la salida . . . . 254Solución 4.8 Invertir el orden de los caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . 255Solución 4.9 Comprobar si un número es primo . . . . . . . . . . . . . . . . . . . . . . . . . 255Solución 4.10 Contar el número de ocurrencias de un número . . . . . . . . . . . . . . . . 256

11

Capítulo 5: TablasRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257Solución 5.1 Declarar una tabla accesible

por todos los procedimientos del proyecto . . . . . . . . . . . . . . . . . . . . 257Solución 5.2 Declarar una tabla accesible solo por los procedimientos del módulo. . 258Solución 5.3 Utilizar una tabla declarada en un procedimiento . . . . . . . . . . . . . . . 258Solución 5.4 Utilizar una tabla a nivel de módulo . . . . . . . . . . . . . . . . . . . . . . . . 259Solución 5.5 Inicializar una tabla con un bucle . . . . . . . . . . . . . . . . . . . . . . . . . . 260Solución 5.6 Declarar y utilizar una tabla de dos dimensiones. . . . . . . . . . . . . . . . 260Solución 5.7 Declarar y utilizar una tabla de más de dos dimensiones . . . . . . . . . . 261Solución 5.8 Declarar y utilizar una tabla dinámica . . . . . . . . . . . . . . . . . . . . . . . 262Solución 5.9 Hacer más grande una tabla dinámica

conservando los valores iniciales. . . . . . . . . . . . . . . . . . . . . . . . . . . 263Solución 5.10 Trabajar con una tabla mediante un bucle . . . . . . . . . . . . . . . . . . . . 264Solución 5.11 Mostrar una tabla en un formulario . . . . . . . . . . . . . . . . . . . . . . . . . 264

Capítulo 6: Introducción a la programación orientada a objetosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265Solución 6.1 Acceder a un objeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265Solución 6.2 Leer las propiedades de un objeto . . . . . . . . . . . . . . . . . . . . . . . . . . 267Solución 6.3 Modificar las propiedades de un objeto . . . . . . . . . . . . . . . . . . . . . . 267Solución 6.4 Utilizar los métodos de un objeto . . . . . . . . . . . . . . . . . . . . . . . . . . 269Solución 6.5 Gestionar las colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269Solución 6.6 Gestionar los eventos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270Solución 6.7 Administrar los errores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271Solución 6.8 Crear una clase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272Solución 6.9 Utilizar la clase creada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273Solución 6.10 Crear y utilizar una colección de objetos . . . . . . . . . . . . . . . . . . . . . 274

Capítulo 7: LibrosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275Solución 7.1 Conocer el libro activo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275Solución 7.2 Mostrar el libro activo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275Solución 7.3 Cambiar el libro activo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276Solución 7.4 Grabar el libro activo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276Solución 7.5 Agregar un nuevo libro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276Solución 7.6 Grabar un libro especificando la carpeta de destino. . . . . . . . . . . . . . 277Solución 7.7 Obtener la ruta completa donde se encuentra el libro . . . . . . . . . . . . 277

12

Solución 7.8 Cerrar todos los libros ofreciendo la posibilidad de grabarlos . . . . . . . 277Solución 7.9 Dar la bienvenida al usuario con un mensaje cuando se abra el libro . 277Solución 7.10 Seleccionar la hoja de cálculo al abrir el fichero . . . . . . . . . . . . . . . . 278Solución 7.11 Actualizar todos los cálculos antes del cierre del libro . . . . . . . . . . . . 278Solución 7.12 Actualizar todos los cálculos antes de la impresión. . . . . . . . . . . . . . 278Solución 7.13 Consolidar datos a partir de varios libros . . . . . . . . . . . . . . . . . . . . . 279Solución 7.14 Actualizar datos consolidados al abrir el libro. . . . . . . . . . . . . . . . . . 279Solución 7.15 Actualizar los datos a partir de varios libros permanentemente . . . . . 280Solución 7.16 Crear una portada de acceso a varios libros . . . . . . . . . . . . . . . . . . . 280

Capítulo 8: Hojas de cálculoRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281Solución 8.1 Averiguar el nombre de la hoja activa . . . . . . . . . . . . . . . . . . . . . . . 281Solución 8.2 Renombrar la hoja activa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282Solución 8.3 Avisar al cambiar la hoja activa recordando

el nombre de la hoja activa anterior . . . . . . . . . . . . . . . . . . . . . . . . 282Solución 8.4 Realizar una vista previa de la hoja activa . . . . . . . . . . . . . . . . . . . . 282Solución 8.5 Desencadenar una acción cuando se active una hoja . . . . . . . . . . . . 282Solución 8.6 Desencadenar una acción cuando se activa

una celda de la hoja activa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Solución 8.7 Desencadenar una acción cuando se modifica

una celda de la hoja activa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Solución 8.8 Desencadenar una acción cuando se haga doble

clic en una celda de la hoja activa . . . . . . . . . . . . . . . . . . . . . . . . . 284Solución 8.9 Agregar una nueva hoja de cálculo . . . . . . . . . . . . . . . . . . . . . . . . . 284Solución 8.10 Eliminar una hoja de cálculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284Solución 8.11 Copiar una hoja de cálculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284Solución 8.12 Averiguar el número de hojas del libro . . . . . . . . . . . . . . . . . . . . . . 284Solución 8.13 Averiguar los nombres de todas las hojas de cálculo. . . . . . . . . . . . . 285Solución 8.14 Mostrar los nombres de todas las hojas de cálculo en forma de lista. . 285Solución 8.15 Buscar una hoja de cálculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285Solución 8.16 Proteger todas las hojas de cálculo. . . . . . . . . . . . . . . . . . . . . . . . . 286Solución 8.17 Desproteger todas las hojas de cálculo . . . . . . . . . . . . . . . . . . . . . . 286

Capítulo 9: Celdas y rangosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287Solución 9.1 Activar una celda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288Solución 9.2 Averiguar la dirección de la celda activa . . . . . . . . . . . . . . . . . . . . . 288Solución 9.3 Recuperar el valor de una celda . . . . . . . . . . . . . . . . . . . . . . . . . . . 288Solución 9.4 Recuperar la fórmula de una celda . . . . . . . . . . . . . . . . . . . . . . . . . 288

13

Solución 9.5 Modificar el contenido de una celda . . . . . . . . . . . . . . . . . . . . . . . . 289Solución 9.6 Modificar el formato de una celda . . . . . . . . . . . . . . . . . . . . . . . . . . 289Solución 9.7 Seleccionar la columna donde está la celda activa . . . . . . . . . . . . . . 289Solución 9.8 Seleccionar todas las celdas de una hoja de cálculo . . . . . . . . . . . . . 290Solución 9.9 Seleccionar todas las celdas de un rango definido . . . . . . . . . . . . . . . 290Solución 9.10 Seleccionar toda una tabla a partir de una de sus celdas . . . . . . . . . . 290Solución 9.11 Seleccionar una tabla o lista con nombre a partir de su nombre . . . . . 291Solución 9.12 Indicar la dirección de la celda bajo la celda activa y seleccionarla . . . 291Solución 9.13 Encontrar la última celda que contenga un valor de una columna . . . . 292Solución 9.14 Asignar la fórmula de una celda a otra celda . . . . . . . . . . . . . . . . . . 292Solución 9.15 Asignar una fórmula a una celda. . . . . . . . . . . . . . . . . . . . . . . . . . . 292Solución 9.16 Asignar la referencia absoluta de una celda a otra celda . . . . . . . . . . 293Solución 9.17 Asignar un valor a un rango de celdas . . . . . . . . . . . . . . . . . . . . . . . 293Solución 9.18 Agregar un comentario a una celda . . . . . . . . . . . . . . . . . . . . . . . . . 293Solución 9.19 Llenar una tabla con números. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294Solución 9.20 Mostrar el número de columnas, de líneas y de celdas de un rango . . 294Solución 9.21 Buscar un valor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295Solución 9.22 Crear una serie de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296Solución 9.23 Ordenar un rango de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296Solución 9.24 Copiar un rango de datos con vínculo a los datos origen . . . . . . . . . . 296Solución 9.25 Borrar los valores de un rango de datos pidiendo confirmación . . . . . . 297

Capítulo 10: GráficosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299Solución 10.1 Crear un gráfico en una hoja aparte. . . . . . . . . . . . . . . . . . . . . . . . . 299Solución 10.2 Renombrar una hoja que contiene un gráfico . . . . . . . . . . . . . . . . . . 300Solución 10.3 Mover una hoja que contiene un gráfico. . . . . . . . . . . . . . . . . . . . . . 300Solución 10.4 Crear un gráfico incrustado en una hoja de cálculo . . . . . . . . . . . . . . 300Solución 10.5 Extender el origen de datos de un gráfico incrustado . . . . . . . . . . . . . 301Solución 10.6 Extender el origen de datos de un gráfico

implantado en una hoja gráfica. . . . . . . . . . . . . . . . . . . . . . . . . . . . 301Solución 10.7 Modificar el diseño de un gráfico. . . . . . . . . . . . . . . . . . . . . . . . . . . 301Solución 10.8 Exportar un gráfico a un fichero de imagen. . . . . . . . . . . . . . . . . . . . 301Solución 10.9 Desencadenar una acción cuando se seleccione el gráfico . . . . . . . . . 302Solución 10.10 Desencadenar una acción después de un clic en el gráfico . . . . . . . . . 302

14

Capítulo11: Intercambio de funciones entre Excel y VBARequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303Solución 11.1 Calcular una comisión en una hoja de cálculo

Excel con una función VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303Solución 11.2 Calcular con una función VBA el precio sin IVA a partir del porcentaje

de IVA y del precio con IVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304Solución 11.3 Calcular el valor acumulado de una inversión con una función VBA . . 304Solución 11.4 Buscar el valor más pequeño en un rango de

celdas con una función Excel en el código VBA . . . . . . . . . . . . . . . . 304Solución 11.5 Generar un número aleatorio a partir de código

VBA utilizando una fórmula Excel. . . . . . . . . . . . . . . . . . . . . . . . . . 305Solución 11.6 Calcular la anualidad constante con Excel

a partir de una función VBA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305Solución 11.7 Eliminar todos los espacios inútiles y redundantes de un rango

de celdas que contenga texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

Capítulo 12: Cuadros de diálogo estándaresRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307Solución 12.1 Mostrar un mensaje simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307Solución 12.2 Pedir una introducción de datos sin ningún control en concreto . . . . . 307Solución 12.3 Llamar al cuadro de diálogo "Abrir" de Windows . . . . . . . . . . . . . . . 308Solución 12.4 Llamar al cuadro de diálogo "Colores" de Windows. . . . . . . . . . . . . . 308Solución 12.5 Seleccionar botones para los cuadros de diálogo . . . . . . . . . . . . . . . 309Solución 12.6 Determinar el botón predeterminado de entre los disponibles . . . . . . 310Solución 12.7 Elegir y agregar un icono a un cuadro de diálogo . . . . . . . . . . . . . . . 310Solución 12.8 Controlar la introducción de datos . . . . . . . . . . . . . . . . . . . . . . . . . 310Solución 12.9 Realizar una acción según la elección del usuario. . . . . . . . . . . . . . . 311Solución 12.10 Realizar un proceso mientras el usuario

introduzca los datos que se le piden . . . . . . . . . . . . . . . . . . . . . . . . 311Solución 12.11 Grabar un libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312Solución 12.12 Modificar la fuente de la hoja de cálculo . . . . . . . . . . . . . . . . . . . . . 312Solución 12.13 Modificar el color de un rango de celdas . . . . . . . . . . . . . . . . . . . . . 312

Capítulo 13: FormulariosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315Solución 13.1 Mostrar un formulario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315Solución 13.2 Mostrar un formulario en modo no modal . . . . . . . . . . . . . . . . . . . . 315Solución 13.3 Mostrar un formulario detallando su contenido. . . . . . . . . . . . . . . . . 316Solución 13.4 Cerrar un formulario y liberar la memoria . . . . . . . . . . . . . . . . . . . . 316

15

Solución 13.5 Gestionar el desplazamiento del ratón en el formulario . . . . . . . . . . . 317Solución 13.6 Gestionar el doble clic del ratón en el formulario . . . . . . . . . . . . . . . . 317Solución 13.7 Mostrar un formulario desde otro formulario . . . . . . . . . . . . . . . . . . . 317Solución 13.8 Modificar el formulario mediante código. . . . . . . . . . . . . . . . . . . . . . 317Solución 13.9 Desactivar la cruz de cierre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Capítulo 14: ControlesRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319Solución 14.1 Agregar controles mediante programación . . . . . . . . . . . . . . . . . . . . 319Solución 14.2 Ocultar y volver a mostrar los controles . . . . . . . . . . . . . . . . . . . . . . 320Solución 14.3 Mover los controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321Solución 14.4 Hacer que un control dependa de otro . . . . . . . . . . . . . . . . . . . . . . . 321Solución 14.5 Hacer que los controles respondan a las pulsaciones del teclado. . . . . 322Solución 14.6 Hacer que los controles respondan al ratón . . . . . . . . . . . . . . . . . . . 322Solución 14.7 Mostrar una columna de datos de Excel con el título

en el encabezado en un cuadro de lista . . . . . . . . . . . . . . . . . . . . . . 322Solución 14.8 Mostrar en Excel un dato seleccionado en un cuadro de lista . . . . . . . 323Solución 14.9 Informar varias líneas de un cuadro de lista en celdas Excel . . . . . . . . 323Solución 14.10 Asignar a una tabla Excel el dato introducido

en una lista desplegable modificable . . . . . . . . . . . . . . . . . . . . . . . . 324Solución 14.11 Ordenar una tabla Excel

desde una lista desplegable modificable. . . . . . . . . . . . . . . . . . . . . . 324Solución 14.12 Utilizar una lista desplegable con dos columnas

y asignar la selección a un rango Excel . . . . . . . . . . . . . . . . . . . . . . 325Solución 14.13 Utilizar botones de opción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325Solución 14.14 Utilizar casillas de verificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326Solución 14.15 Capturar una combinación de teclas . . . . . . . . . . . . . . . . . . . . . . . . 327Solución 14.16 Utilizar un botón interruptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328Solución 14.17 Preparar un cuadro de texto con información

ya introducida y seleccionada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328Solución 14.18 Gestionar imágenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

Capítulo15: Agregar objetos vinculados e insertadosRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331Solución 15.1 Incrustar una imagen o una fotografía . . . . . . . . . . . . . . . . . . . . . . . 331Solución 15.2 Incrustar WordPad en Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332Solución 15.3 Incrustar un documento Word en Excel . . . . . . . . . . . . . . . . . . . . . . 332Solución 15.4 Vincular un documento externo a Excel . . . . . . . . . . . . . . . . . . . . . . 333Solución 15.5 Incrustar un vídeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

16

Solución 15.6 Vincular un vídeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334Solución 15.7 Crear un menú para los objetos vinculados o incrustados . . . . . . . . . 334

Capítulo 16: Colaboración con las aplicaciones Microsoft Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337Solución 16.1 Ejecutar Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337Solución 16.2 Crear un documento Word. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338Solución 16.3 Abrir un documento Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339Solución 16.4 Modificar un documento Word. . . . . . . . . . . . . . . . . . . . . . . . . . . . 339Solución 16.5 Ejecutar Outlook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339Solución 16.6 Enviar un mail con Outlook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340Solución 16.7 Ejecutar Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340Solución 16.8 Crear una base de datos Access . . . . . . . . . . . . . . . . . . . . . . . . . . . 341Solución 16.9 Importar una tabla entera Access (con QueryTables). . . . . . . . . . . . . 341Solución 16.10 Importar algunos campos de una tabla Access (con ADO) . . . . . . . . . 342Solución 16.11 Importar algunos registros de una tabla Access . . . . . . . . . . . . . . . . 343Solución 16.12 Importar algunos registros de varias tablas Access . . . . . . . . . . . . . . 343Solución 16.13 Importar los registros de una base de datos

utilizando un vínculo ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

Capítulo 17: Programación WebRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345Solución 17.1 Crear una página web estática desde un libro Excel . . . . . . . . . . . . . 345Solución 17.2 Crear una página web estática

desde un libro Excel cargado en memoria . . . . . . . . . . . . . . . . . . . . 346Solución 17.3 Mostrar el cuadro de diálogo “Publicar como página web” . . . . . . . . 347Solución 17.4 Publicar el libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347Solución 17.5 Publicar una hoja del libro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347Solución 17.6 Publicar un rango de datos de una hoja del libro . . . . . . . . . . . . . . . 348Solución 17.7 Actualizar todas las páginas web . . . . . . . . . . . . . . . . . . . . . . . . . . 348Solución 17.8 Actualizar todas las páginas web según ciertos criterios . . . . . . . . . . 348Solución 17.9 Agregar un vínculo hipertexto a una celda . . . . . . . . . . . . . . . . . . . . 349

17

Capítulo 18: Programación del formato XMLRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351Solución 18.1 Guardar un libro Excel en formato XML . . . . . . . . . . . . . . . . . . . . . . 351Solución 18.2 Importar datos en formato XML . . . . . . . . . . . . . . . . . . . . . . . . . . . 352Solución 18.3 Exportar datos Excel al formato XML . . . . . . . . . . . . . . . . . . . . . . . . 352Solución 18.4 Abrir un fichero XML en Excel 2016 . . . . . . . . . . . . . . . . . . . . . . . . 353Solución 18.5 Crear un fichero GPX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353Solución 18.6 Leer directamente un fichero XML. . . . . . . . . . . . . . . . . . . . . . . . . . 354Solución 18.7 Realizar una consulta en un fichero XML . . . . . . . . . . . . . . . . . . . . . 355

Capítulo 19: Programación de sistema WindowsRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357Solución 19.1 Generar un sonido breve (bip). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357Solución 19.2 Conocer los tipos de las unidades lógicas. . . . . . . . . . . . . . . . . . . . . 358Solución 19.3 Ocultar la cruz de cierre de los formularios personalizados . . . . . . . . . 359Solución 19.4 Calcular el tiempo de ejecución de un procedimiento. . . . . . . . . . . . . 360Solución 19.5 Recuperar la carpeta temporal y la carpeta de sistema Windows . . . . 361

Capítulo 20: Matrices y tablas dinámicasRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363Solución 20.1 Buscar un dato en un rango de datos . . . . . . . . . . . . . . . . . . . . . . . 363Solución 20.2 Buscar un valor con duplicados en un rango de datos . . . . . . . . . . . . 363Solución 20.3 Establecer el volumen de negocio por representantes y por país . . . . . 364Solución 20.4 Crear una tabla dinámica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365Solución 20.5 Gestionar las etiquetas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366Solución 20.6 Administrar los campos de valores . . . . . . . . . . . . . . . . . . . . . . . . . 366Solución 20.7 Actualizar una tabla dinámica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

18

Capítulo 21: Herramienta Power QueryRequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369Solución 21.1 Obtener datos a partir de la Web . . . . . . . . . . . . . . . . . . . . . . . . . . 369Solución 21.2 Crear una consulta simple sobre una página web . . . . . . . . . . . . . . . 370Solución 21.3 Crear una consulta con filtro sobre una página web . . . . . . . . . . . . . 371Solución 21.4 Generalizar una consulta con filtro sobre una página web . . . . . . . . . 372Solución 21.5 Crear una consulta Power Query sobre una base de datos Access . . . 373Solución 21.6 Fusionar dos consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

Índice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377