Sie sind auf Seite 1von 369

VBA Excel 2016

Programacin en Excel: Macros y lenguaje VBA

Presentacin

1. Presentacin del lenguaje VBA 17

1.1 Objetivos del lenguaje VBA 17


1.2 Algunas definiciones 18
1.3 Escritura de cdigo VBA 19

2. Las macros de Excel 19


2.1 Mostrar la pestaa Desarrollador en la cinta de opciones 19
2.2 Descripcin de la pestaa Desarrollador 20
2.2.1 Grupo Cdigo 20
2.2.2 Grupo Complementos 21
2.2.3 Grupo Controles 21
2.3 Grabar una macro 22
2.3.1 Grabar la primera macro 22
2.3.2 Ejecutar una macro 23
2.3.3 Grabar una macro con referencias relativas 23
2.3.4 Definir el lugar de almacenamiento de una nueva macro 25
2.3.5 Eliminar una macro 26
2.3.6 Guardar un libro con macros 26
2.4 Las macros y la seguridad 27
2.4.1 Modificar la configuracin de seguridad 27
2.4.2 Descripcin de las diferentes opciones de seguridad 27
2.4.3 Habilitar las macros cuando aparece la advertencia de seguridad 28
2.4.4 Activar las macros en una ubicacin dada 29
2.4.5 Firmas electrnicas de macros 30
2.5 Modificar el cdigo de una macro 30

3. Asignar una macro 32


3.1 Acceso a una macro desde la cinta de opciones de Office 2016 32
3.2 Asociar una macro a un icono de la barra de herramientas de acceso rpido 35
3.3 Asociar una macro a un botn de comando 36
3.4 Asignar una macro a una imagen 36
3.5 Asociar una macro a una zona de un objeto grfico 37

www.ediciones-eni.com Ediciones ENI 1/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

3.6 Asociar una macro a una imagen Control ActiveX 37

4. El entorno de desarrollo VBE 38


4.1 Acceso al entorno VBE 39
4.2 Cerrar el entorno VBE 39
4.3 Volver a Excel 39
4.4 Descripcin del entorno VBE 40
4.5 Elegir las ventanas que hay que mostrar 43

5. Configuracin del editor VBA 43

5.1 Configuracin de la tipografa 43


5.2 Configuracin de la introduccin de cdigo 44
5.3 Manejo de errores 45
5.4 Acoplar una ventana 46

El lenguaje VBA

1. Mdulos 47
1.1 Presentacin 47
1.2 Acceso a los mdulos 49
1.3 Importar y exportar cdigo VBA 49

2. Procedimientos 50
2.1 Definiciones 50
2.2 Acceso a los procedimientos 51
2.3 Procedimientos Sub 51
2.4 Procedimientos Function 52
2.5 Declaracin de procedimientos 53
2.6 Alcance de los procedimientos 54
2.7 Argumentos de los procedimientos 54
2.8 Argumentos con nombre 55
2.9 Llamar a un procedimiento 57
2.10 Llamar a una funcin VBA en una frmula de Excel 57
2.11 Ejemplos de procedimientos y funciones 60

www.ediciones-eni.com Ediciones ENI 2/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

3. Variables 61
3.1 Tipos de variables 61
3.2 Declaracin de variables 66
3.2.1 Declaraciones implcitas 66
3.2.2 Declaraciones explcitas 67
3.2.3 Sintaxis de las instrucciones de declaracin 67
3.3 Declaracin de los tipos de variables 68
3.3.1 Declaraciones explcitas del tipo 68
3.3.2 Declaraciones implcitas del tipo 69
3.3.3 Convencin de nombres de variables 71
3.4 Matrices 71
3.5 Constantes 73
3.5.1 Constantes personalizadas 73
3.5.2 Constantes integradas 74

4. Estructuras de decisin 75
4.1 Instruccin If 76
4.2 Instruccin Select Case 79

5. Estructuras en ciclo 80

5.1 Instruccin Do...Loop 81


5.2 Instruccin While...Wend 82
5.3 Instruccin For...Next 83
5.4 Instruccin For Each...Next 84
5.5 Salir de las estructuras de control 86

6. Operadores 86

6.1 Operadores aritmticos 87


6.2 Operadores de comparacin 87
6.3 Operadores lgicos 88
6.4 Operador de concatenacin 89
6.5 Prioridad de los operadores 89

7. Reglas de escritura del cdigo 90

www.ediciones-eni.com Ediciones ENI 3/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

7.1 Comentarios 90
7.2 Carcter de continuacin 90
7.3 Sangras 91
7.4 Nombres de los procedimientos, variables y constantes 91

La programacin de objetos en Excel

1. Presentacin 93

2. El modelo de objeto de Excel 94


2.1 Presentacin 94
2.2 Principales objetos y colecciones 95

3. Principios de uso de los objetos y las colecciones 98

3.1 Propiedades 98
3.2 Propiedades que representan objetos 98
3.3 Mtodos 100
3.4 Eventos 101
3.5 Colecciones 102
3.6 Redaccin automtica de instrucciones 104

4. Instrucciones usadas con los objetos 106

4.1 La instruccin With 106


4.2 La instruccin For Each...Next 107
4.3 La instruccin If TypeOf 107
4.4 La instruccin Set 108

5. El Examinador de objetos 109

5.1 Presentacin 109


5.2 Bsqueda en el Examinador de objetos 111

Objetos de Excel

www.ediciones-eni.com Ediciones ENI 4/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

1. El objeto Application 113


1.1 Propiedades que representan las opciones de Excel 114
1.1.1 Opciones de la categora General 114
1.1.2 Opciones de la categora Frmulas 115
1.1.3 Opciones de la categora Revisin 117
1.1.4 Opciones de la categora Guardar 118
1.1.5 Opciones de la categora Avanzadas 119
1.2 Propiedades relativas a la presentacin de la aplicacin 126
1.3 Propiedades varias 128
1.4 Mtodos del objeto Application 132
1.4.1 Mtodos que actan sobre las frmulas y los clculos 132
1.4.2 Mtodos que actan sobre las celdas 133
1.4.3 Mtodos que actan sobre las listas personalizadas 133
1.4.4 Mtodos que muestran los cuadros de dilogo 134
1.4.5 Mtodos relacionados con las acciones en Excel 134
1.4.6 Mtodos relativos al correo 135
1.4.7 Otros mtodos 136
1.5 Ejemplos de cdigos que usan el objeto Application 137
1.5.1 Modificacin de la interfaz de Excel 137
1.5.2 Creacin de una lista personalizada 137
1.5.3 Seleccin de columnas no consecutivas 138
1.5.4 Evaluacin del resultado de una frmula 138

2. Objeto Workbook 139

2.1 Objetos y colecciones 140


2.2 Propiedades 142
2.2.1 Propiedades relativas a la actualizacin y registro de libros 142
2.2.2 Propiedades relativas a libros compartidos 143
2.2.3 Otras propiedades 146
2.3 Lista de mtodos 148
2.3.1 Mtodos que actan directamente sobre los libros 148
2.3.2 Mtodos relativos a la seguridad 150
2.3.3 Mtodos relativos a libros compartidos 150
2.3.4 Mtodos relacionados con datos vinculados 151

www.ediciones-eni.com Ediciones ENI 5/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

2.3.5 Mtodos relativos al envo de libros 152


2.3.6 Otros mtodos 153
2.4 Ejemplos de cdigos que usan el objeto Workbook 153
2.4.1 Creacin de un libro de Excel 153
2.4.2 Importar una base de datos y exportarla al formato HTML 154
2.4.3 Mostrar las propiedades de un libro 155
2.4.4 Exportar un libro al formato PDF 156

3. El objeto Worksheet 156


3.1 Lista de objetos y colecciones 157
3.2 Objetos y colecciones 157
3.3 Propiedades 160
3.4 Mtodos 162
3.5 Ejemplos de cdigos que usan el objeto Worksheet 165
3.5.1 Ordenar las hojas de clculo de un libro 165
3.5.2 Proteccin de las hojas de clculo de un libro 166
3.5.3 Ordenar una tabla 166

4. El objeto Range 167


4.1 Propiedades y mtodos que devuelven un objeto Range 167
4.2 Sintaxis de las propiedades que devuelven un objeto Range 170
4.3 Lista de objetos y colecciones 174
4.4 Propiedades 176
4.4.1 Propiedades relacionadas con la posicin y el formato de las celdas 176
4.4.2 Propiedades que se relacionan con el contenido de celdas y con las frmulas
177
4.4.3 Otras propiedades 178
4.5 Mtodos 179
4.5.1 Mtodos que devuelven un objeto 179
4.5.2 Mtodos que se relacionan con la presentacin de las celdas 179
4.5.3 Mtodos relacionados con el contenido de las celdas 181
4.5.4 Mtodos relacionados con los nombres de celdas 183
4.5.5 Mtodos relacionados con los filtros 183
4.5.6 Mtodos relacionados con el modo esquema 184
4.5.7 Mtodos que se relacionan con la herramienta de Auditora 184

www.ediciones-eni.com Ediciones ENI 6/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

4.5.8 Otros mtodos 185

5. Ejemplos de uso de los objetos 186


5.1 Clculo del importe de una prima 186
5.2 Asignar comentarios a las celdas 188

Tablas dinmicas y grficos

1. Las tablas dinmicas 191

1.1 El objeto PivotTable 191


1.1.1 Colecciones 191
1.1.2 Propiedades 192
1.1.3 Mtodos 196
1.2 Creacin de una tabla dinmica 196

2. Los grficos 197


2.1 El objeto Shape 197
2.1.1 Propiedades 197
2.1.2 Mtodos 198
2.2 El objeto Chart 198
2.2.1 Colecciones 198
2.2.2 Propiedades 198
2.2.3 Mtodos 199
2.3 Creacin de un grfico 200

3. Ejemplo de aplicacin 201

3.1 Presentacin 201


3.2 Cdigo VBA del ejemplo 202

4. Creacin de una tabla dinmica con minigrficos 210

Cuadros de dilogo

www.ediciones-eni.com Ediciones ENI 7/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

1. Presentacin 215

2. Cuadros de dilogo integrados 216


2.1 El objeto Dialog 216
2.2 Los mtodos GetOpenFileName y GetSaveAsFileName 217

3. Cuadros de dilogo predefinidos 219

3.1 La funcin InputBox 219


3.2 El mtodo InputBox 220
3.3 La funcin MsgBox 221
3.4 Constantes usadas en los cuadros de dilogo 225

Formularios

1. Presentacin 227

2. Crear un formulario 228

3. Personalizar un formulario 237


3.1 Escribir procedimientos 237
3.2 Lista de eventos asociados a los principales controles 238
3.3 Ejecutar y cerrar un formulario 244

4. Ejemplo de formulario personalizado 245

4.1 Presentacin 245


4.2 Cdigo asociado al botn macro de la pestaa Empleados 247
4.3 Cdigo VBA asociado al formulario 247

Mejoras en la interfaz de usuario

www.ediciones-eni.com Ediciones ENI 8/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

1. Presentacin 253

2. Personalizacin de la cinta con la utilidad Custom UI Editor 254


2.1 Presentacin de la utilidad Custom UI Editor 254
2.2 Ejemplo de cdigo XML de personalizacin 256
2.3 Etiquetas XML correspondientes a los distintos elementos de la cinta 259
2.3.1 Pestaas y grupos 259
2.3.2 Principales controles de la cinta de opciones 260
2.3.3 Atributos de los controles de la cinta de opciones 263
2.3.4 Resumen de los atributos para cada control 265
2.3.5 Imgenes de la galera de iconos de Microsoft Office 267
2.3.6 Funciones de llamadas Callbacks 267
2.3.7 Uso de las funciones de llamada Callbacks 270

3. Ejemplo de cinta personalizada con el Custom UI Editor 271

3.1 Presentacin 271


3.2 Cdigo XML de la cinta 273
3.3 Cdigo VBA de personalizacin de la cinta (mdulo "Cinta") 275

4. Personalizacin de la cinta de opciones mediante la coleccin CommandBars 279

5. Ejemplos de barras de comandos 280


5.1 Barras de herramientas personalizadas 280
5.2 Comandos de mens en formato Office 2016 280
5.3 Agregar el grupo a la barra de herramientas de acceso rpido 281

6. Barras de comandos 282

6.1 Terminologa 282


6.1.1 Barra de comandos 282
6.1.2 Control 282
6.2 Crear una barra de comandos 282
6.3 Eliminar una barra de comandos 284
6.4 Mostrar una barra de comandos 284

www.ediciones-eni.com Ediciones ENI 9/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

7. Controles (opciones o botones de comando) de las barras de comandos 285


7.1 Agregar un control 285
7.2 Especificar el ttulo de un control 286
7.3 Eliminar un control 287
7.4 Asociar un procedimiento a un control 287
7.5 Otras propiedades 287
7.6 Lista de imgenes asociadas a los botones de comando 289

8. Ejemplos de mens personalizados 290

8.1 Presentacin 290


8.2 Cdigo de los ejemplos 292
8.3 Cdigo del mdulo de clase ThisWorkbook 292
8.4 Cdigo de la hoja "Nota de Gastos" 293
8.5 Cdigo del mdulo ProcMenus 293
8.6 Cdigo del mdulo ProcAction 298

Administracin de eventos

1. Presentacin 301

2. Escritura de eventos 302

2.1 Eventos de libro, de hoja o de formulario 302


2.2 Eventos del objeto Application 304
2.3 Evento asociado a un grfico incrustado 307

3. Eventos del objeto Application 309

4. Eventos del objeto Workbook 314

5. Eventos del objeto Worksheet 317

www.ediciones-eni.com Ediciones ENI 10/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

6. Eventos del objeto Chart 319

Depuracin y administracin de errores

1. Diferentes tipos de error 321

1.1 Errores de sintaxis 321


1.2 Errores de compilacin 322
1.3 Errores de ejecucin 323
1.4 Errores de lgica 324

2. Depuracin 325

2.1 Presentacin 325


2.2 La barra de herramientas Depuracin 325
2.3 El objeto Debug 327

3. Administracin de errores en VBA 328


3.1 El objeto Err 330

Comunicacin con las aplicaciones de Office

1. La tecnologa Automation 333

1.1 Presentacin 333


1.2 Uso de la tecnologa Automation 334

2. Comunicacin con Word desde Excel 336

2.1 El modelo de objeto de Word 336


2.2 Principales colecciones del modelo de objeto de Word 337
2.3 Principales objetos del modelo de objeto de Word 338
2.4 La coleccin Documents 339
2.5 Objetos Document 340
2.6 Ejemplo 342

www.ediciones-eni.com Ediciones ENI 11/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

3. Comunicacin con Access desde Excel 345


3.1 El modelo de objeto de Access 345
3.2 Principales colecciones del modelo de objeto de Access 346
3.3 Principales objetos del modelo de objeto de Access 346
3.4 Ejemplos 348
3.4.1 Listar tablas de una base de Access 348
3.4.2 Mostrar una tabla de Access en Excel 348
3.4.3 Abrir una tabla o consulta de Access en un nuevo libro 350

4. Comunicacin con Outlook desde Excel 351


4.1 Objetos de Outlook 351
4.2 Acceso a los objetos de Outlook 352
4.2.1 Creacin de un objeto (e-mail, contacto...) en Outlook 352
4.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 355

5.1 Mtodos del objeto OLEObject 356


5.2 Propiedades del objeto OLEObject 356

6. Mtodos y propiedades relativos a los vnculos con Excel 357

6.1 Mtodos y propiedades del objeto Workbook 357


6.2 Mtodos y propiedades de otros objetos 359

Internet

1. Consultas por Internet 361

2. El objeto QueryTable 363

2.1 Propiedades del objeto QueryTable 364


2.2 Ejemplos 368

www.ediciones-eni.com Ediciones ENI 12/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

3. Publicacin de pginas web 370


3.1 Asociacin de un elemento de libro a una pgina web 371
3.2 Publicacin de la pgina web 372
3.3 Ejemplo 372

4. Los objetos WebOptions y DefaultWebOptions 373

4.1 Propiedades 374


4.1.1 Opciones de la pestaa General 374
4.1.2 Opciones de la pestaa Exploradores 375
4.1.3 Opciones de la pestaa Archivos 376
4.1.4 Otras propiedades 376
4.2 Mtodo del objeto WebOptions 377

5. Importar, exportar y asignar archivos XML 377


5.1 Colecciones 378
5.2 Mtodos del objeto Workbook 379
5.3 Eventos del objeto Workbook 380
5.4 Mtodos del objeto XmlMap 381

6. El objeto HyperLink 381

6.1 Propiedades 381


6.2 Mtodos 382

Programacin en Windows

1. Presentacin de las API 383

2. Llamar a una funcin de la API de Windows 385


2.1 Sintaxis de la instruccin Declare 385
2.2 Paso de argumentos 386

3. Lista de funciones API de Windows 386

www.ediciones-eni.com Ediciones ENI 13/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

4. Ejemplos de uso de funciones API de Windows 387


4.1 Recuperar el directorio Windows 387
4.2 Abrir la calculadora de Windows 388

5. El objeto FileSystemObject 390


5.1 Mtodos 390
5.2 Propiedades 392
5.3 Ejemplo: copia de archivos de Excel 392

Cdigo de una miniaplicacin

1. Presentacin general 393

2. Descripcin de la aplicacin GestPresupuesto 394

3. Cinta de Office 2013 personalizada 396

3.1 Presentacin 396


3.2 Cdigo XML de la cinta personalizada 397

4. Mdulo ThisWorbook 398

4.1 Presentacin 398


4.2 Cdigo VBA del mdulo ThisWorkbook 398

5. Formulario NuevoPresupuesto 399

5.1 Presentacin 399


5.2 Lista de controles 399
5.3 Lista de celdas con nombre del modelo Presupuesto.xltx 400
5.4 Cdigo VBA del formulario NuevoPresupuesto 400

6. Formulario BuscarPresupuesto 403

6.1 Presentacin 403

www.ediciones-eni.com Ediciones ENI 14/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

6.2 Lista de controles 403


6.3 Cdigo VBA del formulario BuscarPresupuesto 404

7. Mdulos ProcCinta y ProcGene 407


7.1 Cdigo VBA del mdulo ProcCinta 407
7.2 Cdigo VBA del mdulo ProcGene 409

Anexos

1. Lista de instrucciones 413


1.1 Cadenas de caracteres 413
1.2 Fecha Hora/Matemticas 414
1.3 Declaracin 414
1.4 Error 416
1.5 Archivo 417
1.6 Estructuracin 421
1.7 Sistema 422
1.8 Diversas 423

2. Lista de funciones 424

2.1 Conversiones 424


2.2 Cadenas de caracteres 426
2.3 Matemticas 429
2.4 Financieras 431
2.5 Fechas y horas 433
2.6 Archivos, Sistema 436
2.7 Verificacin de variables 438
2.8 Interaccin 439
2.9 Matrices 439
2.10 SQL 440
2.11 Diversas 441
2.12 Solver 442

3. Constantes VBA 444

www.ediciones-eni.com Ediciones ENI 15/16


VBA Excel 2016
Programacin en Excel: Macros y lenguaje VBA

3.1 Constantes de color 444


3.2 Constantes de fecha 444
3.3 Constantes de teclas correspondientes a letras y nmeros 445
3.4 Constantes de teclas de funcin 445
3.5 Constantes de teclas diversas 446

ndice 449

www.ediciones-eni.com Ediciones ENI 16/16


VBAExcel2016
ProgramacinenExcel:MacrosylenguajeVBA
Completo y, a la vez, simple y prctico, este libro est dirigido a usuarios de Excely adesarrolladores que deseen
crearaplicacionesamigables,fiablesypotentes.

AdemsdeloselementosbsicosdellenguajeVBA(estructuradellenguajeyconceptosdeprogramacinorientadaa
objetos)quepermitirnautomatizarelmanejodesusdatos,aprenderacreartablasdinmicasygrficos,adisear
formularios, a personalizar la interfaz de Excel, especialmente la cinta de opciones, a comunicarse con las otras
aplicaciones de Office, a importar o publicar pginas web y archivos XML y a aprovechar las funciones API de
Windows.

Cada captulo incluye numerosos ejemplos. El libro concluye con unejerciciointegrador que lo guiar a travs de la
creacincompletadeunaaplicacinExcel.

Losejemplosincluidosenestelibropuedendescargarseenestapgina.

Loscaptulosdellibro:
PrlogoPresentacinEllenguajeVBALaprogramacindeobjetosenExcelObjetosdeExcelTablasdinmicas
y grficos Cuadros de dilogo Formularios Mejoras en la interfaz de usuario Administracin de eventos
Depuracin y administracin de errores Comunicacin con las aplicaciones Office 2016 Internet Programacin
WindowsCdigodeunaminiaplicacinAnexos

MichleAMELOT
Formadoray,alavez,especialistaeneldesarrollodeaplicacionesofimticas,MichleAMELOTayudadesdehacems
dequinceaosalasempresasensusproyectosinformticos.Esesteprofundoconocimientodelasnecesidadesdelos
usuariosydelosdesarrolladores,loquelepermite,atravsdesuslibros(VBAExcelyVBAAccess,todaslas
versiones),facilitarelaprendizajeylaprcticaenlaprogramacinenlenguajeVBA.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Introduccin

EstelibroestdirigidoausuariosdeExceloaprogramadoresquedeseenautomatizarelmanejodedatosbajoExcel
odesarrollaraplicacionesdegestin,reporteoanlisisaprovechandolascapacidadesdelahojaExcel.

El objetivo del libro es presentar, de una manera accesible, todo el abanico de posibilidades del lenguaje VBA. Los
diferentes ejemplos incluidos, que se pueden descargar desde la pgina Informacin, le permitirn llevar a la
prctica, fcilmenteydemaneraprogresiva,losconocimientosadquiridos.

El nico requisito necesario para aprovechar el contenido de este libro es un buen conocimiento de la interfaz de
Excel.Nocionesdeprogramacinoelconocimiento dealgnlenguajeleayudarnamanejarellenguajeaunqueno
esimprescindibleparaaprovecharestelibro.

Enprimerlugar,sefamiliarizarconelcdigoVBAyaprenderausarloparamanejar losobjetosdeExcel(talescomo
libros,hojasdeclculo,rangosdeceldas,tablasdinmicas,grficos...),especialmenteenlaautomatizacindeciertos
procedimientos.

En una segunda etapa, descubrir progresivamente cmo crear aplicaciones profesionales en Excel a travs de los
siguientesconceptos:

l Usodeloscuadrosdedilogopredefinidosparainteractuarconelusuario.

l Creacin de formularios personalizados para la introduccin y presentacin de datos de Excel o cualquier otro tipo de
datos.

l MejoradelainterfazdeExcel,especialmenteenlapersonalizacindelacintadeopcionesdeMicrosoftOffice.

l OptimizacindelaconfiabilidaddelcdigoVBAgraciasalaintegracindeopcionesparaeltratamientodeerrores.

l ManejodeotrasaplicacionesdeMicrosoftOffice2016:Word,AccessyOutlook.

l AccesoalascapacidadesdeInternet:importarypublicarpginaswebyarchivos XML.

l ControldelsistemaoperativoatravsdelallamadaafuncionesAPIdeWindows(ApplicationProgrammingInterface).

Finalmente, el ltimo captulo lo guiar a travs de la creacin completa de una aplicacin de Excel. Esta aplicacin
permitemanejarpresupuestosatravsde lassiguientescaractersticas:creacindepresupuestosenformatoExcel
apartirdedatostomadosdeunabasededatosdeAccess,registrodelospresupuestosencarpetasespecificadas
segnelcliente,bsquedadepresupuestossegndiversoscriteriosyotrasopciones.

Alterminarellibro,ustedquedarconvencidodequeellenguajeVBAnoselimitaaautomatizartareasenExcel,sino
quetambinlepermiterealizaraplicacionesprofesionalesdotadasdeunainterfazamigable.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
PresentacindellenguajeVBA

Visual Basic para Aplicaciones (VBA) es el lenguaje de programacin comn a todas las aplicaciones del paquete
MicrosoftOffice2016(Word,Access, Excel,OutlookyPowerPoint).

1.ObjetivosdellenguajeVBA

TrabajandoenExcel,ellenguajeVBApermite:

l Automatizaraccionesrepetitivas:conVBApuederealizarenunanicaoperacintodoungrupodecomandosde
Excel.

l InteractuarsobreloslibrosdeExcel:elcontenidoylapresentacindetodosloselementosincluidosenunlibro
(hojas,celdas,grficos,etc.)sepuedenmodificaratravsdecdigoVBA.

l Crear formularios personalizados: los formularios son los cuadros de dilogo compuestos por controles ActiveX
(cuadros de texto, listas desplegables, etc.), a los que se les puede asociar cdigo VBA. Los formularios permiten
crearinterfacesamigablesparalaentradaolasalidadeinformacin.

l Generar automticamente tablas dinmicas y grficos: as podr automatizar la creacin de estadsticas a


partirdesusdatosdeExcel(odelosdatosdelaempresaexportadosaExcel).

l Personalizar la interfaz de Excel: la cinta de opciones de Office 2016 es totalmente personalizable y se pueden
asociarmacroscreadasenlenguajeVBAaloscomandosdelacintaoalabarradeherramientasdeaccesorpido.

l Modificar las opciones de Excel: a cada opcin de Excel le corresponde una propiedad de un objeto VBA. Por
ejemplo, puede modificar el tipo de fuente por defecto a partir de las propiedades StandardFont (fuente) y
StandardFontsize (tamaodefuente)delobjetoApplication.

Ejemplo:

Application.StandardFont=Arial

Application.StandardFontSize=10

l Comunicar Excel con otras aplicaciones de Microsoft Office: VBA permite intercambiar informacin entre las
aplicacionesdeOfficeusandoobjetosespecficospropiosdecadauno.Porejemplo,ustedpuedeinsertarunatablao
ungrficodeExcelenunarchivodeWord,crearmensajesdeOutlookconunarchivodeExceladjunto,etc.

2.Algunasdefiniciones

Proyecto

CadalibroabiertoenExceltieneasociadounproyectoquecontienetodoslosmdulosdecdigoVBA
agrupadosencategoras.

Mdulo

LosmduloscontienenlasmacrosgrabadasysuspropiosprocedimientosyfuncionesescritosenVBA.
Losmdulossepuedenexportarcomoarchivosindependientesparaluegoserimportadosenotros
libros.

Procedimiento

LosprocedimientossonsubprogramasescritosenVBA.Cadamacrograbadageneraunprocedimiento

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
conelmismonombredelamacro.Delamismamanera,puedecrearprocedimientosusandola
instruccinSub.

Funcin

Lasfuncionessonprocedimientosquedevuelvenunvalor.Paracrearunafuncin,sedebeutilizarla
instruccinFunction.

3.EscrituradecdigoVBA

HaydosmanerasdecrearunprocedimientoVBA:

l Generarautomticamenteelcdigoapartirdelagrabacindemacros.

l EscribirdirectamenteelcdigodelprocedimientoenelEditordeVisualBasic(oentornoVBE).

La primera solucin es ms sencilla, pero mucho ms limitada que la segunda. Los procedimientos generados
automticamente solo permiten automatizar acciones repetitivas realizadas con Excel (formato de celdas, ordenar
datos,etc.).

Si desea efectuar operaciones especficas, como algoritmos de clculo, intercambio de mensajes y de informacin
conelusuario,controlarlacoherenciadedatosenunlibroocualquierotraoperacinquehagausodeestructuras
repetitivasocondicionales,debecrearsuspropiosprocedimientoseneleditordeVBA.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
LasmacrosdeExcel

1.MostrarlapestaaDesarrolladorenlacintadeopciones

Paraescribirmacros,ejecutarmacrosgrabadasocrearaplicacionesdeExcel,debemostrarlapestaaDesarrollador
delasiguientemanera:

HagaclicenlapestaaArchivoyluegoenOpciones.

SeleccionelacategoraPersonalizarcintadeopciones.

Dentro de Personalizar cinta de opciones, en la lista Pestaas principales, marque la opcin


Desarrollador.

HagaclicenelbotnAceptar:lapestaaDesarrolladorseaadiralacintadeopcionesdeExcel,ala
derechadelapestaaVista.

2.DescripcindelapestaaDesarrollador

a.GrupoCdigo

Nombredelbotn Descripcin

Abre el entorno de desarrollo. El mtodo abreviado de teclado es [Alt]


[F11].

Muestralalistademacros.Elmtodoabreviadodetecladoes[Alt][F8].

Comienzalagrabacindeunamacro.

Permiteusarreferenciasrelativasalaprimeraceldaseleccionada.

Personalizalaconfiguracindeseguridaddelasmacros.

b.GrupoComplementos

Nombredelbotn Descripcin

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
PermitedescargarcomplementosdeOffice.

Permiteseleccionarmacrosgrabadascomocomplementos.

PermiteseleccionarcomplementosCOM(librerasdefuncionescomplementarias).

c.GrupoControles

Nombredelbotn Descripcin

Permiteinsertarcontroles(formulariosoActiveX)enExcel.

ActivaodesactivaelmodoDiseo.EnelmodoDiseosepuedenseleccionary
modificarloscontrolesActiveX,peronosepuedenejecutar.

MuestralaspropiedadesdelobjetodeExcelseleccionado (hojaocontrol).

Permiteaccederdirectamentealcdigoasociadoalcontrolseleccionado.

Ejecutauncuadrodedilogopersonalizado.

3.Grabarunamacro

a.Grabarlaprimeramacro

Veamoscmocrearunamacroqueapliqueunbordeyunrellenoenlasceldasseleccionadas.

Seleccioneunarangodeceldas.


Hagaclicenelbotn enlapestaaDesarrolladoroenlabarradeestado.

Enelcuadrodedilogoqueaparece,escribaelnombredelamacro,sudescripcin eindique,silodesea,
elmtodoabreviadodeteclasasociado.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
HagaclicenelbotnAceptarparainiciarlagrabacin.

RealiceenExcellasoperacionesquedeseegrabar.Porejemplo,apliqueunrellenoyunbordealrango
actualmenteseleccionado.

Hagaclicenelbotn delapestaaDesarrolladorparaterminarlagrabacin

(tambinpuedeusarelmismobotnenlabarradeestado).

b.Ejecutarunamacro

ParaejecutarunamacrodesdeExcel:

Hagaclicenelbotn delapestaaDesarrolladoropulseelmtodoabreviadodeteclas[Alt]

[F8]yluegohagadobleclicenelnombredelamacroquedeseaejecutar.

Opulselacombinacindeteclasasociadaalamacro.

Para visualizar la informacin relativa a una macro (mtodo abreviado de teclado y descripcin), seleccione la
macroenlalistayhagaclicenelbotnOpciones.

Paradetenerlaejecucindeunamacro,pulse[Escape]o[Ctrl][Pausa].

c.Grabarunamacroconreferenciasrelativas

Sigrabaunamacroenmododereferenciasabsolutas(modopordefecto),losrangosdeceldasreferenciadosen
lasoperacionesdeseleccin,desplazamientos...sernfijos.Porejemplo:Range("A2")designalaceldaA2.

Sigrabaunamacroenmododereferenciasrelativas,losrangosdeceldassernexpresadosenrelacinconla
posicin de la primera celda activa. Por ejemplo: ActiveCell.range("A2") designa la celda ubicada bajo la celda
activa, ActiveCell.range("B1") designalaceldaubicadaaladerechadelacelda activa.

ActiveCell.range("A1") siempre hace referencia a la primera celda activa. A1 se puede considerar la referencia
relativaalaprimeraceldaactiva.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Paragrabarunamacroconreferenciasrelativas:

Hagaclicenelbotn delapestaaDesarrollador:elbotnquedaractivo

(severdestacado).

Sivuelveahacerclicenelbotn ,estequedardesactivadoylasmacros

segrabarnconreferenciasabsolutas.

Ejemplo

La misma secuencia de operaciones se ha registrado en dos macros: la primera (RefRelativa) se grab con la opcin
referenciasrelativaslasegunda(RefAbsoluta),conlaopcinreferenciasabsolutas.

Lasecuenciadeoperacioneseslasiguiente:

l Seleccionarunrangodeceldas.

l Desplazarelrangodosfilashaciaabajoyunacolumnaaladerecha.

Sub RefRelativa()
Referencias relativas
ActiveCell.Range(A1:B7").Select
Selection.Cut Destination:=ActiveCell.Offset(2, 1).Range(A1:B7")
ActiveCell.Offset(2, 1).Range(A1:B7").Select
End Sub
___________________________________________________________________
Sub RefAbsoluta()
Referencias absolutas
Range(B2:C8").Select
Selection.Cut Destination:=Range(C4:D10")
Range(C4:D10").Select
End Sub

d.Definirellugardealmacenamientodeunanuevamacro

Paradefinirellugardealmacenamientodeunanuevamacro:

Hagaclicenelbotn delapestaaDesarrolladoropulseelmtodoabreviado[Alt][F8].

AbralalistaMacrosenyseleccioneellibroenelquedeseacrearlamacro.

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Si eligeLibrodemacrospersonal,lamacrosegrabarenellibropersonal.xlsblamacroseraccesibledesde
todosloslibrosExcel.

e.Eliminarunamacro

Paraeliminarunamacro:

Hagaclicenelbotn delapestaaDesarrolladoropulseelmtodoabreviado[Alt][F8].

Seleccione la macro que desea eliminar y haga clic en el botn Eliminar. Haga clic en el botnS para
confirmarlaeliminacin.

f.Guardarunlibroconmacros

Sihacreadomacrosenunlibroyloguardaporprimeravez,aparecerelsiguiente mensaje:

HagaclicenNoparanoguardarellibrosinlasmacros.

En el cuadro Guardar como, abra la lista Tipo y seleccione Libro de Excel habilitado para macros
(*.xlsm).

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
Loslibrosquecontienenmacrostienenlaextensinxlsm(envezdexslx)ysuiconosedistingueporunsignode
exclamacin.

Tambinpuedegrabarunnuevolibroconmacrosmediantelassiguientesoperaciones:

HagaclicenlapestaaArchivoyluegoenGuardarcomo.

En el cuadro Guardar como, abra la lista Tipo y seleccione la opcin Libro de Excel habilitado para
macros(*.xlsm).

4.Lasmacrosylaseguridad

Laconfiguracindeseguridaddelasmacrospermitecontrolarloqueocurrealabrirunlibroquecontienemacros.

LasmodificacionesdelaconfiguracindeseguridaddemacrosrigensolamenteenExcelynoafectanalrestodelas
aplicacionesdeMicrosoftOffice.

a.Modificarlaconfiguracindeseguridad


Hagaclicenelbotn delapestaaDesarrollador.

Dentro de Configuracin de macros, seleccione la opcin deseada (vea en la siguiente seccin:


Descripcindelasdiferentesopcionesdeseguridad).

HagaclicenAceptarparaconfirmarsueleccin.

Sisecambialaconfiguracindeseguridad,lasnuevasopcionesseaplicarnatodosloslibros,exceptoaloslibros
actualmenteabiertos.Paraaplicarlasaestoslibros,debecerrarlosyabrirlosnuevamente.

b.Descripcindelasdiferentesopcionesdeseguridad

Deshabilitartodaslasmacrossinnotificacin

Todaslasmacrosytodaslasadvertenciasdeseguridadserndeshabilitadas.

Deshabilitartodaslasmacrosconnotificacin

Eslaopcinpordefecto.Lasmacrosserndeshabilitadasperoaparecerunaadvertenciade
seguridadenlabarrademensajes(bajolacintadeopciones)paraloslibrosquecontienenmacros.

Deshabilitartodaslasmacrosexceptolasfirmadasdigitalmente

Silasmacrosdeunlibrotienenfirmadigitaldeunorigenaprobado,lasmacrossepodrnejecutar.Si

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
elorigennoestautorizado,aparecerunanotificacin: enestecasoesposiblehabilitarlasmacros
firmadasoaprobarelorigen.Lasmacrossinfirmadigitalnosepodrnhabilitar.

Habilitartodaslasmacros

Siseleccionaestaopcin,todaslasmacrossernhabilitadas.Serecomiendanousarestaopcinde
formapermanente.

Cualquieraquesealaopcinelegida,siinstalaunprogramaantiviruscompatibleconMicrosoftOfficeSystem2016,
loslibrosquecontenganmacrossernanalizadosantesdeabrirse.

ConfiarenelaccesoalmodelodeobjetosdeproyectosdeVBA

Esteparmetroesparalosdesarrolladoresysirveparacontrolaroautorizarelaccesoporprograma
almodelodeobjetosVBA(formularios,mdulosymdulosdeclase).Lamanipulacindelosobjetos
sehaceatravsdelapropiedadVBComponents,quedevuelvelacoleccindecomponentesdeun
proyecto.

c.Habilitarlasmacroscuandoaparecelaadvertenciadeseguridad

Si ha seleccionado la opcin Deshabilitar todas las macros con notificacin, aparecer la siguiente advertencia
bajolacintadeopcionescuandoabraunlibroquecontienemacros:

Parahabilitarlasmacrosdellibro,hagaclicenelbotnHabilitarcontenido.Apartirdeahora,ellibropasaraser
undocumentoconfiableylaadvertenciadeseguridadnoaparecerlaprximavezqueloabra.

Un documento se considera confiable para una determinada ubicacin: si cambia la ubicacin de un documento
aprobado,volveraaparecerlaadvertencia deseguridadlaprximavezqueloabra.

Lasmacrossepuedenhabilitarsoloparaunasesin(esdecir,hastaquecierreellibroquelascontiene):

Al aparecer la advertencia de seguridad, haga clic en la pestaa Archivo y seleccione la seccin


Informacin.

DentrodeAdvertenciadeseguridad,hagaclicenHabilitarcontenidoyluegoenOpcionesavanzadas.

EnelcuadroOpcionesdeseguridaddeMicrosoftOffice,seleccionelaopcinHabilitarcontenidopara

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
estasesin.

Desaparecerlaadvertenciadeseguridad,aunquevolveraaparecerlaprximavezqueabraellibro.

d.Activarlasmacrosenunaubicacindada

Puede definir una lista de ubicaciones de confianza para que los libros que se encuentren en ella se consideren
confiables:


Hagaclicenelbotn delapestaaDesarrollador.

Enelmendelaizquierda,seleccionelacategoraUbicacionesdeconfianza.

HagaclicenelbotnAgregarnuevaubicacin.

HagaclicenelbotnExaminar.LocaliceyseleccionelacarpetadeseadayluegohagaclicenAceptar:la
rutaseleccionadaseagregaralalistadeubicacionesdeconfianza.

e.Firmaselectrnicasdemacros

Parafirmardigitalmenteunproyectomacro,debe:

l Obteneruncertificadodigitaldepartedeunaautoridaddecertificacincomercial,comoVerisign(www.verisign.es) o
Thawte(www.thawte.com),einstalarlo.

l Firmardigitalmentesuproyecto.Paraello,pasealentornoVBE(accesibledesdeelcomando de

la pestaa Desarrollador) y seleccione la opcin Firma digital del men Herramientas. Haga clic en el
botnElegirparaseleccionarsucertificado.

Paraprobarsusproyectosmacrosensuordenador,puedecrearsupropiocertificadodeautofirmaconlaayudade
Selfcert.exe(programadistribuidoconMicrosoftOffice2016yconlosejemplosdeestelibro).

5.Modificarelcdigodeunamacro

Unamacroesun procedimientoescritoenlenguajeVBA.UnprocedimientoVBAesunasecuenciadeinstrucciones
agrupadasenunbloquedecdigoquecomienzaconSubyterminaconEndSub.

Paraaccederalcdigodeunamacro:

Hagaclicenelbotn delapestaaDesarrolladoropulseelmtodoabreviado[Alt][F8].

SeleccionelamacroquedeseamodificaryhagaclicenelbotnModificar.

ElcdigodelamacroaparecerenunaventanadelentornoMicrosoftVisualBasic(verElentornodedesarrolloVBE,
enestecaptulo).

- 8- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Puedemodificarocompletarelcdigodentrodeesteprocedimiento.

Ejemplo

Inserteelsiguientecdigoalfinaldelprocedimiento:

...
MsgBox "El formato de celdas " & Selection.Address _
& vbCr & "se ha modificado correctamente"
End Sub

Paraprobarsuprocedimiento,hagaclicenelicono ouselatecla[F5].Aparecerelsiguientemensaje:

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 9-
Asignarunamacro

Unamacrosepuedeasociaralossiguienteselementos:

l Comandospersonalizadosenlacintadeopciones.

l Botonesdecomandoenlabarradeherramientasdeaccesorpido.

l ControlesuobjetosinsertadosenlashojasdeExcel(botonesdecomando,imgenes,etc.).

1.AccesoaunamacrodesdelacintadeopcionesdeOffice2016

MicrosoftOffice2016ofrecelaposibilidaddepersonalizarlacintadeopciones: puedeagregar,eliminaroreasignar
laspestaas,gruposycomandosdelacintaparadisponerdeaplicacionespersonalizadas.

Parapersonalizarlacintadeopciones:

Haga clic en el botn derecho del ratn sobre la cinta y seleccione la opcin Personalizar la cinta de
opciones.

Haga clic en la pestaa Archivo, luego en Opciones y seleccione la categora Personalizar cinta de
opciones.

Aparecerelsiguientecuadro:

Parainsertarmacrosenunanuevapestaa:

Haga clic en el botn Nueva pestaa. Se agregar una pestaa y un grupo a la lista de pestaas
principales.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Para cambiar el nombre de la pestaa y del grupo que acaba de crear, haga clic en el botn Cambiar
nombre.Elmencontextualtambinlepermiteagregarpestaasogrupos.

Despliegue las opciones dentro de Comandos disponibles en: (a la izquierda y arriba) y seleccione
Macros.Aparecerlalistademacrosdisponibles.

SeleccionelamacroquedeseaagregaralgrupoyhagaclicenAgregar.

ParamodificarelnombreyeliconodelamacrohagaclicenelbotnCambiar nombre.

Tambinpuedecambiarelordendelaspestaa,gruposycomandosconlasflechassituadasala
derechadelalista.

Ejemplodepersonalizacin:

Para confirmar esta personalizacin, haga clic en Aceptar. La nueva pestaa aparecer en la cinta de
opcionesdeExcel2016:

Ustedpuederestablecerlacintadeopcionesencualquiermomentodesdeelcuadrodedilogoparapersonalizarla
cinta, haciendo clic en el botn Restablecer (puede restablecer toda la cinta o solamente una pestaa).
Tambin puedeimportarunacintapersonalizadahaciendoclicenelbotnImportaroexportar.

2.Asociarunamacroauniconodelabarradeherramientasdeaccesorpido

Tambinpuedeinsertaruncomandoparaejecutarunamacroenlabarradeherramientasdeaccesorpido:

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Haga clic en el botn derecho del ratn sobre la cinta de opciones y seleccione la opcin Personalizar
barradeherramientasdeaccesorpido.

En la lista desplegable Comandos disponibles en situada arriba y a la izquierda, seleccione Macros.


Aparecerlalistademacrosdisponibles.

SeleccionelamacroquedeseeyhagaclicenelbotnAgregar.Lamacropasaralalistadeladerecha.

HagaclicenelbotnModificar...paraseleccionarunnuevoiconoparalamacro.

Puedemodificarelordendeloscomandosconlasflechasubicadasaladerechadelalista.

PuedeseleccionarunlibroenlalistadesplegablePersonalizarbarradeherramientasdeaccesorpido
situadaarribayaladerecha.Enesecasolasmodificacionessolamenteafectarnallibroindicado.

HagaclicenAceptar.

AparecerunnuevocomandoenlabarradeaccesorpidoparaejecutarlamacroBordes.

3.Asociarunamacroaunbotndecomando

Hagaclicenelbotn delapestaaDesarrollador.

Dibuje el botn con la herramienta (parte superior izquierda de la barra de Controles de

formulario).

Alsoltarelbotndelratn,aparecerelcuadrodedilogoAsignarmacro.

SeleccioneelNombredelamacroenlalistayhagaclicenAceptar.

4.Asignarunamacroaunaimagen

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-

Inserteunaimagenhaciendoclicenelbotn delapestaaInsertar.

HagaclicenelbotnderechodelratnyseleccionelaopcinAsignarmacro.

SeleccioneelNombredelamacroenlalistayhagaclicenelbotnAceptar.

5.Asociarunamacroaunazonadeunobjetogrfico

Inserte un objeto grfico (imagen, imagen prediseada, forma o SmartArt, accesibles desde el grupo
IlustracionesdelapestaaInsertar).

Paradefinirenelobjetounazonaquepermitaejecutarunamacro,hagaclicen (enlapestaa

Insertar),seleccionelaformadeseadaydibujelaformadentrodelobjetoqueacabadecrear.

HagaclicenelbotnderechodelratnyseleccionelaopcinAsignarmacro.

SeleccioneelNombredelamacroenlalistayconfirmehaciendoclicenelbotnAceptar.

Seleccione la forma insertada. Aparecer la seccin Herramientas de dibujo haga clic en la pestaa
Formato.

EnelgrupoEstilosdeformadelapestaaFormato,hagaclicenlalista yluegoen

EnelmismogrupoEstilo de formadelapestaa Formato,hagaclicenlalista ,


luegoen .

Ahora,alhacerclicenlaforma,seejecutarlamacroasociada.

6.AsociarunamacroaunaimagenControlActiveX

ActiveelmodoDiseo(sinoestactivo)haciendoclicenelbotn delapestaaDesarrollador.

Hagaclicenelbotn delapestaaDesarrollador.


Dibujeunaimagenconlaherramienta (dentrodeloscontrolesActiveX) ysuelteelbotndelratn.

Ahora puede mostrar y modificar las propiedades de la imagen (en particular, asociar una imagen por

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
medio de la propiedad Picture), haciendo clic en el botn de la pestaa

Desarrollador.

Hagadobleclicenlaimagen.

DentrodelprocedimientoVBAasociadoalaimagen,escribalainstruccinCallseguidadelnombredela
macroquedeseaejecutar.

DesactiveelmodoDiseohaciendoclicenelbotn delapestaaDesarrollador.

Hagaclicenlaimagen:seejecutarlamacroBordes.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
ElentornodedesarrolloVBE

VBE (Visual Basic Editor) es el entorno en el que puede escribir, modificar y probar su cdigo VBA. Este entorno se
llamatambinIDE(IntegratedDevelopmentEnvironment)oeditordeVBA.

ElentornoVBEponeasudisposicinnumerosasherramientasparafacilitarlaprogramacinylapuestaapuntode
sucdigoVBA:herramientasdedepuracin,introduccinasistida,exploradordeobjetos,etc.

1.AccesoalentornoVBE

ParaaccederalentornoVBEdesdeExcel,hagaclicenelbotn delapestaaDesarrolladoro

pulselacombinacin[Alt][F11].

2.CerrarelentornoVBE

ParacerrarelentornoVBEyvolveraExcel:

HagaclicenelasparojaubicadaarribaaladerechadelaventanaprincipaldelentornoVBE.

HagaclicenlaopcinCerraryvolveraMicrosoftExceldelmenArchivo.

3.VolveraExcel

ParavolveraExcelsincerrarelentornoVBE,usecualquieradeestasdosposibilidades:

Hagaclicenelicono delabarradeherramientasEstndar.

Pulseelmtodoabreviado[Alt][F11].

4.DescripcindelentornoVBE

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
TodaslasventanasdelentornoVBEsepuedenvisualizardesdeelmenVer.

(1)LabarradeherramientasEstndar

1VeraMicrosoftExcel 10EjecutarSub
2InsertarUserForm 11Interrumpir
3Guardarlibro 12Restablecer
4Cortar 13Mododediseo
5Copiar 14Exploradordeproyectos
6Pegar 15VentanadePropiedades
7Buscar 16Examinadordeobjetos
8Deshacer 17Cuadrodeherramientas
9Rehacer 18AyudadeMicrosoftVisualBasic
19Posicinactualenlaventanadecdigo

(2)Elexploradordeproyectos

CadalibroabiertoenExceltieneasociadounproyecto.Elexploradordeproyectospermitevertodoslosproyectosy
todoslosmdulosdecadaproyectosegnunaestructuraenrbol.Losmdulosseagrupanencuatrocategoras:

l MdulosasociadosaobjetosdeExcel(libroyhojas).

l Mdulosasociadosaformularios.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
l Mdulosestndares.

l Mdulosdeclase.

Cadamdulopuedecontenermuchosprocedimientos.

(3)LaventanaPropiedades

Muestralaspropiedadesrelativasallibro,alashojasdeclculo,alashojasgrficasyalosformularios.

(4)LaventanaCdigo

Enestaventanaaparecendoszonasconlistasdesplegables:

l Lazonaobjeto(10)muestralalistadelosobjetosdelmdulo.

l Lazonaprocedimiento (11)muestralosprocedimientosoloseventosdelobjetoseleccionadoenlazonaobjeto.Los
eventosyausadosaparecenennegrita.

(5)Instruccionesquesecompletanautomticamente

Cuandoseescribeelnombredeunobjetoseguidodeunpunto,apareceautomticamenteunalistadesplegable
conlosmtodos,propiedadesyconstantesdisponiblesparaeseobjeto.

Si la lista no aparece, seleccione Opciones en el men Herramientas y marque la casilla Lista de miembros
automticadelapestaaEditor.

(6)VentanaInmediato

Contienetodoslosvaloresdelasvariablesquehayansidodefinidaspreviamentecomoexpresionesdeinspeccin.

(7)VentanaLocales

Permitemostrarlosvaloresdelasvariables,modificarlas,yejecutarlasinstrucciones.

(8)VentanaInspecciones

Contienetodoslosvaloresdelasvariablesdelprocedimientoencurso.

Lasventanas Inmediato,LocaleseInspeccionesseusanprincipalmenteparaladepuracindeaplicaciones(ver
captuloDepuracinyadministracindeerrores).

(9)ElExaminadordeobjetos

Permitevisualizar,paracadaobjeto,suspropiedades,mtodosyconstantes.

5.Elegirlasventanasquehayquemostrar

Nombredelaventanaque Men Barrade Teclado


hayquemostrar herramientas

Propiedades VerVentanaPropiedades [F4]

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Proyectos VerExploradordeproyectos [Ctrl]R

Inmediato VerVentanaInmediato [Ctrl]G

Inspecciones Ver VentanaInspeccin

VentanaLocales VerVentanaLocales

Exploradordeobjetos VerExaminadordeobjetos [F2]

Mdulo VerCdigo [F7]

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
ConfiguracindeleditorVBA

1.Configuracindelatipografa

Laspalabrasclave,lasfuncionesylasinstruccionesVBAaparecenenazullosobjetos,mtodosypropiedades,en
negro,yloscomentarios,enverde.Lasinstrucciones quecontienenerroressedestacanenrojo.

Para modificar el estilo (color, tipo de letra, tamao) de los diferentes tipos de cdigo, seleccione
OpcionesenelmenHerramientasyhagaclicenlapestaaFormatodeleditor.

2.Configuracindelaintroduccindecdigo

Existen diferentes herramientas que facilitan la introduccin y la actualizacin del cdigo VBA: por ejemplo, la
comprobacin automtica de la sintaxis, la declaracin obligatoria de las variables, las instrucciones que se
completanautomticamente,etc.

Para activar estas opciones, seleccione Opciones en el men Herramientas y haga clic en la pestaa
Editor.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
3.Manejodeerrores

Lasopcionesdeinterceptacindeerrorespermitenestablecersilaejecucindelcdigoseinterrumpiralocurrirun
errordeejecucin.

Para activar esta opcin, seleccione Opciones en el men Herramientas y haga clic en la pestaa
General.

Si su cdigo VBA incluye una gestin de errores, seleccione la opcin Interrumpir en errores no
controladosonosetendrnencuentalasinstruccionesdegestindeerrores.

Ciertos ejemplos de este libro incluyen una gestin de errores es importante que active esta opcin para que
funcionencorrectamente.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
LagestindeerroresseexplicaenelcaptuloDepuracinyadministracindeerrores.

4.Acoplarunaventana

Una ventana acoplada se coloca automticamente cuando la mueve. Una ventana no est acoplada si puede
ubicarseencualquierlugardelapantallaypermanecerah.

Paradefinirlasventanasquedeseaacoplar,seleccioneOpcionesenelmenHerramientasyhagaclic
enlapestaaAcoplar.

Activelasventanasquedeseaacoplarydesactivelasotras.LuegohagaclicenAceptar.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Mdulos

1.Presentacin

ElcdigoVBAasociadoaunlibroestagrupadoenunproyectoquecontienevariascarpetas:

LacarpetaMicrosoftExcel Contiene un mdulo de clase asociado al libro del proyecto (llamado por
Objetos defecto ThisWorkbook) y un mdulo de clase por cada una de las hojas de
clculouhojasdegrficodellibro.Enparticular,enestosmdulosdeclasese
encuentranlosprocedimientosdeeventosasociadosallibroyalashojas.

LacarpetaFormularios Contienelosformularios(UserForm)delproyectoyelcdigoVBAasociado.

LacarpetaMdulos Agrupa los diferentes mdulos estndares (compuestos por uno o ms


procedimientos) que pueden ser llamados desde cualquier procedimiento del
proyecto.

LacarpetaMdulosdeclase Contiene los mdulos de clase usados para la creacin de nuevas clases de
objetos. Los mdulos de clase se utilizan especialmente para la escritura
de los procedimientos de eventos asociados a los objetosApplication y Chart
(vercaptuloAdministracindeeventos).

LalistadetodoslosmdulosapareceenformajerrquicaenelExploradordeproyectosdelentornoVBE.

Si el explorador de proyectos no est visible, elija la opcin Explorador de proyectos del men Ver o pulse el
mtodoabreviado[Ctrl]R.

Paraverelcdigoasociadoaunmdulo,hagadobleclicenelnombredelmdulo.

LoselementosdellenguajeVBAdescritosenestecaptulosepuedenusarenlosdiferentesmdulos.

2.Accesoalosmdulos

ParainsertarunnuevomduloenelentornoVBE,uselaopcinMdulodelmenInsertar,ohagaclicenelicono

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-

delabarradeherramientasEstndaryseleccionelaopcin .

SilaventanaMduloestmaximizada,elnombredelmduloaparecesobrelabarradettulodeMicrosoftVisual
Basic.

Parapasardeunmduloaotro,enlaventana Proyecto,hagadobleclicenelnombredelmduloque
deseaactivar.

Paraeliminarunmdulo,enlaventanaProyecto,hagaclicderechoenelnombredelmduloquedesea
eliminar,elijalaopcinQuitarMduloeindiquesideseaexportarelmduloono(verImportaryexportar
cdigoVBA).

Para dar nombre a un mdulo, active el mdulo y cambie la propiedad Nombre en la ventana de
Propiedades.

3.ImportaryexportarcdigoVBA

LosmdulosyformulariospuedenexportarseaunarchivoparaluegoimportarloaotroproyectodeExcel.

Para exportar un archivo, haga clic en el nombre del archivo en el explorador de proyectos, luego
seleccionelaopcinExportar archivodelmenArchivo(odelmencontextual)opulselacombinacin
deteclas[Ctrl] E.

Para importar un archivo, haga clic en el nombre del archivo en el explorador de proyectos, luego
seleccionelaopcinImportararchivodelmenArchivo(odelmencontextual)opulselacombinacin
deteclas[Ctrl]M.

Laextensindelarchivocreadodependedeltipodearchivoexportado:

l Los mdulos de clase (mdulos asociados al libro y a las hojas y mdulos de clase independientes) tienen la
extensin.cls.

l Losformulariostienenlaextensin.frm.

l Losmdulosestndartienenlaextensin.bas.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Procedimientos

1.Definiciones

Los procedimientos son subprogramas que permiten descomponer una tarea de programacin compleja en un
conjuntodetareasmsbrevesysimples.Permitenorganizarelcdigodentrodemdulosparaobteneruncdigo
demantenimientomssimpleyfcilmentereutilizable.

EnVBAExcel,sedistinguentrestiposdeprocedimientos:

l LosprocedimientosSub(porsubrutina)sellamansubprogramasoprocedimientosSub.

l LosprocedimientosFunctionsellamanfunciones.

l LosprocedimientosPropertysellamanprocedimientosdepropiedad.

Enestecaptulo,solamentenosinteresanlosdosprimeros,quesonlosmsutilizados.

l PuntoscomunesentreprocedimientosSubyfunciones:

n AmboscontieneninstruccionesomtodosVBA.

n Ambosaceptanargumentos.

n AmbossepuedenllamardesdeotrasfuncionesoprocedimientosSub.

l Caractersticasespecficasdelasfunciones:

n Devuelvenunvalor.

n SepuedenutilizardesdeExcelcomocualquierfuncin.

2.Accesoalosprocedimientos

Paraaccederaunprocedimientodesdelaventanadecdigodeunmdulo,abralasegundalistadela
ventana del mdulo, haga clic en el nombre del procedimiento al que desea acceder o recorra los
procedimientoscon[Ctrl][Flechaarriba]y[Ctrl][Flechaabajo].

Paraseleccionarunapalabra,hagadobleclicenlapalabra.

Para seleccionar una lnea, site el puntero del ratn a la izquierda de la lnea y haga clic cuando el
punteroseconviertaenunaflecha.

Paraseleccionarungrupodecaracteres,uselatcnicadearrastrarysoltarohaga[Mays]clic.

Para seleccionar un procedimiento completo, site el puntero del ratn a la izquierda de cualquier lnea
delprocedimiento.Cuandoelpunterosetransformeenunaflecha,hagadobleclic.


Paraejecutarunprocedimiento,hagaclicenelprocedimientoquedeseaejecutarypulse[F5]o .

Paraeliminarunprocedimiento,seleccionetodoelprocedimientoypulse[Supr].

3.ProcedimientosSub

HaydostiposdeprocedimientosSub:

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
l LosprocedimientosSubgenerales,

l LosprocedimientosSubasociadosaeventos.

Un procedimientogeneral es un procedimiento declarado en un mdulo (generalmente un mdulo estndar). La


llamadaaestetipodeprocedimientosedefineexplcitamenteenelcdigo.

Unprocedimientoasociadoauneventoesunprocedimientoqueseejecutaautomticamenteanteciertoseventos
deunobjeto.Sunombreseformaconelnombredelobjeto,seguidodelguinbajo"_"ydelnombredelevento
(ej.: Workbook_Open). La llamada a estos procedimientos es implcita, es decir, el procedimiento se ejecuta
automticamentecuandoseproduceeleventoasociado.

Ejemplo

El siguiente procedimiento general pide al usuario que confirme su deseo de abandonar la aplicacin, y sale de Excel si el
usuario responde que S. Este cdigo se puede ejecutar con un botn de comando o una opcin de men que permita
abandonarlaaplicacin.

Private Sub Terminar()


If MsgBox("Desea salir del programa?", _
vbQuestion + vbYesNo) = vbYes Then
Application.Quit
End If
End Sub

El siguiente procedimiento asociado a un evento abre automticamente el libro Ventas.xlsx cuando se abre el libro
Resumen.xlsx. Este procedimiento est asociado al evento Open del objeto Workbook y se encuentra en el mdulo
ThisWorkbookdellibroResumen.xlsx.

Private Sub Workbook_Open()


Abre el libro Ventas.xlsx
Workbooks.Open Filename:="C:\VENTAS\VENTAS.xlsx"
Activa el libro Resumen
Windows("RESUMEN.xlsx").Activate
End Sub

4.ProcedimientosFunction

LosprocedimientosFunction,llamadoscomnmentefunciones,devuelvenunvalorresultadodeunclculo.Elvalor
sedevuelveatravsdelnombredelafuncin.

EllenguajeVisualBasicincluyenumerosasfuncionesintegradas,talescomolasusadasenclculosconfechas(day,
week,year,format,etc.).

Ademsdeestasfuncionesintegradas,puedecrearsuspropiasfuncionespersonalizadas.

Ejemplo

LasiguientefuncinpidealusuarioqueconfirmesudeseodeabandonarlaaplicacinydevuelveTruesielusuarioresponde
queS,yFalseencasocontrario.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Function Terminar() As Boolean
If MsgBox("Desea salir del programa?", _
vbQuestion + vbYesNo) = vbYes Then
Terminar = True
Else
Terminar = False
End If
End Function

5.Declaracindeprocedimientos

SintaxisdeunprocedimientoSub

[Private | Public | Friend] [Static] Sub NomProc


([lista de argumentos])
<secuencia de instrucciones>
End Sub

SintaxisdeunprocedimientoFunction

[Private | Public | Friend] [Static] Function


NomProc ([lista de argumentos]) [As <Type>]
<secuencia de instrucciones>
End Function

ParacrearunprocedimientoSuboFunction,sedebenrespetarlossiguientespasos:

l Determineelalcancedelprocedimiento.

l DeclareelprocedimientosegnsutipoconlapalabraclaveSuboFunction,seguidadelnombredelprocedimiento.

l Definalosargumentosquesedebanpasarcomoparmetrosalprocedimientoeindquelosentreparntesisdespus
delnombredelprocedimiento.

l Enelcasodeunafuncin,siesnecesario,indiqueeltipodelvalordevueltodespusdelapalabraclaveAs.

l Escriba el cdigo que permita efectuar la operacin deseada. Si es necesario, use Exit Sub o Exit Function para
salirdelprocedimiento.Enelcasodeunafuncin,asigneelresultadoalnombredelafuncin.

l FinaliceelprocedimientoconEndSuboEndFunction.

6.Alcancedelosprocedimientos

Elalcancedeunprocedimientodeterminalaextensindesuuso.

UnprocedimientoPublicsepuedellamardesdetodoslosmdulosdetodoslosproyectosdeExcel.

UnprocedimientoPrivatesolamentesepuedellamardesdeunprocedimientodentrodelmismomdulo.

LapalabraclaveStaticindicaquelasvariableslocalesdelprocedimientosemantienenentreunallamadayotra.

SinoseindicaPublicoPrivateoFriend,losprocedimientossonpblicospordefecto.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
7.Argumentosdelosprocedimientos

Los argumentos se usan para transferir a los procedimientos parmetros en forma de datos. La cantidad de
argumentospuedevariarde0avarios.

Paradeclararunargumento,bastaconespecificarsunombre.Sinembargo,lasintaxiscompletaparadeclararun
argumentoeslasiguiente:

[Optional] [ByVal | Byref] [ParamArray]


<variable> [As type]

LaopcinOptional indica que el argumento es opcional y puede omitirse. Los argumentos opcionales
sedebenubicaralfinaldelalistadeargumentosyserdetipoVariant.

LaopcinByval indicaqueelargumentosepasaporvalor.Elprocedimientoaccedeaunacopiade
lavariablesuvalorinicialnosemodificaporelprocedimientoalquesepasa.

LaopcinByref(opcinpor indica que el argumento se pasa por referencia. En este caso, el procedimiento
defecto) puede acceder a la variable propiamente dicha de esta manera, su valor real se
puedemodificarporelprocedimientoalquesepasa.

LapalabraclaveParamArray se usa nicamente como ltimo argumento de la lista para indicar que se trata de
una matriz opcional de elementos de tipo Variant. No se puede usar con las
palabrasclaveByVal,ByRefuOptional.

Variable especificaelnombredelargumento.Paralasvariablesdematriz,noespecificarsu
dimensin.

Type especifica el tipo de datos del argumento que se pasa al procedimiento (Byte,
Boolean,Integer,Long,etc.).

8.Argumentosconnombre

La transferencia de argumentos a un procedimiento segn su orden de aparicin es a veces difcil de realizar,


especialmente cuando hay parmetros opcionales. De la misma manera, la legibilidad de las llamadas a
procedimientosconmuchosparmetrosnosiempreesfcil.

Losargumentosconnombrefacilitanlatransferenciadeargumentosgraciasalassiguientesventajas:

l Elordendelosargumentosconnombrenoesimportante.

l Losargumentosopcionalespuedenomitirse.

Lasintaxisdelosargumentosconnombreses:

NomArg := valor

Ejemplo

ElsiguientecdigoVBA:

If MsgBox("Desea salir de la aplicacin?", _


vbYesNo + vbQuestion, "Gestin de ventas") = vbYes Then
Application.Quit
End If

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
puedetransformarseen:

If MsgBox(Prompt:= "Desea salir de la aplicacin?", _


Buttons:=vbYesNo + vbQuestion, _
Title:="Gestin de ventas") = vbYes Then
Application.Quit
End If

Tambinsepuedemodificarelordendelosparmetros:

If MsgBox(Prompt:= "Desea salir de la aplicacin?", _


Title:="Gestin de ventas", _
Buttons:=vbYesNo + vbQuestion) = vbYes Then
Application.Quit
End If

El nombre de los argumentos aparece automticamente en el entorno VBE a medida que se escribe la instruccin.
Losargumentosopcionalesaparecenentrecorchetes.

9.Llamaraunprocedimiento

Sintaxis

[Call] NomProc [lista de argumentos]

SiseindicalapalabraclaveCall,debecolocarlalistadeargumentosentreparntesis.

Paraalmacenarelresultadodeunafuncinenunavariable,uselasiguientesintaxis:

<variable> = NomProc ( [lista de argumentos] )

Parallamaraunprocedimientodeotromdulo,uselasiguientesintaxis:

NomMdulo.NomProcedimiento

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
Ejemplo

ThisWorkbook.Salir_Apli

Parallamaraunprocedimientodeotrolibro,uselasiguientesintaxis:

Application.Run "NomLibro!NomMdulo.NomProcedimiento"

Ejemplo

Application.Run "Ventas.xlsm!ThisWorkbook.Salir_Apli"

Paraejecutarestecomando,ellibroVentas.xlsmdebeestarabierto.

10.LlamaraunafuncinVBAenunafrmuladeExcel

Las funciones VBA se pueden usar en las frmulas de Excel. Todas las funciones declaradas en Public estn
disponiblesenelasistenteparafuncionesdeExcel(categoraFuncionesDefinidasporelusuario).

Ejemplo

EsteejemplousaunafuncinVBAquecalculalaedaddeunapersonaapartirdesufechadenacimiento.

Function CalcEdad(fechaNac As Date)


Dim zFecha As Date
Calcula la edad en funcin de la fecha de nacimiento
CalcEdad = Abs(DateDiff("YYYY", fechaNac, Date))
zFecha = DateAdd("YYYY", CalcEdad, fechaNac)
If zFecha > Date Then CalcEdad = CalcEdad - 1
End Function

ParausarestafuncinenExcel:

SeleccionelaopcinInsertarfuncindelapestaaFrmulas.

Enelcuadrodedilogo Insertarfuncin,enlalistaO seleccionar una categora,elijaDefinida por el


usuariolafuncinCalcEdadestarahoraaccesible:

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
SeleccionelafuncinyhagaclicenAceptarelcuadrodedilogolepedirlosargumentosdelafuncin,
comoseveaqu:

Este ejemplo muestra la importancia del nombre de los argumentos de las funciones: cuanto ms explcitos sean
estos,msfcilresultarusarlafuncinenExcel.

Ahorapuedemodificarlafrmulaparaincluireltexto"aos"yextenderlafrmulaatodalalista.

ElresultadoenExceleselsiguiente:

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
11.Ejemplosdeprocedimientosyfunciones

CopiarelcontenidodeunatabladevaloresenlahojadeExcelactiva.

Sub Mostrar_Tabla()
Dim vTabVal As Variant
Dim oCelda As Range
Dim i As Integer
Muestra el contenido de la tabla en la hoja de clculo activa
vTabVal = Array("Buenos Das", 1.244, "=A1+12", "=A2+12")
For i = 0 To 3
Set oCelda = Range("A" & i + 1)
If MCell(oCelda, vTabVal(i)) Then
MsgBox "La celda se actualiz con xito"
Else
MsgBox "La celda no se pudo actualizar"
End If
Next i

End Sub

ElcdigodeestosejemplossedebeescribirenunmduloestndaroenelmduloThisWorkbook.

LafuncinMCellinformasobreelvalorasignadoaunacelda.DevuelveTruesilaceldaseactualizcorrectamente,y
Falseencasocontrario.

Private Function MCell(oCelda As Range, _


Valor As Variant) As Boolean
Actualizacin de una celda a partir de un valor
MCell = False
If Not IsEmpty(oCelda) Then Exit Function
oCelda.Value = Valor
If oCelda.Text <> "#VALOR!" Then
MCell = True
End If

- 8- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
End Function

Sipruebaesteejemplo,obtendrelsiguienteresultado:

Laterceraceldanosepudoactualizar.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 9-
Variables

Las variables permiten almacenar valores intermedios durante la ejecucin del cdigo VBA para usarlos luego en
clculos,comparaciones,pruebas

Las variables se identifican por un nombre que permite hacer referencia al valor que contienen y un tipo que
determinalanaturalezadelosdatosquepuedenalmacenar.

1.Tiposdevariables

Numricas

Tipo Rango Tamaoen


bytes

Byte 0a255 1

Integer(entero) 32768a32767 2

Long(enterolargo) 2147483648a2147483647 4

Single(realsimpledecoma 3,402823E38a1,401298E45 4
flotante) (valoresnegativos)
1,401298E45a3,402823E38
(valorespositivos)

Double(realdobledecoma 1,79769313486231E308a4,94065645841247E324 8
flotante) (valoresnegativos)
4,94065645841247E324 a1,79769313486231E308
(valorespositivos)

Currency(monetariode 922337203685477,5808a922337203685477,5807 8
puntofijo)

Decimal +/79228162514264337593543950335sinseparador 12
decimal
+/7,9228162514264337593543950335con28cifrasaladerecha
delseparadordecimal
elmenornmerodistintodeceroes+/
0.0000000000000000000000000001

Cadenasdecaracteres

EltipoesString.Existendostiposdecadenas:

l Lascadenasdelongitudvariablepuedenconteneraproximadamentedosmilmillonesdecaracteres.

l Lascadenasdelongitudfijapuedencontenerde1aaproximadamente64 KBdecaracteres.

Ejemplo

Cadena de longitud variable


Dim sDomicilio As String
Cadena de longitud fija (20 caracteres)
Dim sNombre As String * 20

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Booleanolgica

El tipo es Boolean (o booleano). La variable puede tomar los valores True (Verdadero) o False (Falso), que es su
valorpordefecto.Ocupadosbytes.

Fecha

EltipoesDate.Lavariablepuedetomarlosvaloresdefechaydehoradel1deenerodelao100al31dediciembre
de9999.Ocupaochobytes.

Variant

LasvariablesdetipoVariantpuedencontenerdatosdetodotipo,ademsdelosvaloresespecialesEmpty,Errory
Null.

UsareltipodedatoVariantofrecemsflexibilidadeneltratamientodedatos.Porejemplo,siunavariabledetipo
Variantcontienecifras,sepuedeusarsuvalorrealosurepresentacinenformadecadena,segnelcontexto.

De todas formas, las variables de tipo Variant requieren 16 bytes de memoria para nmeros y 22 bytes ms la
longitud de la cadena para los caracteres esto puede ser perjudicial en el caso de procedimientos largos o en
mduloscomplejos.

Ejemplo

Sub Variable_Variant()
Declaracin de la variable "Valx" como Variant
Dim Valx As Variant
Asignacin de una sucesin de valores a la variable
y mostrar el tipo del resultado
10 retorna un valor de tipo Integer
Valx = 10
MsgBox Valx & " es de tipo " & TypeName(Valx)
Ejemplo que retorna un valor de tipo String
Valx = "Ejemplo"
MsgBox Valx & " es de tipo " & TypeName(Valx)
Esta multiplicacin retorna un valor de tipo Double
Valx = 12500.32 * 1E+21
MsgBox Valx & " es de tipo " & TypeName(Valx)
#1/1/99# retorna un valor de tipo Date
Valx = #1/1/99#
MsgBox Valx & " es de tipo " & TypeName(Valx)
True retorna un valor de tipo Boolean
Valx = True
MsgBox Valx & " es de tipo " & TypeName(Valx)

End Sub

Objeto

El tipo es Object. Para crear una variable que contenga un objeto, comience por declarar la variable como tipo
Objetoyluegoasgneleunobjeto.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
ParadeclararunavariableObjeto:

Sieltipodeobjetonoseconoce,uselasintaxis:

InstruccinDeDeclaracin NomVariable As Object

Siseconoceeltipodeobjeto,uselasintaxis:

InstruccinDeDeclaracin NomVariable As TipoObjeto

Ejemplo

Sub Variables_Objeto()
oTest se declara como objeto
ShtNomCli se declara como hoja de clculo
oGrafico se declara como grfico
Dim oTest As Object
Dim ShtNomCli As Worksheet
Dim oGrafico As Chart
End Sub

ParaasignarleunobjetoaunavariableObjeto,uselainstruccinSet:

Set NomVariable = ObjetoaAsignar

Ejemplo

DeclaracindeunavariableZonaTestdestinadaacontenerunobjetoRangeyasignacindelasceldasA6aB15aestavariable:

Dim oZonaTest As Range


Set oZonaTest = Range("A6:B15")

Parafinalizarlaasociacinentreunavariableyunobjetodeterminado,uselasiguientesintaxis:

Set NomVariable = Nothing

Definidoporelusuario(opersonalizado)

LostiposdedatospersonalizadossecreanconlainstruccinTypeusadaaniveldemdulo.

Sintaxis

Type NomTipoPerso
NomElemento1 As TipoDatos
NomElemento2 As TipoDatos
...
End Type

Ladefinicindeltiposolamentesepuedehacerenlaseccindedeclaracindeunmdulo.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Ejemplo

DeclaracindeuntipopersonalizadoconstituidoporunaletrayunnmeroenteroenelmdulodecdigoProGene.

UsodeltipopersonalizadoparacontrolarloscdigosdeartculosintroducidosdelaceldaB6alaceldaB11delahojadeclculo
activa.Encasodeerror,semuestraunmensaje.

2.Declaracindevariables

Paracrearunavariable,debedeclararla,esdecir,darleunnombre.Luegopuedeusaresenombreparamodificarel
valordelavariable,usaresevalor,etc.

LadeclaracindevariablesenVBApuedeserimplcitaoexplcita.

a.Declaracionesimplcitas

Se hacen directamente al asignar un valor a un nombre de variable. El tipo de datos ser entonces el tipo por

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
defecto,osea,Variant.

Ejemplo

i = 12
dImporte = 12000
sNombre = "Juan Carlos"

b.Declaracionesexplcitas

Requierenelusodeunainstruccindedeclaracin(Dim,Public,Private,etc.).Sieltipodelavariablenoseindica,
lavariableresultardeltipopordefecto,osea,Variant.

Se puede imponer la declaracin implcita de variables usando la instruccin Option Explicit en la seccin de
declaracin de cada mdulo. Para insertar esta instruccin automticamente en cada nuevo mdulo, active la
opcinRequerirdeclaracindevariablesdelmenHerramientasOpcionespestaaEditor.

Ejemplo

Dim I
Private dImporte As Double
Public sNombre as String

ParaoptimizarlavelocidaddeejecucindelcdigoVBA,serecomiendadeclararlasvariablesenformaexplcita.

c.Sintaxisdelasinstruccionesdedeclaracin

<InstruccindeDeclaracin> NomVariable [As <TipodeDatos>]

DondeInstruccindeDeclaracincorrespondeaunadelassiguientescuatroinstrucciones:Dim,Public,Privateo
Static.

Dim LasvariablesdeclaradasconlainstruccinDimaniveldemduloestndisponiblesparatodos
los procedimientos del mdulo. No son accesibles desde ningn otro mdulo. Las variables
declaradasconlainstruccinDimaniveldeprocedimientosolamenteestndisponiblesdentro
delprocedimiento.

Private Solamente a nivel de mdulo. Las variables Private solamente estn disponibles para el
mduloenelquesondeclaradas.

Public Solamenteaniveldemdulo.LasvariablesdeclaradasconlainstruccinPublicsonaccesibles
desde el conjunto de mdulos de todos los proyectos de Excel abiertos. Si la instruccin
Option Private Module se especifica en la seccin de declaracin del mdulo, las variables
solamentesonpblicasdentrodelproyectoquelasrecibe.

Static Solamente a nivel de procedimiento. Las variables declaradas con la instruccin Static
conservansuvalormientrasdurelaejecucindelcdigo.

3.Declaracindelostiposdevariables

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
a.Declaracionesexplcitasdeltipo

Eltipodelavariableseespecificaenladeclaracin,traslapalabraclaveAs.

Ejemplo

Sub TotalAcum()
Dim iTotal As Integer
Static iAcum As Integer
iTotal = iTotal + 10
iAcum = iAcum + 10
Devuelve 10 en cada ejecucin del procedimiento
MsgBox iTotal
Devuelve 10 en la primera ejecucin, luego 20 la segunda vez,
30 la tercera, etc.
MsgBox iAcum
End Sub

Puede declarar ms de una variable en una misma instruccin, pero atencin, el tipo de datos solo se tendr en
cuentaparalaltimavariable,eltipoVariantseasignaralasotras.

b.Declaracionesimplcitasdeltipo

EltipodevariablesedeclarausandounsufijoenelmomentodesuutilizacinoporlainstruccinDefType.

Empleodeunsufijo

Debeagregarunodelossiguientescaracteresalnombredelavariable:

Sufijo Tipodedatos

% Integer

& Long

! Single

# Double

@ Currency

$ String

Ejemplo

DeclaralavariablecomotipoCadena(String).

Dim Nombre$

DeclaralavariablecomotipoMonetario(Currency).

Dim Deuda@

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
DefType

Estasinstruccionesseempleanenlazonadedeclaracindelmdulo,paradefinirlostiposdedatospordefectode
lasvariablescuyosnombrescomienzanporloscaracteresespecificados.

ListadeinstruccionesDefType:

Instruccin Tipodedatos

DefBool Boolean

DefDbl Double

DefInt Integer

DefDate Date

DefLng Long

DefStr String

DefCur Currency

DefObj Object

DefSng Single

DefVar Variant

DefByte Byte

Ejemplo

Todas las variables cuyos nombres comienzan por una letra comprendida entre I y K y por la letra N son variables de tipo
entero(Integer).

DefInt I-K,N

LasvariablesquecomienzanporunaletracomprendidaentreAyHserndetipocadena(String).

DefStr A-H

LainstruccinsiguientedeclaralavariableIdentificadorcomotipoVariantylasvariablesSuperficieyLatitudcomotipoEntero.

Dim Identificador, Superficie As Integer


Dim Latitud As Integer

c.Convencindenombresdevariables

Se recomienda utilizar una convencin de nombres para las variables. Permiten estandarizar el cdigo y hacerlo
mslegibleymsfcildemantenerpordiferentesdesarrolladores.

Laconvencinconsisteenutilizardosprefijosenelnombredelasvariables:

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
l El primero para indicar el mbito de la variable: p o pb o pb_ para pblica, m o mo para mdulo, y ningn prefijo
paralaslocales.

l Lasegundaparaindicarsutipo.

Tipo Prefijo Ejemplo

Boolean bobln bVisibleoblnVisible

Double dodbl dTotalodblTotal

Integer ioint iEdadointEdad

Long lolng lCanTotolngtCanTot

Object ouobj oCeldauobjCelda

String sostr sNombreostrNombre

Variant vovar vParamovarParam

4.Matrices

Puedecrearunavariablematrizcuandonecesitetrabajarconungrupodevaloresrelacionados.

Paracrearunavariablematriz,uselasiguientesintaxis:

<InstruccinDeDeclaracin> NomMatriz(ndices) [As<TipodeDatos>]

Dondepara(ndices):

l Siseomiteesteargumento:lamatriztendrdimensinlibre.

l Siseindicaunvalor:lamatriztendrunnmerodeterminadodeelementos.

l Si se indica LimiteInf To LimiteSup: la matriz tendr un nmero de elementos determinado y nmeros de ndice
especficos.

Pordefecto,elvalormenordelndicedeunamatrizes0.

Paramodificarelvalormenordelndice,uselainstruccinOption Base MenorValorndiceenlaseccinde


declaracindelmduloouselasintaxisLimiteInf To LimiteSupenelargumento(ndices).

Paradefinirelcontenidodeunamatriz,uselafuncinArray(lavariabledebeserunatabladedimensin
libre) o despliegue los datos en una hoja o asigne una por una cada variable de la matriz usando los
ndices.

Ejemplo

Elsiguienteejemplomuestra,enlahojaactivadeExcel,lalistadelosfactoresdeconversinaeurosparacincopases.

Const FacFRF = 6.55957


Const FacBEF = 40.3399
Const FacDEM = 1.95583
Const FacESP = 166.386
Const FacITL = 1936.27
----------------------------------------------------------------
Sub Muestra_Factor()
Dim Pais As Variant

- 8- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Dim Factor(5) As Double
Dim i As Integer
Lista de pases
Pais = Array("Francia", "Blgica", "Alemania", _
"Espaa", "Italia")

Lista de los factores por pas


Factor(0) = FacFRF
Factor(1) = FacBEF
Factor(2) = FacDEM
Factor(3) = FacESP
Factor(4) = FacITL

Muestra los pases y sus factores en la hoja de clculo Euro


For i = 0 To 4
With Sheets ("Euro")
.Cells(i + 1, 1) = Pais(i)
.Cells(i + 1, 2) = Factor(i)
End With
Next i

End Sub

Enesteejemplo,tambinesposibleusarunamatrizdedosndices.ElcdigoVBAdelprocedimientoquedacomosigue:

Sub Muestra_Factor2
Matriz de dos ndices
Dim TabFactor(5, 1)
Dim i As Integer

Lista de pases y sus factores


TabFactor(0, 0) = "Francia"
TabFactor(0, 1) = FacFRF
TabFactor(1, 0) = "Blgica"
TabFactor(1, 1) = FacBEF
TabFactor(2, 0) = "Alemania"
TabFactor(2, 1) = FacDEM
TabFactor(3, 0) = "Espaa"
TabFactor(3, 1) = FacESP
TabFactor(4, 0) = "Italia"
TabFactor(4, 1) = FacITL

Muestra los pases y sus factores en la hoja de clculo Euro


For i = 0 To 4
With Sheets ("Euro")
.Cells(i + 1, 1) = TabFactor(i, 0)
.Cells(i + 1, 2) = TabFactor(i, 1)
End With
Next i

End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 9-
5.Constantes

Unaconstantepermiteasignarunnombreexplcitoaunvalor.

a.Constantespersonalizadas

LadeclaracindeunaconstantesehaceconlainstruccinConstenlaseccindedeclaracindeunmdulooenun
procedimiento.

Const NomConstante [As <TipoDato>] = <expresin>

As TipoDato Eltipodedatonopuedeserunobjeto(Object)niuntipopersonalizado(Type).

expresin No puede ser una funcin definida por el usuario, ni una funcin intrnseca de
VisualBasic.

Ejemplo

Declaracindealgunasconstantes.

Sub Constantes()
Ejemplos de constantes autorizadas:
Const Val1 = "Mega+"
Const Val2 = 148
Const Val3 = 125.45
El tipo de datos es Double
Const Val4 As Single = 125.45
Permite ahorrar memoria
Const Val5 = Val2 * Val3
Const Val6 = Val1 & " cuesta " & Val2
Ejemplo de constante no autorizada:
Por el uso de una funcin VB
Const Val6 = Fix(Val4)
End Sub

Paracrearunaconstanteaccesibleatodosloslibrosabiertos,sedebedeclararenlaseccindedeclaracindeun
mduloysituarlainstruccinPublicantesdelainstruccinConst.

b.Constantesintegradas

LasconstantesusadasporlosobjetosdeMicrosoftExcelvanprecedidasporlasletras"xl"lasconstantesusadas
conotrasinstruccionesyfuncionesdeVisual Basicvanprecedidasporlasletras"vb",ylasconstantesdeMicrosoft
Office vanprecedidasporlasletras"mso".

Paramostrarlalistadeconstantesintegradas,abraelexaminadordeobjetoshaciendoclicenelicono

opulsandolatecladefuncin[F2].Escribalapalabra constantsenlalistadesplegableTextode

bsqueda(lasegundasituadaalaizquierda)yluegohagaclicenelicono .

- 10 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 11 -
Estructurasdedecisin

Esconvenientetestearlascondicionesespecficasantesdeejecutarlasinstrucciones.

Las estructuras de decisin, llamadas tambin alternativas o bifurcaciones condicionales, permiten, tras una
evaluacin,optarporunouotrobloquedecdigo.

Sedistinguendosinstruccionesdebifurcacincondicional:

l If...Then...Else

l Select...Case

LafuncinIIftambinsepuedeusarparadefinirunvalorenfuncindeunacondicin.Ejemplo:Port=IIf(Cantidad<
100,100,0).

1.InstruccinIf

Permiteejecutarciertasinstruccionesenfuncindelresultadodeunacondicin.

If...Then

If <condicin> Then <instruccin> [:<instruccin>]

Sihayvariasinstrucciones,seprelasporelsignodepuntuacin:(dospuntos).Estasintaxisseusaespecialmente
parapruebascortasysimples.

Ejemplo

SilaceldaA1estvaca,emiteunbipymuestraunmensaje.

Sub Test_Celda_A1()
If IsEmpty(Range("A1")) Then Beep: MsgBox "Olvid el ttulo"
End Sub

If...Then...EndIf

If <condicin> Then
<instruccin1>
<instruccin2>
...
End If

Ejemplo

Sub Test_Titulo()
Si la celda A1 no est vaca
entonces ponerla en negrita y pintarla de rojo

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
If Not IsEmpty(Range("A1")) Then
With Range("A1")
.Font.Bold = True
.Interior.ColorIndex = 3
End With
End If
End Sub

If...Then...Else...End If

If <condicin> Then
<instrucciones>
Else
<instrucciones>
End If

Ejemplo

Alcambiarlamoneda(oUS$)delaceldaC3,modificarelformatodelrangoD6:F11.

Private Sub Workbook_SheetChange(ByVal Sh As Object, _


ByVal Target As Range)
Modifica la celda C3 de la hoja Artculos
If Sh.Name = "Artculos" And Target.Address = "$C$3" Then
Aplicar_Formato
End If
End Sub

Esteprocedimientomodificaelformatodelasceldasenfuncindelamonedaelegida.

Sub Aplicar_Formato()
Formato o $
Range("D6:F11").NumberFormat = "0.00"
If UCase(Range("C3")) = "EURO" Then
Range("D6:F11").NumberFormat = "0.00 "
Else
Range("D6:F11").NumberFormat = "0.00"" $"""
End If
End Sub

If...Then...ElseIf...Else...EndIf

If <condicin> Then
<instrucciones>
ElseIf <condicin> Then
<instrucciones>
ElseIf <condicin> Then
<instrucciones>
...

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
...
Else
<instrucciones>
End If

Ejemplo

Esteprocedimientomodificalostextosdelasceldasseleccionadas:silaltima letraesminscula,pasatodoamaysculassi
no,pasatodoaminsculasconlaprimeraletraenmayscula.

Sub Mayus_Minus()
Dim oCelda As Range
Dim iCodAscii As Integer

Recorre las celdas de la seleccin


For Each oCelda In Selection
If IsEmpty(oCelda) Then
Beep
MsgBox "La celda " & oCelda.Address & " est vaca"
Else
Cdigo Ascii de la ltima letra
iCodAscii = Asc(Right(oCelda, 1))
Si est en maysculas
If iCodAscii >= 65 And iCodAscii <= 90 Then
oCelda.Value = UCase(Left(oCelda, 1)) _
& LCase(Right(oCelda, Len(oCelda) - 1))
Si est en minsculas
ElseIf iCodAscii >= 97 And iCodAscii <= 122 Then
oCelda.Value = UCase(oCelda)
Else
MsgBox "El ltimo carcter de la celda: " _
& oCelda.Address & " no es una letra"
End If
End If
Next
End Sub

2.InstruccinSelectCase

SelectCase

Ejecutaunasecuenciadeinstruccionesespecficasenfuncindelvalordeunaexpresin.

Select Case <ExpresinTest>


Case <ListaExpresiones>
<instrucciones>
Case <ListaExpresiones>
<instrucciones>
...
...
Case Else

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
<instrucciones>
End Select

<listaExpresiones>puedetomarunadelassiguientesformas:

l valor(ejemplo:Case 10)

l listadevalores(ejemplo:Case 1, 5, 10)

l rangodevalores(ejemplo:Case 1 To 5)

l expresincondicional(ejemplo:Case Is >= 5)

Ejemplo

Llamadaaunprocedimientoquedeterminalafrmuladeclculodeltotalenfuncindelacantidad,delprecioydelflete.

Private Sub Calc_Total()


Llama a la funcin Total usando como parmetros
las celdas Cant, Precio y Flete
Range("D2") = Total(Range("A2"), Range("B2"), Range("C2"))
End Sub

La funcin Total devuelve una frmula de Excel. El flete es gratuito a partir de dos unidades pedidas el porcentaje de
descuentotambindependedelacantidadpedida.

Function Total(oCant As Range, oPrecio As Range, oFlete As Range) _


As String

Determinacin de la frmula de clculo del total


en funcin de la cantidad ordenada
Select Case oCant
Case 1
Total = "=" & oPrecio.Address & "+" & oFlete.Address
Case 2 To 10
Total = "=" & oCant.Address & "*" & oPrecio.Address
Case 11 To 100
Total = "=" & oCant.Address & "*" & oPrecio.Address & "* 0.95"
Case 101 To 1000
Total = "=" & oCant.Address & "*" & oPrecio.Address & "* 0.9"
Case Else
Total = "Error en la cantidad"
End Select
End Function

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Estructurasenciclo

Lasestructurasenciclo(orepetitivas)permitenrepetirlaejecucindeunconjuntodeinstrucciones.

Sedistinguenvariostiposdeestructurasenciclo:

l Do...Loop

l While...Wend

l For...Next

l ForEach...Next

Do...LoopyWhile...Wendrepitenlasoperacionesenfuncindeunaciertacondicin,mientrasqueFor...Nextrepite
lasoperacionesunacantidaddevecesdeterminadaporuncontador.

ForEach...Nextpermiterecorrerloselementosdeunacoleccin.

1.InstruccinDo...Loop

Ejecutaunbloquedeinstruccionesunnmeroindeterminadodeveces.

Sintaxis1

Lasinstruccionesseejecutan,mientrasquelacondicindevuelveelvalorTrue.

Do While <Condicin>
<Instrucciones>
Loop

Sintaxis2

Lasinstruccionesseejecutanunaprimeravezsincondiciny,luego,mientraslacondicindevuelvaTrue.

Do
<Instrucciones>
Loop While <Condicin>

Ejemplo

El siguiente cdigo solicita al usuario que escriba un nmero mientras que el valor introducido no sea numrico o superior a
100.

Sub Introducir_Numero ()
Dim vRespuesta as Variant
Do
vRespuesta = InputBox("Introduzca un nmero > 100")
Loop While (Not IsNumeric(vRespuesta) Or vRespuesta <= 100)
End Sub

Sintaxis3

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
LasinstruccionesseejecutanhastaquelacondicintomaelvalorTrue(mientrasquelacondicindevuelvaelvalor
False).

Do Until <Condicin>
<Instrucciones>
Loop

Sintaxis4

LasinstruccionesseejecutanunaprimeravezsincondicinyluegohastaquelacondicindevuelvaelvalorTrue.

Do
<Instrucciones>
Loop Until <Condicin>

Ejemplo

Elsiguientecdigosolicitaalusuarioqueescribaunnmerohastaqueelvalorintroducidoseanumricoymayorque100.

Sub Introducir_Numero()
Dim vResponse as Variant
Do
vResponse = InputBox("Introduzca un nmero > 100")
Loop Until (IsNumeric(vResponse) And vResponse > 100)
End Sub

2.InstruccinWhile...Wend

Ejecutaunaseriedeinstruccionesenunciclomientrassecumplelacondicinespecificada.

Sintaxis

While <condicin>
<instrucciones>
Wend

Ejemplo

Sub Introducir_Precio()
Pide la introduccin de un precio mientras que
sea vaco o incorrecto
While IsEmpty(Range("C9")) Or Not IsNumeric(Range("C9"))
Range("C9") = InputBox("Introduzca el precio del producto")
Wend
End Sub

3.InstruccinFor...Next

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Ejecutaunbloquedeinstruccionessegnelvalordeuncontador.

For <contador>=<inicio> To <fin> [Step <incremento>]


<instrucciones>
Next

Ejemplo

El siguiente cdigo muestra un procedimiento que inserta los totales trimestrales en una matriz de resultados mensuales
adems,elprocedimientoeliminalostotalessiyaloshaba.

Sub Totales_Trimestrales()
Dim iTrim As Integer
Dim i As Integer
Dim oCelda as Range
Inserta los totales trimestrales cada 3 meses,
los pone en negrita con un borde
iTrim = 1
For i = 5 To 17 Step 4
If Left(Cells(2, i), 4) <> "Trim" Then
Cells(2, i).EntireColumn.Insert
Cells(2, i) = "Trim. " & iTrim
iTrim = iTrim + 1
Range(Cells(3, i), Cells(11, i)).Select
Selection.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
Range(Cells(2, i), Cells(11, i)).Font.Bold = True
For Each oCelda In Range(Cells(2, i), Cells(11, i))
oCelda.BorderAround ColorIndex:=1, Weight:=xlThin
Next oCelda
End If
Range("A1").Activate
Next
End Sub
________________________________________________________________
Sub Suprime_Totales_Trimestrales()
Dim i As Integer

Suprime los totales trimestrales si ya los haba


For i = 5 To 17
If Left(Cells(2, i), 4) = "Trim" Then
Cells(2, i).EntireColumn.Delete
End If
Next i
End Sub

Este procedimiento muestra en la hoja de clculo "Colores" los diferentes colores de relleno y el valor de la propiedad
ColorIndexcorrespondiente.

Sub Muestra_Colores()
Dim i As Integer
With Sheets("Colores")
For i = 1 To 56

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Cells(i, 1).Interior.ColorIndex = i
Cells(i, 2) = i
Next i
End With
End Sub

4.InstruccinForEach...Next

Ejecutaunbloquedeinstruccionesparacadaelementodeunacoleccindeobjetos odeunamatriz.

For Each <elemento> In <Grupo>


<Instrucciones>
Next <elemento>

Ejemplo

Esteprocedimientoaplicauncolordeletraalasceldasenfuncindesucontenido.

Sub Colores_Celda()
Dim oZonaaModificar As Range
Dim oCelda As Range

Aplica un color en funcin del valor de la celda


Set oZonaaModificar = Range("B3:Q11")
For Each Celda In oZonaaModificar
Select Case oCelda
Case Is < 1000
oCelda.Font.Color = RGB(150, 150, 250)
Case Is < 5000
oCelda.Font.Color = RGB(90, 100, 250)
Case Is < 10000
oCelda.Font.Color = RGB(10, 20, 250)
Case Is < 20000
oCelda.Font.Color = RGB(5, 10, 175)
Case Else
oCelda.Font.Color = RGB(5, 5, 100)
End Select
Next
End Sub

Ejecucindevariasaccionessobreunobjeto

With objeto
<Instrucciones>
End With

Ejemplo

Sub Paginacion()

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Define la paginacin de la hoja activa
Redimensiona las columnas y procede con la impresin
With ActiveSheet
With .PageSetup
.Orientation = xlLandscape
.LeftMargin = Application.InchesToPoints(0.5)
.RightMargin = Application.InchesToPoints(0.5)
.TopMargin = Application.InchesToPoints(0.5)
.BottomMargin = Application.InchesToPoints(0.5)
.LeftHeader = ""
.CenterHeader = "&A"
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = "Page &P"
.RightFooter = ""
End With
.Columns("A:Q").EntireColumn.AutoFit
.PrintOut
End With
End Sub

5.Salirdelasestructurasdecontrol

La instruccin Exit For permite salir directamente de un ciclo For o For Each, mientras que Exit Do sale
directamentedeuncicloDo.

Ejemplo

Sub Introducir_Fecha()
Dim vValor as Variant
Fuerza la introduccin de una fecha en la celda A1
Si no se introduce ningn valor: se sale del ciclo
Range("A1") = ""
Do While Not IsDate(Range("A1"))
strVal = InputBox("Escriba una fecha")
If vVal <> "" Then
If IsDate(vVal) Then Range("A1") = vVal
Else
Exit Do
End If
Loop
End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
Operadores

Losoperadorespermitenrealizaroperacionesaritmticasconvariablesoconstantes,compararvariablesentreellas,
evaluarvariascondiciones,etc.

Sedistinguenvariostiposdeoperadores:

l Operadoresaritmticos.

l Operadoresdecomparacin.

l Operadoreslgicos.

l Operadordeconcatenacin.

El operador de asignacin es el signo = . El valor de la expresin situada a la derecha del signo igual se asigna a la
variablesituadaalaizquierdadelsigno(ejemplo:IntA=12,IntA=Intb*12).

1.Operadoresaritmticos

Permitenefectuarclculosaritmticosconvariablesoconstantes.

Operador Clculorealizado

+ Adicin

Sustraccin

/ Divisinconresultadodeunnmeroconcomaflotante

Mod Restodeladivisinentredosnmeros

\ Divisinconresultadoentero

* Multiplicacin

Potenciacin

2.Operadoresdecomparacin

Comparandosvaloresodoscadenasdecaracteres.

Operador Clculorealizado

< Menorque

<= Menoroigualque

> Mayorque

>= Mayoroigualque

= Iguala

<> Distintode

LainstruccinOptionCompareutilizadaaniveldemdulopermitedeclararelmtododecomparacinpordefecto
queconvieneusarenlacomparacindecadenas.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Puedetomarunodeestostresvaloresposibles:

l La opcinCompare Binary(opcinpordefecto)realizalacomparacindecadenasbasadaenelordenderivadode
larepresentacinbinariainternadeloscaracteres:A<B<E<Z<a<b<e<z<<<<<...

l Laopcin CompareTextrealizalacomparacindecadenassindistinguirmaysculasdeminsculas:(A=a)<(=)
<(B=b)<(E=e)<(=)<(Z=z)<(=)...

l La opcin Compare Database realiza la comparacin de cadenas basada en el orden determinado por el
identificadordeparmetrosregionalesdelabasededatosenlaqueserealizalacomparacindecadenas.

3.Operadoreslgicos

Permitenevaluarsimultneamentedos(oms)valoresbooleanosoexpresionesquedevuelvenestetipodevalor.
GeneralmenteseusanconlainstruccinIf.

Operador Clculorealizado

AND SitodaslasexpresionestienenelvalorTrue,elresultadoesTrue.Siunadelasexpresiones
tieneelvalorFalse,elresultadoesFalse.

OR SiporlomenosunadelasexpresionestieneelvalorTrue,elresultadoesTrue(o
inclusivo).

XOR SiunaysolounadelasexpresionestieneelvalorTrue,elresultadoesTrue(oexclusivo).

NOT Devuelveelcontrariodelaexpresin.

Eqv DevuelveTruesilasdosexpresionessonidnticas.

Ejemplo

(A>=1) AND (A=<9) devuelve True si A est comprendido entre 1 y 9,


NOT (A >= 10) devuelve True si A es estrictamente menor que 10,
(A>0) OR (B>0) OR (C>0) devuelve True si al menos uno de los
valores es positivo.

4.Operadordeconcatenacin

Eloperadordeconcatenacineselsigno&.Enganchacadenasdecaracteres,valoresyexpresiones.

Ejemplo

Concatenacindelapellidoyelnombre.

SApeNom = sApellido & " " & sNombre

5.Prioridaddelosoperadores

Cuandohayvariosoperadoresenunamismaexpresin,cadaunodeellosseevalaenunordenpredeterminado,
llamadoprioridaddelosoperadores.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Losoperadoresseevalanenelsiguienteorden:operadoresaritmticos,operadoresdecomparacin,operadores
lgicos.

Los operadores de comparacin tienen la misma prioridad es decir, son evaluados por orden de aparicin, de
izquierdaaderecha.

Losoperadoresaritmticosylgicosseevalanenelsiguienteordendeprioridad:

Aritmtico Lgico

Not

*,/,\ And

Mod O r

+, Xor

Eqv

Elusodeparntesispermitemodificarlaprioridadparaqueunelementodeunaexpresinseaevaluadoantesque
losotros.Lasoperacionesencerradasentreparntesissiempreseevalanantesquelasotras.

Ejemplo

La expresin "3 + 4 * 5" da como resultado 23.


La multiplicacin (4 * 5) se efecta antes que la adicin ( + 3)
La expresin "(3 + 4) * 5" devuelve 35. La adicin se efecta con
prioridad.

Seaconsejausarparntesisparamejorarlalegibilidaddelcdigo.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Reglasdeescrituradelcdigo

1.Comentarios

LoscomentariospermitendocumentarelcdigoVBAparahacerlomslegible.

REM comentario

comentario

Alvalidarlalneadecomentario,estasemuestra,pordefecto,enverde.

2.Carcterdecontinuacin

UnainstruccinVBApuedeescribirseenmuchaslneasusandounguinbajo"_"precedidodeunespacio.

Ejemplo

Pide la introduccin de un precio en tanto que


est vaco o sea incorrecto
Dim vPrecio as Variant
Do While IsEmpty(vPrecio) Or Not IsNumeric(vPrecio) _
Or vPrecio < 50 Or vPrecio > 500
vPrecio = InputBox("Escribir un importe comprendido entre " _
& "50 y 500 ")
Loop

3.Sangras

Lassangras(otabulaciones)permitenunamayorlegibilidaddelcdigo.Esespecialmenteimportanteusarlasenlas
estructurasdecontrol(sobretodosihayvariasinstruccionesIfanidadas)ylasestructurasdedecisin.

Paragenerarlassangras,uselatecla[Tab].

Pararetrocederalatabulacinprecedente,uselasteclas[Mays][Tab].

Paramodificareltamaodelatabulacin(cuatroespaciospordefecto),seleccioneOpcionesenelmen
Herramientas,hagaclicenlapestaaEditorymodifiqueelvalorAnchodetabulacin.

4.Nombresdelosprocedimientos,variablesyconstantes

Losnombresdelosprocedimientos,constantes,variablesyargumentosdebenrespetarlassiguientesreglas:

l Elprimercarcterdebeserunaletra.

l Nosediferencianminsculasdemaysculas(seaceptanletrasacentuadas),aunqueserespetanunasyotras.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
l NoseusannombresreservadosenVisualBasicopalabrasclaveconrestricciones.

l Noseusanelpunto,elespacionilossignos!,$,#y@.

l Unnombrenopuedetenermsde255caracteres.

l ParalosprocedimientosFunction,noseusaunnombreigualaunareferenciadecelda.

l Noseindicanvariasveceslosmismosnombresdevariablesydeconstantesenunmismoniveldealcance.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Presentacin

VBAExcelesunlenguajedeprogramacinorientadoaobjetos,sibiennodisponedetodaslasfuncionalidadesde
loslenguajesdeestetipo.

LamayoradeloselementosquemanejaExcelsonobjetos:loslibros,lashojasdeclculo,losrangosdeceldas,las
celdas,etc.

Los objetos se organizan segn un modelo jerrquico: ciertos objetos contienen otros objetos que pueden, a su
vez,contenerotros.Estosobjetossellamancontenedoruobjetosparent.Porejemplo,elobjetoApplicationesun
contenedor de objetos Workbook (libros abiertos en Excel), que a su vez contiene objetos Worksheet (hojas de
clculodeunlibro).ElcontenedorprincipaleselobjetoApplication.

Unconjuntodeobjetosdelmismotipoconstituyeunacoleccin(coleccinWorkbooks:conjuntodelibrosabiertosen
ExcelcoleccinWorksheets:conjuntodehojasdeclculodeunlibro).

Unobjetodisponedeunconjuntodecaractersticasllamadaspropiedades(porejemplo,paraelobjetoApplication:
lapropiedad UserNamerepresentaelnombredelusuario,lapropiedadVersiondevuelveelnmerodeversinde
Microsoft Excel) y de comportamientos o acciones llamados mtodos (por ejemplo, para el objeto Application, el
mtodoFindFilemuestraelcuadrodedilogoAbrirelmtodoQuitsaledeExcel,etc.).

Aunobjetolesucedeneventosprovocadosporelusuario(porejemplo:laaperturadeunlibro,unclicenunbotn
decomando,elcambiodelaceldaactiva,etc.)oporelsistema.

Las clases son modelos que permiten crear objetos de un mismo tipo. Los objetos de una misma clase heredan
sistemticamentetodoslosmtodos,propiedadesyeventosdesuclase.EsposiblecrearclasesdeobjetosconVBA
Excelusandomdulosdeclase.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
ElmodelodeobjetodeExcel

1.Presentacin

2.Principalesobjetosycolecciones

Objetos

Application

ObjetoquehacereferenciaalaaplicacindeMicrosoftExcelactiva.

AutoCorrect

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
ObjetoquerepresentalosatributosdeautocorreccindeMicrosoftExcel.

AutoRecover

Objetoquerepresentalasopcionesderecuperacinautomticadeunlibro.Estasmacrosson
accesiblesdesdeExcelapartirdelapestaaGuardardelmenHerramientasOpciones.

DefaultWebOptions

ObjetoquedevuelvelosatributosusadosporExcelparalaaperturaograbacindeunapginaweb.

ErrorCheckingOptions

ObjetoquerepresentalasopcionesdecomprobacindeerroresdelaaplicacindeExcel.

LanguageSettings

ObjetoquecontieneinformacinsobrelaconfiguracindeidiomadeExcel.

Speech

Objetoquecontienelosmtodosypropiedadesqueserelacionanconlasfuncionesdesntesisde
voz.

SpellingOptions

Objetoquerepresentalasopcionesdeortografadelaaplicacin.

VBE

ObjetoquerepresentaalEditordeVisualBasic.

WorkSheetFunction

ObjetoquecontienetodaslasfuncionesdisponiblesenExcel.Esteobjetopermiteobtenerelresultado
deunafuncinaplicadaaunrangodeceldas.Ejemplo:Prom=Application.WorksheetFunction.Average
(Selection)

Colecciones

AddIns

Coleccinquecontienetodosloscomplementos(objetosAddIn).

COMAddIns

RepresentaloscomplementosCOMactualmenteinstaladosenMicrosoftExcel.

CommandBars

Coleccindebarrasdeherramientasdelaaplicacinactiva(objetosCommandBar).

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Dialogs

ColeccindeloscuadrosdedilogointegradosdeExcel.

FileExportConverters

ColeccindelosconvertidoresdearchivosparaguardarlibrosdeExcel.

Names

Coleccindetodoslosnombres(celdasyrangosconnombre)dellibroactivo.

ODBCErrors

ColeccindetodosloserroresODBCgeneradosporlaltimaoperacinefectuadaenuninformede
tabladinmicaoenunatabladeconsulta.

OLEDBErrors

ColeccinquerepresentalainformacinrelacionadaconelerrordevueltoporlaconsultaOLE DBms
reciente.

RecentFiles

Coleccindelosltimosarchivosusados.

SmartArtColors

ColeccindelosestilosdecoloresSmartArtcargadosactualmenteenlaaplicacin.

SmartArtLayouts

Coleccindelosdiagramasdediseocargadosactualmenteenlaaplicacin.

SmartArtQuickStyles

ColeccindelosestilosrpidosdeSmartArtcargadosactualmenteenlaaplicacin.

Watches

Coleccindeobjetosquerepresentalosrangosdeinspeccincuandolahojadeclculoserecalcula.

Windows

ColeccindetodaslasventanasdelaaplicacindeExcelodeunlibro.

Workbooks

Coleccindeloslibros(objetoWorkbook)abiertos.

Worksheets

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Coleccindelashojasdeclculo(objetoWorksheet)deunlibro.

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Principiosdeusodelosobjetosylascolecciones

1.Propiedades

Las propiedades sirven para describir un objeto. Ciertas propiedades son de solo lectura y no se pueden, por lo
tanto,modificarconelcdigoVBA.

Sintaxis

{<objeto> | <variable objeto>}.<propiedad>

Ejemplo

Modificacin del puntero del ratn


Application.Cursor = xlWait

Muestra la versin de la aplicacin de Excel activa


Esta propiedad es de solo lectura
MsgBox Application.Version
Application.Cursor = xlDefault

2.Propiedadesquerepresentanobjetos

Los objetos globales y los objetos definidos en el cdigo a travs de clases manejadas por VBA tienen ciertas
propiedadescuyovalorseactualizaautomticamenteporelsistema.

Estaspropiedadesespecficaspermitenaccederdirectamenteaciertosobjetos:ventanaactiva,libroactivo,celdas
delahojaactiva,etc.Lasiguientetablamuestralaspropiedadesespecficasmsusadas.

Propiedad ObjetoParent Objetodevuelto

ActiveCell ApplicationWindow ObjetoRangequerepresentalaprimeracelda


activadelaventanaactivaoespecificada.

ActiveChart ApplicationWindowWorkbook ObjetoChartquerepresentaelgrficoactivo.

ActiveControl FramePageUserForm ObjetoControlquerepresentaelcontrol


(ActiveX)activo.

ActivePane Window ObjetoPanequerepresentaelpanelactivode


laventanaactiva.

ActiveSheet ApplicationWindowWorkbook ObjetoWorksheetquerepresentalahojaactiva


dellibroactivoodellibroespecificado.

ActiveWindow Application ObjetoWindowquerepresentalaventana


activa.

ActiveWorkBook Application ObjetoWorkbookquerepresentaellibrodela


ventanaactiva.

Parent Objetosmltiples Devuelveelobjetocontenedor.

Selection ApplicationWindows ObjetoRangequerepresentalaceldaolas


celdasseleccionadas.

ThisCell Application Devuelvelaceldaporlaquelafuncindefinida

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
porelusuarioesllamadacomoobjetoRange.

ThisWorkbook Application ObjetoWorkbookquerepresentaellibrosobre


elqueseejecutaelcdigodelamacroactual.

Las propiedades especficas que devuelven un objeto Range (Cells, Offset, Columns, Rows, etc.) se explican en
detalleenelcaptuloObjetosdeExcel.

3.Mtodos

Losmtodospermitenrealizaraccionessobrelosobjetos.

Sonsimilaresalosprocedimientos:

l Puedenusaronoargumentos.

l Ciertosmtodospuedendevolverunvalor,comolosprocedimientos Function,yotrosno,comolosprocedimientos
Sub.

Sintaxisdemtodoquenodevuelveunvalor

{<objeto> | <variable objeto>}.<mtodo> [<Lista de argumentos>]

Ejemplo

Activa la segunda hoja de clculo del libro activo


Application.Goto ActiveWorkbook.Worksheets(2).Range("A1")
Selecciona un rango de celdas
Range("A1:C12").Select
Borra las celdas seleccionadas
Selection.Clear
Guarda el libro activo con un nuevo nombre
ActiveWorkbook.SaveAs "C:\presupuesto\presupuesto2.xlsm"

Como en el caso de los procedimientos, los distintos argumentos de un mtodo se separan por comas. Si un
argumentoopcionalnosedefineexplcitamente,elmtodousarunvalorpordefecto.

Sintaxisdemtodoquedevuelveunvalor

<variable> = {<objeto> | <variable objeto>}.<mtodo>


[<Lista de argumentos>]

Ejemplo

Muestra el cuadro de dilogo Abrir


Dim strFileName as String

strFileName = Application.GetOpenFilename _
(FileFilter:="Libros Excel (*.xlsm), *.xlsm", _

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Title:="Seleccione el archivo que desea abrir")
Si selecciona un archivo, lo abre
If strFileName <> False Then
Workbooks.Open strFileName
End If

4.Eventos

Uneventoesuna accinespecficaqueserealizasobreunciertoobjeto.Microsoft Excelrespondeavariostipos


de eventos: apertura o cierre de un libro, seleccin de celdas, agregar una hoja de clculo, etc. Los eventos
resultangeneralmentedeunaaccindelusuario.

Elusodeunprocedimientoasociadoaeventoslepermitedefinirsupropiocdigocomorespuestaauneventoque
seproduceenunlibro,unahojaounformulario.

Ejemplo

Cuandoseagregaunanuevahojadeclculoallibro,apareceunmensajeparaelusuario.

Private Sub Workbook_NewSheet(ByVal Sh As Object)

MsgBox "La hoja " & Sh.Name & Chr(13) & _


"se agreg al libro " & _
ActiveWorkbook.Name & Chr(13) & _
"La cantidad de hojas del libro ahora es " & _
ActiveWorkbook.Worksheets.Count

End Sub

La administracin de eventos es uno de los aspectos ms importantes en el desarrollo de aplicaciones de Excel el


captuloAdministracindeeventosestntegramentededicadoaestetema.

5.Colecciones

Parahacerreferenciaaunobjetodeunacoleccin,puedeusarsecualquieradelassiguientessintaxis:

NomColeccin!NomObjeto
NomColeccin![NomObjeto]
NomColeccin("NomObjeto")

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
NomColeccin(var)

dondevarrepresentaunavariabledetipoStringquecontieneelnombredelobjeto.

NomColeccin(index)

dondeindexrepresentaelnmerodelndicedelobjetoenlacoleccin.

Paraasegurarunamejorlegibilidaddelcdigo,seaconsejausarsiemprelamismasintaxis.Lassintaxisterceray
quintaserecomiendanporquepermitenactivar elasistentedeleditordecdigo.Adems,laquintasintaxisesms
tilpararecorrerlosobjetosdeunacoleccin.

Atencin: el primer elemento de la mayora de las colecciones lleva el ndice 1. Use los ndices solamente para
recorrerunacoleccin.Evite,porejemplo,usarActiveWorkbook.ActiveSheet(3)parahacerreferenciaaunahojade
clculodellibroactivo,yaqueelndicedelahojapuedecambiar(simuevelashojasosieliminaalguna).

Ejemplo

El siguiente cdigo activa la hoja de clculo Hoja1 del libro Presupuesto.xlsx. El cdigo usa las colecciones Workbooks y
Worksheets.

Workbooks("Presupuesto.xlsm").Worksheets("Hoja1").Activate

Workbooks![Presupuesto.xlsm].Worksheets!Hoja1.Activate

Workbooks![Presupuesto.xlsm].Worksheets![Hoja1].Activate

Recorrerunacoleccin:estecdigocambiaelnombredelashojasdeclculodellibroactivo.

Dim i As Integer
For i = 1 To ActiveWorkbook.Worksheets.Count
ActiveWorkbook.Worksheets(i).Name = "Presupuesto N " & i
Next i

UnacoleccintambinsepuederecorrerconlainstruccinForEachNext.

Dim oHoja As Worksheet


For Each oHoja In ActiveWorkbook.Worksheets
oHoja.Name = "Presupuesto N " & oHoja.Index
Next oHoja

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
6.Redaccinautomticadeinstrucciones

EleditorVBAincluyeunatecnologaqueloayudaenelempleodeobjetos.Cuandoustedescribeelnombredeun
objeto o de una coleccin reconocida por VBA seguido de un punto, se despliega una lista con los mtodos y las
propiedades del objeto. Si selecciona un mtodo, el asistente lo ayuda a indicar los argumentos que le
corresponden.

Ejemplo

EscribaelnombredelacoleccinWorkbooksseguidodeunpuntoaparecelasiguientelistadesplegable.


Elicono representalosmtodos,elicono representalaspropiedadesylascolecciones.

Puede hacer que la lista avance escribiendo las primeras letras del mtodo, propiedad o coleccin
buscadaousandolabarradedesplazamiento.Paraseleccionarunelementodelalista,hagadobleclic
enl.

Escriba un punto si acaba de seleccionar un objeto para ver la lista de sus propiedades y mtodos. Si
seleccionaunmtodo,escribaunespacioparaobtener lalistadeconfiguracindelmtodo.

Paraseguiresteejemplo,seleccioneelmtodoOpenyluegoescribaunespacio.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
Aparecer una lista con los argumentos del mtodo. Los argumentos opcionales aparecen entre corchetes. El
argumentoactualseverennegrita.Siparaunargumentodadoexisteunalistadevalorespredefinidos,aparecer
unalistadesplegableconlasconstantescorrespondientes.

Tambinpuedeactivarlalistadepropiedadesymtodosdelasiguientemanera:

Ubiqueelcursordetrsdelpuntosituadodespusdelmtodo.

Hagaclicenelbotnderechodelratnparahaceraparecerelmencontextual.

SeleccionelaopcinListadepropiedadesymtodos.

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Instruccionesusadasconlosobjetos

1.LainstruccinWith

LainstruccinWithpermiteaccedervariasvecesalmismoobjeto,indicndolounasolavez.

Ofrecevariasventajas:

l Optimizacindeltiempodeejecucindelcdigo.

l Ganartiempoenlaescrituradelcdigo.

l Mejorlegibilidaddelcdigo.

Sintaxis

With <Objeto>
<cdigo que usa los mtodos y propiedades>
<que se relacionan con el objeto>
End With

Ejemplo

Agregarymodificarunahojadeclculo.

With ActiveWorkbook
Crea una hoja despus de la ltima hoja del libro activo
.Worksheets.Add , .Worksheets(.Worksheets.Count)
Modifica el nombre de la nueva hoja y el valor de la celda A1
With .ActiveSheet
.Name = "Sntesis"
.Range("A1") = "Revisin del Presupuesto"
End With
End With

2.LainstruccinForEach...Next

LainstruccinForEach...Nextpermiterecorrerlosobjetosdeunacoleccinodeunatabla.

Sintaxis

For Each <elemento > In <grupo>


<secuencia de instrucciones>
[Exit For]
<secuencia de instrucciones>
Next <elemento>

Ejemplo

ModificacindelcontenidodelaceldaA1ydelacantidaddehojasdellibroactivo.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-

Sub NumPresupuesto()
Dim Hoja As Worksheet

For Each Hoja In ActiveWorkbook.Worksheets


Hoja.Cells(1, 1) = "PRESUPUESTO N " & Hoja.Index
Hoja.Name = "Presupuesto " & Hoja.Index
Next Hoja
End Sub

3.LainstruccinIfTypeOf

LainstruccinIfTypeOfpermitecomprobareltipodeunobjeto.

Sintaxis

If TypeOf <Objeto> Is <TipoObjeto> Then


<cdigo que usa los mtodos y propiedades>
<relacionados con el objeto>
End If

Ejemplo

If TypeOf obj.Parent Is Worksheet Then_...

4.LainstruccinSet

LainstruccinSetpermiteatribuirlareferenciadeunobjetoaunavariable,llamadavariableobjeto.

Esta instruccin puede usarse paracrear un nuevo objeto(usandoenesecasounmtodoquepermitacrearel


objeto)oparahacerreferenciaaunobjetoyaexistente.

Sintaxis

Set <Objeto> = [New] <expresin objeto>


O Set <Objeto> = Nothing

objeto Es una variable de tipo String, que contiene el nombre del objeto que es
necesariocrear.

LapalabraclaveNew Permitecrearunanuevainstanciadelaclase.Silavariable<Objeto>contiene
unareferenciaaunobjeto,estaltimaseabandona.

<expresin objeto> Puedeserelnombredeunobjetoodeunavariableobjetodelmismotipo.Es


decir,unafuncinomtodoquedevuelvaunobjetodelmismotipo.

Nothing Reinicializa la variable objeto y libera el conjunto de recursos del sistema y la


memoriaasociadasalobjeto.

Ejemplo

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Crearunlibrocondoshojasyasignarleunnombreacadaunadeellas.

Sub Crear_Libro()
Dim oLibro As Workbook
Dim i As Integer
Crear un nuevo libro
Set oLibro = Application.Workbooks.Add
Eliminar las hojas de la tercera hasta la ltima
With oLibro
Application.DisplayAlerts = False
For i = .Worksheets.Count To 3 Step -1
.Worksheets(i).Delete
Next i
Application.DisplayAlerts = True
Asignar los nombres a las hojas 1 y 2
.Worksheets(1).Name = "Ventas Ao 2013"
.Worksheets(2).Name = "Ventas Ao 2014"
.SaveAs ThisWorkbook.Path & "\Histrico"
End With

End Sub

Modificarunahojaenunlibroabierto.

Dim oLibro As Workbook


Dim oHoja As Worksheet

Set oLibro = Application.Workbooks![Histrico.xlsx]


Set oHoja = oLibro.Worksheets![Ventas Ao 2014]
With oHoja
.Name = "Ventas 2014"
.Range("A2") = "Ventas del ao 2014"
End With
Set oHoja = Nothing

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
ElExaminadordeobjetos

1.Presentacin

DadalacantidadydiversidaddeobjetosdeExcel,estilpoderencontrarlainformacinqueserelacionaconlos
distintosobjetos.

El Examinador de objetos muestra la informacin relativa a los objetos, mtodos, propiedades, eventos y
constantes.

PuedeaccederalExaminadordeobjetosdedistintasmaneras:


VerExaminadordeobjetoso (barradeherramientasEstndar)o[F2].

1.Listadebibliotecasactualmentecargada.

2.Textobuscado:objeto,propiedad,coleccin,evento,mtodo,etc.

3. Resultados de la bsqueda: lista de las clases de objetos (objetos y colecciones) y de sus miembros (objeto,
coleccin, propiedad, evento o mtodo). La palabra buscada puede estar en la lista de clases o en la de sus
miembros.

4. Clases de objetos de la biblioteca: la clase de objeto seleccionada en la lista Resultados de la bsqueda


apareceremarcada.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
5.Propiedades(icono ),mtodos(icono ),eventos(icono )yconstantes(icono )serelacionanconla
clasedeobjetoseleccionadaoremarcadaenlalistadelaizquierda.

6.Detalledelelementoseleccionado.

2.BsquedaenelExaminadordeobjetos

ParahacerunabsquedaenelExaminadordeobjetos,procedadelasiguientemanera:

Indiquelapalabrabuscadaenlasegundalistadesplegable.

Hagaclicenelicono .SilalistaResultadosdelabsquedamuestramuchosrenglones,desplcese

hastaelqueleintereselaparteinferiordelaventanaseactualizar.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
ElobjetoApplication

El objeto Application representa la aplicacin de Microsoft Excel activa. Es el objeto por defecto y, por lo tanto,
normalmenteesopcional(ejemplo:VersionequivaleaApplication.Version).

Esteobjetocontiene:

l Las propiedades relativas al entorno de Excel (por ejemplo, las opciones de Excel) y a la presentacin de la
interfaz(punterodelratn,textodelabarradeestado,tamaoyestadodelaventanadelaaplicacin,etc.).

l HaydistintosmtodospararealizaraccionesenelentornodeExcel.

l Propiedades que devuelven objetos y colecciones de primer nivel (objetos y colecciones del modelo de objetos de
Excel,comoWorkbooksoCharts).

l Propiedadesespecficasquehacenreferenciadirectaaobjetos(comoActiveCell, ActiveSheetoActiveWindow).

LaspropiedadesquehacenreferenciaaobjetosseexplicanenelcaptuloLaprogramacindeobjetosenExcel.

1.PropiedadesquerepresentanlasopcionesdeExcel

Las principales opciones de Excel se pueden definir o devolver a partir de propiedades del objetoApplication. La
mayoradeestaspropiedadessondelecturayescritura.

ParaaccederalasopcionesdeExcelenlaversin2013,hagaclicenlapestaaArchivo yluegoenOpciones.

a.OpcionesdelacategoraGeneral

N. Propiedades Valoresdevueltos

1 ShowSelectionFloaties Booleano

2 ShowQuickAnalysis Booleano

3 EnableLivePreview Booleano

4 StandardFont Enterolargo

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
5 StandardFontSize Enterolargo

6 SheetsInNewWorkbook Enterolargo

7 UserName Cadenadecaracteres

b.OpcionesdelacategoraFrmulas

Opcionesrelacionadasconelmododereclculo

N. Propiedades Valoresdevueltos

1 Calculation Constantes:
xlCalculationAutomatic
xlCalculationManual
xlCalculationSemiautomatic

2 CalculateBeforeSave Booleano

3 Iteration Booleano

4 MaxIterations Enterolargo

5 MaxChange Doble

Opcionesrelativasalasfrmulas

N. Propiedades Valoresdevueltos

6 ReferenceStyle Constantes:

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
xlA1
xlR1C1

7 DisplayFormulaAutoComplete Booleano

8 GenerateTableRefs Constantes:
xlGenerateTableRefStruct
xlGenerateTableRefA1

9 GenerateGetPivotData Booleano

Opcionesdecomprobacindeerrores

Las siguientes propiedades dependen de la propiedad ErrorCheckingOptions del objeto Application. Esta
propiedad devuelve un objeto ErrorCheckingOptions, que representa las opciones de comprobacin de
errores paraunaaplicacin.

N. Propiedades Valoresdevueltos

10 BackgroundChecking Booleano

11 IndicatorColorIndex ConstantexlColorIndex

12 EvaluateToError Booleano

13 InconsistentTableFormula Booleano

14 TextDate Booleano

15 NumberAsText Booleano

16 InconsistentFormula Booleano

17 GenerateTableRefs Booleano

18 UnlockedFormulaCells Booleano

19 EmptyCellReferences Booleano

20 ListDataValidation Booleano

c.OpcionesdelacategoraRevisin

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Opcionesderevisinortogrfica

Las siguientes propiedades dependen de la propiedad SpellingOptions del objeto Application. Esta propiedad
devuelveunobjetoSpellingOptions,querepresentalasopcionesderevisinortogrficaparaunaaplicacin.

N. Propiedades Valoresdevueltos

1 IgnoreCaps Booleano

2 IgnoreMixedDigits Booleano

3 IgnoreFileNames Booleano

4 SuggestMainOnly Booleano

5 UserDict String

6 SpanishModes ConstantexlSpanishModes

7 DictLang Enterolargo

d.OpcionesdelacategoraGuardar

N. Propiedades Valoresdevueltos

1 DefaultSaveFormat ConstantexlFileFormat

2 AutoRecover.Time Enterolargo

3 AutoRecover.Path Cadenadecaracteres

4 DefaultFilePath Cadenadecaracteres

5 EnableAutoRecover Booleano

Laopcin5seaplicaalibros(porejemplo,Application.ActiveWorkbook).

e.OpcionesdelacategoraAvanzadas

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
N. Propiedades Valoresdevueltos

1 MoveAfterReturn Booleano

2 MoveAfterReturnDirection Constantes:
xlDown
xlUp
xltoRight
xltoLeft

3 FixedDecimal Booleano

4 FixedDecimalPlaces Enterolargo

5 CellDragAndDrop Booleano

6 AlertBeforeOverwriting Booleano

7 EditDirectlyInCell Booleano

8 ExtendList Booleano

9 AutoPercentEntry Booleano

10 EnableAutoComplete Booleano

11 FlashFill Booleano

12 RollZoom Booleano

13 EnableLargeOperationAlert Booleano

14 LargeOperationCellThousandCount Enterolargo

15 UseSystemSeparators Booleano

16 DecimalSeparator Cadenadecaracteres

17 ThousandsSeparator Cadenadecaracteres

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
18 CursorMovement Constantes:
xlVisualCursor
xlLocgicalCursor

OpcionesdeCortar,CopiaryPegar

N. Propiedades Valoresdevueltos

19 DisplayPasteOptions Booleano

20 DisplayInsertOptions Booleano

21 CopyObjectsWithCells Booleano

Opcionesparagrficos

N. Propiedades Valoresdevueltos

1 HighQualityModeForGraphics Booleano

2 ShowChartTipNames Booleano

3 ShowChartTipValues Booleano

4 ChartDataPointTrack(objectApplication) Booleano

5 ChartDataPointTrack(objectWorkbook) Booleano

Opcionesdevisualizacin

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo

N. Propiedades Valoresdevueltos

6 RecentFiles.Maximum Enterolargo

7 DisplayFormulaBar Booleano

8 DisplayFunctionToolTips Booleano

9 DisplayCommentIndicator Constantes:
xlNoIndicator
xlIndicatorOnly
xlCommentAndIndicator

10 DefaultSheetDirection Constantes:
xlRTL(dederechaaizquierda)
xlLTR(deizquierdaaderecha)

Opcionesdevisualizacinparalibros

Las siguientes propiedades dependen de la propiedad ActiveWindow del objeto Application. Esta propiedad
devuelveunobjetoWindowquerepresentalaventanaactiva.

N. Propiedades Valoresdevueltos

1 DisplayHorizontalScrollBar Booleano

2 DisplayVerticalScrollBar Booleano

3 DisplayWorkbookTabs Booleano

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
4 AutoFilterDateGrouping Booleano

5 DisplayDrawingObjects Constantes:
xlDisplayShapes(todos)
xlHide(ninguno)
Estaopcinseaplicaalibros(objeto
Workbook).

Opcionesdevisualizacinparalashojasdeclculo

LassiguientespropiedadesdependendelapropiedadActiveWindowdelobjeto Application.

N. Propiedades Valoresdevueltos

6 DisplayHeadings Booleano

7 DisplayFormulas Booleano

8 DisplayPageBreaks Booleano

9 DisplayZeros Booleano

10 DisplayOutline Booleano

11 DisplayGridlines Booleano

12 GridlineColorIndex ConstantexlColorIndex

Opcionesrelacionadasconlasfrmulas

N. Propiedades Valoresdevueltos

13 MultiThreadedCalculation.Enabled Booleano

14 MultiThreadedCalculation.ThreadMode Constantes:
xlThreadModeAutomatic
xlThreadModeManual

15 MultiThreadedCalculation.ThreadCount Entero

- 8- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Opcionesrelacionadasconelclculoenloslibros

Lassiguientespropiedadesseaplicanaunlibro(objetoWorkbook).

N. Propiedades Valoresdevueltos

1 SaveLinkValues Booleano

2 PrecisionAsDisplayed Booleano

3 Date1904 Booleano

4 UpdateRemoteReferences Booleano

Opcionesgenerales

N. Propiedades Valoresdevueltos

5 EnableSound Booleano

6 IgnoreRemoteRequests Booleano

7 AskToUpdateLinks Booleano

8 WarnOnFunctionNameConflict Booleano

9 MapPaperSize Booleano

10 AltStartupPath Cadenadecaracteres

11 AsignalaspropiedadesdelosobjetosWebOptionsy
DefaultWebOptions

2.Propiedadesrelativasalapresentacindelaaplicacin

DisplayAlerts

Booleano.Muestra(True)uocultalosmensajes,sobretododealerta,cuandoseejecutaunamacro.

Height

Realdoble.Alturadelaventana.

Left

Realdoble.Distanciaentreelbordeizquierdodelapantallayelbordeizquierdodelaventanaprincipal
deMicrosoftExcel.

Top

Realdoble.Distanciaentreelbordesuperiordelapantallayelbordesuperiordelaventanaprincipal
deMicrosoftExcel.

Width

Realdoble.Distanciaentrelosbordesizquierdoyderechodelaventanadelaaplicacin.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 9-
Caption

Cadenadecaracteres.NombrequesemuestraenlabarradettulosdelaventanadeMicrosoftExcel.

Cursor

Constante.AspectodelpunterodelratnenExcel.

Constantes xlDefault Punteropordefecto.


xlIBeam PunteroenI.
xlNorthwestArrow FlechaNoroeste.
xlWait Relojdearena.

DisplayFullScreen

Booleano.IndicasiExcelfuncionaenmododepantallacompleta.

FormulaBarHeight

Enterolargo.Altura,ennmerodelneas,delabarradefrmulas.

ScreenUpdating

Booleano.Permitedesactivar(False)laactualizacindelapantalladurantelaejecucindelcdigoVBA.

ShowMenuFloaties

Booleano.Indicasilasminibarrasdeherramientasdebenaparecercuandoelusuariohaceclicenel
botnderechodelratnsobrelaventanadellibro.

StatusBar

Cadenadecaracteres.Textodelabarradeestado.

Visible

Booleano.Indicasilaventanaprincipaldelaaplicacinestvisible.

Ejemplo

El siguiente cdigo permite optimizar el tiempo de ejecucin de una macro (ej.: macro que modifica el contenido de un gran
nmerodeceldasdeExcel oquerealizaclculosenlasceldas).

Sub Macro_Optimizada()

Desactiva la actualizacin de la pantalla


Application.ScreenUpdating = False
Oculta los mensajes de alerta
Application.DisplayAlerts = False
Desactiva el clculo manual
Application.Calculation = xlCalculationManual

- 10 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Escribir aqu el cdigo de la macro
...
...

Actualizacin de la pantalla
Application.ScreenUpdating = True
Muestra mensajes de alerta
Application.DisplayAlerts = True
Activa el clculo automtico
Application.Calculation = xlCalculationAutomatic

End Sub

3.Propiedadesvarias

AutoFormatAsYouTypeReplaceHyperlinks

Booleano.IndicasiExcelconvierteenhipervnculoslasrutasdeInternetdeformaautomticaamedida
queselasescribe.

AutomationSecurity

Constante.MododeseguridadqueempleaMicrosoftExcelalabrirarchivosconmacros.

Constantes: msoAutomationSecurityByUI
msoAutomationSecurityForceDisable
msoAutomationSecurityLow

ActivePrinter

Cadenadecaracteres.Nombredelaimpresoraactiva.

CalculationInterruptKey

Constante.IndicalateclaquepuedeinterrumpirelreclculoenMicrosoftExcel.

Constantes: xlAnyKey
ptxlEscKey
xlNoKey

CalculationState

Constante.Indicaelestadodeclculodelaaplicacin,paraelreclculoencursoenMicrosoftExcel.

Constantes: xlCalculating
xlDone
xlPending

ClipboardFormats

Variant.Devuelveunamatrizquecontienelosformatosqueseencuentranactualmenteenel

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 11 -
Portapapeles.

CutCopyMode

Constante.DevuelveodefineelestadodelmodoCortaroCopiar.

Constantes: False: NoestenmodoCortarniCopiar.


xlCopy: EstenmodoCopiar.
xlCut: EstenmodoPegar.

DataEntryMode

Constante.Devuelveodefineelmododeentradadedatos.

Constantes: xlOn: Mododeentradadedatosactivado.


xlOff: Mododeentradadedatosdesactivado.
xlStrict: Mododeentradadedatosactivadoytecla[Escape]
desactivada.

EnableCancelKey

Constante.ControlalaformaenqueMicrosoftExceltratalamaneraenqueelusuariointerrumpeel
procedimientoencursopulsandolacombinacindeteclas[Ctrl][Pausa].

Constantes xlDisabled: Noseinterrumpe.

xlInterrupt: Interrumpeelprocedimientoencursoypasaal
modoDepurar.

xlErrorHandler: Encasodeinterrupcin,elprocedimientogeneraun
error(cdigodeerror18).

EnableEvents

Booleano.Permitedesactivar(False)loseventosdelobjetoApplication.

EnableMacroAnimations

Booleano.Indicasilasanimacionesdemacroestnactivadas.

FileValidation

Constante.DevuelveodefinelaformaenqueExcelvalidalosarchivosantesdeabrirlos.

Constantes: msoFileValidationDefault
msoFileValidationSkip

FileValidationPivot

Constante.DevuelveodefinelaformaenqueExcelvalidaelcontenidodelamemoriacachenun
informedetabladinmica.

Constantes: xlFileValidationPivotDefault: Validaelcontenidode


la memoriacachsegnla

- 12 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
configuracinpredeterminaday
delRegistro.

xlFileValidationPivotRun: Validaelcontenidodetodaslas
memoriascachs.

xlFileValidationPivotSkip: Novalidaelcontenidodelas
memoriacach

FindFormat

Devuelveodefineloscriteriosdebsquedaparaeltipodeformatodeceldaquehayqueencontrar.

GenerateGetPivotData

Booleano.IndicasiExcelpuedeobtenerdatosdeuninformedetabladinmica.

Hinstance

Enterolargo.DevuelveelcontroladordeinstanciadelainstanciaquellamaaMicrosoftExcel.

HinstancePtr

Variant.DevuelveuncontroladoralainstanciadeMicrosoftExcel2016representadaporelobjeto
Application.

Hwnd

Enterolargo.Devuelveunobjetoquedesignaelidentificadordeventanasuperiordelaventanade
MicrosoftExcel.

MapPaperSize

Booleano.Indicasilosdocumentosseajustanautomticamentecuandocambiaeltamaodepapel.

MouseAvailable

Booleano.Indicasihayunratndisponible.

OrganizationName

Cadenadecaracteres.Nombredelaempresa.

PreviousSelections

Variant.DevuelveunamatrizdeobjetosRangequecontienelosltimoscuatrorangosseleccionados.

PrintCommunication

Booleano.Indicasiestactivalacomunicacinconlaimpresora.

RecordRelative

Booleano.Truesilasmacrossegrabanusandoreferenciasrelativas.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 13 -
ReplaceFormat

Booleano.Estableceloscriteriosdesustitucinqueseempleanparasustituirformatosdecelda(seusa
conlapropiedadFindFormat).

SaveISO8601Dates

Booleano.IndicasiExcelguardalosvaloresdefechasyhorasenformatoISO8601.

TemplatesPath

Cadenadecaracteres.Rutadeaccesolocaldelacarpetadondeseguardanlasplantillas.

Version

Cadenadecaracteres.NmerodeversindelaaplicacindeExcelactiva.

4.MtodosdelobjetoApplication

a.Mtodosqueactansobrelasfrmulasylosclculos

Calculate

Fuerzaunclculodelosdatosparatodosloslibrosabiertos.

CalculateFull

Fuerzaunreclculocompletodelosdatosentodosloslibrosabiertos.

CalculateFullRebuild

Paratodosloslibrosabiertos,fuerzaunreclculocompletodelosdatosyvuelveaestablecerlas
dependencias.

CheckAbort

Detieneelreclculo.

ConvertFormula

Conviertelasreferenciasdeceldaenunafrmula,pasandodelestilodereferenciaA1alestiloR1C1.

Evaluate

Calculalaexpresinpasadacomoargumentoydevuelveelresultado.Laexpresin debe
corresponderaunafrmulaeningls.

b.Mtodosqueactansobrelasceldas

DoubleClick

- 14 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Equivaleahacerdobleclicsobrelaceldaactiva.

GoTo

SeleccionaunrangoounprocedimientoVisualBasicencualquierlibroyactiva esemismolibrosinolo
est.

Intersect

DevuelveunobjetoRangequerepresentalainterseccindedosomsrangos.

Union

Devuelvelauninde,almenos,dosrangos.

c.Mtodosqueactansobrelaslistaspersonalizadas

AddCustomList

Agregaunalistapersonalizada.

DeleteCustomList

Eliminaunalistapersonalizada.

GetCustomListContents

Devuelveunalistapersonalizada(matrizdecadenadecaracteres).

GetCustomListNum

Devuelveelnmerodelalistapersonalizadacorrespondienteaunamatrizdecadenadecaracteres.

d.Mtodosquemuestranloscuadrosdedilogo

LosmtodosGetOpenFileName,GetSaveAsFileNameeInputBoxseexplican enelcaptuloCuadrosdedilogo.

e.MtodosrelacionadosconlasaccionesenExcel

ExecuteExcel4Macro

EjecutaunafuncinmacroMicrosoftExcel4.0ydevuelvesuresultado.

OnKey

Ejecutaunprocedimientoespecificadocuandoelusuariopulsaunateclaounacombinacindeteclas.

OnRepeat

DefineelcomandodelmenRepetiryelnombredelprocedimientoejecutadoalseleccionarlaopcin

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 15 -
Repetir(menEdicin),despusdelaejecucindelprocedimientoquedefineestapropiedad.

OnTime

Programalaejecucindeunprocedimientoenunmomentodeterminado.

OnUndo

DefineeltextodelaopcindemenDeshaceryelnombredelprocedimientoejecutadocuandose
seleccionalaopcinDeshacer(menEdicin),despusdelaejecucindelprocedimientoquedefine
estapropiedad.

Quit

SaledeMicrosoftExcel.

Repeat

Repitelaltimaoperacinejecutadadesdelainterfazdeusuario.

SaveWorkspace

Guardaelreadetrabajoencurso.

SendKeys

Simulalapulsacindeteclasenlaaplicacinactiva.

Undo

Deshacelaltimaoperacinrealizadadesdelainterfazdeusuario.

RecordMacro

Grabaelcdigosiseactivaelgrabadordemacros.

Run

Ejecutaunprocedimientoollamaaunafuncin.

Wait

Haceunapausaenlaejecucindelamacrohastaunmomentoespecificado.DevuelveelvalorTrue
cuandollegalahoraespecificada.

f.Mtodosrelativosalcorreo

MailLogon

SeconectayabreunasesindecorreoMAPIodeMicrosoftExchange.SiMicrosoftMailnoseest
ejecutandoan,sedebeusarestemtodoparaestablecer unasesindecorreoquepermitaeluso
defuncionesdedistribucindedocumentosodemensajes.

- 16 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
MailLogoff

CierraunasesindecorreoMAPIabiertaporMicrosoftExcel.

g.Otrosmtodos

ActivateMicrosoftApp

ActivaunaaplicacindeMicrosoft.Siestayaestenejecucin,elmtodolaactiva.Sinoloest,el
mtodoabreunanuevainstanciadelaaplicacin(ejemplo:Application.ActivateMicrosoftAPP
xlMicrosoftWord).

CentimetersToPoints

Conviertecentmetrosenpuntos(unpuntoequivalea0,035 centmetros).

CheckingSpelling

CompruebalaortografadeunapalabraydevuelveTruesilapalabraseencontrenunodelos
diccionarios.

DisplayXMLSourcePane

AbreelpaneldetareasOfficeXMLSourceymuestralaasignacinXMLespecificada porelargumento
XmlMap.

Help

Muestrauntemadeayuda.

InchesToPoints

Conviertepulgadasenpuntos.

MacroOptions

OpcionesdelcuadrodedilogoOpcionesdemacro.

RegisterXLL

CargaunrecursodecdigoXLLyregistraautomticamentelasfuncionesycomandosquecontiene.

Volatile

Defineunafuncinpersonalizadacomovoltil.Unafuncinvoltilserecalculacadavezqueserealiza
unclculoencualquierceldadelahojadeclculo.

5.EjemplosdecdigosqueusanelobjetoApplication

a.ModificacindelainterfazdeExcel

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 17 -

Sub Interfaz()

With Application
Ttulo de la ventana de la aplicacin
.Caption = "Aplicacin " & .Name _
& " Versin " & .Version
Texto de la barra de estado
.StatusBar = "Ejemplos VBA Excel 2016"
Estilo de referencia L1C1
.ReferenceStyle = xlR1C1
Maximiza la ventana de la aplicacin
.WindowState = xlMaximized
Modifica la fuente por defecto
.StandardFont = "Verdana"
.StandardFontSize = 11
Oculta la barra de herramientas formato
Empleo de la coleccin CommandBars
.CommandBars(_Formatting").Visible = False
Muestra la barra de herramientas Visual Basic
.CommandBars("Visual Basic").Visible = True
End With

End Sub

b.Creacindeunalistapersonalizada

Dim i As Integer
Dim iNumList As Integer
Dim TabList As Variant

With Application
Selecciona las columnas 1, 3 y 5
.AddCustomList Array("Este", "Norte", "Oeste", "Sur", "Centro")
Copia el contenido de la lista en una matriz
NumList = .GetCustomListNum(Array("Este", "Norte", _
"Oeste", "Sur", "Centro"))
TabList = .GetCustomListContents(NumList)
Muestra el contenido de la lista en columnas
For i = LBound(TabList, 1) To UBound(TabList, 1)
Cells(i, 1) = TabList(i)
Next i
End With

c.Seleccindecolumnasnoconsecutivas

Dim oMultipleRange As Range


Crea un objeto Range formado por las columnas 1,3 y 5
Set oMultipleRange = Application.Union(Cells(1, 1), _
Cells(1, 3), Cells(1, 5)).EntireColumn

- 18 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Pone en negrita las celdas y las selecciona
oMultipleRange.Font.Bold = True
oMultipleRange.Select

d.Evaluacindelresultadodeunafrmula

Este ejemplo calcula el promedio y el valor mximo de un rango de celdas que contiene notas. Las notas se
comparan,acontinuacin,conestosvalores yseagregauncomentarioparacadauna.

Sub Evaluacion()
Dim dProm As Double
Dim dMax As Double
Dim oNotas As Name
Dim oCelda As Range
Selecciona del rango de celdas llamado Notas
Sheets("Evaluacion formula").Activate
Set oNotas = ThisWorkbook.Names("Notas")
oNotas.RefersToRange.Select
Elimina los comentarios
Selection.ClearComments
Calcula el promedio y el mximo
dProm = Evaluate("Average(notas)")
dMax = Evaluate("Max(notas)")
Muestra un comentario para cada nota
For Each oCelda In Selection
With oCelda
Select Case .Value
Case Is = dMax
.AddComment "El mejor"
Case Is < dProm
.AddComment "Por debajo del promedio"
Case Else
.AddComment "Igual o por encima del promedio"
End Select
End With
Next oCelda

End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 19 -
- 20 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
ObjetoWorkbook

EsteobjetorepresentaunlibrodeMicrosoftExcel.ElobjetoWorkbookesunmiembrodelacoleccinWorkbooks.

LassiguientespropiedadesdelobjetoApplicationdevuelvenunobjetoWorkbook:

l Workbooks

l ActiveWorkbook

l ThisWorkbook

1.Objetosycolecciones

Objetos

Theme

Objetoquerepresentaeltemaaplicadoallibro.

VBProject

ObjetoquerepresentaelproyectodeVisualBasicasociadoaunlibro.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
WebOptions

Opcionesrelativasalagrabacinyaperturadeunapginaweb.

Colecciones

BuiltinDocumentProperties

Coleccindelaspropiedades(autor,ttulo,objeto,palabrasclave,etc.)dellibro.

Charts

Coleccindelosgrficosdeunlibro.

CommandBars

ColeccindelasbarrasdecomandosdeExcel.

Connections

Coleccindelasconexionesaorgenesdedatosparaellibro.

CustomDocumentProperties

Coleccindelaspropiedadesdeunlibro(ttulo,autor,comentarios,etc.).

CustomViews

Coleccindelasvistaspersonalizadasdeunlibro.

Names

Coleccindelosrangosconnombredeunlibro.

PivotTables

Coleccindetablasdinmicascontenidasenunlibro.

PublishObjects

Coleccindeloselementosdeunlibrograbadocomopginawebyquesepuedenactualizar.

SlicerCaches

ColeccindelosobjetosSlicerCachesasociadosaunlibro.

Styles

Coleccindelosestilosdeunlibro.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
TableStyles

Coleccindelosdistintosestilosaplicablesaunatabla.

Windows

ColeccindelasventanasdelaaplicacindeExcel.

Worksheets

Coleccindelashojasdeclculodeunlibro.

XmlMaps

ColeccindelosobjetosXmlMapquesehanagregadoaunlibro.Estosobjetos seusanpara
administrarlarelacinentrelosrangosdelistayloselementosdeunesquemaXML.

XmlNamespaces

ColeccindelosespaciosdenombresXMLcontenidosenellibroespecificado.

2.Propiedades

a.Propiedadesrelativasalaactualizacinyregistrodelibros

CreateBackup

Booleano.Indicasisecreaunacopiadeseguridadcuandosegrabaelarchivo.

EnableAutoRecover

Booleano.ActivaodesactivalaopcinAutorrecuperacin.

Saved

Booleano.Indicasiellibroespecificadonohasidomodificadodespusdelaltimagrabacin.

SaveLinkValues

Booleano.IndicasiMicrosoftExcelguardalosvaloresdelosvnculosexternosconellibro.

UpdateLinks

Constante.ParmetrodellibroparalaactualizacindelosvnculosOLEincorporados.

UpdateRemoteReferences

Booleano.IndicasiMicrosoftExcelactualizalasreferenciasremotasdellibro.

b.Propiedadesrelativasalibroscompartidos

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
AutoUpDateFrequency

Enterolargo.Devuelveodefineeltiempo,enminutos,entredosactualizacionesautomticasenel
librocompartido.Siestapropiedadrecibeelvalor 0,laactualizacinsolamentesehacealguardarel
libro.

AutoUpDateSaveChanges

Booleano.Indicasilasmodificacionesrealizadasenellibrocompartidosetransmitenalosotros
usuarioscuandoellibroseactualizaautomticamente.

ChangeHistoryDuration

Enterolargo.Devuelveoestableceelnmerodedasquesemuestraenelhistorialdecambiosdel
librocompartido.

ConflictResolution

Constante.Devuelveodefinelaformaenqueseresuelvenlosconflictoscuandoseactualizaunlibro
compartido.

HighlightChangesOnScreen

Booleano.Indicasilasmodificacionesenellibrocompartidoseresaltanenlapantalla.

KeepChangeHistory

Booleano.Indicasiesthabilitadoelseguimientodecambiosenellibrocompartido.

ListChangesOnNewsheet

Booleano.Indicasilasmodificacionesdellibrocompartidosemuestranenunanuevahojadeclculo.

MultiUserEditing

Booleano.Indicasiellibroestabiertocomounalistacompartida.

RevisionNumber

Enterolargo.Devuelvelacantidaddevecesqueellibrofuegrabadomientrasestabaabiertocomo
listacompartida.

ShowConflictHistory

Booleano.IndicasilahojadeclculoHistorialdeconflictosestvisibleenellibroabiertocomolista
compartida.

UserStatus

Variant.Devuelveunamatrizdedosdimensionesindexadaapartirde1,conlainformacindecada
usuarioquetengaabiertoellibrocomolistacompartida.

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
HasPassword

Booleano.Indicasiellibroestprotegidoconcontrasea.

Password

Cadenadecaracteres.Devuelveodefinelacontraseanecesariaparaabrirellibro.

PasswordEncryptionAlgorithm

Cadenadecaracteres.DevuelveelalgoritmoqueusaMicrosoftExcelparaencriptarlascontraseas
dellibro.

PasswordEncryptionProvider

Cadenadecaracteres.Devuelveelnombredelproveedordelalgoritmodecifrado queutiliza
MicrosoftExcelparaencriptarlascontraseasdellibroespecificado.

PasswordEncryptionKeyLength

Enterolargo.IndicalalongituddelaclavedelalgoritmoqueutilizaMicrosoftExcelparaencriptarlas
contraseasdellibroespecificado.

PasswordEncryptionFileProperties

Booleano.IndicasiMicrosoftExcelencriptalaspropiedadesdearchivodellibro.

ProtectStructure

Booleano.Indicasielordendelashojasdeclculodellibroestprotegido.

ProtectWindows

Booleano.Indicasilasventanasdellibroestnprotegidas.

ReadOnly

Booleano.Indicasiellibrofueabiertoenmododesololectura.

ReadOnlyRecommanded

Booleano.Indicasiellibrofuegrabadocomorecomendadoparasololectura.

RemovePersonalInformation

Booleano.Indicasilainformacinpersonaldellibrosepuedeeliminar.

VBASigned

Booleano.IndicasielproyectoVBAdellibrotienefirmadigital.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
WritePassword

Cadenadecaracteres.Devuelveodefinelacontraseadeescrituraparaellibro.

WriteReserved

Booleano.Indicasiellibroestprotegidocontraescritura.

WriteReservedBy

Cadenadecaracteres.Indicaelnombredelusuarioqueestautorizadoasobreescribirellibro.

c.Otraspropiedades

AccuracyVersion

Entero.Devuelveodefinesiciertasfuncionesdelahojadeclculousanlosltimosalgoritmosde
precisinparacalcularsusresultados.

Valores

0:Usarlosalgoritmosmsprecisosymsrecientes(opcinpordefecto)

1:UsarlosalgoritmosdeExcel2007odeversionesanteriores

2:UsarlosalgoritmosdeExcel2010

CaseSensitive

Booleano.IndicasiExceldistinguelasmaysculasylasminsculasenlacomparacindecontenidos.

Colors

Variant.Devuelveodefineloscoloresdelapaletadellibro.Lapaletatiene56 entradas,cadauna
representaunvalorRGB.

Date1904

Booleano.Indicasiellibrousaelsistemadefechas1904.

DefaultPivotTableStyle

Variant.EspecificaelestilodetabladelacoleccinTableStylesqueseusacomoestilopordefecto
paralastablasdinmicas.

DefaultSlicerStyle

Variant.EspecificaelestilodelobjetoTableStyle,utilizadocomoestilopordefectoparalos
segmentos(oslicers).

DefaultTableStyle

Variant.EspecificaelestilodetabladelacoleccinTableStylesqueseusapordefecto.

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
DisplayDrawingObjects

Constante.Devuelveodefinelamaneraenquesemuestranlasformas.

EnvelopeVisible

Booleano.Indicasisonvisibleselencabezadodecomposicindelosmensajesdecorreoylabarra
deherramientasdesobre.

FullNameURLEncoded

Cadenadecaracteres.Nombredellibroincluyesurutaeneldisco.

HasVBProject

Booleano.IndicasiunlibrocontienecdigoVBA.Estapropiedadesespecialmentetilpara
determinarsiunlibrosedebegrabarenunformatoqueaceptelasmacros.

IsAddin

Booleano.Indicasiellibroseejecutacomocomplemento.

PrecisionAsDisplayed

Booleano.Indicasilosclculosenellibroserealizanusandosolamentelosdecimalesvisiblesenlas
celdas.

ShowPivotChartActiveFields

Booleano.Indicaodefinesielpaneldetareasdefiltrodegrficodinmicoesvisible.

ShowPivotTableFieldList

Booleano.Indicasisepuedemostrarlalistadecamposdeunatabladinmica.

TemplateRemoveExtData

Booleano.Indicasilasreferenciasdedatosexternosseeliminancuandoellibrosegrabacomo
plantilla.

3.Listademtodos

a.Mtodosqueactandirectamentesobreloslibros

AddToFavorites

Agregaellibroespecificadoalalistadefavoritosdelabarradeherramientasweb.

ApplyTheme

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
Aplicaeltemaespecificadoallibro.

CheckInWithVersion

Guardaunlibroenunservidor,apartirdeunordenadorlocal,ydefineellibrocomodesololectura
paraevitarqueseamodificadolocalmente.

Close

Cierraellibroespecificado.

DeleteNumberFormat

Eliminadellibrounformatonmericopersonalizado.

ExportAsFixedFormat

PublicaunlibroenformatoPDFoXPS.

MergeWorkbook

Fusiona,enunlibroabierto,loscambiosrealizadosenotrolibro.

NewWindows

Creaunacopiadelaventanaespecificada.

OpenDatabase

Abreunabasededatosymuestralainformacinenunnuevolibro.Devuelve unobjetoWorkbook.

Post

Envaellibroespecificadoaunacarpetapblica.Estemtodosolamentefuncionaconuncliente
MicrosoftExchangeconectadoaunservidorMicrosoftExchange.

PrintOut

Imprimeellibroespecificado.

PrintPreview

Muestralavistapreliminardellibroespecificado.

PurgeChangeHistoryNow

Eliminalasentradasdelregistrodecambiosdellibroespecificado.

RefreshAll

Actualizalosrangosdedatosexternosylosinformesdetablasdinmicasdellibroespecificado.

- 8- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Route

Distribuyeellibrousandolalistadedistribucinactiva.

Save

Guardalasmodificacionesdellibroespecificado.

SaveAs

Guardaellibroespecificadoenotroarchivo(equivalealaopcinGuardarcomodelmenArchivo).

SaveAsCopy

Guardaunacopiadellibroactivoenunnuevoarchivosinmodificarellibroabiertoenlamemoria.

UpdateFromFile

Actualizaunlibrodesololecturaapartirdelaversindellibroguardadaeneldiscosiestaversin
esmsrecientequelacopiadellibrocargadoenmemoria.Silacopiadeldisconofuemodificada
despusdecargarellibroenmemoria,lacopiadellibroresidenteenmemorianoserecarga.

b.Mtodosrelativosalaseguridad

ChangeFileAccess

Modificalospermisosdeaccesoallibro,loquepuedeimplicarlanecesidaddecargar,desdeeldisco,
unaversinactualizada.

LockServerFile

Bloqueaellibroenelservidorparaevitarsumodificacin.

Protect

Protegeellibroespecificadoparaquenosepuedamodificar.

ProtectSharing

Guardaellibroeimpidequeseacompartido.

UnProtect

Quitalaproteccindellibroespecificado.

UnprotectSharing

Desactivalaproteccinqueimpidecompartirellibroylograba.

c.Mtodosrelativosalibroscompartidos

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 9-
AcceptAllChanges

Aceptatodaslasmodificacioneshechasallibrocompartidoespecificado.

CanCheckIn

DevuelveunavariableBooleanoqueindicasiExcelpuedeextraerunlibroespecificadodesdeun
servidor.

ExclusiveAccess

Atribuyealusuarioactualunaccesoexclusivoallibroabiertocomolistacompartida.

HighlightChangesOptions

Controlacmosemuestranloscambiosenunlibrocompartido.

RejectAllChanges

Impideloscambiossobreellibrocompartidoespecificado.

RemoveUser

Desconectaelusuarioespecificadodellibrocompartido.

d.Mtodosrelacionadoscondatosvinculados

BreakLink

ConviertelasfrmulasvinculadasaotrosorgenesdeMicrosoftExceluorgenesOLEenvalores.

ChangeLink

Modificaunvnculoentredosdocumentos.

EnableConnections

Activalasconexionesdedatosenunlibro.

FollowHyperlink

Muestraundocumentodelacachsiyahasidotransferidoalamquinalocal.Delocontrario,este
mtodoresuelveelhipervnculo,transfiereeldocumentodedestinoalamquinalocalymuestrael
documentoenlaaplicacinapropiada.

LinkInfo

Devuelveinformacinacercadelafechayelestadodeactualizacindelvnculo.

LinkSources

- 10 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Devuelveunamatrizdevnculosallibro.Losnombresdelamatrizsonlosnombresdelos
documentosvinculados,edicionesoservidoresDDEuOLE.EstemtododevuelveEmptysinohay
vnculosenellibro.

OpenLinks

Abrelosdocumentosdeorigendeunoomsvnculos.

OpenXml

AbreunarchivoXMLenunnuevolibro.DevuelveunobjetoWorkbook.

ReloadAs

VuelveacargarunlibrobasadoenundocumentoHTMLusandolacodificacindedocumentos
especificada.

SetLinkOnDate

DefineelnombredeunprocedimientoejecutadoacadaactualizacindeunvnculoDDE.

UpdateLink

ActualizaunoomsvnculosdeMicrosoftExcel,DDEoOLE.

WebPagePreview

Muestralavistapreviadellibroespecificado,talcomoseveraalserguardadocomopginaweb.

e.Mtodosrelativosalenvodelibros

SendFaxOverInternet

Envaunahojadeclculocomofaxalosdestinatariosespecificados.

SendMail

Envaunmensajedecorreoelectrnicoconellibroespecificado.

SendForReview

Envaunmensajedecorreoelectrnicoconellibroquehayquerevisaralosdestinatarios
especificados.

EndReview

TerminalarevisindeunarchivoenviadoparaestefinconelmtodoSendForReview.

ReplyWithChanges

Envaunmensajedecorreoelectrnicoalautordeunlibroenviadopararevisinyleinformadeque

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 11 -
larevisinhasidorealizada.

f.Otrosmtodos

LosmtodosrelativosalaimportacinyexportacindearchivosalformatoXML(SaveAsXMLData,XmlImport,etc.)
seexplicanenelcaptuloInternet.

4.EjemplosdecdigosqueusanelobjetoWorkbook

Paraprobarestosejemplos,debecrearunacarpetaC:\VentasconlabasedeejemplodeAccessContador.mdb.

a.CreacindeunlibrodeExcel

Elsiguienteejemplopermite:

l Cerrartodosloslibrosabiertos,exceptoellibroactivo.

l Crearunnuevolibro.

l Protegerellibroconcontrasea.

l AgregarellibroalalistadeFavoritos.

l Guardarycerrarellibro.

Private Sub NuevoLibro()


Dim oLibro As Workbook
Dim i As Integer
Dim j As Integer

Cierra los libros (excepto el libro activo)


y guarda los cambios

For Each oLibro In Workbooks


If oLibro.Name <> ThisWorkbook.Name Then
oLibro.Close True
End If
Next oLibro

Crea un nuevo libro


Set oLibro = Application.Workbooks.Add
With oLibro
Protege el libro con contrasea
.Password = "Ventas"
.WritePassword = "W_Ventas"
Guarda el libro
.SaveAs "C:\Ventas\Ventas por regin"
Agrega el libro a los favoritos de la barra de men Web
.AddToFavorites
Cierra el libro
.Close
End With

End Sub

- 12 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
b.ImportarunabasededatosyexportarlaalformatoHTML

Elsiguienteejemplomuestracmo:

l AbrirlatablaClientesdelarchivo"Northwind2016.accdb"enunnuevolibro.

l ExportarestainformacinenunarchivoHTML.

l AbrirelarchivoHTML.

Sub CreaHTMLFile()
Dim oLibro As Workbook

Importa la tabla Clientes de la base Access Northwind 2016


en un nuevo libro
Set oLibro = Workbooks.OpenDatabase _
(Filename:=ThisWorkbook.Path & "\Northwind 2016.accdb", _
CommandText:="SELECT * FROM CLIENTS")
Exporta los clientes a un archivo Html
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\Clientes.htm", _
FileFormat :=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False
Abre el archivo Html
Workbooks.Open Filename:=ThisWorkbook.Path & "\Clientes.htm"
End Sub

c.Mostrarlaspropiedadesdeunlibro

Este ejemplo muestra los nombres y los valores de las diferentes propiedades del libro. Algunas de estas
propiedadessonaccesiblesalhacerclicenlapestaaArchivo yluegoenlaseccinInformacin.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 13 -
Sub Propiedades()
Dim i As Integer
Dim ObjProp As Object
Muestra la lista de propiedades del libro
i = 1
For Each ObjProp In ThisWorkbook.BuiltinDocumentProperties
On Error Resume Next
ActiveSheet.Cells(i, 2) = ObjProp.Value
ActiveSheet.Cells(i, 1) = ObjProp.Name
i = i + 1
Next
End Sub

d.ExportarunlibroalformatoPDF

Para ejecutar este cdigo, debe previamente ejecutar el programa de instalacin del complemento Excel
SaveAsPDFandXPS.exe(esteprogramaseentregaconlosejemplos).

Sub Export_Pdf()
Exporta el archivo al formato PDF y lo abre en Acrobat Reader
ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:="Captulo4", _
IncludeDocProperties:=True, _
OpenAfterPublish:=True

- 14 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 15 -
ElobjetoWorksheet

EsteobjetorepresentaunahojadeclculoExcel.ElobjetoWorksheetesunmiembrodelacoleccinWorkSheets
delobjetoWorkbook.

LassiguientespropiedadesdelobjetoApplicationdevuelvenunobjetoWorksheet:

l Worksheets

l ActiveSheet

1.Listadeobjetosycolecciones

2.Objetosycolecciones

Objetos

AutoFilter

Objetoquerepresentaelautofiltrodelahojadeclculoespecificada.

OutLine

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Objetoquerepresentaelesquemadelahojadeclculoespecificada.

PageSetup

Objetoquerepresentalasopcionesdeconfiguracindepginadelahojadeclculoespecificada.

Protection

Objetoquerepresentalasopcionesdeproteccinparalahojadeclculoespecificada. Estasopciones
sonaccesiblesenExcelatravsdelmenHerramientas ProteccinProtegerhoja.

Range

Objetoquerepresentaunaceldaounrangodeceldas(unafila,unacolumna,etc.).

Tab

Objetoquerepresentalapestaadelahojadeclculoespecificada.

Colecciones

ChartObjects

Coleccindelosgrficosincrustadosenlahojadeclculoespecificada.

Comments

Coleccindetodosloscomentariosdeceldadelahojadeclculoespecificada.

CustomProperties

ColeccindeobjetosCustomPropertyquerepresentalainformacincomplementaria(metadatospara
XMLoetiquetasinteligentes).

HPageBreaks

Coleccindelossaltosdepginahorizontalesenlazonadeimpresindelahojaespecificada.

Hyperlinks

Coleccindeloshipervnculosdelahojadeclculoespecificada.

ListObjects

Coleccindelaslistasdelahojadeclculoespecificada.

Names

Coleccindelosrangosdeceldasconnombredelahojadeclculoespecificada.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
OLEObjects

ColeccindelosobjetosActiveXyobjetosOLEvinculadosoincrustadosenlahojadeclculo
especificada.

PivotTables

Coleccindelosinformesdetabladinmicadelahojadeclculoespecificada.

QueryTables

Coleccindelastablasdehojadeclculocreadasapartirdedatosenviadosdesdeunorigende
datosexterno.

Scenarios

Coleccindelosescenariosdelahojadeclculoespecificada.

Shapes

Coleccindetodaslasformas(autoformas,formaslibres,objetosOLEoimgenes)presentesenla
hojadeclculoespecificada.

VPageBreaks

Coleccindelossaltosdepginaverticalesenlazonadeimpresindelahojaespecificada.

3.Propiedades

AutoFilterMode

Booleano.Indicasilasflechasdelmendesplegabledelosautofiltrosaparecenenlahojadeclculo
especificada.

ConsolidationFunction

Constante(xlMax,xlMin,xlSum,etc.).Devuelvelafuncinusadaparalaconsolidacinactual.

ConsolidationOptions

Matrizdebooleanosquerepresentalasopcionesrelativasalaconsolidacin(rtulosenlafila
superior,rtulosenlacolumnaizquierda,vnculosconlosdatosdeorigen).

ConsolidationSources

Matrizdecadenasdecaracteresquecontienelosnombresdelashojasdeorigenparalaconsolidacin
actualdelahojadeclculoespecificada.

DisplayPageBreaks

Booleano.Indicasisemuestranlossaltosdepgina(automticosymanuales)delahojaespecificada.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
DisplayRightToLeft

Booleano.CorrespondealaopcinVerlahojaactualdederechaaizquierdadelcuadrodedilogo
HerramientasOpcionespestaaInternacional.

EnabledAutofilter

Booleano.IndicasilasflechasdelAutofiltroestnactivassolamentecuandoestactivalaproteccin
desolointerfazdeusuario.

EnableCalculation

Booleano.IndicasiExcelrecalculaautomticamentelahojadeclculocuandoesnecesario.

EnableFormatConditionsCalculation

Booleano.Devuelveodefinesilosformatoscondicionalesseaplicanautomticamentesiesnecesario.

EnableOutLining

Booleano.Indicasilossmbolosdelesquemaestnactivoscuandoestactivalaproteccindesolo
interfazdeusuario.

EnablePivotTable

Booleano.Indicasiloscontrolesylasaccionesdelatabladinmicaestnactivos cuandoestactivala
proteccindesolointerfazdeusuario.

EnableSelection

Constante.Devuelveodefineloselementosquesepuedenseleccionarenlahoja(xlNoRestrictions,
xlNoSelection,xlUnlockedCells).

FilterMode

Booleano.Indicasihayaplicadounfiltroalahojaespecificada.

MailEnvelope

Representaelencabezadodelosmensajesdecorreoelectrnicoparalahojaespecificada.

Name

Cadenadecaracteresquecontieneelnombredelahojadeclculo.

PrintedCommentPages

Enterolargo.Devuelvelacantidaddepginasdecomentariosqueseimprimenparalahojadeclculo
especificada.

ProtectContents

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Booleano.Indicasielcontenidodelahojaespecificadaestprotegido.

ProtectDrawingObjects

Booleano.Indicasilasformasgrficasestnprotegidas.

ProtectionMode

Booleano.Indicasiestactivalaproteccindesolointerfazdeusuario.

ProtectScenarios

Booleano.Indicasiestnprotegidoslosescenariosdehojadeclculo.

ScrollArea

Cadenadecaracteres.Devuelveoestableceelrangoenelqueestpermitidoeldesplazamientodela
hojadeclculoespecificada.

StandardHeight

Realdoble.Devuelveelaltoestndar(valorpordefecto)delasfilasdelahojadeclculoespecificada.

StandardWidth

Realdoble.Devuelveelanchoestndar(valorpordefecto)delascolumnasdelahojadeclculo
especificada.

Type

Constante.Devuelveodefineeltipodelahojadeclculoespecificada(xlChart, xlDialogSheet,etc.).

Visible

Booleano.Indicasilahojadeclculoespecificadaestvisible.

4.Mtodos

Activate

Activalahojadeclculoespecificada.Equivaleahacerclicsobrelapestaadelahoja.

Calculate

Recalculalasceldasdelahojadeclculoespecificada.

CheckSpelling

Efectalaverificacinortogrficadelahojadeclculoespecificada(equivalealaopcinOrtografadel
menHerramientas).

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
CircleInvalid

Rodeaconuncrculolasentradasincorrectasenlahojadeclculoespecificada.

ClearArrows

Borralasflechasdeauditoradelahojadeclculoespecificada.

ClearCircles

Borraloscrculosquerodeanlasentradasincorrectasdelahojadeclculo.

Copy

Haceunacopiadelahojadeclculoespecificada(antesodespusdeunadelashojasdellibro).

Delete

Eliminalahojadeclculoespecificada.

Evaluate

Calculalaexpresinpasadacomoargumentoydevuelveelresultado.Laexpresin debecorresponder
aunafrmuladeclculoeningls.

ExportAsFixedFormat

PublicaunahojadeclculoenformatoPDFoXPS.

Move

Muevelahojadeclculoespecificadaaunaposicindada(antesodespusdeunadelashojasdel
libro).

Paste

Pegaelcontenidodelportapapelesenlahojadeclculoespecificada.

PasteSpecial

Pegaelcontenidodelportapapelesenlahojadeclculoespecificadarespetandoelformato
especificado(pegadoespecial).

PrintOut

Imprimelahojadeclculoespecificada.

PrintPreview

Muestralavistapreliminardelahojadeclculoespecificada.

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Protect

Protegelahojadeclculoespecificada.

ResetAllPageBreaks

Redefinelossaltosdepginadelahojadeclculoespecificada.

SaveAs

Guardalahojadeclculoenunnuevolibro.

Select

Seleccionalahojadeclculo.

SetBackgroundPicture

Defineelgrficodefondodelahojadeclculoespecificada.

ShowAllData

Muestratodaslasfilasdelalistaactualmentefiltrada.

ShowDataForm

Muestralosdatosdelahojadeclculoespecificadacomoformulario(corresponde alaopcin
FormulariodelmenDatos).

UnProtect

Desactivalaproteccindelahojadeclculoespecificada.

Los mtodos relativos a mapas de datos XML (XmlDataQuery, XmlMapQuery, etc.) se explican en el captulo
Internet.

5.EjemplosdecdigosqueusanelobjetoWorksheet

a.Ordenarlashojasdeclculodeunlibro

Elsiguienteejemplopermite:

l Ordenarlashojasdeunlibro.

l Modificarelcolordelaspestaasdecadahoja.

Sub OrganizarHojas()
Dim oHoja As Worksheet
Dim i As Integer

Ordena las hojas del libro activo

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
OrdenaHojas ActiveWorkbook

Recorre las hojas de clculo


For i = 1 To ActiveWorkbook.Worksheets.Count
Set oHoja = ActiveWorkbook.Worksheets(i)
With oHoja
Modifica el color de la pestaa
.Tab.Color = vbRed
End With
Next i

End Sub

Private Sub OrdenaHojas(oLibro1 As Workbook)


Dim i As Integer
Dim j As Integer
Procedimiento para ordenar alfabticamente las hojas de clculo
de un libro
With oLibro1
For i = 1 To .Worksheets.Count
For j = 1 To i - 1
If .Worksheets(i).Name < .Worksheets(j).Name Then
.Worksheets(i).Move before:=.Worksheets(j)
End If
Next j
Next i
End With

End Sub

b.Proteccindelashojasdeclculodeunlibro

Esteejemploprotegelashojasdeclculodeunlibropermitiendolassiguientesautorizaciones:formatodeceldas,
agregarcolumnasyfilas,ordenamientoyautofiltros.Lasotrasoperaciones(eliminarfilasocolumnas,modificacin
deescenarios,etc.)quedanprohibidas.

Sub ProtegeHojas()
Dim oShtCurrent As Worksheet

For Each oShtCurrent In ActiveWorkbook.Worksheets


oShtCurrent.Protect Password:="Contrasea", _
contents:=True, AllowFormattingCells:=True, _
AllowInsertingColumns:=True, AllowInsertingRows:=True, _
AllowSorting:=True, AllowFiltering:=True
Next oShtCurrent

End Sub

c.Ordenarunatabla

Esteejemploordenaunatablasegntrescolumnas:ciudad,apellidoynombre.

- 8- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Sub Ordena_Clientes()

Ordena la tabla de clientes por ciudad, apellido y nombre


Application.Goto Reference:="Clientes"
With ActiveWorkbook.Worksheets("Clientes").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("C2:C30"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("B2:B30"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("D2:D30"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A1:G30")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 9-
ElobjetoRange

ElobjetoRangerepresentaunrangodeceldasypuedeestarconstituidopor:

l Unacelda.

l Unafila.

l Unacolumna.

l Unrangodeceldascontiguas.

l Unrangodeceldasnocontiguas.

l Unrango3D.

1.PropiedadesymtodosquedevuelvenunobjetoRange

PropiedadesquedevuelvenunobjetoRange

Propiedad Objeto Objetodevuelto


contenedor

ActiveCell Application ObjetoRangequerepresentalaprimeraceldaactivadelaventana


Window activaoespecificada.

Areas Range Coleccinqueagrupatodoslosrangosdeunaseleccinmltiple.

Cells Application ObjetoRangequerepresentaunaceldaounacoleccindeceldas:


Range
l DelahojaactivasielobjetocontenedoresApplication.
Worksheet
l DelrangoespecificadosielobjetocontenedoresRange.

l Delahojadeclculoespecificadasielobjetocontenedores
Worksheet.

CircularReference Worksheet ObjetoRangequerepresentaelrangoquecontienelaprimera


referenciacirculardelahoja.

Columns Application ObjetoRangequerepresentalascolumnas:


Range
l DelahojaactivasielobjetocontenedoresApplication.
Worksheet
l DelrangoespecificadosielobjetocontenedoresRange.

l Delahojaespecificadasielobjetocontenedores
Worksheet.

CurrentRegion Range ObjetoRangequerepresentaelobjetoRangeespecificado,


limitadoportodacombinacindefilasycolumnasvacas.

Dependents Range ObjetoRangequerepresentaelrangoquecontienetodaslas


celdasdependientesdeunaceldadada.Puedeserunaseleccin
mltiple(unindeobjetosRange)sihubieramuchasceldas
dependientes.

DirectDependents Range ObjetoRangequerepresentaelrangoquecontienetodaslas


celdasdirectamentedependientesdeunaceldadada.

DirectPrecedents Range ObjetoRangequerepresentaelrangoquecontienetodaslas


celdasdirectamenteantecedentesdeunaceldadada.

EntireColumn Range ObjetoRangequerepresentaunaomscolumnasenterasdel


rangoespecificado.

EntireRow Range ObjetoRangequerepresentaunaomsfilasenterasdelrango

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
especificado.

End Range ObjetoRangequerepresentalaceldasituadaalfinaldelazonade


rangoespecificado.Correspondealacombinacindeteclas[Fin]
[Flechaarriba],[Fin][Flechaabajo],[Fin][Flechaizquierda]o[Fin]
[Flechaderecha].

Next Range ObjetoRangequerepresentalasiguienteceldadelrango


especificado.

Offset Range ObjetoRangeespecificadodesplazadounaomsfilasocolumnas.

Precedents Range ObjetoRangequerepresentaelrangoquecontienetodaslas


celdasantecedentesdeunaceldadada.

Previous Range ObjetoRangequerepresentalaceldaprecedentedeunacelda


dada.

Range Application ObjetoRangequerepresentaunrangodeceldas:


Range
l DelahojaactivasielobjetocontenedoresApplication.
Worksheet
l DelrangoespecificadosielobjetocontenedoresRange.

l Delahojaespecificadasielobjetocontenedores
Worksheet.

Rows Application ObjetoRangequerepresentatodaslasfilas:


Range
l DelahojaactivasielobjetocontenedoresApplication.
Worksheet
l DelrangoespecificadosielobjetocontenedoresRange.

l Delahojaespecificadasielobjetocontenedores
Worksheet.

UsedRange Worksheet ObjetoRangequerepresentaelrangousadoensutotalidadporla


hojadeclculoespecificada.

Las propiedades Next y Previous, aplicadas a los objetos Worksheet y Chart, devuelven un objeto tipo
Worksheetquerepresentalashojassiguienteyanterior,respectivamente.

MtodosquedevuelvenunobjetoRange

Mtodo Objetocontenedor Objetodevuelto

Intersect Application ObjetoRangequerepresentalainterseccinrectangulardevarios


rangos.

Union Application ObjetoRangequerepresentalaunindevariosrangoscontiguoso


discontiguos.

2.SintaxisdelaspropiedadesquedevuelvenunobjetoRange

Cells

Objeto.Cells ([RowIndex],[ColumnIndex])

RowIndex Nmerodefiladelacelda.

ColumnIndex Nmerodecolumnadelacelda.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Sinoseindicaningnargumento,Cellsdevuelvelacoleccindeceldasdelrangoespecificado.

Ejemplo

Elsiguienteejemplomodificaelcontenidoyelcolordeceldas.

Sub LlenaHoja()
Dim oCelda As Range

Modifica el contenido de la celda B1 de la hoja activa


Application.Cells(1, 2) = "Enero"
Modifica el contenido de la celda B2 de la hoja activa
ActiveSheet.Range("A1:G10").Cells(2, 2) = "Febrero"
Modifica el contenido de la celda B3 de la hoja activa
ActiveSheet.Cells(3, 2) = "Marzo"
Modifica el color de las celdas C1, C2, D1, D2
For Each oCelda In Range("C1:D2")
oCelda.Interior.Color = vbRed
Next oCelda
End Sub

Range

Objeto.Range (Cell1,[Cell2])

DondeCell1yCell2puedenser:

l Unacelda(porejemplo:"A1").

l Unrangodeceldas(porejemplo:"A1:B7").

l Unnombredecelda(porejemplo:"Totales").

SiCell2estespecificado,Rangedevuelveunrangodeceldascontiguasqueincluyelosdosrangosespecificados.

Ejemplo

Esteejemplocrealasiguientetablaenunahojadeclculo.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Sub HojaResultado()
Dim i As Integer

With Application.ActiveSheet
.Range("B1").Value = "Resultados trimestrales"

Meses en columna
For i = 1 To 3
.Range("A" & i + 3).Value = _
Format((DateValue("01/" & i & "/01")), "MMMM")
Next i

Regiones en fila
Range("B3:E3").Value = Array("Este", "Oeste", "Sur", "Norte")
Formato de celdas
Range("B4:E7").NumberFormat = "# ##0.00 "
Range("A7").Value = "Totales"

Nombra las celdas que contienen los totales


Asigna una frmula a las celdas con nombre
Range("B7").Name = "Total1"
Range("Total1").Formula = "=SUM(B4:B6)"
Range("C7").Name = "Total2"
Range("Total2").Formula = "=SUM(C4:C6)"
Range("D7").Name = "Total3"
Range("Total3").Formula = "=SUM(D4:D6)"
Range("E7").Name = "Total4"
Range("Total4").Formula = "=SUM(E4:E6)"
End With

End Sub

OffSet

Objeto.OffSet ([rowOffset],[columnOffset])

rowOffset Cantidaddefilasdedesplazamiento.

colOffset Cantidaddecolumnasdedesplazamiento.

colOffsetyrowOffsetpuedencontenervaloresnegativos.

Ejemplo

Elsiguienteejemplodevuelveladireccindelrangoqueresultadeundesplazamiento defilasycolumnas.

Sub DevuelveOffset()

With Range("B5:C7")
Desplazamiento de una fila hacia arriba
Devuelve $A$5:$B$7

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
MsgBox .Offset(0, -1).Address
Desplazamiento de dos columnas hacia la derecha
Devuelve $B$7:$C$9
MsgBox .Offset(2, 0).Address
End With

End Sub

Areas

Objeto.Areas ([Index])

Index Nmerodelrangoendistintosrangosdelobjeto.

Sinoseindicaningnargumento,Areasdevuelvelacoleccinderangosespecificada.

Ejemplo

Esteejemplopermite:

l Crearunazonaformadaporvariosrangosdeceldasdiscontinuos.

l Llenarelprimerrangoapartirdeunamatriz.

l Ponerennegritalafuenteparatodoslosrangos.

Sub MuchosRangos()
Dim oZonaTot As Range
Dim i As Integer

Unin de muchos rangos discontinuos


Set oZonaTot = Union(Range("B3:E3"), Range("B1:B5"), _
Range("J2:F6"))

With ZonaTot
Primer rango completado a partir de una matriz
.Areas(1).Value = Array("Este", "Oeste", "Sur", "Norte")
Pone en negrita los caracteres de todos los rangos
For i = 1 To 3
.Areas(i).Font.Bold = True
Next i
.Select
End With

End Sub

3.Listadeobjetosycolecciones

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
Objetos

Characters

Objetoquerepresentaloscaracteresdeltextodelaceldaespecificada.

Comment

Objetoquerepresentaelcomentarioasociadoalacelda.

DisplayFormat

Objetoquerepresentalasopcionesdevisualizacinparaelrangoespecificado.

Errors

Objetoquerepresentaloserroresenelrangoespecificado.

Font

Objetoquecontienelosatributosdefuente(nombre,tamao,color,etc.)delrangoespecificado.

Interior

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Objetoquerepresentaelrellenodelasceldasdelrangoespecificado.

Name

Objetoquerepresentaunnombreparaunrangodeceldas(celdasconnombre).

PivotCell

Objetoquerepresentaunaceldaenuninformedetabladinmica.

Style

Objetoquerepresentaelestiloaplicadoalrangoespecificado.

Validation

Objetoquerepresentalavalidacindedatosaplicadaalrangoespecificado.

XPath

ObjetoquerepresentaunXPath(rutaXML)mapeadoenelrangodeceldasespecificado.

Colecciones

Areas

Coleccindetodoslosrangosenunaseleccindemuchaszonas.

Borders

Coleccindetodoslosbordesdelrangodeceldasespecificado.

FormatConditions

Coleccindelosformatoscondicionalesdelrangoespecificado.

HyperLinks

Coleccindeloshipervnculosdelrangoespecificado.

Phonetics

Coleccindeobjetosquecontienenlainformacindeunacadenadetextofonticaespecficaenuna
celda.

QueryTables

Coleccindeobjetosquerepresentalastablasdehojadeclculocreadasapartirdedatosdevueltos
porunorigendedatosexternos.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
SparklineGroups

Coleccindelosobjetosquerepresentanelconjuntodeminigrficosparaelrangoespecificado.

4.Propiedades

a.Propiedadesrelacionadasconlaposicinyelformatodelasceldas

AllowEdit

Truesielrangopuedesermodificadoenunahojadeclculoprotegida.

AddressLocal

Devuelvelareferenciadelrangoespecificadoenelidiomadelusuario.

Address

Devuelvelareferenciadelrangoenellenguajedelamacro.

Column

Devuelveelnmerodelaprimeracolumnadelaprimerazonadelrangoespecificado.

ColumnWidth

Devuelveodefineelanchodetodaslascolumnasdelrangoespecificado.

HorizontalAlignment

Constante.Defineodevuelveeltipodealineacinhorizontal.

IndentLevel

Devuelveodefineelniveldesangraefectivo.

Row

Devuelveelnmerodelaprimerafiladelaprimerazonadelrango.

RowHeight

Devuelveelalto,medidoenpuntos,delasfilasdelrangoespecificado.

UseStandardHeight

TruesielaltodefiladelobjetoRangeesigualalaltoestndardelahoja.

UseStandardWidth

- 8- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
TruesielanchodecolumnadelobjetoRangeesigualalanchoestndardelahoja.

VerticalAlignment

Constante.Defineodevuelveeltipodealineacinvertical.

b.Propiedadesqueserelacionanconelcontenidodeceldasyconlasfrmulas

CountLarge

Determinaelvalormximoenelrango.

Formula

DevuelveodefinelafrmulaenelestilodereferenciaA1.

FormulaLocal

Devuelveodefinelafrmuladelobjeto,usandolasreferenciasdeestiloA1enelidiomadelusuario.

FormulaR1C1

Devuelveodefinelafrmuladelobjeto,usandolasnotacionesdeestiloR1C1.

FormulaR1C1Local

Devuelveodefinelafrmula,usandolasnotacionesdeestiloR1C1enelidiomadelusuario.

PrefixCharacter

Devuelveelprefijodealineacindelacelda.

Text

Valordelaceldaespecificadaconelformatoespecificado(contenidovisibledelacelda).

Value

Valordelaceldaespecificada.Silaceldaestvaca,lapropiedadValuedevuelveelvalorEmpty(use
lafuncinIsEmptyparatestearestecaso).SielobjetoRangecontienevariasceldas,devuelveuna
matrizdevalores(uselafuncinIsArrayparatestearestecaso).

WrapText

Booleano.TruesiMicrosoftExcelinsertaautomticamenteretornosdecarroeneltextodelobjeto.

c.Otraspropiedades

MergeCells

Truesielrangooelestilocontieneceldascombinadas.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 9-
ListHeaderRows

Devuelvelacantidaddefilasdeencabezadoenelrangoespecificado.

5.Mtodos

a.Mtodosquedevuelvenunobjeto

ColumnDifferences

DevuelveunobjetoRangequerepresentalasceldasdondeelcontenidoesdiferentealdelacelda
decomparacindecadacolumna.

Find

BuscaunainformacinespecficaenunrangoydevuelveunobjetoRangequerepresentalaprimera
celdadondeapareceesainformacin.

FindNext

Continaunabsqueda(siguientecelda)iniciadaconelmtodoFind.

FindPrevious

Continaunabsqueda(celdaanterior)iniciadaconelmtodoFind.

RowDifferences

DevuelveunobjetoRangequerepresentalasceldasenlasqueelcontenidoesdiferenteal
contenidodelaceldadecomparacindecadafila.

SpecialCells

DevuelveunobjetoRangequerepresentalasceldasquecorrespondenaltipoyalvalor
especificados.

b.Mtodosqueserelacionanconlapresentacindelasceldas

AddComment

Agregauncomentarioalrango.

AutoFit

Modificaelanchodelascolumnasdelrangooelaltodelasfilasparaajustarsusdatos.

BorderAround

AgregaunbordeaunrangoydefinelaspropiedadesColor,LineStyleyWeightdelnuevoborde.

- 10 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
ClearComments

Quitatodosloscomentariosdeceldadelrangoespecificado.

ClearFormats

Eliminalosformatosdelasceldas.

ClearNotes

Borralasnotasescritasysonorasdetodaslasceldasdelrangoespecificado.

InsertIndent

Insertaunasangraenlasceldasdelrangoespecificado.

Justify

Reorganizaeltextoenunrangodeformaquelollenedemanerauniforme.

Merge

Combinalasceldas.

NoteText

Devuelveodefinelasnotasdeceldasasociadasalaceldaubicadaenlaesquina superiorizquierda
delrango.

Sort

Ordenaunrangodevalores.

TextToColumns

Redistribuyeenvariascolumnasunacolumnadeceldasquecontienetexto.

UnMerge

Separaunaceldacombinadaenceldasindividuales.

c.Mtodosrelacionadosconelcontenidodelasceldas

AllocateChanges

Efectalareescrituraparaparatodaslasceldasmodificadasenunrangobasadoenunafuentede
datosOLAP.

AutoFill

Ejecutaunllenadoincrementalenlasceldasdelrangoespecificado.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 11 -
AutoComplete

DevuelveunacoincidenciadelafuncionalidadAutocompletardelalista.

ClearContents

Borraelcontenidodelasceldas.

ClearHyperlinks

Eliminatodosloshipervnculosdelrangoespecificado.

Consolidate

Consolidadatosqueprovienendevariosrangossituadosendiferenteshojasdeclculoenunnico
rangosituadoenunanicahojadeclculo.

Copy

CopiaalportapapeleselobjetoRangedelrangoespecificado.

CopyFromRecordSet

CopiaelcontenidodeunobjetoRecordsetADOoDAOenunahojadeclculo,comenzandoenla
esquinasuperiorizquierdadelrangoespecificado.

CopyPicture

Copiaelobjetoseleccionadoenelportapapelesenformadeimagen.

Cut

Cortaelobjetoyloguardaenelportapapelesolopegaenundestinoespecificado.

Delete

Eliminalasceldaseindicacmoreemplazarlasceldaseliminadas.

DiscardChanges

Descartatodosloscambiosdelasceldasrevisadasdelrango.

FillDown

Rellenaunrangohaciaabajo.

FillLeft

Rellenaunrangohacialaizquierda.

- 12 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
FillRight

Rellenaunrangohacialaderecha.

FillUp

Rellenaunrangohaciaarriba.

FunctionWizard

IniciaelAsistenteparafuncionesenlaceldasituadaenlaesquinasuperiorizquierdadelrango.

Insert

Insertaceldaseindicacmodesplazarlasceldas.

Parse

Redistribuyeunrangodedatosylodivideenvariasceldas.Distribuyeelcontenidodelrangode
maneraquellenevariascolumnasadyacenteselrangonopuedetenermsdeunacolumnade
ancho.

PasteSpecial

EfectaelpegadoespecialdeunobjetoRangequeprovienedelportapapeles,enelrango
especificado.

RemoveDuplicates

Eliminalosdatosrepetidosenunrangodevalores.

Replace

Buscayreemplazacaracteresenlasceldasdelrangoespecificado.Elusodeestemtodonocambia
laseleccinnilaceldaactiva.

d.Mtodosrelacionadosconlosnombresdeceldas

ApplyNames

Definenombresparalasceldasdelrangoespecificado.

CreateNames

Creanombresenelrangoespecificadoenfuncindelosrtulosdetextodelahoja.

ListNames

Pegaunalistaconlosnombresdelahojadeclculoquenoestnocultos,comenzandoporla
primeraceldadelrango.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 13 -
e.Mtodosrelacionadosconlosfiltros

AdvancedFilter

Filtraocopialosdatosdeunalistaenfuncindeunazonadecriterios.

AutoFilter

Filtraunalista.

f.Mtodosrelacionadosconelmodoesquema

ApplyOutlineStyles

Aplicalosestilosdelesquemaalrangoespecificado.

AutoOutline

Creaautomticamenteunesquemaparaelrangoespecificado.Sielrangotieneunanicacelda,
MicrosoftExcelcreaunesquemaparatodalahoja.

Group

Enunesquema,aumentaelniveldelrangoenelesquema.Elrangodebeserunafilaounacolumna
enteraounrangodefilasodecolumnas.Paraunrangodiscontinuodeuninformedetabladinmica,
reagrupaelrango.Paraunanicaceldadelrangodedatosdeuncampodetabladinmica,realiza
unreagrupamientonumricoocronolgicoenelcampo.

Ungroup

Promueveunrangoenunesquema(esdecir,reducesuniveldeesquema).Elrangoespecificado
debeserunafilaounacolumnaobienunrangodefilasocolumnas.Sielrangoseencuentraenun
informedetabladinmica,elmtododesagruparloselementosincluidosenelrango.

g.MtodosqueserelacionanconlaherramientadeAuditora

NavigateArrow

Desplazaunaflechaderastreodelrangoespecificadohacialaceldaolasceldasprecedentes,
dependientesoqueprovocanunerror.

ShowDependents

Muestralasflechasderastreoquesealanlasceldasdependientesdirectasdelrango.

ShowPrecedents

Muestralasflechasderastreoquesealanlasceldasprecedentesdirectasdelrango.

ShowErrors

Muestralasflechasderastreoatravsdelaestructuraenrboldelasceldasprecedentesalacelda

- 14 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
queoriginaelerrorydevuelveelrangoquelacontiene.

h.Otrosmtodos

Calculate

Calculalasfrmulasdetodosloslibrosabiertos.

CalculateRowMajorOrder

Calculaelrangodeceldasindicadoapartirdesuesquinasuperiorizquierdayhastalaesquina
inferiorderechaenelordenfilacampo.

Dirty

Indicaqueelrangoespecificadoserecalcularenlaprximaactualizacindelahoja.

ExportAsFixedFormat

PublicalosdatosdeunrangodevaloresenformatoPDFoXPS.

PrintOut

Imprimeelrangodeceldas.

Run

Ejecutaunamacro.

Table

Creaunatabladedatosapartirdelosvaloresdeentradaydelasfrmulasdefinidasenunahojade
clculo.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 15 -
Ejemplosdeusodelosobjetos

1.Clculodelimportedeunaprima

Elrangodeceldas"D6:D14"deberecibirelnombreVF.

CuandoelusuariohaceclicenelbotndecomandoClculodeprimas,seejecutarelprocedimientoCalc_Prima.
Este procedimiento selecciona el rango de celdas llamado VF (celdas "D6:D14") y llama a la funcin Prima para
calcularlaprimayasignarlaalaceldadeladerecha.

Sub Calc_Prima()
Dim dblVFProm As Double
Dim ocelda As Range

Seleccin del rango llamado VF


ThisWorkbook.Names("VF").RefersToRange.Select
Clculo del promedio de la seleccin
dblVFProm = Evaluate("AVERAGE(VF)")
Recorre las celdas de la seleccin
La prima calculada se asigna a la celda de la derecha
For Each ocelda In Selection
Cells(ocelda.Row, ocelda.Column + 1) = _
Prima(ocelda.Value, dblVFProm)
Next ocelda
End Sub

LafuncinPrimacalculalaprimaenfuncindelVF(volmendefacturacin)ydelpromediodelosotrosVF.

Function Prima(dblVF As Double, dblVFProm As Double) As Double

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Prima en funcin del importe VF
Select Case dblVF
Case Is < 100000
Prima = 0
Case Is < 125000
Prima = 500
Case Is < 150000
Prima = 1000
Case Else
Prima = 2000
End Select

Si el VF es superior al promedio
prima extra de 1000
If dblVF > dblVFProm Then
Prima = Prima + 1000
End If

End Function

2.Asignarcomentariosalasceldas

Cuando el usuario hace clic en el botn Comentarios, se ejecuta el procedimiento Mostrar_Comentarios. Este
procedimientollamaalprocedimientoCompara_Valorparacompararcadaunadelasceldasseleccionadasconla
celdasituadaasuizquierda.

Sub Mostrar_Comentarios()
Dim oRng1 As Range
Dim oRng2 As Range
Dim oRngCurrent As Range
Dim oCol As Object

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Dim i As Integer
Dim j As Integer
Borra los comentarios y los estilos de la seleccin actual
Set oRngCurrent = ThisWorkbook.Worksheets("Ventas").Range("C5:D16")
With oRngCurrent
.ClearComments
.Font.Bold = False
.Font.Italic = False
.Borders.LineStyle = xlLineStyleNone
Recorre las columnas seleccionadas
Compara el valor de cada celda de la columna
con el de la celda situada a su izquierda
For i = 1 To .Columns.Count
Set oCol = .Columns(i)
For j = 1 To oCol.Cells.Count
Set oRng1 = oCol.Cells(j)
Set oRng2 = Cells(oRng1.Row, oRng1.Column - 1)
Compara_Valor oRng1, oRng2
Next j
Next i
End With

End Sub

Al llamar a la funcin Compara_Valor, recibe como argumentos las celdas que hay que comparar. En funcin del
porcentajedeevolucin(negativo,< 20 %,> 20 %),seasignauncomentarioyunformatoalaprimeracelda.

Sub Compara_Valor(oRng1 As Range, oRng2 As Range)


Dim dbl1, dbl2, dbl3 As Double
Dim strEvol As String

Compara los valores de dos celdas y asigna un comentario


With oRng1
dbl1 = oRng2.Value
dbl2 = .Value
dbl3 = (dbl2 - dbl1) / dbl1
strEvol = Format(Abs(dbl3), "0.00 %")
Select Case dbl3
Case Is < 0
.Font.Bold = True
.AddComment "Atencin: por debajo de " & strEvol
Case Is < 0.2
.Font.Italic = True
.AddComment "Bien: por encima de " & strEvol
Case Else
.Borders.LineStyle = xlContinuous
.AddComment "Excelente: por encima de " & strEvol
End Select
End With

End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Lastablasdinmicas

LacoleccinPivotTablescontienetodoslosobjetosdetabladinmica(objetosPivotTable)quehayenunahojade
clculo.

1.ElobjetoPivotTable

Esta seccin describe las colecciones, propiedades y mtodos ms comnmente utilizados para la creacin y
modificacindetablasdinmicas.

a.Colecciones

CalculatedFields

Coleccindetodosloscamposcalculadosdelatabladinmicaespecificada.

ColumnFields

Coleccindetodosloscamposdelatabladinmicaespecificadaquesemuestrancomocamposde
columna.

DataFields

Coleccindetodosloscamposdelatabladinmicaespecificadaquesemuestrancomocamposde
datos.

HiddenFields

Coleccindetodosloscamposdelorigendedatosdelatabladinmicaespecificadaquenose
muestran.

PageFields

Coleccindetodosloscamposdelatabladinmicaespecificadaquesemuestrancomocamposde
pgina.

RowFields

Coleccindetodosloscamposdelatabladinmicaespecificadaquesemuestrancomocamposde
fila.

PivotFields

Coleccindetodosloscamposdelorigendedatosdelatabladinmicaespecificada,semuestreno
no.

VisibleFields

Coleccindetodosloscamposdelorigendedatosdelatabladinmicaespecificadaquesemuestran.

TodasestascoleccionesdevuelvenobjetosPivotFieldquerepresentanuncampodelatabladinmica.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
b.Propiedades

Laspropiedadesdescritasacontinuacincorrespondenalasdiferentesopcionesdelastablasdinmicas(alasque
sepuedeaccederporlaopcindelmencontextualOpcionesdetabladinmica).

Estnclasificadasporpestaasyordenadasporordendevisualizacinenlapestaa.

OpcionesdelapestaaDiseoyformato

Propiedad Descripcin Tipo

MergeLabel Corresponde a la opcin Combinar y centrar celdas con Booleano


etiquetas.

CompactRowIndent Nmero de caracteres de sangra de las etiquetas de fila en Enterolargo


formacompacta.

DisplayErrorString Indique si se muestra una cadena personalizada en las Booleano


celdasconerror.

ErrorString Cadena que se muestra en las celdas que contienen errores Cadena de
cuandolapropiedadDisplayErrorStringtieneelvalorTrue. caracteres

DisplayNullString Indicasisemuestraunacadenapersonalizada enlasceldas Booleano


quecontienenvaloresnulos.

ErrorNull Cadena que se muestra en las celdas que contienen valores Cadena de
nulos cuando la propiedad DisplayNullString tiene el valor caracteres
True.

AsAutoFormat Corresponde a la opcin Autoajustaranchosdecolumnasal Booleano


actualizar.

PreserveFormating Corresponde a la opcin Mantenerelformatodelaceldaal Booleano


actualizar.

OpcionesdelapestaaTotalesyfiltros

Propiedad Descripcin Tipo

ColumnGrand Correspondealaopcin Mostrartotalesgeneralesdelas Booleano


filas.

RowGrand Correspondealaopcin Mostrartotalesgeneralesdelas Booleano


columnas.

AllowMultipleFilters Corresponde a la opcin Permitir varios filtros por Booleano


campo.

SortUsingCustomLists Corresponde a la opcin Usar listas personalizadas al Booleano


ordenar.

OpcionesdelapestaaMostrar

Propiedad Descripcin Tipo

ShowDrillIndicators Corresponde a la opcin Mostrar botones para Booleano


expandirycontraer.

DisplayContextTooltips Corresponde a la opcin Mostrar informacin Booleano

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
contextualsobreherramientas.

DisplayFieldsCaption Corresponde a la opcin Mostrarttulosdecampoy Booleano


filtrarlistasdesplegables.

InGridDropZones Corresponde a la opcin Diseo de tabla dinmica Booleano


clsica.

ShowValuesRow CorrespondealaopcinMostrarlafiladevalores. Booleano

FieldListSortAscending Corresponde a la opcin Lista de campos. Toma el Booleano


valor True si se selecciona la opcin OrdenardeAa
Z.

OpcionesdelapestaaImpresin

Propiedad Descripcin Tipo

PrintDrillIndicators Corresponde a la opcin Imprimir Booleano


botonesparaexpandirocontraer.

RepeatItemsOnEachPrintedPage Corresponde a la opcin Repetir Booleano


etiquetas de fila en cada pgina
impresa.

PrintTitles Corresponde a la opcin Imprimir Booleano


ttulos.

OpcionesdelapestaaDatos

Propiedad Descripcin Tipo

SaveData Corresponde a la opcin Guardar datos de origen con el Booleano


archivo.

EnabledDrillDown CorrespondealaopcinHabilitarMostrar detalles. Booleano

RefreshOnFileOpen CorrespondealaopcinActualizaralabrirelarchivo. Booleano

OpcionesdelapestaaTextoalternativo

Propiedad Descripcin Tipo

AlternativeText CorrespondealaopcinTtulo. Booleano

Summary CorrespondealaopcinDescripcin. Booleano

c.Mtodos

AddFields

Agregacamposdefila,decolumnaydefiltroaunatabladinmica.

ChangePivotCache

ModificaelobjetoPivotCache(cachdedatos)delatabladinmica.

ClearAllFilters

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Eliminatodoslosfiltrosaplicadosalatabladinmica.

RefreshTable

Actualizalatabladinmicaapartirdelorigendedatos.

2.Creacindeunatabladinmica

Para crear una tabla dinmica, en primer lugar hay que definir su cach de datos con el objeto PivotCache, y a
continuacinutilizarelmtodoCreatePivotTabledelobjetoPivotCache.

Ejemplo

Esteejemplopermitecrearunatabladinmicaapartirdeunatabladeceldasllamada"TablaTiempos".

Dim oCache As PivotCache


Dim oPivotTable As PivotTable
Creacin de la cach de la tabla
Set oCache = ThisWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, SourceData:="TablaTiempos", _
Version:=xlPivotTableVersion15)
Creacin de la tabla dinmica
Set oPivotTable = oCache.CreatePivotTable _
(TableDestination:=Sheets("TCD").Cells(1, 2), _
TableName:="TCD1")

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Losgrficos

UngrficoestrepresentadoporunobjetoChart,queestenlacoleccinShapes(objetosShape)querepresentan
lasformasuobjetosdibujadosenunahojadeclculo.Enelcasodeungrfico,elobjetoShaperepresentalazona
delgrfico.

1.ElobjetoShape

Estaseccindescribelaspropiedadesymtodosmscomnmenteutilizadosparacrearydarformatoalaszonasde
grficos.

a.Propiedades

Propiedades Descripcin Tipo

Chart Devuelveunobjeto Chart que representa el grfico contenido en la Objeto


forma.

Fill DevuelveunobjetoFillFormat que representa el formato de relleno Objeto


delaforma.

Line Devuelve un objeto LineFormat que contiene las propiedades de Objeto


formatodelbordedelaforma.

TopLeftCell Devuelve un objeto Range que representa la celda que est en la Objeto
esquinasuperiorizquierdadelaforma.

HasChart Indicasilaformacontieneungrfico. Booleano

Height Alturadelaformaenpuntos. Realsimple

Left Distancia,enpuntos,entreelbordeizquierdodelaformayelborde Realsimple


izquierdodelacolumnaA.

Top Distancia, en puntos, entre el borde superior de la forma y el borde Realsimple


superiordelahojadeclculo.

Width Largodelaformaenpuntos. Realsimple

b.Mtodos

Copy

CopialaformaenelPortapapeles.

CopyPicture

CopialaformaenelPortapapelescomounaimagen.

Delete

Eliminalaforma.

2.ElobjetoChart

Estaseccindescribelaspropiedadesymtodosmscomnmenteutilizadosparalacreacinyformatodegrficos.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
a.Colecciones

Axes

Coleccindetodoslosejesdelgrfico.

SeriesCollections

Coleccindetodaslasseriesdedatosdelgrfico.

b.Propiedades

Propiedad Descripcin Tipo

ChartArea DevuelveunobjetoChartAreaquerepresenta lazonadelgrfico. Objeto

ChartTitle DevuelveunobjetoChartTitlequerepresenta elttulodelgrfico. Objeto

PlotArea Devuelve un objeto PlotArea que representa la zona de trazado Objeto


delgrfico.

Legend DevuelveunobjetoLegendquerepresenta laleyendadelgrfico. Objeto

ChartType Defineeltipodegrfico. Constante

DisplayBlanksAs Definelaformacomosemuestranlasceldas vacasenelgrfico. Constante

HasLegend Indicasielgrficotieneleyenda. Booleano

HasTitle Indicasielgrficotieneunttulovisible. Booleano

c.Mtodos

ApplyChartTemplate

Aplicauntipodegrficoestndaropersonalizado.

ApplyDataLabels

Muestralasetiquetasdedatosparatodaslasseries.

Delete

Eliminaelgrfico.

Export

Exportaelgrficoaunarchivodetipoimagen.

ExportAsFixedFormat

Exportaelgrficoaunformatoespecificado(PDFoXPS).

PrintOut

Imprimeelgrfico.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
PrintPreview

Muestraunavistapreviaantesdeimprimirelgrfico.

SaveChartTemplate

Agregaunaplantilladegrficopersonalizadaalalistadeplantillasdisponibles.

SetSourceData

Defineelrangodedatosdeorigendelgrfico.

3.Creacindeungrfico

ElmtodoAddChartdelacoleccindeobjetos Shapespermitecrearungrfico.LapropiedadHasChartdelobjeto
Shapeindicasihayungrficoenlaforma.

Ejemplo

El siguiente ejemplo permite crear un grfico de tipo Sectores en 3D y modificar la presentacin del grfico (ttulo y esquinas
redondeadas).

Dim oSheet As Worksheet


Dim oShape As Shape
Dim oChart As ChartSet
Set oSheet = ThisWorkbook.Sheets("RESUMEN ACTIVIDAD")
Set oShape = oSheet.Shapes.AddChart(Excel.XlChartType.xl3DPie)
If oShape.HasChart Then
Set oChart = oShape.Chart
With oChart
.SetSourceData Source:= _
oSheet.Range("RESUMEN ACTIVIDAD!$B$6:$D$33")
.ChartTitle.Text = "Resumen del tiempo de trabajo"
.Parent.RoundedCorners = True
End With
End If

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Ejemplodeaplicacin

1.Presentacin

Elsiguienteejemplopermitegenerarautomticamentetablasygrficosestadsticossobreelrepartodeltiempode
trabajodelosempleadosporda,semana,actividad...

Losdatosdeorigenestnsituadosenlatabladeceldasllamada"TablaTiempos"quepuedeveracontinuacin.

Extractodelosdatosorigen

Ejemplodetabladinmicaygrficogenerado

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
2.CdigoVBAdelejemplo

El procedimiento GeneraEstadisticas permite generar todas las tablas dinmicas y grficos. Hace una llamada al
procediminetoCreacion_TCDparalacreacindelastablasdinmicas.

Option Explicit
Dim oWbk As Workbook
_____________________________________________________________
Sub GeneraEstadisticas ()
Dim oSheet As Worksheet
Dim oShape As Shape
Dim oChart As Chart
Dim iNumVision As Integer
Dim iNumAct As Integer

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Dim i As Integer
Dim j As Integer
Dim k As Integer

Elimina las hojas existentes


Set oWbk = ThisWorkbook
Application.DisplayAlerts = False
For i = oWbk.Sheets.Count To 2 Step -1
oWbk.Sheets(i).Delete
Next
Application.DisplayAlerts = True

Aade las nuevas hojas


For i = oWbk.Sheets.Count + 1 To 5
oWbk.Sheets.Add after:=oWbk.Sheets(oWbk.Sheets.Count)
Next
oWbk.Sheets(2).Name = "RESUMEN TAREA"
oWbk.Sheets(3).Name = "RESUMEN ACTIVIDAD"
oWbk.Sheets(4).Name = "RESUMEN DIA"
oWbk.Sheets(5).Name = "RESUMEN VISION"

Tabla dinmica Resumen Tarea


Creacion_TCD "TCD1", "Resumen Tarea", "Actividad", "Tarea"

Tabla dinmica Resumen Actividad


Creacion_TCD "TCD2", "Resumen Actividad", "Actividad", ""

Tabla dinmica Resumen Da


Creacion_TCD "TCD3", "Resumen Dia", "Semana", "Da"

Tabla dinmica Resumen Visin


Creacion_TCD "TCD4", "Resumen Vision", "Visin", ""

Recupera el nmero de actividades


iNumAct = Sheets("TIEMPOS").Range("NUM_ACTIVIDADES")

Grfico Resumen por Actividad


Set oSheet = oWbk.Sheets("RESUMEN ACTIVIDAD")
Set oShape = oSheet.Shapes.AddChart(Excel.XlChartType.xl3DPie)
If oShape.HasChart Then
Set oChart = oShape.Chart
With oChart
.SetSourceData Source:= _
oSheet.Range("RESUMEN ACTIVIDAD!$B$6:$D$" & iNbAct + 5)
.ChartTitle.Text = "Resumen del Tiempo de trabajo"
.Parent.RoundedCorners = True
.ApplyDataLabels
.ShowAllFieldButtons = False
End With
End If

Posicin y tamao
With oShape
.Left = 50
.Top = 200

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
.ScaleWidth 1.15, msoFalse, msoScaleFromTopLeft
.ScaleHeight 1.3, msoFalse, msoScaleFromTopLeft
.IncrementLeft -400
.IncrementTop 80
.ThreeD.RotationY = 30
End With

Leyenda del grfico


With oChart.Legend
.Position = xlBottom
.Left = 25
.Top = 200
.Width = 400
.Height = 60
End With

Color de fondo del grfico


Dim oFill As FillFormat
Set oFill = oShape.Fill
With oFill
.ForeColor.RGB = RGB(240, 238, 228)
.Solid
End With

Etiquetas de datos
With oChart.SeriesCollection(1).DataLabels
.ShowPercentage = True
.ShowValue = False
.Position = 5
.NumberFormat = "0%"
End With

Exporta el grfico en formato PDF


oChart.ExportAsFixedFormat xlTypePDF, "C:\TABLA\RESUMEN_ACTIVIDAD"

Recupera el nmero de valores para la columna VISION


iNumAct = Sheets("TIEMPOS").Range("NUM_VISIONES")

Grfico Resumen por Vision


Set oSheet = oWbk.Sheets("RESUMEN VISION")
Set oShape = oSheet.Shapes.AddChart(Excel.XlChartType.xl3DPie)
Set oChart = oShape.Chart
With oChart
.SetSourceData Source:= _
oSheet.Range("RESUMEN VISION!$B$6:$C$" & iNumVision + 5)
.ChartTitle.Text = "Resumen del Tiempo de trabajo"
.Parent.RoundedCorners = True
.ApplyDataLabels
.Legend.Delete
End With

Posicin y tamao
With oShape
.Left = 30
.Top = 200

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
.ThreeD.FieldOfView = 5
End With

Color de fondo del grfico


Set oFill = oShape.Fill
With oFill
.ForeColor.RGB = RGB(240, 238, 228)
.Solid
End With

Etiquetas de datos
With oChart.SeriesCollection(1).DataLabels
.ShowPercentage = True
.ShowValue = False
.ShowCategoryName = True
.Position = 5
.NumberFormat = "0%"
End With

Exporta el grfico en formato PDF


oChart.ExportAsFixedFormat xlTypePDF, "C:\TABLA\RESUMEN_Vision"

Color para las visiones


Dim lRed As Long, lGreen As Long, lBlue As Long
lRed = 0: lGreen = 0: lBlue = 0

Busca el color en el rango VISIONES


Dim sVision As String
Dim rngVision As Range
Set rngVision = Sheets("TIEMPOS").Range("VISIONES")
For j = 1 To iNumVision
sVision = oSheet.Range("B" & 6 + j).Value & Space(0)
If sVision <> "" And sVision <> "(vacio)" Then
For k = 1 To rngVision.Rows.Count
If rngVision.Cells(k, 1) = sVision Then
ColorRGB rngVision.Cells(k, 2).Interior.Color, _
lRed, lGreen, lBlue
Exit For
End If
Next k

Color en el grfico
With oChart.SeriesCollection(1).Points(j).Format.Fill
.ForeColor.RGB = RGB(lRed, lGreen, lBlue)
End With

Color en la tabla dinmica


oSheet.Range("B" & 6 + j).Font.Color = _
RGB(lRed, lGreen, lBlue)
End If
Next j

Posicin en la hoja
Resumen actividad
oWbk.Sheets("Resumen Actividad").Activate

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
Application.ScreenUpdating = True

End Sub

ElprocedimientoCreacion_TCDpermitegenerarunatabladinmicaapartirdedatosdelahoja"TIEMPOS"conlos
siguientesparmetros:nombredelatabladinmica,nombredelahojadedestinoynombredeloscamposdefila.

Private Sub Creacion_TCD(sTCDName As String, sSheetName As _


String, sField1 As String, sField2 As String)
Dim iFil As Integer
Dim oSheet As Worksheet
Dim oCache As PivotCache

Creacin de una tabla dinmica


iFil = 6
oWbk.Activate
Set oSheet = oWbk.Sheets("Tiempos")

Creacin de la cach de la tabla


Set oCache = oWbk.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="TablaTiempos", Version:=xlPivotTableVersion15)

Creacin de la tabla
oCache.CreatePivotTable _
TableDestination:=oWbk.Sheets(sSheetName).Cells(iFil, 2), _
TableName:=sTCDName
Set oSheet = oWbk.Sheets(sSheetName)

Filas de la Tabla
With oSheet.PivotTables(sTCDName).PivotFields(sField1)
.Orientation = xlRowField
.Position = 1
End With
If sField2 <> "" Then
With oSheet.PivotTables(sTCDName).PivotFields(sField2)
.Orientation = xlRowField
.Position = 2
End With
End If
oSheet.PivotTables(sTCDName).CompactLayoutRowHeader = _
UCase(sField1)

Elimina los valores vacos


oSheet.PivotTables(sTCDName).PivotFields(sField1) _
.PivotFilters.Add Type:=16, Value1:="(vacio)"

Tiempos en duracin y porcentaje


oSheet.PivotTables(sTCDName).AddDataField _
oSheet.PivotTables(sTCDName).PivotFields("DURACIN"), _
"TIEMPOS", xlsum
oSheet.PivotTables(sTCDName).AddDataField _
oSheet.PivotTables(sTCDName).PivotFields("DURACIN "), _
"PORCENTAJE", xlsum

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
oSheet.Columns("C").NumberFormat = "[hh]:mm"
With oSheet.PivotTables(sTCDName).PivotFields("PORCENTAJE")
.Calculation = xlPercentOfTotal
.NumberFormat = "0.00%"
End With
oSheet.Columns("B:C").EntireColumn.AutoFit

Formato de la hoja de clculo


Formato oSheet

End Sub

Elprocedimiento Formatopermitedarformatoalasdiferenteshojasdeclculo,mostrarunttuloyelnombredel
empleadoyelperiodo.

Private Sub Formato(zSheet As Worksheet)

Dar formato a una hoja de clculo


With zSheet

Tamao de las columnas


.Columns("A").ColumnWidth = 15
.Columns("E").ColumnWidth = 12

Ttulo
.Cells(1, 1).FormulaR1C1 = zSheet.Name
With .Range("A1:E1").Font
.Bold = True
.Name = "Calibri"
.Size = 16
End With

Fusin de las celdas del ttulo


With .Range("A1:E1")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Merge
End With

Nombre y periodo
.Cells(3, 1).FormulaR1C1 = Sheets("TIEMPOS").Range("EMPLEADO")
.Cells(4, 1).FormulaR1C1 = "Periodo del " _
& Sheets("TIEMPOS").Range("FECHA_INICIO") _
& " au " & Sheets("TIEMPOS").Range("FECHA_FIN")
With .Range("A3:G4").Font
.Bold = True
.Name = "Calibri"
.Size = 12
End With

Fusin de las celdas


With .Range("A3:E3")
.HorizontalAlignment = xlCenter

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
.VerticalAlignment = xlCenter
.Merge
End With
With .Range("A4:E4")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Merge
End With

End With

End Sub

La funcin ColorRGB permite recuperar los valores RGB de un color. En el ejemplo, los colores de los diferentes
valoresposiblesdelcampo"Vision"seconfiguranenelrangollamado"VISIONES"delahoja"TIEMPOS".

Public Function ColorRGB(ByVal lColor As Long, R As Long, _


G As Long, B As Long)

Devuelve los valores RGB de un color


R = Int(lColor Mod 256)
G = Int((lColor Mod 65536) / 256)
B = Int(lColor / 65536)

End Function

- 8- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Creacindeunatabladinmicaconminigrficos

Elejemplosiguientepermite:

l CrearypersonalizarunatabladinmicautilizandolascoleccionesdeobjetosPivotTablesyPivotFields.

l Agregarunformatocondicionaldetipobarradedatos,utilizandolacoleccindeobjetosFormatConditions.

l AgregarminigrficosutilizandolacoleccindeobjetosSparklineGroups.

l Agregarunsegmentoparafiltrarlosdatosdeuncliente,utilizandolacoleccindeobjetosSlicerCaches.

Lahojadeclculo,creadamediantecdigoVBA,sevisualizadelsiguientemodo:

Paraejecutaresteejemplo,realicelassiguientesoperaciones:

Cree un nuevo libro basado en la plantilla Informe de ventas (teclee Informe de ventas en el cuadro
Buscarplantillasenlneaparaaccederaestaplantilla).

GuardeellibrocomoInformedeventas.xlsm.

AsigneelnombreVentas_2015atodaslasceldasdelahoja"Datosorigen"(rango"A1:F278").

Inserteelcdigodelsiguienteprocedimientoenunnuevomdulo.

Ejecuteelcdigo.

Sub Tabla_Dinamica()
Dim wSheet As Worksheet
Dim i As Integer
Dim NumLineas As Integer

Selecciona el rango (origen de datos)


Application.Goto Reference:="Ventas_2015"

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Elimina la hoja TD_Productos si existe
For i = 1 To Worksheets.Count
If Worksheets(i).Name = "TD_Productos" Then
Application.DisplayAlerts = False
Worksheets(i).Delete
Application.DisplayAlerts = True
Exit For
End If
Next i

Crea la hoja TD_Productos


Set wSheet = Sheets.Add
wSheet.Name = "TD_Productos"

Inserta un grfico en la hoja creada


ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, SourceData:="VENTAS_2015", _
Version:=xlPivotTableVersion15).CreatePivotTable _
TableDestination:="TD_PRODUCTOS!R1C1", TableName:= _
"TD Productos", DefaultVersion:=xlPivotTableVersion15

Muestra la lista de campos de la tabla dinmica


ActiveWorkbook.ShowPivotTableFieldList = True

Inserta el campo Producto y los 4 trimestres


With wSheet.PivotTables("TD Productos")

.PivotFields("Producto").Orientation = xlRowField
.PivotFields("Producto").Position = 1

4 campos Trimestre
For i = 1 To 4
.AddDataField ActiveSheet.PivotTables("TD Productos") _
.PivotFields("Tri " & i), "Trimestre " & i, xlSum
Next i

Campo Total 2015


.AddDataField ActiveSheet.PivotTables("TD Productos") _
.PivotFields("Total"), "Total 2015", xlSum

End With

Diseo de la tabla dinmica


With wSheet.PivotTables("TD Productos")

Estilo de la tabla dinmica


.TableStyle2 = "PivotStyleLight16"

Tamao de las columnas


Columns("B:F").Select
Selection.ColumnWidth = 13

Ttulo de los datos


.CompactLayoutRowHeader = "Productos"

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
.DataPivotField.Caption = "Ventas"

Formato moneda para los valores numricos


For i = 1 To 4
.PivotFields("Trimestre " & i).NumberFormat = "# ##0.00 "
Next i
.PivotFields("Total 2015").NumberFormat = "# ##0.00 "

End With

Nmero de filas de la tabla dinmica


Range("B2").Select
Selection.End(xlDown).Select
NumLineas = ActiveCell.Row

Formato condicional Barra de datos


en la ltima columna
Range("F2:F" & NumLineas - 1).Select
Selection.FormatConditions.AddDatabar
With Selection.FormatConditions(1)
.BarColor.Color = 15698432
.BarColor.TintAndShade = 0
.BarFillType = xlDataBarFillGradient
.BarBorder.Type = xlDataBarBorderSolid
End With

Aade un minigrfico de tipo lneas


Range("G2:G" & NumLineas).Select
Range("G2:G" & NumLineas).SparklineGroups.Add _
Type:=xlSparkLine, SourceData:="B2:E" & NumLineas
With Selection.SparklineGroups.Item(1)
.SeriesColor.ThemeColor = 5
.SeriesColor.TintAndShade = -0.5
.Points.Markers.Color.ThemeColor = 5
.Points.Markers.Color.TintAndShade = 0.5
.Points.Highpoint.Color.ThemeColor = 5
End With

Aade un minigrfico de tipo barras


Range("H2:H" & NumLineas).Select
Range("H2:H" & NumLineas).SparklineGroups.Add _
Type:=xlSparkColumn, _
SourceData:="B2:E" & NumLineas
With Selection.SparklineGroups.Item(1)
.SeriesColor.ThemeColor = 5
.SeriesColor.TintAndShade = -0.5
.Points.Markers.Color.ThemeColor = 5
.Points.Markers.Color.TintAndShade = 0.5
.Points.Highpoint.Color.ThemeColor = 5
End With

Aade un segmento en el campo Cliente


ActiveWorkbook.SlicerCaches.Add _
(wSheet.PivotTables("TD Productos"), "Cliente") _
.Slicers.Add ActiveSheet, , "Cliente", "Cliente", _

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
200, 20, 100, 100
ActiveSheet.Shapes.Range(Array("Cliente")).Select

Oculta la lista de campos de la tabla dinmica


ActiveWorkbook.ShowPivotTableFieldList = False

End Sub

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Presentacin

El objetivo principal de los cuadros de dilogo es controlar el intercambio de informacin con el usuario: mostrar
mensajes,pedirinformacin,vistayentrada dedatos,etc.

Existentrestiposdecuadrosdedilogo:

l Los cuadros de dilogo llamados cuadros de dilogo integrados, que permiten, por ejemplo, abrir o guardar un
archivo,definirlasopcionesdeExcel,imprimirhojasdeclculo,ordenardatos,etc.

l Los cuadros de dilogo predefinidos, que permiten mostrar un mensaje, hacer una pregunta al usuario o invitarlo a
introducirunainformacin.

l Los cuadros de dilogo personalizados o formularios, que permiten mostrar o introducir datos en una interfaz
amigable.Lacreacindeformulariospersonalizadosseexplicaenelcaptulosiguiente.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Cuadrosdedilogointegrados

1.ElobjetoDialog

LoscuadrosdedilogointegradossonobjetosDialogpertenecientesalacoleccinDialogsdelobjetoApplication.

Sintaxis

Paramostraruncuadrodedilogo,useelmtodoShowsegnlasiguientesintaxis:Application.Dialogs
(xlDialog).Show

dondexlDialogesunaconstantedeExcelqueindicaelcuadrodedilogoquehayquemostrar.

EjemplosdeconstantesxlDialog

Constante Cuadrodedilogo

xlDialogBorder Bordes

xlDialogFontProperties Fuente

xlDialogDisplay Opcionesdevisualizacin

xlDialogDefineName Definirunnombre

xlDialogFormulaGoto Ira...

xlDialogOpenAbrir Abrir

xlDialogSaveAs Guardarcomo...

xlDialogSort Ordenar

2.LosmtodosGetOpenFileNameyGetSaveAsFileName

Los mtodos GetOpenFileName y GetSaveAsFileName del objeto Application muestran, respectivamente, los
cuadrosdedilogoAbrir...yGuardarcomo...delmenArchivo.

A diferencia de los objetos Dialogs correspondientes (constantes xlOpen y xlSaveAs), estos mtodos no realizan
ningunaaccinsolamentepermitenrecuperarelnombredelarchivointroducidooseleccionadoporelusuario.

SintaxisdelmtodoGetOpenFileName

Application.GetOpenFileName(FileFilter, FilterIndex, Title,


ButtonText, MultiSelect)

Todoslosargumentossonopcionales.

FileFilter Criteriosdefiltrado:nombredelfiltroseguidodelaextensin.Porejemplo:
"PginaWeb(*.htm*.html),*.htm*.html".

FileIndex ndicedelcriteriodefiltradopordefecto.

Title Ttulodelcuadrodedilogo.

ButtonText EtiquetadelbotnAbrir(solamenteparaMacintosh).

MultiSelect Indicasielusuariopuedeseleccionarvariosarchivos.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
SintaxisdelmtodoGetSaveAsFileName

Application.GetSaveAsFileName(InitialeFile, FileFilter,
FilterIndex, Title, ButtonText)

Todoslosargumentossonopcionales.

InitialeFile NombredelarchivoqueapareceenlazonadetextoNombre.Siseomiteeste
argumento,Excelusaelnombredellibroactivo.

LosotrosargumentossonlosmismosquelosargumentosdelmtodoGetOpenFileName.

Ejemplo

Esteejemplopermite:

l MostrarelcuadrodedilogoAbrirconlaposibilidaddeseleccionarmsdeunarchivo.

l Guardar en una matriz los nombres de los archivos seleccionados del tipo indicado (extensin xlsm) y que no se
encuentrenyaabiertos.

l Mostrarunmensajequeindicalosarchivosqueseabrirn.

l Abriresosarchivostraspedirconfirmacin.

Sub AbreLibros()
Dim varFiles As Variant
Dim xlFiles() As Variant
Dim blnAbierto As Boolean
Dim strMensaje As String
Dim objWbk As Workbook
Dim i As Integer
Dim j As Integer

Muestra el cuadro de dilogo Abrir


varFiles = Application.GetOpenFilename _
(filefilter:="Archivos Excel (*.xlsm),*.xlsm", _
Title:="Seleccione los archivos que hay que abrir", _
MultiSelect:=True)
Prueba si los archivos han sido seleccionados
If TypeName(varFiles) = "Variant()" Then
ReDim xlFiles(UBound(varFiles))
For i = 1 To UBound(varFiles)
Controla la extensin del archivo
If Right(varFiles(i), 4) = "xlsm" Then
Prueba si el archivo ya est abierto
blnAbierto = False
For Each objWbk In Workbooks
If objWbk.Path & "\" & objWbk.Name = varFiles(i) Then
blnAbierto = True
End If
Next objWbk
Guarda el nombre del archivo en una matriz
If Not blnAbierto Then

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
j = j + 1
xlFiles(j) = varFiles(i)
strMensaje = strMensaje & varFiles(i) & vbCr
End If
End If
Next i

Abre todos los archivos de Excel tras confirmacin


If j > 0 Then
strMensaje = "Confirme la apertura de los archivos: " _
& vbCr & strMensaje
If MsgBox(strMensaje, vbYesNo + vbQuestion) = vbYes Then
For i = 1 To j
Workbooks.Open Filename:=xlFiles(i)
Next i
End If
End If
Else
MsgBox "Ningn archivo seleccionado"
End If
End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Cuadrosdedilogopredefinidos

1.LafuncinInputBox

Muestraunapregunta(unasolicituddedatos)ydevuelveeltextoescritoporelusuario.

InputBox(prompt,title,default,xpos,ypos,helpfile,context)

prompt Cadenaqueaparecercomomensaje.

title Cadenaqueaparecerenlabarradettulo.

default Valortomadopordefecto.

xpos Posicinhorizontaldelcuadrodedilogo(expresadoentwips).

ypos Posicinverticaldelcuadrodedilogo(expresadoentwips).

helpfile Nombredelarchivodeayudacontextual.

context Nmerodelcontextodeayuda.

Ejemplo

Esteejemplomuestrauncuadrodedilogoquepideelnombredelasceldas quehayqueborrar(lasceldasrecibenelnombre
decadames).

Sub Borrar_Celdas_Nombradas()
Dim sOpcion As String
Pide introducir el mes que hay que borrar
Si el mes se reconoce, borra las celdas con nombre
Si no, muestra un mensaje de error
sOpcion = InputBox( _
Prompt:="Qu mes desea borrar?", _
Title:="Borrar celdas")
On Error GoTo Err
Application.Goto reference:=sOpcion
Selection.Clear
Exit Sub

Err:
MsgBox "No se puede borrar, nombre de celda inexistente"
End Sub

2.ElmtodoInputBox

ActacomolafuncinInputBox,peropermitecontrolareltipodedatosquehayqueintroducir.

objeto.InputBox(prompt,title,default,left,top,helpfile,
helpContextID,type)

ElobjetoesobligatorioydebeserunobjetoApplication.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
prompt Mensajemostrado.

title Ttulodelcuadrodedilogo.

default Valortomadopordefecto.

left Posicinhorizontaldelcuadrodedilogo(enpuntos).

top Posicinverticaldelcuadrodedilogo(enpuntos).

helpfile Nombredelarchivodeayudaenlnea.

helpContextID Nmerodelcontextodeayuda.

type Tipodedatosquesedevolver:
0:Frmula
1:Nmero
2:Cadena
4:ValorBooleano
8:Referenciadecelda
16:Valordeerror
64:Matrizdevaloresenunaseleccindeceldas.

Para aceptar varios tipos de datos, haga la suma de los valores. Por ejemplo, si se puede aceptar un texto o un
nmero,indiqueelvalor3(1+2)comotipo.

Ejemplo

Pidealusuarioseleccionarlaceldaolasceldasquehayquepintar.

Sub Celdas_A_Pintar()
Dim strRep as Range
Si el usuario selecciona celdas,
estas se pintan de rojo
Si hace clic en Cancelar, termina el procedimiento
On Error GoTo Err
Set strRep = Application.InputBox( _
Prompt:="Seleccione la celda o las celdas que hay que pintar", _
Title:="Celda que hay que pintar", Default:="A1", Type:=8)
strRep.Interior.ColorIndex = 3

Err:
End Sub

3.LafuncinMsgBox

Estafuncinmuestraunmensajeenuncuadrodedilogo.Puedeincluiruniconoydeunoatresbotones.

Sintaxisdelainstruccin

Usadacuandoapareceunnicobotn.

MsgBox <message> [, [<type>][, <title>]]

Sintaxisdelafuncin

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Usadacuandoaparecemsdeunbotn.Permitesaberqubotnactivelusuario,atravsdelvalordevuelto.

MsgBox (<message> , [<buttons>][, <title>]


[,helpfile, context])

message Textodelmensajequeapareceenelcuadrodedilogo.

buttons Expresinnumricaquerepresentalasumadelosvaloresqueespecificanlosbotones
quehayquemostrar,eltipodeiconoquehayqueusar,laidentidaddelbotnpor
defectoylamodalidaddelcuadro.

title Textoenlabarradettulo.

helpfile Archivodeayudaquehayqueusar.

context Nmerodelcontextodeayuda.

ValoresdelargumentoButtons

Constantesimblica Valor Significado

Nmeroytipodelosbotones

vbOKOnly 0 MuestrasolamenteelbotnAceptar.

vbOKCancel 1 MuestralosbotonesAceptaryCancelar.

vbAbortRetryIgnore 2 MuestralosbotonesAnular,Reintentare Ignorar.

vbYesNoCancel 3 MuestralosbotonesS,NoyCancelar.

vbYesNo 4 MuestralosbotonesSyNo.

vbRetryCancel 5 MuestralosbotonesReintentaryCancelar.

vbMsgBoxHelpButton 16384 Muestraunbotndeayuda.

Tipodeicono

vbCritical 16
Muestraelicono

vbQuestion 32
Muestraelicono

vbExclamation 48
Muestraelicono

vbInformation 64
Muestraelicono

Botnpordefecto

vbDefaultButton1 0 Primerbotn.

vbDefaultButton2 256 Segundobotn.

vbDefaultButton3 512 Tercerbotn.

vbDefaultButton4 768 Cuartobotn.

Modalidad

vbApplicationModal 0 Aplicacinmodal.
Elusuariodeberesponderalmensajequeapareceen
elcuadrodemensajesantesdeseguirtrabajandoen
laaplicacin actual.

vbSystemModal 4096 Sistemamodal.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Sesuspendentodaslasaplicacioneshastaqueel
usuariorespondaalmensajequeapareceenelcuadro
demensajes.

Presentacin

vbMsgBoxSetForeground 65536 Muestralaventanadelcuadrodemensajeenprimer


plano.

vbMsgBoxRight 524288 Alineaeltextoaladerecha.

vbMsgBoxRtlReading 1048576 Especificaelordendelecturadederechaaizquierda


paralossistemashebreoyrabe.

Losvaloresdevueltostambinsedefinenmedianteconstantes:

Constante Valordevuelto Botnelegido

vbOK 1 Aceptar

vbCancel 2 Cancelar

vbAbort 3 Anular

vbRetry 4 Reintentar

vbIgnore 5 Ignorar

vbYes 6 S

vbNO 7 No

Ejemplos:usodelafuncinMsgBox

iRep = MsgBox ("Por favor, confirme", 292, _


"Confirmacin")

iRep = MsgBox ("Desea guardar los cambios?", _


vbYesNo + vbQuestion + vbDefaultButton2, _
"Confirmacin")

UsodelainstruccinMsgBox

MsgBox "Resultado incorrecto",vbCritical,"Error"

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Ejemplo

Lasiguientemacropidealusuarioqueseleccionelascolumnasquesedeben eliminar(laseleccindecolumnassepuedehacer
apartirdeunaomsceldasdelacolumna)yqueconfirmelaeliminacin.

Sub Confirmacion()
Dim oCualCol As Range
Dim vAConfirmar as Variant
Elegir las columnas
Set oCualCol = Application.InputBox( _
Prompt:="Seleccione las columnas que desea eliminar", _
Title:="Elija las columnas", _
Type:=8)
Set oCualCol = oCualCol.EntireColumn
Selecciona las columnas y pide confirmacin
oCualCol.Select
vAConfirmar = MsgBox( _
Prompt:="Confirma la eliminacin de las columnas seleccionadas?", _
Title:="Eliminacin de las columnas", _
Buttons:=vbYesNo + vbExclamation + vbDefaultButton2)
If vAConfirmar = vbYes Then oCualCol.Delete
End Sub

4.Constantesusadasenloscuadrosdedilogo

Enlosmensajesdeloscuadrosdedilogo,puedeusarlassiguientesconstantesparainsertaralgunoscaracteres
especiales.

Carcterquedeseainsertar Constante Equivalente

Retornodecarroysaltodelnea vbCrLf Chr(13)+Chr(10)

Saltodeprrafo vbCr Chr(13)

Saltodelnea vbLf Chr(10)

Carcternulo vbNullChar Chr(0)

Diferenteaunacadenadelongitudnula vbNullString Cadenaquetieneelvalorcero

Tabulacin vbTab Chr(9)

Retroceso vbBack Chr(8)

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
Estasconstantespuedenusarseenotrasinstrucciones,ademsdeloscuadrosdedilogo.

Ejemplo

Paramostrarestecuadrodedilogo:

seutilizelsiguienteprocedimiento:

Sub Identificacion()
MsgBox "Usted es:" & vbCr & vbTab _
& Application.UserName & vbCr & vbTab _
& ThisWorkbook.BuiltinDocumentProperties("Company")
End Sub

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Presentacin

Losformularios(tambinllamadoscuadrosdedilogopersonalizados,formulariospersonalizados,hojasdelusuarioo
UserForm) permiten disponer de interfaces de usuario simples y amigables para la introduccin, modificacin o
visualizacindedatos.

Losformulariospersonalizadossoncuadrosdedilogosobrelosquesepuede:

l UbicarcontrolesActiveX,talescomocuadrosdeentradadetexto,listasdesplegables,botonesdecomando,etc.

l Asociar cdigo VBA para responder a distintos eventos del usuario (clic en un botn de comando, introduccin de
textoenunazona,seleccinenunalistadesplegable,etc.).

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Presentacin

Losformularios(tambinllamadoscuadrosdedilogopersonalizados,formulariospersonalizados,hojasdelusuarioo
UserForm) permiten disponer de interfaces de usuario simples y amigables para la introduccin, modificacin o
visualizacindedatos.

Losformulariospersonalizadossoncuadrosdedilogosobrelosquesepuede:

l UbicarcontrolesActiveX,talescomocuadrosdeentradadetexto,listasdesplegables,botonesdecomando,etc.

l Asociar cdigo VBA para responder a distintos eventos del usuario (clic en un botn de comando, introduccin de
textoenunazona,seleccinenunalistadesplegable,etc.).

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Crearunformulario

UnformulariosecreaenunahojaUserForm.

ParainsertarunahojaUserForm,accedaaMicrosoftVisualBasicyluegoseleccionelasopcionesInsertar
UserForm.

SeagregarunahojallamadaUserFormn(porejemplo:UserForm1),aparecerunformulariovacoyel
cuadrodeherramientas.

Paramostrarlaventanadepropiedades,seleccionelasopcionesVerVentana Propiedades,hagaclicen

elbotn opulselatecla[F4].

(Name)

Nombredelformulario.

Caption

Textoenlabarradettulo.

Para dimensionar el formulario, seleccinelo y arrastre los controladores de tamao o indique las
propiedadesHeightyWidthdelformulario.

LaopcinControlesadicionalespermiteagregarotroscontrolesdesdelabarradeherramientas.

Listadecontroles

Herramienta Nombre Objeto

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Etiqueta Label

Cuadrodetexto TextBox

Cuadrocombinado ComboBox

Cuadrodelista ListBox

Casilladeverificacin CheckBox

Botndeopcin OptionButton

Botndealternar ToggleButton

Marco Frame

Botndecomando CommandButton

Barradetabulaciones TabStrip

Pginamltiple(seleccindepginas) Multipage

Barradedesplazamiento ScrollBar

Botndenmero(seleccindevalores) SpinButton

Imagen Image

RefEdit(seleccinderangos) RefEdit

Dibujaruncontrol

Seleccioneelcontrolquedeseacrearyarrastreelpunteroparadefinirunrearectangular.

Alsoltarelbotndelratn,aparecerelcontrolylaherramientaSeleccionarobjetos pasaraserla

herramientaactiva.

Paradibujarvarioscontrolesdelmismotipo,hagadobleclicenlaherramientacorrespondiente.

Algunaspropiedades

(Name)

Especificaelnombredelcontrol.

Caption

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Indicaeltextodeunaetiqueta.

ControlTipText

Creaunaetiquetainformativa.

Visible

Especificasiuncontrolestocultoovisible.

Enabled

Determinasielfocopuedeestarsobreelcontrol.

Value

Defineelestadooelcontenidodeuncontrol.

ControlSource

Vinculauncontrolaunacelda(cuadrodetexto)ounrangodeceldas(cuadrodelista).

Determinarelaccesoauncontrol

Paradefinirelordendetabulacin,seleccionelasopciones:

VerOrdendetabulacin

Para desactivar la posibilidad de usar la tecla [Tab] para acceder a un control, seleccione el control e
indiqueFalseenlapropiedadTabStop.

Paraasignarunatecladeaccesorpido,seleccioneelcontroleindiquelatecladeaccesoenlapropiedad
Accelerator.

Si el acceso rpido se aplica a un control Label, el control que sigue al Label en el orden de tabulacin recibir el
foco,ynoelcontrolLabelpropiamentedicho.

Tamaodeuncontrol

Para modificar el tamao de un control, seleccione los controles y arrastre el controlador de tamao o
seleccione el control e indique las propiedades Height y Width, que determinan el alto y el ancho del
control,enpuntos.

Parauniformizarlostamaos,seleccioneloscontrolesquedeseadimensionaryvayaalmen Formato
Igualartamao.

Enfuncindeltamaodeseado,elijaAncho,AltooAmbos.

Para ajustar el tamao, seleccione los controles que desea ajustar y seleccione las opciones Formato
AjustartamaoalcontenidooAjustartamaoalacuadrcula.

Ubicaruncontrol

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Paradefinirlaposicindeuncontrol,seleccioneelcontrolquedeseamoveryarrastreelratnoseleccione
elcontrolyasignelaspropiedadesLeftyTopqueindicanladistanciaentreelcontrolyelbordeizquierdoy
superiordelformulario.

Para alinear controles entre ellos, seleccione los controles que desea alinear y a continuacin vaya a la
opcinAlineardelmenFormato.

Segnelcontroldereferencia,elija:Izquierda,Centro,Derecha,Superior,Medio,InferioroAla
cuadrcula.

Para administrar el espaciado entre controles, seleccione los controles y vaya a las opciones Formato
EspaciohorizontaloEspaciovertical.

Enfuncindelespaciodeseado,seleccionelasopcionesIgualar,Aumentar,DisminuiroQuitar.

Para centrar un control en el formulario, seleccione el control y a continuacin Formato Centrar en el


formularioHorizontalmenteoVerticalmente.

Aplicarformato

Asignelassiguientespropiedades:

Font

Definelatipografa.

BackColor

Especificaelcolordefondo.

ForeColor

Especificaelcolordeprimerplano.

BorderColor

Especificaelcolordelborde.

BorderStyle

Especificaeltipodeborde.

SpecialEffect

Especificaelaspectodelobjetoenlapantalla.

Administrarlasfuturasentradas

PasswordChar

Indicaelcarcterquehayquemostrarenlugardeloscaracteresrealesintroducidosporelusuario.

MaxLength

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Especificaellargomximodeunaentrada.

AutoTab

Fuerzaunatabulacinautomticacuandounaentradaalcanzaelmximolargodecaracterespermitido.

AutoSize

Redimensionaautomticamenteuncontrolparamostrartodosucontenido.

AutoWordSelect

Especificasiunapalabraouncarctereslaunidadbsicautilizadaparaextenderlaseleccin.

DragBehavior

Indicasielsistemaaceptalafuncinarrastrarysoltar.

EnterKeyBehavior

Defineelefectodelatecla[Intro].

HideSelection

Indicasieltextoseleccionadopermaneceresaltadocuandouncontrolpierdeelfoco.

IntegralHeight

Indicasielcontrolmuestralaslneascompletasdetextoenunalistaolneasparcialesenelsentido
vertical.

Locked

Indicasisepuedemodificaruncontrol.

MultiLine

Definesiuncontrolpuedeaceptarymostrarvariaslneasdetexto.

SelectionMargin

Especificasielusuariopuedeseleccionarunalneadetextoalhacerclicalaizquierdadeltexto.

TabKeyBehavior

Determinasisepermitenlastabulacionesenlazonadeedicin.

TextAlign

Indicaeltipodealineacindeltextoenuncontrol.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
WordWrap

Indicasiseagregaautomticamenteunretornodecarroalcontenidodeuncontrolalfinaldeunalnea.

Resumendepropiedadesporobjeto

Check Combo Command Frame Image Label ListBox Multi


Box Box Button Page

(Name) X X X X X X X X

Accelerator X X X

AutoSize X X X X X

AutoTab X

AutoWordSelect X

BackColor X X X X X X X X

BorderColor X X X X X

BorderStyle X X X X X

Caption X X X X

ControlSource X X X

ControlTipText X X X X X X X

DragBehavior X

Enabled X X X X X X X X

EnterKeyBehavior

Font X X X X X X X

ForeColor X X X X X X X

Height X X X X X X X

HideSelection X

IntegralHeight X

Left X X X X X X X

Locked X X X X

MaxLength X

MultiLine

PassWordChar

SelectionMargin X

SpecialEffect X X X X X X

TabKeyBehavior

TabStop X X X X X X

TextAlign X X

Top X X X X X X X

Value X X X X X

Visible X X X X X X X X

Width X X X X X X X

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
WordWrap X X X

Option Scroll Spin TabStrip TextBox Toggle RefEdit


Button Bar Button Button

(Name) X X X X X X X

Accelerator X X

AutoSize X X X X

AutoTab X X

AutoWordSelect X X

BackColor X X X X X X X

BorderColor X X

BorderStyle X X

Caption X X

ControlSource X X X X X

ControlTipText X X X X X X X

DragBehavior X X

Enabled X X X X X X X

EnterKeyBehavior X X

Font X X X X X

ForeColor X X X X X X X

Height X X X X X X X

HideSelection X X

IntegralHeight X X

Left X X X X X X X

Locked X X X X

MaxLength X X

MultiLine X X

PassWordChar X X

SelectionMargin X X

SpecialEffect X X X X

TabKeyBehavior X X

TabStop X X X X X X X

TextAlign X X

Top X X X X X X X

Value X X X X X X X

Visible X X X X X X X

Width X X X X X X X

WordWrap X X X X

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
Personalizarunformulario

1.Escribirprocedimientos

Paramostrarlaventanadecdigodeuncontrol:

hagadobleclicenelcontrolparaelquedeseeasignaruncdigo,oseleccioneelcontrolyseleccione
lasopciones:

VerCdigoo[F7]

Parainsertarunnuevoevento,abralalistadeladerechayseleccioneeleventodeseado.

Sinoindicaunevento,eleventosugeridoparalamayoradeloscontroleseseleventoClick.

Paravolveramostraruncontrol,seleccionelasopciones:

VerObjetoo[Mays][F7]

2.Listadeeventosasociadosalosprincipalescontroles

Activate

Ocurrecuandoseactivalahoja.

AddControl

Ocurrecuandoseinsertauncontrolenunahoja.

AfterUpDate

Ocurretrasmodificardatos.

BeforeDragOver

Ocurrecuandoseestejecutandounaoperacindearrastrarysoltar.

BeforeDropOrPaste

Ocurrecuandoelusuarioestapuntodecolocaropegardatosenunobjeto.

BeforeUpDate

Ocurreantesdelamodificacindedatos.

Change

OcurrecuandosemodificalapropiedadValue.

Click

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Ocurrecuandoelusuariohaceclicenuncontrolocuandoseleccionadefinitivamenteunvalorparaun
controlconmsdeunvalorposible.

DblClick

Ocurrecuandoelusuariohacedobleclic.

DeActivate

Ocurrecuandolahojadejadeserlaventanaactiva.

DropButtonClick

Ocurrecadavezquesemuestraoseocultaunalistadesplegable.

Enter

Ocurreantesdequeuncontrolrecibarealmenteelfocodesdeuncontroldelamismahoja.

Error

Ocurrecuandouncontroldetectaunerrorynopuededevolverinformacindelerroralprogramaque
lohallamado.

Exit

Ocurreinmediatamenteantesdequeuncontrolpierdaelfocoenfavordeotrocontroldelamisma
hoja.

Initialize

Ocurredespusdequesecargaunobjeto,peroantesdequesemuestre.

KeyDown

Ocurrecuandoelusuariopulsaunatecla.

KeyPress

OcurrecuandoelusuariopulsaunateclaANSI.

KeyUp

Ocurrecuandoelusuariosueltaunatecla.

Layout

Ocurrecuandocambiaeltamaodeuncontrol.

MouseDown

Ocurrecuandoelusuariopulsaelbotndelratn.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
MouseMove

Ocurrecuandoelusuariomueveelratn.

MouseUp

Ocurrecuandoelusuariosueltaelbotndelratn.

QueryClose

Seproduceantesdecerrarlahoja.

RemoveControl

Ocurrecuandoseeliminaelcontroldelcontenedor.

Resize

Seproducecuandocambiaeltamaodelahoja.

Scroll

Ocurrecuandosevuelveareubicaruncuadrodedesplazamiento.

SpinDown

Ocurrecuandoelusuariohaceclicenlaflechainferioroizquierdadelcontador.

SpinUp

Ocurrecuandoelusuariohaceclicenlaflechasuperioroderechadelcontador.

Terminate

Ocurretrasladescargadelahoja.

Zoom

OcurrecuandocambiaelvalordelapropiedadZoom.

Resumendeeventosporcontrol

Check Combo Command Frame Image Label List Multi


Box Box Button Box page

Activate

AddControl X X

AfterUpdate X X X

BeforeDragOver X X X X X X X X

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
BeforeDropOrPaste X X X X X X X X

BeforeUpdate X X X

Change X X X X

Click X X X X X X X X

DblClick X X X X X X X X

Deactivate

DropButtonClick X

Enter X X X X X X

Error X X X X X X X X

Exit X X X X X X

Initialize

KeyDown X X X X X X

KeyPress X X X X X X

KeyUp X X X X X X

Layout X X

MouseDown X X X X X X X X

MouseMove X X X X X X X X

MouseUp X X X X X X X X

RemoveControl X X

Terminate

Scroll X X

SpinDown

SpinUp

Zoom X X

QueryCLose

Resize

Option Scroll Spin Tab Text Toggle User Ref


Button Bar Button Strip Box Button Form Edit

Activate X

AddControl X

AfterUpdate X X X X X X X

BeforeDragOver X X X X X X X X

BeforeDropOrPaste X X X X X X X X

BeforeUpdate X X X X X X

Change X X X X X X X

Click X X X X

DblClick X X X X X X

Deactivate X

DropButtonClick X X

Enter X X X X X X X

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Error X X X X X X X X

Exit X X X X X X X

Initialize X X

KeyDown X X X X X X X

KeyPress X X X X X X X X

KeyUp X X X X X X X X

Layout X X

MouseDown X X X X X

MouseMove X X X X X X

MouseUp X X X X X X

RemoveControl X X

Terminate X

Scroll X X

SpinDown X

SpinUp X

Zoom X

QueryCLose X

Resize X

Cancelarunevento

Enciertoscasos,resultanecesariopodercancelarunevento.

Paraello,sedebeasignarelvalorTruealargumentoCanceldelprocedimientoasociadoaunevento.

Ejemplo

Silafechaintroducidaesincorrecta,secancelaeleventoExit:elcursorquedasituadoenlazonadetexto.

Private Sub txtFechaFin_Exit(ByVal Cancel As _


MSForms.ReturnBoolean)

If IsNull(txtFechaFin) Then Exit Sub


La fecha debe ser correcta
If Not IsDate(txtFechaFin) Then
MsgBox "Fecha incorrecta", vbCritical
Cancel = True
Exit Sub
End If
La fecha de fin debe ser >= fecha de inicio
If DateValue(txtFechaFin) < DateValue(txtFechaIni) Then
MsgBox "La fecha de fin es anterior a la fecha de inicio", vbCritical
Cancel = True
Exit Sub
End If
End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
Solamente los eventos BeforeDragOver, BeforeDropOrPaste, BeforeUpdate, DblClick, Exit, Error y QueryClose
tienenunargumentoCancel.Losdemseventosnopuedencancelarse.

3.Ejecutarycerrarunformulario

ParaejecutarunformulariodesdedelahojaUserForm,seleccionelasopciones:


EjecutarEjecutarSub/UserFormo o[F5]

Paraejecutarunformulariodesdeunmdulo,useelmtodoShowolainstruccin Load.

Show(mtodo)

Sintaxis

ObjetoUserForm.Show

MuestraelobjetoUserFormindicado.

Load(instruccin)

Sintaxis

Load ObjetoUserForm

Cargaelobjetosinmostrarlo.

Paracerrarunformulario,useelmtodoHideolainstruccinUnload.

Hide(mtodo)

Sintaxis

ObjetoUserForm.Hide

Ocultaelformulariosindescargarlo.

Unload(instruccin)

Sintaxis

Unload ObjetoUserForm

Eliminaelformulariodelamemoria.

Eventosinvocados

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Losmtodoseinstruccionesdeejecucinydecierredeformulariosdesencadenanlossiguienteseventos:

Mtodooinstruccin Eventos

Show Initialize

Activate

Load Initialize

Hide Sinevento

Unload QueryClose

Terminate

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
Ejemplodeformulariopersonalizado

1.Presentacin

Esteejemplomuestracmocrearunformulariopersonalizadoparaintroduciromodificarlaspestaas"empleados".
EllibroEmpleados.xlsmcontienedoshojasdeclculoyunformulario.

Lahoja"Empleados"contienelalistadeempleados:

Lahoja"Servicios"contienelalistadeservicios:

Elformulario"Empleados"permite:

l ModificarlainformacindeunempleadoyactualizarlahojadeExcelEmpleados.

l CrearunnuevoempleadoyagregarloalalistadelahojadeExcelEmpleados.

LalistadeserviciosseleedesdelahojaServicios.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
ListadecontrolesdelformularioEmpleados:

N. Tipodecontrol Nombre

1 Cuadrodelista lstEmpleados

2 Botndecomando cmdNuevo

3 Botndeopcin optSra

4 Botndeopcin optSrta

5 Botndeopcin optSr

6 Cuadrodetexto txtApellido

7 Cuadrodetexto txtNombre

8 Cuadrodelista lstServicios

9 Botndecomando cmdAceptar

10 Botndecomando cmdCerrar

2.CdigoasociadoalbotnmacrodelapestaaEmpleados

EstecdigoestcontenidoenelmdulodeclaseThisWorkbook.

Sub Mostrar_Formulario()
Muestra el formulario Empleados
Empleados.Show
End Sub

3.CdigoVBAasociadoalformulario

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Option Explicit
Nombre de la aplicacin
Const strAppName = "Entrada de empleados"
Dim bNuevo As Boolean
________________________________________________________________
Private Sub UserForm_Initialize()
Dim oRng As Range
Dim oCell As Range
Muestra la lista de servicios
With ThisWorkbook.Worksheets("Servicios")
.Activate
Set oRng = .Range("A1").CurrentRegion
Ordena los servicios por orden alfabtico
oRng.Sort Key1: =Range("A1")
lstServicios.Clear
For Each oCell In oRng
If oCell.Text <> "" Then
lstServicios.AddItem oCell.Text
Else
Exit For
End If
Next oCell
End With
Muestra la lista de empleados
Mostrar_Empleados
lstEmpleados.ListIndex = 0
Nuevo empleado por defecto
bNuevo = True
End Sub
________________________________________________________________
Private Sub Mostrar_Empleados()
Dim oRng As Range
Dim oLinea As Range
Muestra la lista de empleados
With ThisWorkbook.Worksheets("Empleados")
.Activate
Set oRng = .Range("A3").CurrentRegion
Set oRng = .Range("A4: D" & oRng.Rows.Count + 3)
lstEmpleados.Clear
For Each oLineaIn oRng.Rows
If Cells(oLinea.row, 2) <> "" Then
lstEmpleados.AddItem Cells(oLinea.row, 2) & " " &
Cells(oLinea.row, 3)
Else
Exit For
End If
Next oLinea
End With
End Sub
________________________________________________________________
Private Sub cmdAceptar_Click()
Dim oRng As Range
Dim i As Integer
Control de datos introducidos

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
If txtNombre = "" Or txtApellido = "" _
Or IsNull(lstServicios) Then
MsgBox "Nombre, apellido y servicio obligatorio", _
vbExclamation, strAppName
txtNombre.SetFocus
Exit Sub
End If
If Not (optSr Or optSra Or optSrta) Then
MsgBox "Tratamiento obligatorio", vbExclamation, strAppName
optSr.SetFocus
Exit Sub
End If
With ThisWorkbook.Worksheets("Empleados")
Agrega el empleado en la primera fila vaca
If bNuevo Then
Set oRng = .Range("A3").CurrentRegion
i = oRng.Rows.Count + 3
Else
Modifica el empleado seleccionado
i = lstEmpleados.ListIndex + 4
End If
If optSr Then
.Cells(i, 1) = "Sr."
ElseIf optSra Then
.Cells(i, 1) = "Sra."
Else
.Cells(i, 1) = "Srta."
End If
.Cells(i, 3) = Empleados.txtNombre
.Cells(i, 2) = Empleados.txtApellido
.Cells(i, 4) = Empleados.lstServicios
Ordena los empleados
Ordenar_Empleados
End With
Muestra la lista de empleados
If bNuevo Then Mostrar_Empleados
Inicializa_Empleados
End Sub
________________________________________________________________
Private Sub cmdCerrar_Click()
Pide confirmacin y cierra el formulario
If MsgBox("Desea terminar la insercin de datos?", _
vbQuestion + vbYesNo, strAppName) = vbYes Then
Unload Me
End If
End Sub
________________________________________________________________
Private Sub cmdNuevo_Click()
Inicializa la pestaa Empleados
Inicializa_Empleados
bNuevo = True
End Sub
________________________________________________________________
Private Sub Ordenar_Empleados()
Dim oRng As Range

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Ordena la lista de empleados por apellido y nombre
Set oRng = Worksheets("Empleados").Range("A3").CurrentRegion
oRng.Sort Key1:=Range("B3"), Order1:=xlAscending, _
Key2:=Range("C3"), Order2:=xlAscending, _
Header:=xlYes
End Sub
________________________________________________________________
Private Sub Inicializa_Empleados()
Dim i As Integer
Inicializa el formulario para la prxima insercin de datos
With Empleados
txtNombre = ""
txtApellido = ""
optSr = False
optSra = False
optSrta = False
For i = 0 To lstServicios.ListCount - 1
lstServicios.Selected(i) = False
Next i
End With
End Sub
________________________________________________________________
Private Sub lstEmpleados_Click()
Dim i As Integer
Dim j As Integer
Muestra el empleado seleccionado
bNuevo = False
i = lstEmpleados.ListIndex + 4
With ThisWorkbook.Worksheets("Empleados")
Select Case .Cells(i, 1)
Case "Sr.": optSr = True
Case "Sra.": optSra = True
Case "Srta.": optSrta = True
End Select
Empleados.txtNombre = .Cells(i, 3)
Empleados.txtApellido = .Cells(i, 2)
For j = 0 To Empleados.lstServicios.ListCount - 1
If Empleados.lstServicios.List(j) = .Cells(i, 4) Then
Empleados.lstServicios.ListIndex = j
End If
Next j
End With
End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
Presentacin

Laversin2016deMicrosoftOfficepermitepersonalizarlacintadeopcionesagregando,relocalizandooeliminando
pestaas y comandos (ver el captulo Presentacin). Esta innovacin no permite tener cintas especficas para un
libro determinado.

Sinembargo,existendossolucionesparatenerunacintapersonalizadapropiadeundeterminadolibro:

l Lautilidad CustomUIEditor,quepermitecrearunacintapersonalizadapormediodecdigoXMLeinteractuarconla
cintaatravsdeprocedimientosVBA.

l LacoleccinCommandBars,quepermitecrearbarrasdeherramientasymensenlapestaaComplementos.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
PersonalizacindelacintaconlautilidadCustomUIEditor

1.PresentacindelautilidadCustomUIEditor

LautilidadCustomUIEditorpermitepersonalizarntegramentelacintadeopcionesasociadaaunlibro,pormedio
decdigoXML.EstautilidadsepuededescargardesdeelsitiooficialdeMicrosoft.Tambinestdisponibleconlos
ejemplosdeestecaptulo.

ParausarlautilidadCustomUIEditor,sedebedisponerdelpaquetederedistribucin.NETFramework 2.Siesteno
eselcaso,unvnculodedescargaselopropondralinstalarlautilidad.

Unavezinstaladalautilidad,podrpersonalizarlacintadeopcionesdeunlibro delasiguientemanera:

CreeunnuevolibroenExcel2016ygurdeloenformatoxlsm(librohabilitadoparamacros).

Cierreellibro:siestabierto,elcdigoXMLnopodrgrabarsedesdelautilidaddepersonalizacin.

EjecutelaherramientaCustomUIEditor.


AbraellibroconlaopcinArchivoyluegoAbriroconelbotndecomando .

EscribaelcdigoXMLdepersonalizacindelainterfaz.


HagaclicenelbotnValidate paraverificarlasintaxisdelcdigo.

Haga clic en el botn Generate CallBacks para generar el cdigo VBA de los procedimientos

asociadosalasfuncionespersonalizadasonAction.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Copie el cdigo en el Portapapeles: podr luego pegarlo en un mdulo asociado a su libro e incluir su
propiocdigoVBAenlosdistintosprocedimientos.


GuardeellibroconlaopcinSavedelapestaaFileoconelbotndecomando .

CierrelaherramientaconlaopcinExitdelapestaaFile.

AbrasulibrodesdeExcel:aparecerlanuevacintadeopciones.

UsteddeberincluirlosprocedimientosonActionenunmduloVBAypersonalizarelcdigoasociadoalos
diferentesbotonesdecomando.

2.EjemplodecdigoXMLdepersonalizacin

ElsiguientecdigoXMLpermitecrearunapestaapersonalizadacondosgruposqueincluyenbotonesdecomando
dediferentestamaos.

<customUI
xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">

<tabs>

<!-- Creacin de una pestaa personalizada -->


<tab id="PESTAA_PERSO" label="Pestaa personalizada">

<!-- Grupo personalizado -->


<group id="Grupo1" label="Grupo personalizado">
<button id="btn_Imprimir" label="Imprimir"

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
imageMso="FilePrint"
onAction="Impresion"
tag="Impresin"
size="large" />

<button id="btn_Grabar" label="Grabar"


imageMso="FileSave"
onAction="Guarda"
tag="Grabar"
size="normal" />

<button id="btn_Salir" label="Salir"


imageMso="PrintPreviewClose"
onAction="Fin"
tag="Salir"
size="normal" />

</group>

<!-- Grupo Documentacin -->


<group id="Grupo2" label="Documentacin">

<button id="btn_Leame" label="Leame"


imageMso="FunctionsLookupReferenceInsertGallery"
onAction="Leer"
tag="Leame"
size="large" />
</group>

</tab>
</tabs>
</ribbon>
</customUI>

Pararealizaresteejemplo:

CreeellibroCintapersonalizada.xlsmdesdeExcel2016.Gurdeloycirrelo.

AbraeselibrodesdelautilidadCustomUIEditoryescribaelcdigoXMLdelejemplo.


CopieenelportapapeleslosprocedimientosVBAgeneradosusandoelbotnGenerateCallBacks .

GuardeelcdigoXMLysalgadelCustomUIEditor.

AbraellibroenExcel2016.Aparecerlanuevapestaa.

AhorapuedepegarelcdigodesdeelportapapelesenunmduloestndarVBAypersonalizarlo.

Ejemplodecdigopersonalizado:

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Paraprobarestecdigo,debecrearenellibrounahojallamadaLeeme.

3.EtiquetasXMLcorrespondientesalosdistintoselementosdelacinta

a.Pestaasygrupos

Control Etiqueta Ejemplo

Pestaadelacinta <tab...</tab> <tab id = "PestaaPers" label = "Pestaa


personalizada" </tab>

Grupodecomandos <group...</group> <tab id = "GrupoPers" label = "Grupo


personalizado" <group id = "GrupoPers1" label =
"Tipo de factura" </group> </tab>

Lasetiquetas<group...</group>debenestarincluidasenunapestaa(etiquetas<tab...</tab>).

Estossonlosidentificadores(atributo"idMso")delaspestaasestndaresdeExcel 2016:

TabHome pestaaInicio

TabInsert pestaaInsertar

TabPageLayoutExcel pestaaDiseodepgina

TabFormules pestaaFrmulas

TabData pestaaDatos

TabReview pestaaRevisar

TabView pestaaVista

TabDeveloper pestaaDesarrollador

TabAddIns pestaaComplementos

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Ejemplo:

ElsiguientecdigopermiteocultarlaspestaasRevisaryDesarrollador.

<customUI
xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabReview" visible="false"/>
<tab idMso="TabDeveloper" visible="false"/>
</tabs>
</ribbon>
</customUI>

b.Principalescontrolesdelacintadeopciones

Loscontrolessiguientessepuedeninsertardentrodegrupos(etiquetas<group...</group>).

Control Etiqueta Ejemplo

Botnde <button.../>
comando <button id= "btVend1"
label= "Servicios"
imageMso = "MeetingsWorkspace"
onAction = "MuestraVendedor" />

Botnde <toogleButton.../>
alternar <toggleButton id="btProd"
label="Productos"
imageMso="Functions
RecentlyUsedtInsertGallery"
size="grande"
onAction="Tipo de factura"
getPressed="Activar" />

Etiqueta <labelControl.../>
<labelControl id="Titulo"
label="Tipo de factura"/>

Cuadro <comboBox...
combinado </comboBox> <combo Box id="cmb_TasaIVA"
label= "Tasa de IVA"
onChange= "IVA" get Text="getIVA" >
<item id= "itIva1" label="10 %" />
<item id= "itIva2" label="21 %" />
</comboBox>

Cuadrode <dropDown...
lista </dropDown> <dropDown id="cmb_TasaIVA"
label= "Tasa de IVA" >
<item id= "itIva1" label="10 %" />
<item id= "itIva2" label="21 %" />
</drop Down>

Casillade <checkBox.../>
verificacin <checkBox id="chkPort"

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
label="Gastos de flete?"
onAction="GastoPort"
getPressed="getchkPort" />

Campode <editBox.../>
entrada <editBox id="edFlete"
label="Importe de los gastos de flete:
"onChange="MostrarFlete"
getText="getPort"
getEnabled="ActivationPort"/>

Galera(o <gallery...</gallery>
tabla)de <gallery id="galPlazos"

controles label = "Plazos"


imageMso="StartTimer" size="large" >
<button id= "itPlazo1"
label="Recepcin de la factura"
onAction="Muestra plazo"
imageMso="StartTimer" />
<button id= "itPlazo2"
label="30 das"
onAction="Muestra plazo"
imageMso="StartTimer" />
<button id= "itPlazo3"
label="30 das
desde el fin de mes" onAction="Muestra
plazo"
imageMso="StartTimer" />
</gallery>

Barrade <menu...</menu>
men <menu id="mnu_Vendedores"
label="Vendedor"
imageMso="AccessTableContactos"
size="large">
<button id= "btVend1" label="Pedro LOPEZ"
onAction="Muestra Vendedor" />
<button id= "btVend2" label="Laura DURAN"
onAction="Muestra Vendedor" />
<button id= "btVend3" label="Lucas PEREZ"
onAction="Muestra Vendedor" />
</menu>

Men <dynamicMenu.../>
dinmico(el <dynamicMenu id="dmnu_TasaIVA"

cdigoVBA,a label="Flete"

travsdela getContent="Lista_Fletes"

funcin imageMso="ShowTimeZones"

GetContent, size="large" />

debe
proporcionar
elcontenido
delmen)

c.Atributosdeloscontrolesdelacintadeopciones

Lossiguientesatributospermitendefinirelcontenidoylaaparienciadelaspestaas,losgruposyotroscontroles.

Atributo Tipodedato Descripcin

columns Numrico Cantidaddecolumasenunatabladecontroles.

description Texto(4096) Descripcindelcontrol.

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
enabled Booleano Indicasielcontrolestactivo.

id Texto(1024) Identificadornicodelcontrol.

idMso Texto(1024) IdentificadordeloscontrolespredefinidosdeExcel.

image Texto(1024) Imagenasociadaalcontrol.

imageMso Texto(1024) IdentificadordeunaimagenpredefinidadeExcel.

insertAfterMso Texto(1024) Identificadordelcontrolpredefinidodespusdelcual


seinsertarelcontrolespecificado.

insertBeforeMso Texto(1024) Identificadordelcontrolpredefinidoantesdelcualse


insertarelcontrolespecificado.

invalidateContentonDrop Boolean Indicasielcontenidodelcontrolseactualizacada


vezqueseselecciona.

itemHeight Numrico(pxeles) Altodeunelementodeunatabladecontroles


(galera).

itemWidth Numrico(pxeles) Anchodeunelementodeunatabladecontroles


(galera).

itemSize "large"o"normal" Tamaodelloselementosdeunmen.

keytip Texto(3) Mtodoabreviadodelcontrol.

label Texto(1024) Texto(oetiqueta)delcontrol.

maxLength Numrico Cantidaddecaracteresenuncuadrodeentrada.

rows Numrico Cantidaddelneasenunatabladecontroles.

screentip Texto(1024) Textodelapistadelcontrol.

showImage Booleano Indicasiestvisiblelaimagendelcontrol.

showItemImage Booleano Indicasiestvisiblelaimagendeunelemento


(tem).

showItemLabel Booleano Indicasiestvisibleeltextoasociadoaun


elemento(tem).

showLabel Booleano Indicasiestvisibleeltextoasociadoauncontrol.

size "large"o"normal" Tamaodelcontrol.

sizeString Texto(1024) Anchodelcontrol.

startFromScratch Booleano Indicasiestnvisibleslaspestaaspredefinidasde


Office.

supertip Texto(1024) Textodelpopupcomplementariodelcontrol.

tag Texto(1024) Propiedadcomplementariaquesepuedeusara


travsdecdigoVBA(ejemplo:hipervnculoauna
pginaweb).

visible Booleano Indicasiestvisibleelcontrol.

d.Resumendelosatributosparacadacontrol

Cintade Pestaa Groupo Botnde Botn Etiqueta Cuadro


Office (tab) (group) comando Alternar (labelControl) combinado
(ribbon) (button) (toggle (comboBox)
Button)

columns

description X X

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
enabled X X X X

id X X X X X X

idMso X X X X

image X X X

ImageMso X X X

insertAfterMso X X X X X X

insertBeforeMso X X X X X X

invalidateContentonDrop X

itemHeight

ItemWidth

ItemSize

keytip X X X X X X

label X X X X X X

maxLength X

rows

screentip X X X X X

showImage X X X

showItemImage X

showItemLabel X

showLabel X X X X

size X X X X

sizeString X

startFromScratch X

supertip X X X X X

tag X X X X

visible X X X X X X

Cuadrode Casillade Cuadro Galera Barra Mendinmico


lista verificacin de de de (dynamicMenu)
(dropDown) (checkBox) entrada controles men
(editBox) (gallery) (menu)

columns X

description X X X

enabled X X X X X X

id X X X X X X

idMso X X X X X X

image X X X X X

ImageMso X X X X X

insertAfterMso X X X X X X

insertBeforeMso X X X X X X

invalidateContent X X
onDrop

itemHeight X

- 8- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
ItemWidth X

ItemSize X

keytip X X X X X X

label X X X X X X

maxLength X

rows X

screentip X X X X X X

showImage X X X X X

showItemImage X X

showItemLabel X X

showLabel X X X X X

size X X X X X X

sizeString X X

startFromScratch

supertip X X X X X X

tag X X X X X X

visible X X X X X X

e.ImgenesdelagaleradeiconosdeMicrosoftOffice

Losnombresdelasimgenesusadasparapersonalizarlacintadeopciones(atributoImageMso)correspondenal
nombredeliconoenlagaleradeMicrosoftOffice.

Paraconocerlalistadenombresdeiconosdeestagalera:

AbraenExcelelarchivoOffice2007IconsGallery.xlsm(disponibleconlosejemplosdeestelibrooenla
pginadeMicrosoft).

SeleccionelapestaaDesarrollador.

HagaclicenalgunodelosbotonesdeGalleryparaverlalistadeiconos.

Elnombredelaimagenapareceralsealarconelpunterodelratneliconocorrespondiente(tambin
puedehacercliceneliconoparamostrarsunombreenuncuadrodedilogo).

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 9-
f.FuncionesdellamadasCallbacks

Las funciones de llamada Callbacks permiten iniciar la ejecucin de procedimientos VBA, con el objetivo de
personalizar el contenido, la presentacin y las acciones asociadas a los diferentes controles de la cinta de
opciones.

LafuncinonActionseejecutaenelmomentodelaactivacindelcontrol.

Lasotrasfunciones(getEnabled,getVisible,getLabel...)permitenactualizardemaneradinmicaalgunosatributos
en funcin de ciertas condiciones (por ejemplo, el campo "Cantidad de tasa portuaria" se desactiva cuando la
casilla deopcin"Tasaportuaria"noestseleccionada).

Funcin Descripcin Control

onLoad Procedimientoquesellamaalcargarlacinta. customUI

loadImage Procedimientoparalacargadeimgenes. customUI

onAction Procedimientoquesedesencadenaalactivarun Todosloscontroles


control.

onChange Procedimientoquesellamadespusdemodificarel comboBox,editBox


contenidodelcontrolyperderelfoco.

getText Procedimientoquedefineelvalorpordefectodeun comboBox,editBox


control.

getContent ProcedimientoquedefineelcdigoXMLde dynamicMenu


personalizacindeunmendinmico.

getitemCount Procedimientoquedefinelacantidaddeelementos comboBox,dropDown,


delcontrol. gallery

getItemId Procedimientoquedefineelidentificadornico(id)
decadaelementodelcontrol

getItemImage Procedimientoquedefinelaimagenasociadaacada
elementodelcontrol.

getItemLabel Procedimientoquedefinelaetiquetaasociadaa
cadaelementodelcontrol.

getPressed Procedimientoqueindicasiunbotndealternarest toggleButton,checkBox

- 10 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
activadoosiunacasillaestmarcada.

getSelectedItemId ProcedimientoquedefineelIddelelemento dropDown,gallery


seleccionadopordefectodentrodelcontrol.

getSelectedItemIndex Procedimientoquedefineelndicedelelemento dropDown,gallery


seleccionadopordefectodentrodelcontrol.

getDescription Procedimientoquedefineelatributo"Description"del Todosloscontrolesque


control. tienenelatributo
personalizableporla
getEnabled Procedimientoquedefinesielcontrolestactivadoo
funcin.
accesible.
Ejemplo:getImageseaplica
getKeytip Procedimientoquedefineelmtodoabreviado atodosloscontrolesque
asociadoalcontrol. tenganelatributoImage.
Eltipodedatosque
getImage Procedimientoquedefinelaimagenasociadaal
devuelveelprocedimiento
control.
VBAdebeserelmismoque

getItemLabel Procedimientoquedefinelaetiquetadelcontrol. eldelatributo


correspondiente(por
getItemHeigth Procedimientoquedefineelaltodecadaelemento ejemplo,booleanopara
delagalera. getEnable ocadenade
caracteresparagetImage),
getItemWidth Procedimientoquedefineelanchodecadaelemento
exceptoparalafuncion
delagalera.
getSize(elprocedimiento
getItemScreentip Procedimientoquedefinelapistadecadaelemento devuelve1para"normal"y2
delagalera. para"large".

getItemSupertip Procedimientoquedefinelapistasuplementariade
cadaelementodelagalera.

getLabel Procedimientoquedefinelaetiquetadeuncontrol.

getScreentip Procedimientoquedefinelapistadeuncontrol.

getSupertip Procedimientoquedefinelapistasuplementariade
uncontrol.

getShowImage Procedimientoquedefinesisedebemostrarla
imagendelcontrol.

getShowLabel Procedimientoquedefinesisedebemostrarla
etiquetadelcontrol.

getSize Procedimientoquedefineeltamaodelcontrol.

getVisible Procedimientoquedefinesiuncontrolestvisible.

g.UsodelasfuncionesdellamadaCallbacks

Elprincipiodeusodeestasfuncioneseselsiguiente:envezdeindicarelvalordeunatributoenelarchivoXMLde
personalizacin(porejemplo,visible="False"),ustedindicaelnombredelprocedimientoVBAquedeterminaesa
propiedad(porejemplo,getVisible="ProcVisible").

Las funciones de llamada devuelven informacin especfica de la cinta de opciones por medio de parmetros (o
argumentos),transferidosalosprocedimientosVBA.

Para generar automticamente los procedimientos VBA y los parmetros asociados, use el botn Generate

CallBacks delautilidadCustomUIEditor.

Losprincipalesparmetrossonlossiguientes:

Argumento Descripcin Controlesinvolucrados

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 11 -
Control Objetoquerepresentaelcontrolquehadesencadenado Todosloscontroles
elprocedimiento.Esteobjetotienelaspropiedades"id"y
"tag",quepermiten,respectivamente,recuperarlos
valoresdelosatributos"id"y"tag".

index Determinaelnmerodeelementoparaloscontrolesde ControlescomboBox,dropDown,


tipolista. galleryymenu

pressed Valorbooleanoqueindicasilacasillaestmarcada ControlesCheckBoxy


(checkBox)osielbotnestpresionado(toggleButton). toggleButton

Argumento Argumentoquepermiterecuperarydefinirelatributodel Todosloscontroles


precedidoporla control(porejemplo:ByRefenabled,ByReflabel).
palabraclave
ByRef

- 12 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
EjemplodecintapersonalizadaconelCustomUIEditor

1.Presentacin

Elsiguienteejemplopermitepedirlainformacindeunafacturaapartirdelacintadeopciones.

LainteraccinconlahojadeExcelquecontienelainformacindelafacturasehaceenambossentidos:

l Elingresodedatos,aniveldelacinta,afectaelcontenidodelasceldasdelahoja.

l Lamodificacindelasceldas,dentrodelahojadeExcel,modificalosdatosdelacinta.

Lacintaconstadeunapestaadecuatrogruposquecontienenlossiguientescontroles:

l Grupo"Tipodefactura":dosbotonesdealternar.

l Grupo"IVAyflete":unalistadesplegable,unacasilladeverificacinyuncuadrodeentrada.

l Grupo"Vendedorytransportista":unmenyunmendinmico.

l Grupo"Condiciones":dosgalerasdecontroles.

2.CdigoXMLdelacinta

<customUI

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
xmlns="http://schemas.microsoft.com/office/2009/07/customui"
onLoad="CargaCinta" >

<!-- Oculta la cinta de opciones de Office -->


<ribbon startFromScratch="true">

<tabs>

<!-- Creacin de una pestaa personalizada -->


<tab id="PESTAA_PERSO" label="Facturacin">

<!-- Grupo personalizado Tipo de factura -->


<group id="Grupo1" label="Tipo de factura">

<!-- Botones de alternar -->


<toggleButton id="btProd" label="Productos"
imageMso="FunctionsRecentlyUsedtInsertGallery"
size="large" onAction="TipoFactura"
getPressed="Activation" />
<toggleButton id="btServ" label="Servicios"
imageMso="MeetingsWorkspace"
size="large" onAction="TipoFactura"
getPressed="Activation" />
</group>

<!-- Grupo personalizado IVA y flete -->


<group id="Grupo2" label="IVA y flete"
getVisible="SelectGroup">

<!-- Lista desplegable de tasas de IVA -->


<comboBox id="cmbTasaIVA" label="Tasa de IVA" onChange="IVA"
getText="getIVA" >
<item id="itIVA1" label="10 %" />
<item id="itIVA2" label="21 %" />
</comboBox>

<!-- Casilla Gastos de flete -->


<checkBox id="chkFlete" label="Gastos de envo?"
onAction="GastosFlete" getPressed="getchkFlete" />

<!-- Cuadro de entrada Importe del flete -->


<editBox id="edFlete" label="Importe de los gastos: "
onChange="MostrarFlete" getText="getFlete"
getEnabled="ActivarFlete" />
</group>

<!-- Grupo Vendedor y transportista -->


<group id="Grupo3" label="Vendedor y transportista"
getVisible="SelectGroup">

<!-- Men de vendedores -->


<menu id="mnu_Vendedores" label="Vendedor"
imageMso="AccessTableContacts" size="large">
<button id="btVend1" label="Pedro LOPEZ"
tag="Pedro LOPEZ" imageMso="ContactPictureMenu"

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
onAction="MuestraVendedor" />
<button id="btVend2" label="Laura DURAN"
tag="Laura DURAN" imageMso="ContactPictureMenu"
onAction="MuestraVendedor" />
<button id="btVend3" label="Lucas PEREZ"
tag="Lucas PEREZ" imageMso="ContactPictureMenu"
onAction="MuestraVendedor" />
</menu>

<!-- Men dinmico con la lista de transportistas -->


<dynamicMenu id="dmnu_TasaIVA" label="Transportista"
getContent="Lista_Transp"
imageMso="ShowTimeZones" size="large" />
</group>

<!-- Grupo Condiciones -->


<group id="Grupo4" label="Condiciones">

<!-- Tabla de controles (galeras) -->


<gallery id="galPlazo" label="Plazos"
imageMso="StartTimer" size="large" >
<button id="idPlazo1" label="A la recepcin de la factura"
onAction="MostrarPlazo"
tag="De fecha de factura" imageMso="StartTimer" />
<button id="idPlazo2" label="30 das"
onAction="MostrarPlazo"
tag="30 das" imageMso="StartTimer" />
<button id="idPlazo3" label="30 das a fin de mes"
onAction="MostrarPlazo"
tag="30 das a fin de mes" imageMso="StartTimer" />
</gallery>

<gallery id="galPagos" label="Forma de pago"


imageMso="PictureReflectionGalleryItem" size="large" >
<button id="itModo1" label="Cheque" tag="Cheque"
onAction="MostrarModo"
imageMso="EnvelopesAndLabelsDialog" />
<button id="itModo2" label="Giro" tag="Giro"
onAction="MostrarModo"
imageMso="ViewSlideShowView" />
<button id="itModo3" label="Transferencia bancaria"
tag="Transferencia bancaria"
onAction="MostrarModo"
imageMso="PictureReflectionGalleryItem" />
</gallery>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

3.CdigoVBAdepersonalizacindelacinta(mdulo"Cinta")

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Option Explicit
Public objCinta As IRibbonUI
Public blnFlete As Boolean

Carga de la cinta
Sub CargaCinta(ribbon As IRibbonUI)

Variable objeto para usar la cinta


Set objCinta = ribbon

End Sub

Activa la hoja correspondiente al tipo de factura


Sub TipoFactura(control As IRibbonControl, pressed As Boolean)
If control.ID = "btProd" Then
Sheets("Factura de productos").Select
Else
Sheets("Factura de servicios").Select
End If

Muestra la cinta
objCinta = Invalidate
End Sub

Oculta los grupos 2 y 4 si es factura de servicios


Sub SelectGroup(control As IRibbonControl, ByRef returnedVal)
returnedVal = True
If control.ID = "Grupo2" And ActiveSheet.Name = "Factura de
servicios" Then
returnedVal = False
End If
If control.ID = "Grupo3" And ActiveSheet.Name = "Factura
de servicios" Then
returnedVal = False
End If
End Sub

Destaca el botn alternar seleccionado


Sub Activation(control As IRibbonControl, ByRef returnedVal)
returnedVal = False
If control.ID = "btProd" And _
ActiveSheet.Name = "Factura de Productos" Then
returnedVal = True
End If
If control.ID = "btServ" And _
ActiveSheet.Name = "Factura de Servicios" Then
returnedVal = True
End If

End Sub


Recuperacin de los valores de la factura
como valores por defecto de la cinta

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo

Recupera la tasa de IVA de la factura


Sub GetIVA(control As IRibbonControl, ByRef returnedVal)
returnedVal = ""
Application.Goto Reference:="TASA_IVA"
returnedVal = ActiveCell.Value
End Sub

Gastos de flete sobre la factura?


Sub getchkFlete(control As IRibbonControl, ByRef returnedVal)
returnedVal = False
Application.Goto Reference:="FLETE"
If Val(ActiveCell.Value) > 0 Then returnedVal = True
blnFlete = returnedVal
If Not blnFlete Then
Application.Goto Reference:="FLETE"
ActiveCell.Value = ""
End If
objCinta.InvalidateControl "edFlete"
End Sub

Recupera el valor del flete de la factura


Sub getFlete(control As IRibbonControl, ByRef returnedVal)
returnedVal = ""
If blnFlete Then
Application.Goto Reference:="FLETE"
returnedVal = Format(ActiveCell.Value, "0.00")
End If
End Sub

Recuperacin de los valores de la cinta


y asignacin a la factura

Muestra la tasa de IVA seleccionada


Sub IVA(control As IRibbonControl, text As String)
Application.Goto Reference:="TASA_IVA"
ActiveCell.Value = text
End Sub

Si no hay gastos de flete, se desactiva el campo de entrada


Sub GastosFlete(control As IRibbonControl, pressed As Boolean)
blnFlete = pressed
If Not blnFlete Then
Application.Goto Reference:="FLETE"
ActiveCell.Value = ""
End If
objCinta.InvalidateControl "edFlete"
End Sub

Activa o desactiva el importe del flete


Sub ActivarFlete(control As IRibbonControl, ByRef returnedVal)
returnedVal = blnFlete

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
End Sub

Asigna el importe del flete a la factura, despus de controlar


Sub MostrarFlete(control As IRibbonControl, text As String)
El importe del flete debe ser numrico
If Not IsNumeric(text) Then
MsgBox "Ingrese un valor numrico como importe del flete",
vbExclamation
Else
Application.Goto Reference:="FLETE"
ActiveCell.Value = text
objCinta.InvalidateControl "edFlete"
End If

End Sub

Asigna el plazo seleccionado a la factura


Sub MostrarPlazo(control As IRibbonControl)
If ActiveSheet.Name = "Factura de Productos" Then
Application.Goto Reference:="PLAZO1"
Else
Application.Goto Reference:="PLAZO2"
End If
ActiveCell.Value = control.Tag
End Sub

Asigna el modo seleccionado a la factura


Sub MostrarModo(control As IRibbonControl)
If ActiveSheet.Name = "Factura de Productos" Then
Application.Goto Reference:="MODO1"
Else
Application.Goto Reference:="MODO2"
End If
ActiveCell.Value = control.Tag
End Sub

Asigna el vendedor seleccionado a la factura


Sub MuestraVendedor(control As IRibbonControl)
Application.Goto Reference:="VENDEDOR"
ActiveCell.Value = control.Tag
End Sub

Asigna el transportista seleccionado a la factura


Sub MuestraTransp(control As IRibbonControl)
Application.Goto Reference:="TRANSPORTISTA"
ActiveCell.Value = control.Tag
End Sub

Carga el men dinmico con la lista de transportistas


mediante cdigo XML
Sub Lista_Transp(control As IRibbonControl, ByRef returnedVal)
Dim i As Integer
Dim sXML As String
i = 1
sXML = "<menu xmlns=""http://schemas.microsoft.com/office/2006/01/

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
customui"">"
With Sheets("Transportistas")
Do While .Cells(i, 1) <> ""
sXML = sXML & AgregaItem(i, .Cells(i, 1))
i = i + 1
Loop
End With
returnedVal = sXML & " </menu>"
End Sub

Agrega un transportista al men dinmico


Private Function AgregaItem(Index, Transportista As String)

AgregaItem = "<button " _


& "id=" & Chr(34) & "btTransp" & Index & Chr(34) & " " _
& "label=" & Chr(34) & Transportista & Chr(34) & " " _
& "tag=" & Chr(34) & Transportista & Chr(34) & " " _
& "imageMso=" & Chr(34) & "ShowTimeZones" & Chr(34) & " " _
& "onAction=" & Chr(34) & "MuestraTransp" & Chr(34) & "/>"
End Function

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
Personalizacindelacintadeopcionesmediantelacoleccin
CommandBars

ElaccesoaestacoleccinpermiterealizarlassiguientesoperacionesconlaayudadellenguajeVBA:

l Crear barras de herramientas personalizadas: se ubican automticamente en el grupo Barras de herramientas


personalizadas de la pestaa Complementos (la ltima de la derecha) y tiene el aspecto de las barras de
herramientasdelasversionesanterioresdeExcel.

l Crearbarrasdemenspersonalizados:sepuedenubicartantoenlapestaaComplementoscomoenunahojaExcel
bajolaformademenscontextuales(mens"popup").

l CrearunabarradecomandospersonalizadaconelformatodeOffice2016.

l Personalizarloscomandosensuaccinsobrelasmacros.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Ejemplosdebarrasdecomandos

1.Barrasdeherramientaspersonalizadas

Semuestrandosbarrasdecomandos:unabarradeherramientasconseisbotones yunabarrademenscontres
opciones.

2.ComandosdemensenformatoOffice2016

3.Agregarelgrupoalabarradeherramientasdeaccesorpido

Lasbarrasdecomandosascreadassepuedenhaceraccesiblesdesdelabarradeherramientasdeaccesorpido
delasiguientemanera:

Ubiqueelcursorbajolabarradecomandosyhagaclicconelbotnderechodelratn.

SeleccionelaopcinAgregaralabarradeherramientasdeaccesorpido.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Normalmente,lasbarrasdecomandossonaccesiblesatravsdebotonesdecomandosagregadosalabarrade
herramientasdeaccesorpido:

Barrasdeherramientaspersonalizadas

Comandosdemens

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Barrasdecomandos

1.Terminologa

a.Barradecomandos

RepresentalasbarrasdeherramientasdeExcel,lasbarrasdeherramientaspersonalizadasylasbarrasdemen.

b.Control

Representauncomando(botndecomando,opcindemen,etc.)deunabarradecomandos.

2.Crearunabarradecomandos

CommandBars.Add(Name, Position, MenuBar, Temporary)

EstemtododevuelveunobjetoCommandBar.

Name Nombredelanuevabarradecomandos.

Position Posicindelanuevabarrapuedeadoptarunadelassiguientesconstantes:
msoBarLeft:alaizquierda
msoBarTop:arriba
msoBarRight:aladerecha
msoBarBottom:abajo
msoBarFloating:noanclada
msoBarPopup:mencontextual

MenuBar RecibeelvalorTruesilanuevabarradebereemplazarlabarraactiva.

Temporary Recibe el valor True en el caso de una barra temporal las barras temporales se
eliminanalcerrarlaaplicacin.

Ejemplo

Creacindeunabarrademenydeunabarradeherramientas.Estasbarras solamentesernvisiblesdespusdeagregarlos
controlesasociados.

Dim Barra1 As CommandBar


Dim Barra2 As CommandBar

Sub Crear_Barras()

Crea una barra de men llamada "Menu1"


Set Barra1 = CommandBars.Add(Name:="Menu1", _
Position:=msoBarTop)
Muestra la barra de men creada
Barra1.Visible = True
Crea una barra de herramientas llamada "Menu2"
Set Barra2 = CommandBars.Add(Name:="Menu2", _
Position:=msoBarTop)
End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Atencin:sielcdigoestescritoenelmdulodeclaseThisWorkbook,esnecesarioindicarelobjeto Application
(ejemplo:Application.CommandBars).

3.Eliminarunabarradecomandos

Expression.Delete

Expression ExpresinquedevuelveelobjetoCommandBarquehayqueeliminar.

Ejemplo

Eliminarlabarrademenylabarradeherramientas(indispensableantesdecrearnuevamentelasbarras).

Sub Eliminar_Barras()
Elimina las barras de comandos personalizadas
Application.CommandBars("Menu1").Delete
Application.CommandBars("Menu2").Delete
End Sub

Lasbarrasdecomandostambinpuedenreferenciarseporelnombredelavariableobjeto.

Sub Eliminar_Barras()
Elimina las barras de comandos personalizadas
Barra1.Delete
Barra2.Delete
End Sub

4.Mostrarunabarradecomandos

LapropiedadVisiblepermitemostraruocultarunabarradecomandos.Despusdecrearunabarradecomandos,
lapropiedadVisibletieneelvalorFalse.

La propiedad Enabled permite activar o desactivar una barra de comandos. Si una barra de comandos est
desactivada (Enabled = False), esta se elimina de la lista de barras de herramientas la propiedad Visible ya no
estardisponible.

Ejemplo

MuestralabarradecomandosMenu2despusdeverificarqueestaseencuentra disponible.

Sub Mostrar_Barras()

Muestra la barra de comandos Menu2


if Application.CommandBars("Menu2").Enabled = False then
Application.CommandBars("Menu2").Enabled = True
End if

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Application.CommandBars("Menu2").Visible = True

End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Controles(opcionesobotonesdecomando)delasbarrasde
comandos

LacoleccindeobjetosCommandBarControlsrepresentatodosloscontrolesdeunabarradecomandos.

Paraaccederaestacoleccin,uselapropiedadControlsdelosobjetosCommandBar yCommandBarPopup.

1.Agregaruncontrol

Expression.Controls.Add(Type, Id, Parameter, Before, Temporary)

Este mtodo devuelve un objeto CommandBarButton, CommandBarComboBox o CommandBarPopUp, que son


objetosdetipoCommandBarControls.

Expression ExpresinquedevuelveunobjetoCommandBarobligatorio.

Type Tipodecontrolquehayqueagregarpuedeserunadelassiguientesconstantes:
msoControlButton:herramientauopcindemen
msoControlEdit:cuadrodeentrada
msoControlDropDown:cuadrodelista
msoControlComboBox:cuadrodelista
msoControlPopUp:mencontextual

Id Entero que identifica un control integrado si el valor del argumento es igual a 1 o si se


omite, se agrega un control personalizado vaco del tipo indicado en la barra de
comandos.

Parameter En el caso de controles integrados, la aplicacin contenedor lo usa para ejecutar el


comando en el caso de controles personalizados, este argumento puede servir para
enviarinformacinalosprocedimientosVisualBasicoparaalmacenarlainformacinen
elcontrol.

Before Nmero que indica la posicin del nuevo control en la barra de comandos si no se
especificaesteargumento,elcontrolseagregaalfinaldelabarradecomandos.

Temporary Recibe el valor True en el caso de un control temporal los controles temporales se
suprimencuandosecierralaaplicacindeExcel.

2.Especificarelttulodeuncontrol

UselapropiedadCaptiondelcontrol.

Enelcasodeunmen,estapropiedadindicasuttuloenelcasodeunbotn,indicalaetiquetainformativaque
aparece.

3.Eliminaruncontrol

Expression.Delete

Expression ExpresinquedevuelveelobjetoCommandBarControlsquehayqueeliminar.

4.Asociarunprocedimientoauncontrol

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
UselapropiedadonActiondelcontrol.

Elnombredelprocedimientoquedeseaasociaralcontrolsedebeindicarentrecomillas.

Para mostrar la tecla de mtodo abreviado del procedimiento asociado, use la propiedad ShortCutText del objeto
CommandBarButton.

5.Otraspropiedades

Paraactivarodesactivaruncontrol,uselapropiedadEnableddelcontrol.

Para modificar el aspecto de la imagen de un botn, use la propiedad FaceId del objeto
CommandBarButton.

Estapropiedaddefineelaspectodelbotn,ynosufuncin.

Ejemplos

AgregarunbotndecomandopersonalizadoalabarradeherramientasMenu2.EstebotnabreelcuadrodedilogoGuardar
como.

Sub Agregar_Control1()
Dim m_Button as CommandBarButton
Agrega un botn de comando a la barra Menu2
Set m_Button = Application.CommandBars("Menu2").Controls.Add _
(Type:=msoControlButton)
Icono Guardar
m_Button.FaceId = 3
Accin "GuardarComo"
m_Button.OnAction = "GuardarComo"
End Sub

ProcedimientoGuardarComo

Sub GuardarComo()
Cuadro de dilogo "GuardarComo"
Application.Dialogs(xlDialogSaveAs).Show
End Sub

AgregarelmenArchivoylaopcinGuardarcomoalabarradecomandosMenu1.

Sub Agrega_Control2()
Dim m_Menu As CommandBarControl
Dim m_Option As CommandBarControl
Agrega el men Archivo
Set m_Menu = Application.CommandBars("Menu1") _
.Controls.Add (Type:=msoControlPopup)
m_Menu.Caption = "Archivo"

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Agrega el botn de comando
Set m_Option = m_Menu.Controls.Add _
(Type:=msoControlButton)
m_Option.Caption = "Guardar Como"
Icono Guardar
m_Option.FaceId = 3
Accin "GuardarComo"
m_Option.OnAction = "GuardarComo"
End Sub

6.Listadeimgenesasociadasalosbotonesdecomando

El siguiente procedimiento muestra, en la hoja de Excel activa, la lista de imgenes que se pueden asociar a los
botonesdecomando(propiedadFaceId)ysunmerocorrespondiente.

Sub Muestra_Imagenes()
Dim numFila As Integer
Dim numCol As Integer
Dim numImagen As Long
Dim Menu1 As CommandBar
Dim Button1 As CommandBarControl

Crea una barra de herramientas temporal


Set Menu1 = Application.CommandBars.Add _
(Position:=msoBarFloating, temporary:=True)
Agrega un botn de comando
Set Button1 = Menu1.Controls.Add(msoControlButton)

Modifica la imagen del botn de comando


y la copia en una celda de Excel
For numCol = 1 To 10 Step 2
For numFila = 1 To 100
numImagen = numImagen + 1
Button1.FaceId = numImagen
Button1.CopyFace
ActiveSheet.Cells(numFila, numCol) = numImagen
ActiveSheet.Paste Cells(numFila, numCol + 1)
Next numFila
Next numCol

Redimensiona las columnas


Columns("A:W").Select
Selection.ColumnWidth = 4
Elimina la barra de herramientas
Menu1.Delete

End Sub

Elresultadoobtenidoeselsiguiente:

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Ejemplosdemenspersonalizados

1.Presentacin

Esteejemplocrealassiguientesbarrasdecomandos:

l Ungrupodecomandosllamado"Comandosdemen":

l Una barra de men con el ttulo "Men Gastos", dentro del grupo "Barras de herramientas personalizadas", que
permiteaccederalassiguientesopciones:

l Unabarrademenconelttulo"Gastos",dentrodelgrupo"Barrasdeherramientaspersonalizadas":

l Unabarrademencontextualqueaparececuandoelusuariosesitaenlazonallamada"Empleado"yhacecliccon
el botn secundario del ratn. Los empleados se extraen de la base de datos de Access Empleados.accdb (base de
datosdisponibleconlosejemplosdellibro).

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
2.Cdigodelosejemplos

Paracrearlosmensdelsiguienteejemplo,sedebenrealizarlassiguientesoperaciones:

l CreareldocumentodeExcel.

l Definirunreadeimpresin.

l DefinirunrangodeceldasconelnombreEmpleadoqueincluyalasceldasApellidoyNmerodeempleado.

l DefinirunrangodeceldasconelnombreINFORMEGASTOSqueincluyalasceldasquehayqueimprimir.

l Asignarlossiguientesnombresalasceldasquecontienenlainformacindelempleado:Empleado,Funcin,Poblacin.

l Agregar un mdulo estndar llamado ProcMenus este mdulo contendr los procedimientos para crear las
diferentesbarrasdecomandos.

l Agregar un mdulo estndar llamado ProcAcciones este mdulo contendr los procedimientos personalizados
asociadosalosbotonesdecomando.

3.CdigodelmdulodeclaseThisWorkbook

option Explicit
________________________________________________________________
Private Sub Workbook_Open()
Muestra los mens personalizados
Personalizar_Excel
Ajusta el zoom
Ajuste

End Sub
________________________________________________________________
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Pide confirmacin del cierre del libro
If MsgBox("Desea cerrar el libro?", _
vbQuestion & vbYesNo, ThisWorkbook.Name) = vbYes Then
Muestra los mens de Excel
Restaurar_Excel
Else
Cancel = True
End If
End Sub

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
4.Cdigodelahoja"NotadeGastos"

Option Explicit

Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, _


Cancel As Boolean)
Si la primera celda activa pertenece al rango llamado
"Empleado": mostrar el men Empleados
If Union(Target.Range("A1"), Range("Empleado")).Address = _
Range("Empleado").Address Then
CommandBars("Empleados").ShowPopup
Cancel = True
End If
End Sub

5.CdigodelmduloProcMenus

option Explicit

Declaracin de variables
Dim m_Menu As CommandBarPopup
Dim m_Barra As CommandBar
Dim m_Option As CommandBarControl
Dim m_Button As CommandBarButton

Sub Personalizar_Excel()
Dim i As Integer
Crea los mens y comandos personalizados
Mostrar_Barra_Mens
Mostrar_Barra_Herramientas
Mostrar_Barra_Comandos
Men contextual "Lista de empleados"
Lista_Empleados
Oculta las barras de frmulas, de estado
y los encabezados de fila y columna
Application.DisplayFormulaBar = False
Application.DisplayStatusBar = False
Application.ActiveWindow.DisplayHeadings = False
End Sub
______________________________________________________________________
Sub Restaurar_Excel()
Dim i As Integer
Dim m_Ctrl As CommandBarControl
Elimina los mens y barras de comandos
On Error Resume Next
Application.CommandBars("Men Gastos").Delete
Application.CommandBars("Gastos").Delete
Application.CommandBars("Empleados").Delete
On Error GoTo 0
Elimina los comandos personalizados

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
de la barra de comandos "Herramientas"
For Each m_Ctrl In Application.CommandBars("Tools").Controls
If Not m_Ctrl.BuiltIn Then
m_Ctrl.Delete
End If
Next m_Ctrl
Vuelve a mostrar las barras de frmulas, de estado
y los encabezados de fila y columna
Application.DisplayFormulaBar = True
Application.DisplayStatusBar = True
Application.ActiveWindow.DisplayHeadings = True
End Sub
Sub Mostrar_Barra_Menus()
On Error Resume Next
Elimina la barra de men para recrearla
Application.CommandBars("Menu Gastos").Delete
On Error GoTo 0
Crea la barra de men
Set m_Barra = Application.CommandBars.Add(Name:="Menu Gastos", _
Position:=msoBarTop)
Muestra la barra de men creada
Application.CommandBars("Menu Gastos").Visible = True
Agrega el men "Archivo"
Set m_Menu = m_Barra.Controls.Add(Type:=msoControlPopup)
m_Menu.Caption = "Archivo"
Agrega los comandos del men "Archivo"
Las acciones son las acciones por defecto
Set m_Option = m_Menu.Controls.Add(Type:=msoControlButton, ID:=3)
m_Option.OnAction = "GuardarComo"
Set m_Option = m_Menu.Controls.Add(Type:=msoControlButton, ID:=109)
Set m_Option = m_Menu.Controls.Add(Type:=msoControlButton, ID:=4)
Set m_Option = m_Menu.Controls.Add(Type:=msoControlButton, ID:=106)
Agrega el men "Ver"
Set m_Menu = m_Barra.Controls.Add(Type:=msoControlPopup)
m_Menu.Caption = "Ver"
Agrega la lista desplegable de zooms
Set m_Option = m_Menu.Controls.Add(Type:=msoControlComboBox, ID:=1733)
Agrega los comandos del men "Ver"
con la llamada a los procedimientos accin
Set m_Option = m_Menu.Controls.Add(Type:=msoControlButton)
m_Option.FaceId = 175
m_Option.Caption = "Ajuste"
m_Option.OnAction = "Ajuste"
Agrega la opcin " Restaurar Excel "
Set m_Option = m_Menu.Controls.Add(Type:=msoControlButton)
m_Option.FaceId = 303
m_Option.Caption = "Restaurar Excel"
m_Option.OnAction = "Restaurar_Excel"
Agrega el men "Formato"
Set m_Menu = m_Barra.Controls.Add(Type:=msoControlPopup)
m_Menu.Caption = "Formato"
Agrega los comandos del men "Ver"
con la llamada a los procedimientos accin
Set m_Option = m_Menu.Controls.Add _

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
(Type:=msoControlButton)
m_Option.FaceId = 291
m_Option.Caption = "Fuente"
m_Option.OnAction = "Fuente"
Set m_Option = m_Menu.Controls.Add _
(Type:=msoControlButton)
m_Option.Caption = "Bordes"
m_Option.OnAction = "Bordes"
m_Option.FaceId = 1704
Set m_Option = m_Menu.Controls.Add _
(Type:=msoControlButton)
m_Option.Caption = "Tramas"
m_Option.OnAction = "Tramas"
m_Option.FaceId = 1988
End Sub
_______________________________________________________________________
Sub Mostrar_Barra_Herramientas()
On Error Resume Next
Elimina la barra de herramientas para recrearla
Application.CommandBars("Gastos").Delete
On Error GoTo 0
Crea una barra de men llamada "Gastos"
Set m_Barra = Application.CommandBars.Add(Name:="Gastos", _
Position:=msoBarTop)
Muestra la barra de herramientas personalizada
Application.CommandBars("Gastos").Visible = True
Agrega los botones de comando estndares en la barra
de herramientas
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton, ID:=3)
m_Option.OnAction = "GuardarComo"
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton, ID:=109)
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton, ID:=4)
Agrega un botn de comando personalizado
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton)
With m_Button
.BeginGroup = True
.FaceId = 175
.OnAction = "Ajuste"
.TooltipText = "Ajuste"
End With
Agrega la lista desplegable de zooms
Set m_Option = m_Barra.Controls.Add _
(Type:=msoControlComboBox, ID:=1733)
Agrega la opcin "Restaurar Excel"
Set m_Option = m_Barra.Controls.Add _
(Type:=msoControlButton)
m_Option.FaceId = 303
m_Option.Caption = "Restaurar Excel"
m_Option.OnAction = "Restaurar_Excel"
Agrega los botones "Formato"
Set m_Button = m_Barra.Controls.Add _

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
(Type:=msoControlButton)
With m_Button
.BeginGroup = True
.FaceId = 291
.OnAction = "Fuente"
.TooltipText = "Fuente"
End With
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton)
With m_Button
.FaceId = 1704
.OnAction = "Bordes"
.TooltipText = "Bordes"
End With
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton)
With m_Button
.FaceId = 1988
.OnAction = "Tramas"
.TooltipText = "Tramas"
End With
End Sub
_______________________________________________________________________
Sub Mostrar_Barra_Comandos()
Objeto que representa la barra de herramientas "Tools"
Set m_Barra = Application.CommandBars("Tools")
Agrega los botones de comando estndares en la barra
de herramientas
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton, ID:=3)
m_Button.Caption = "Guardar como"
m_Button.OnAction = "GuardarComo"
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton, ID:=109)
m_Button.Caption = "Vista preliminar"
m_Button.OnAction = "VistaPreliminar"
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton, ID:=4)
m_Button.Caption = "Imprimir"
m_Button.OnAction = "Imprimir"
Agrega los comandos de tipo "Formato"
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton)
With m_Button
.FaceId = 291
.OnAction = "Fuente"
.TooltipText = "Fuente"
.Caption = "Fuente"
End With
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton)
With m_Button
.FaceId = 1704
.OnAction = "Bordes"
.TooltipText = "Bordes"

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
.Caption = "Bordes"
End With
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton)
With m_Button
.FaceId = 1988
.OnAction = "Tramas"
.TooltipText = "Tramas"
.Caption = "Tramas"
End With
End Sub
_______________________________________________________________________
Public Sub Lista_Empleados()
Dim Db As Database
Dim rstEmp As Recordset
Dim Legajo As Long
Crea el men "Empleados"
On Error Resume Next
Application.CommandBars("Empleados").Delete
On Error GoTo 0
Set m_Barra = CommandBars.Add _
(Name:="Empleados", Position:=msoBarPopup, Temporary:=True)
Abre la tabla Empleados
Set Db = OpenDatabase(ActiveWorkbook.Path & "\Empleados.accdb")
Set rstEmp = Db.OpenRecordset("SELECT * FROM Empleados ORDER BY
Apellido, Nombre")
Muestra la lista de empleados
Do While Not rstEmp.EOF
Set m_Button = m_Barra.Controls.Add(Type:=msoControlButton)
With m_Button
If rstEmp("Tratamiento") = "Sra" Or rstEmp("Tratamiento") =
"Srta" Then
.FaceId = 2148
Else
.FaceId = 2103
End If
.Caption = UCase(rstEmp("Apellido")) & " " & rstEmp("Nombre")
Legajo = rstEmp("Legajo")
.OnAction = "Mostrar_Empleado(" & Legajo & ")"
End With
rstEmp.MoveNext
Loop
Cierra los objetos de Access
rstEmp.Close
Db.Close
End Sub

6.CdigodelmduloProcAction

Sub Ajuste()
Ajusta el zoom al contenido
del rango llamado "NotaDeGastos"

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
Application.Goto Reference:="INFORME GASTOS"
ActiveWindow.Zoom = True
Range("EMPLEADO").Select
End Sub
________________________________________________________________________
Sub Mostrar_Empleado(Legajo As Long)
Dim Db As Database
Dim rstEmp As Recordset
Dim strSql As String
Abre la tabla "Empleados"
Set Db = OpenDatabase(ActiveWorkbook.Path & "\Empleados.accdb")
strSql = "SELECT * FROM Empleados WHERE [NumEmpleado] = " & NumEmp
Set rstEmp = Db.OpenRecordset(strSql)
Muestra las coordenadas del empleado seleccionado
Range("EMPLEADO") = UCase(rstEmp("Apellido")) & " " & rstEmp("Nombre")
Range("Funcin") = rstEmp("Cargo")
Range("Poblacin") = rstEmp("Municipio")
Cierra los objetos de Access
rstEmp.Close
Db.Close
End Sub
________________________________________________________________________
Sub Fuente()
Muestra el cuadro de dilogo "Fuente"
Application.Dialogs(xlDialogFormatFont).Show
End Sub
________________________________________________________________________
Sub Bordes()
Muestra el cuadro de dilogo "Bordes"
Application.Dialogs(xlDialogBorder).Show
End Sub
________________________________________________________________________
Sub Tramas()
Muestra el cuadro de dilogo "Tramas"
Application.Dialogs(xlDialogPatterns).Show
End Sub
________________________________________________________________________
Sub GuardarComo()
Cuadro de dilogo Guardar como
Application.Dialogs(xlDialogSaveAs).Show
End Sub
________________________________________________________________________
Sub VistaPreliminar()
Vista preliminar
ThisWorkbook.PrintPreview
End Sub
________________________________________________________________________
Sub Imprimir()
Impresin de la hoja de clculo
ActiveSheet.PrintOut
End Sub

- 8- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Presentacin

Un evento es una accin del usuario o del sistema reconocido por un objeto de Microsoft Excel. El evento
desencadenaunprocedimiento,asociadoaleventodelobjetoactivo.

Estosprocedimientoslepermitenasociaruncdigopersonalizadoenrespuestaauneventoqueseproduceenun
objetodeExcel(libro,hoja,formulario,grfico,etc.).

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Escrituradeeventos

1.Eventosdelibro,dehojaodeformulario

Ustedpuedeaccederalosprocedimientosdeeventosasociadosaunobjetodelasiguientemanera:

En la ventana Explorador de proyectos, haga doble clic en el objeto deseado (libro, hoja o formulario)
parahacerqueaparezcalaventanadecdigocorrespondiente.

Abra la lista desplegable a la izquierda de la ventana de cdigo y seleccione Workbook,Worksheet o


UserForm,segnelobjetoseleccionado.

Tambin puede seleccionar un evento vinculado al objeto seleccionado en la lista desplegable de la


derecha,paraasociarleuncdigopersonalizado.

Laejecucindelosprocedimientosdeeventossepuededesactivarencualquier momentoasignandoelvalorFalse
alapropiedadEnableEventsdelobjetoApplication.

Ejemplo

Esteejemplomuestracmoobtenerunlistadohistricodetodosloshipervnculosvisitadosenlahojadeclculoactiva.

ResultadoenExcel:

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
2.EventosdelobjetoApplication

SenecesitantresetapasparalaescriturayejecucindeloseventosdelobjetoApplication.

Etapa1

Inserteunmdulodeclase:

InsertarMdulodeclase


oabralalista yhagaclicenMdulodeclase.

Unavezinsertadoelmdulo,asgneleunnombre.

Ejemplo

DeleelnombreObjApplicationalmdulodeclase.

Etapa2

Enelmdulodeclase,creeunobjetoApplicationconelsiguientecdigo:

Public WithEvents NomObjeto As Application

Ejemplo

CreacindelobjetooMiAplicacincomoaplicacin.

Public WithEvents oMiAplicacion As Application

Elobjetoascreadoquedadisponibleenlalistadelaizquierdadelmdulo.

Seleccioneelobjetocreadoenlalistadelaizquierdadelmduloyluegoseleccioneeleventoesperado
enlalistadeladerecha.Escribaelcdigodelosprocedimientosquedeseagenerar.

Ejemplo

Creacin de dos procedimientos de eventos: el primero realiza la insercin de una nueva hoja el segundo, la creacin de un
nuevolibro.

Public WithEvents oMiAplicacion As Excel.Application


______________________________________________________________________
Private Sub oMiAplicacion_WorkbookNewSheet _
(ByVal Wb As Workbook, ByVal Sh As Object)
Dim oNomHoja As String
Cada vez que se agrega una hoja, se pide al usuario
que introduzca un nombre que a continuacin se asignar a la hoja
insertada tras las hojas existentes
oNomHoja = InputBox("Introduzca el nombre de la hoja")
ActiveSheet.Name = oNomHoja

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
ActiveSheet.Move After:=Sheets(Sheets.Count)
End Sub
______________________________________________________________________
Private Sub oMiAplicacion_NewWorkbook(ByVal Wb As Workbook)
Dim iNbHojas As Integer
Dim iNbActual As Integer
Dim iDiferencia As Integer
Por cada nuevo libro,
solicitamos al usuario la cantidad de hojas
Segn el caso, se agregan o eliminan las hojas necesarias
Do
iNbHojas = Application.InputBox _
("Cantidad de hojas?", Type:=1)
Loop While iNbHojas = False
iNbActual = Sheets.Count
iDiferencia = iNbActual - iNbHojas
Eliminar las hojas de ms
Eliminar los mensajes de alerta con el fin
de no obtener mensajes en la eliminacin de hojas
Do While iDiferencia > 0
Application.DisplayAlerts = False
Sheets.Item(iDiferencia).Select
ActiveWindow.SelectedSheets.Delete
iDiferencia = iDiferencia - 1
Loop

Agregar hojas si es necesario


Se desactivan los eventos para
no indicar los nombres de las nuevas hojas
Do While iDiferencia < 0
Application.EnableEvents = False
Sheets.Add
iDiferencia = iDiferencia + 1
Loop
Reactivar eventos y alertas
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub

Etapa3

ActiveunmdulocualquierayconecteelobjetodeclaradoenelmdulodeclaseconelobjetoApplication
paralassiguientesinstrucciones:

Dim oNomVariable As New NomModuloDeClase

Sub NomProced ()
Set oNomVariable.NomObjeto = Application
End Sub

Ejemplo

AgregueelsiguientecdigoenelmduloDeclaraciones.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Option Explicit
Dim oApp As New ObjApplication
________________________________________________________________
Sub InicializaMiAplicacion()
Set oApp.oMiAplicacion = Application
End Sub

Finalmente,llamealprocedimientoInicializaMiAplicacionalabrirellibro(mdulodeclaseThisWorkbook).

Private Sub Workbook_Open()


InicializaMiAplicacion
End Sub

Cuandoseabraellibro,seejecutarnautomticamentelosprocedimientosdeeventoscreadosdurantelaetapa2
yseagregarnloslibrosolashojas.Estosprocedimientossedesactivarnalcerrarellibro.

3.Eventoasociadoaungrficoincrustado

LacoleccinCharts(delobjetoWorkbook)contienetodoslosgrficosdellibroespecificado.

Senecesitantresetapasparalaescrituraylaejecucindeloseventosasociadosaungrficoincrustado.

Etapa1

Inserteunmdulodeclase:

InsertarMdulodeclase


oabralalista yhagaclicenMdulodeclase.

Unavezinsertadoelmdulo,asgneleunnombre.

Ejemplo

DeleelnombreObjGraficosalmdulodeclase.

Etapa2

Enelmdulodeclase,creeunobjetogrficoparaelsiguientecdigo:

Public WithEvents NomObjeto As Chart

Ejemplo

CreacindelobjetollamadooChart1comogrficoincrustado.

Public WithEvents oChart1 As Chart

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Elobjetoascreadoquedadisponibleenlalistadelaizquierdadelmdulo.

Seleccioneelobjetocreadoenlalistadelaizquierdadelmduloyluegoseleccioneeleventoesperado
enlalistadeladerecha.Escribaelcdigodelosprocedimientosquedeseagenerar.

Ejemplo

Creacindedosprocedimientosdeeventos:unodesactivaelgrfico,elotroespecificasusdimensiones.

Option Explicit
Public WithEvents oChart1 As Chart
________________________________________________________________
Private Sub oChart1_Deactivate()
Dim sRespuesta As String
Cada vez que se desactiva el grfico
se pregunta si hay que guardar el libro
sRespuesta = MsgBox("Guardar los cambios?", vbYesNo)
If sRespuesta = vbYes Then ActiveWorkbook.Save
End Sub
________________________________________________________________
Private Sub oChart1_Resize()
Dim oGrafico As Object
Cada vez que cambia el tamao del grfico
se muestran la primera y la ltima celda oculta
Set oGrafico = Worksheets(2).ChartObjects(1)
MsgBox "Este grfico oculta la celda: " _
& oGrafico.TopLeftCell.Address _
& Chr(13) & "hasta la celda: " _
& oGrafico.BottomRightCell.Address
End Sub

Etapa3

Active un mdulo cualquiera y conecte el objeto declarado en el mdulo de clase con el objeto grfico
incrustadoparalassiguientesinstrucciones:

Dim oNomVariable As New NomModuloDeClase

Sub NomProced ()
Set oNomVariable.NomObjeto =
WorkSheets(HojaDeGrafico).
ChartObjects(NumeroDeGrafico).Chart
End Sub

Ejemplo

Para asociar los eventos al primer grfico de la segunda hoja de clculo, agregue el siguiente cdigo en el mdulo
Declaraciones.

Dim obj As New ObjGraficos


________________________________________________________________
Sub InicializaGrafico()

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
Set obj.Chart1 = Worksheets(2).ChartObjects(1).Chart
End Sub

Finalmente,llamealprocedimientoInitMiAplicacionalabrirellibro(mdulodeclaseThisWorkbook).

Private Sub Workbook_Open()


InicializaGrafico
End Sub

Al abrir este libro, los procedimientos creados durante la etapa 2 se ejecutarn automticamente y se
redimensionar o se desactivar el grfico situado en la segunda hoja de clculo. Estos procedimientos se
desactivarnalcerrarellibro.

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
EventosdelobjetoApplication

AfterCalculate

Ocurredespusdelreclculodelosformulariosdellibro.

NewWorkBook

Ocurrealcrearunnuevolibro.

ProtectedViewWindowActivate

Ocurrealactivarunaventanaprotegida.

ProtectedViewWindowBeforeClose

Ocurreinmediatamenteantesdecerrarunaventanaprotegidaounlibrodentrodeunaventana
protegida.

ProtectedViewWindowBeforeEdit

Ocurrealmodificarunaventanaprotegida.

ProtectedViewWindowDeactivate

Ocurrealcerrarunaventanaprotegida.

ProtectedViewWindowOpen

Ocurrecuandoseabreunlibroenunaventanaprotegida.

ProtectedViewWindowResize

Ocurrecuandoseredimensionaunaventanaqueseencuentraenmodoprotegido.

SheetActivate

Ocurrealactivarunahoja.

SheetBeforeDoubleClick

Ocurrealhacerdobleclicenunahojadeclculo,antesdelaaccinpredeterminadaparaeldobleclic.

SheetBeforeRightClick

Ocurrealhacerclicconelbotnsecundariodelratnenunahojadeclculo,antesdelaaccin
predeterminada.

SheetCalculate

Ocurrecuandoserecalculatodalahojadeclculoodespusdeactualizarungrficoalmodificarsus
datos.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
SheetChange

Ocurrecuandolasceldasdeunahojadeclculosemodificanporelusuariooporunvnculoexterno.

SheetDeactivate

Ocurrealdesactivarunahojadeclculo.

SheetFollowHyperlink

OcurrecuandoelusuariohaceclicenunhipervnculoenMicrosoftExcel.

SheetPivotTableAfterValueChange

Ocurrecuandosemodificaorecalculaunaceldaorangodeceldasdeunatabladinmica.

SheetPivotTableBeforeAllocateChanges

Ocurrealactualizarcambiosenunatabladinmica.

SheetPivotTableBeforeCommitChanges

OcurreantesdevalidarcambiosenunatabladinmicavinculadosaunorigendedatosOLAP.

SheetPivotTableBeforeDiscardChanges

Ocurreantesdedescartarcambiosenunatabladinmica.

SheetPivotTableUpdate

Ocurrealactualizarlahojadeinformedeunatabladinmica.

SheetSelectionChange

Ocurrecuandocambialaseleccinencualquierhojadeclculo(eleventonoocurresilaseleccinse
hacesobreunahojadegrfico).

WindowActivate

Ocurrealactivarunaventanadelibro.

WindowDeactivate

Ocurrecuandosedesactivaunaventanadelibro.

WindowResize

Ocurrealcambiareltamaodeunaventanadelibro.

WorkbookActivate

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Ocurrecuandoseactivaunlibro.

WorkbookAddinInstall

Ocurrecuandoseinstalaunlibroenformadeunamacrocomplementaria.

WorkbookAddinUninstall

Ocurrecuandosedesinstalaunamacrocomplementaria.

WorkbookAfterSave

Ocurredespusdeguardarunmdulodeclase.

WorkbookAfterXMLExport

OcurredespusdeexportarunarchivoXML.

WorkbookAfterXMLImport

OcurredespusdeimportarunarchivoXML.

WorkbookBeforeClose

Ocurrejustoantesdecerrarunlibro.

WorkbookBeforePrint

Ocurreantesdeimprimirunlibroabierto.

WorkbookBeforeSave

Ocurreantesdeguardarunlibroabierto.

WorkbookBeforeXMLExport

OcurreantesdeexportarunarchivoXML.

WorkbookBeforeXMLImport

OcurreantesdeimportarunarchivoXML.

WorkbookDeactivate

Ocurrecuandosedesactivaunlibroabierto.

WorkbookNewChart

Ocurrealcrearunnuevogrficoenunlibro.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
WorkbookNewSheet

Ocurrecuandosecreaunanuevahojaenunlibroabierto.

WorkbookOpen

Ocurrecuandoseabreunlibro.

WorkbookPivotTableOpenConnection

Ocurrealabrirlaconexindeuninformedetabladinmicaconsufuentededatos.

WorkbookPivotTableCloseConnection

Ocurrealcerrarlaconexindeuninformedetabladinmicaconsufuentededatos.

WorkbookRowsetComplete

OcurrecuandoelusuarioextraeeljuegodegrabacindeunatabladinmicaOLAP.

WorkbookSync

Ocurrealsincronizarlacopialocaldeunahojadeclculohechaapartirdeunreadetrabajoconla
copiaenelservidor.

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
EventosdelobjetoWorkbook

Activate

Ocurrecuandoseactivaellibro.

AddinInstall

Ocurrecuandoellibroseinstalaenformadeunamacrocomplementaria.

AddinUninstall

Ocurrecuandoellibrosedesinstalaenformadeunamacrocomplementaria.

AfterSave

Ocurredespusdeguardarellibro.

AfterXMLExport

OcurredespusdeexportarunarchivoXML.

AfterXMLImport

OcurredespusdeimportarunarchivoXML.

BeforeClose

Ocurreantesdecerrarellibrosiellibrofuemodificado,esteeventoseproduceantesdeinvitaral
usuarioaguardarloscambios.

BeforePrint

Ocurreantesdeimprimirellibro(ocualquieradesuspartes).

BeforeSave

Ocurreantesdegrabarellibro.

BeforeXMLExport

OcurreantesdeexportarunarchivoXML.

BeforeXMLImport

OcurreantesdeimportarunarchivoXML.

Deactivate

Ocurrealdesactivarungrfico,unahojadeclculoounlibro.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
NewChart

Ocurrealcrearunnuevogrficoenellibro.

NewSheet

Ocurrecuandosecreaunanuevahojaenellibro.

Open

Ocurrecuandoseabreellibro.

PivotTableOpenConnection

Ocurrealabrirlaconexindeuninformedetabladinmicaconsufuentededatos.

PivotTableCloseConnection

Ocurrealcerrarlaconexindeuninformedetabladinmicaconsufuentededatos.

RowsetComplete

Esteeventosedesencadenacuandoelusuarioextraeeljuegodegrabacindeunatabladinmica
OLAP.

SheetActivate

Ocurrecuandoseactivaunahoja.

SheetBeforeDoubleClick

Ocurrealhacerdobleclicenunahojadeclculo,antesdelaaccinpredeterminadaparaeldobleclic.

SheetBeforeRightClick

Ocurrealhacerclicconelbotnsecundariodelratnenunahojadeclculo,antesdelaaccin
predeterminada.

SheetCalculate

Ocurrecuandoserecalculatodalahojadeclculoodespusdequeserecalculeungrficoalmodificar
susdatos.

SheetChange

Ocurrecuandolasceldasdeunahojadeclculosemodificanporelusuariooporunvnculoexterno.

SheetDeactivate

Ocurrecuandosedesactivaunahojadeclculo.

SheetFollowHyperlink

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
SeproducealhacerclicencualquierhipervnculoenMicrosoftExcel.

SheetPivotTableAfterValueChange

Ocurrecuandosemodificaorecalculaunaceldaorangodeceldasdeunatabladinmica.

SheetPivotTableBeforeAllocateChanges

Ocurrealactualizarcambiosenunatabladinmica.

SheetPivotTableBeforeCommitChanges

OcurreantesdevalidarcambiosenunatabladinmicavinculadosaunorigendedatosOLAP.

SheetPivotTableBeforeDiscardChanges

Ocurreantesdedescartarcambiosenunatabladinmica.

SheetPivotTableChangeSync

Ocurredespusdemodificarunatabladinmica.

SheetPivotTableUpdate

Ocurrealactualizarlahojadelinformedetabladinmica.

SheetSelectionChange

Seproducecuandocambialaseleccinenunahojadeclculocualquiera(eleventonoseproducesila
seleccinestenunahojadegrfico).

Sync

Ocurrealsincronizarlacopialocaldeunahojadeclculohechaapartirdeunreadetrabajoconla
copiaenelservidor.

WindowActivate

Ocurrealactivarunlibro.

WindowDeactivate

Ocurrealdesactivarunlibro.

WindowResize

Ocurrecuandocambiaeltamaodelaventana.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
EventosdelobjetoWorksheet

Activate

Ocurrecuandoseactivaunlibro,unahojadeclculo,unahojadegrficooungrficoincrustado.

BeforeDelete

Ocurreantesdeeliminarunahoja.

BeforeDoubleClick

Ocurrealhacerdobleclicenunahojadeclculooungrficoincrustado,antesdelaaccin
predeterminadaparaeldobleclic.

BeforeRightClick

Ocurrealhacerclicconelbotnsecundariodelratnenunahojadeclculooungrficoincrustado,
antesdelaaccinpredeterminada.

Calculate

Ocurrealrecalcularlahojadeclculo.

Change

Ocurrecuandoalgunasceldasdelahojadeclculoestnmodificadasporelusuariooporunvnculo
externo.

Deactivate

Ocurrealdesactivarelgrfico,lahojadeclculooellibro.

FollowHyperlink

Ocurrealhacerclicenunhipervnculodeunahojadeclculo.

PivotTableAfterValueChange

Ocurrecuandosemodificaorecalculaunaceldaorangodeceldasdeunatabladinmica.

PivotTableBeforeAllocateChanges

Ocurrealactualizarcambiosenunatabladinmica

PivotTableBeforeCommitChanges

OcurreantesdevalidarcambiosenunatabladinmicavinculadosaunorigendedatosOLAP.

PivotTableBeforeDiscardChanges

Ocurreantesdedescartarcambiosenunatabladinmica.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
PivotTableChangeSync

Ocurredespusdemodificarunatabladinmica.

PivotTableUpdate

Ocurredespusdeactualizaruninformedetabladinmicaenunahojadeclculo.

SelectionChange

Ocurrecuandocambialaseleccinenunahojadeclculo.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
EventosdelobjetoChart

Activate

Ocurrecuandoseactivaunahojadegrficooungrficoincrustado.

BeforeDoubleClick

Ocurrealhacerdobleclicenungrficoincrustadoounahojadegrfico,antesdelaaccin
predeterminadaparaeldobleclic.

BeforeRightClick

Ocurrealhacerclicconelbotnsecundarioenungrficoincrustadoounahojadegrfico,antesdela
accinpredeterminadacorrespondiente.

Calculate

Ocurredespusdequeelgrficoseactualicecondatosnuevosomodificados.

Deactivate

Ocurrecuandosedesactivaelgrfico,lahojadeclculooellibro.

MouseDown

Ocurrealpresionarelbotnizquierdooderechodelratncuandoelpunteroestsobreungrfico.

MouseMove

Ocurrealcambiarlaposicindelpunterodelratnsobreungrfico.

MouseUp

Ocurrealsoltarelbotnizquierdooderechodelratncuandoelpunteroestsobreungrfico.

Resize

Seproducealcambiareltamaodelgrfico.

Select

Seproducealseleccionarunelementodelgrfico.

SeriesChange

Ocurrecuandoelusuariomodificaelvalordeunpuntodedatosdelgrfico.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Diferentestiposdeerror

SedistinguendiferentestiposdeerrorenellenguajeVBA:

l Erroresdesintaxis.

l Erroresdecompilacin.

l Erroresdeejecucin.

l Erroresdelgica.

1.Erroresdesintaxis

LoserroresdesintaxissedetectanautomticamenteamedidaqueseintroduceelcdigoenVBA.

Para activar la comprobacin de sintaxis, en el men Herramientas, seleccione Opciones, luego


seleccionelapestaaEditorymarquelacasillaComprobacindesintaxisautomtica.

Ejemplo

Loserroresdesintaxisnocorregidosprovocarnunerrordecompilacindeahelmensajequeaparece.

2.Erroresdecompilacin

LoserroresdecompilacinsedetectancuandoExceltratadecompilarelcdigo.

ElcdigoVBApuedecompilarsededosmaneras:

l Bajo demanda, al seleccionar la opcin Compilar VBAProject del men Depuracin. En este caso, el cdigo se
compilaensutotalidad.

l Automticamente al ejecutar el cdigo. En este caso, solamente se compila el cdigo contenido en los

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
procedimientoscuandosellamanporprimeravez.Losprocedimientosquenosellamannosecompilarn.

Serecomiendacompilarelprogramaantesdeejecutarloparaganartiempoenlaactualizacin.

Ejemplo

Es posible anticipar los errores de ejecucin debidos a las variables no declaradas usando la instruccin Option
Explicit.Sitratadeusarunnombredevariablenodeclarado,seproduceunerrordurantelacompilacin.

3.Erroresdeejecucin

LoserroresdeejecucinsedetectancuandoExceltratadeejecutarelcdigo.Unainstruccin,unaoperacin,una
llamadaaunafuncin,etc.,invlidasprovocaunerrordeejecucin.Porejemplo,elusodeunndiceerrneoenuna
coleccinolaasignacindeunvalornonumricoaunavariablenumricapuedeprovocarunerrordeejecucin.

Ejemplo

Lahojadeclculo"Enero"noexisteenellibroactivo.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
4.Erroresdelgica

Loserroresdelgicatienenqueverconerroresderazonamientooconunamalatraduccindeunrazonamientoen
cdigoVBA.Porejemplo,unalgoritmodeclculopuedeproducirunerrorenelresultadosiensutranscripcinaVBA
seomiteosetraducemalunaoperacinoelalgoritmoeserrneo.

Los errores de lgica son los ms difciles de detectar. En general, no producen un error de ejecucin: pero
producenunresultadodistintodelesperado.

Paraanalizarestetipodeerror,elentornoVBEdisponedeherramientasdedepuracinquepermitenejecutarel
cdigopasoapasoyverificarelcontenidodelasvariablesamedidaquesedesarrollaelprograma.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Depuracin

1.Presentacin

Ladepuracinpuedeactivarsededistintasmaneras:

l Ejecutandoelprogramapasoapaso.

l InsertandopuntosdeinterrupcinenelcdigoVBA.

l HaciendoclicenelbotnDepurarcuandoseproduceunerrordeejecucin.

Lasdiferentesherramientasdedepuracinpermiten:

l Conocerentodomomentoelvalordelasvariablesodelasexpresiones.

l Ejecutarinstrucciones.

l Modificarinteractivamenteelcdigo.

l Ejecutarelcdigopasoapaso.

l Agregarpuntosdeinterrupcin.

2.LabarradeherramientasDepuracin

LabarradeherramientasDepuracinpermiteaccederdirectamentealasherramientas dedepuracin.

1.Mododediseo:activaodesactivaelmododediseo.

2.Ejecutar(mtodoabreviadodeteclado[F5]):ejecutaelcdigodelprocedimientoencurso,delahojaUserForm
activaodeunamacro.

3.Interrumpir(mtodoabreviadodeteclado[Ctrl][Pausa]):interrumpelaejecucindelprogramaencursoypasa
almodoInterrupcin.

4.Restablecer:borraelcontenidodelasvariablesyreinicializaelproyecto.

5.Alternarpuntodeinterrupcin(mtodoabreviadodeteclado[F9]):defineoeliminaunpuntodeinterrupcinen
lalneaactualelcdigoseejecutarhastaelpuntodeinterrupcin,yluegopasaralmododepuracin.

6.Pasoapasoporinstrucciones(mtodoabreviadodeteclado[F8]):ejecutaelcdigohaciendounainterrupcin
despusdecadainstruccindelprocedimientoencursoydelosprocedimientosllamados.

7. Paso a paso por procedimientos (mtodo abreviado de teclado [Mays][F8]): ejecuta el cdigo haciendo una
interrupcin despus de cada instruccin del procedimiento en curso (las instrucciones de los procedimientos
llamadosseejecutandemaneracontinua).

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
8.Pasoapasoparasalir(mtodoabreviadodeteclado[Ctrl][Mays][F8]):ejecutaenformacontinualasrestantes
lneasdelprocedimientoencurso.

9.VentanaLocales:muestralosvaloresdelasvariableslocalesdelprocedimiento.

10.VentanaInmediato(mtodoabreviadodeteclado[Ctrl]G):muestralaventanaInmediato,quepermiteejecutar
unainstruccindeformainteractiva.

11.VentanaInspeccin:muestralalistadelasvariablesdeunainspeccin.

12.Inspeccinrpida(mtodoabreviadodeteclado[Mays][F9]):muestraelvalordelaexpresinseleccionada.

13. Pila de llamadas (mtodo abreviado de teclado [Ctrl] L): muestra la lista de llamadas de procedimiento cuya
ejecucinestencurso.

3.ElobjetoDebug

ElobjetoDebugpermiteenviardatosdesalidaalaventanaInmediatodurantelaejecucin.

Mtodos

Print

MuestratextoenlaventanaInmediato.

Assert

Suspendedeformacondicionallaejecucindelalneaenlaqueapareceelmtodo.

Ejemplo

Private Sub Workbook_SheetActivate(ByVal Sh As Object)


Muestra el nombre de la hoja activa en la ventana Inmediato
Debug.Print Sh.Name
If Sh.Name = "Resumen" Then ...

ResultadoenlaventanaInmediato:

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
AdministracindeerroresenVBA

Cuandoseproduceunerror,VBAgeneraunerrordeejecucinqueinterrumpelaaplicacin.Otroserrorespueden
hacerqueelcdigoVBAsecomportedemaneraimprevisible.

Paraevitaresto,esposiblemanejarelerrorconlaayudadelassiguientesinstruccionesyfunciones:

OnError(instruccin)

Indicaunasecuenciadeinstruccionesqueseejecutarencasodeerror.

Sintaxis1

On Error GoTo lnea

Activalarutinadeadministracindeerroresquecomienzaenlalneaindicadaporelargumentolnea.

Elargumentolneadebeserunaetiquetaonmerodelnea.

LalneadebeperteneceralmismoprocedimientoquelainstruccinOnError.

Sielargumentolneaesunnmerodelnea,debeserobligatoriamenteelprimercarcternovacodelalnea.

Sintaxisdelarutinadeadministracindeerrores

Lnea:
instrucciones
Resume

La instruccin Resume permite continuar la ejecucin del cdigo cuando termina la rutina de administracin de
errores,esdecir,unavezresueltoelproblemaqueprodujoelerror.

HaytressintaxisdiferentesparaResume:

Resume0 reanudalaejecucindelcdigodondeelerrorseprodujo.

ResumeNext reanudaapartirdelainstruccinquesigueinmediatamentealaquegenerelerror.

ResumeLnea reanudaenlalneaespecificadaporelargumentoLnea.

Paraimpedirlaejecucindelcdigodeadministracindeerrorescuandonohayerrores,coloqueunainstruccinExit
Sub,ExitFunctionoExitProperty inmediatamenteantesdelarutinadeadministracindeerrores.

Sintaxis2

On Error Resume Next

Especificaque,encasodeerror,laejecucindebecontinuar.

Sintaxis3

On Error GoTo 0

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Permiteinterrumpirlaadministracindeerrorescuandoelprocedimientoesttodavaenejecucin.

Ejemplo

Esteprocedimientoseleccionacadahojaylecambiaelnombre(pormediodeuncuadrodedilogo)sucesivamente.Unarutina
deadministracindeerrorseejecutacuandoelnombreelegidoesincorrectoocorrespondeaunnombreexistente.

Sub Errores_Nombre_Hojas()
Dim oHojaTest As Worksheet
Dim sNuevoNombre As String

En caso de error, se ejecutar la rutina "AdministracionDeErrores"


On Error GoTo AdministracionDeErrores

Para cada hoja, seleccionarla y solicitar un nombre


For Each oHojaTest In Sheets
oHojaTest.Select
1 sNuevoNombre = InputBox _
(prompt:="Escriba el nombre para la hoja activa", _
Default:=oHojaTest.Name)
Sale del procedimiento si el usuario hace clic en el
botn "Cancelar" o no indica ningn nombre
If sNuevoNombre = "" Then Exit Sub
oHojaTest.Name = sNuevoNombre
Next
Desactiva la administracin de errores
On Error GoTo 0
Selecciona la primera hoja y guarda el libro
Sheets(1).Select
ActiveWorkbook.Save
Exit Sub

Rutina de administracin de errores que muestra


un mensaje y reanuda en la lnea nmero 1
AdministracionDeErrores:
MsgBox "Nombre de hoja incorrecto o existente"
Resume 1
End Sub

Error(funcin)

Devuelveunmensajequecorrespondeaunnmerodeerror.

Sintaxis

Error (Cdigo error)

Error(instruccin)

Simulalaocurrenciadeunerror.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Sintaxis

Error CdigoError

Loscdigosdeerrorpersonalizadosdebentenerunvalorsuperioraldeloscdigosdeerrorestndareinferiora65
535.

1.ElobjetoErr

ElobjetoErrcontieneinformacinquepermiteconocerelorigendeunerrordeejecucin.

Propiedades

Description

Devuelveunacadenadecaracteresquecontieneunabrevedescripcindelerror.

HelpContext

Devuelveelidentificadordecontextoasociadoauntemadeunarchivodeayuda.

HelpFile

Devuelveunacadenadecaracteresquecontienelarutadeaccesocompletadelarchivodeayuda.

LastDLLError

Devuelveuncdigodeerrordesistemaproducidoporunallamadaaunabiblioteca devnculos
dinmicos(DLL).

Number

Devuelveoestableceunvalornumricoqueespecificaelnmerodelerror.

Source

Devuelveoestableceunacadenadecaracteresqueespecificaelnombredelobjetoolaaplicacinque
generelerror.

Mtodos

Clear

BorratodaslaspropiedadesestablecidasdelobjetoErr.

Raise

Permitegenerarerroresdeejecucin.

Ejemplo

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Elsiguientecdigomuestraunmensajequebrindainformacinsobrelanaturalezadelerror.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)


Dim oRng As Range

Muestra un mensaje si la hoja activada


es el resumen de ventas
On Error GoTo Error

If Sh.Name = "Resumen" Then


MsgBox "Resumen de las diferentes hojas ", vbExclamation
Set oRng = Worksheets("Enero").Range("A1:G11")
End If
On Error GoTo 0
Exit Sub
En caso de error, mostrar un mensaje con
la descripcin del error encontrado
Error:
MsgBox "Error de procedimiento: " _
& "Workbook_SheetActivate " _
& vbCr & vbCr & "en la aplicacin: " & Err.Source _
& vbCr & vbCr & "Error Nro. " & Err.Number & " : " _
& Err.Description
Resume Next
End Sub

Paraprobaresteejemplo:

l EscribirelcdigoenelmduloThisWorkbook.

l LlamarunahojaResumen.

l PonerelcursorenlahojaResumen.

Laejecucindeestecdigo(sinoexistelahojaEnero)devuelveelsiguientecuadrodemensaje:

SilahojaEneroexiste,noseproduceningnerror.

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
LatecnologaAutomation

1.Presentacin

La tecnologa Automation, llamada tambin OLE (Object Linking and Embedding) u OLE Automation, permite
manipularlosobjetosdeotraaplicacindirectamente desdeExceloVBAExcel.

Para poder funcionar, Automation necesita un cliente y un servidor, llamado servidor OLE. El servidor es la
aplicacin o el componente que realiza los servicios al cliente. El cliente (tambin llamado controlador), usa estos
serviciosparamanejarlaaplicacinservidorymanipularsusobjetos.Porejemplo,siseejecutaunacombinacinde
correspondenciadeWorddesdeVBAExcel,ExceleselclienteyWordelservidorOLE.

Unabibliotecadeobjetosesunarchivo,generalmenteconextensinolb,queproveelainformacinnecesariapara
manipularlosobjetospuestosadisposicinporunservidor.SepuedeusarelExaminadordeobjetosparaexaminar
elcontenidodeunabibliotecadeobjetos.

Para tener acceso a los objetos de otra aplicacin, se debe hacer referencia a su biblioteca de objetos de la
siguientemanera:

Seleccione la opcin Referencias del men Herramientas. Aparece el cuadro de dilogo Referencias
VBAProjectcontodoslosservidoresOLEguardadosenlabasedelregistro.

Activeacontinuacinlasreferenciasdeseadas.

ElnmeroindicadoconelnombredelabibliotecadeobjetoscorrespondealaversindeMicrosoftOffice(12parala
versin 2007,14paralaversin2010,15paralaversin2013y16.0paralaversin2016).

2.UsodelatecnologaAutomation

Paramanipularlosobjetosdeotraaplicacin,procedadelasiguientemanera:

DefinaunavariableobjetoenelcdigoVBA.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
UselasfuncionesCreateObjectoGetObjectparahacerreferenciaalobjeto.

Ejemplos

EjecutarWord

Dim oAppWord as Object


Set oAppWord = CreateObject("Word.Application")

Dim oAppWord As New Word.Application

ReferenciaaundocumentodeWordexistente

Dim oDocWord As New Word.Document


Set oDocWord = GetObject("C:\Clientes\mailing.doc")

Si hay instalada ms de una versin del mismo programa, se ejecutar la ltima versin guardada en la base de
registro.

Sinembargo,puedeprecisarlaversindelprogramaquedeseaejecutar:

Ejemplo

IniciarlaaplicacinWord2013

Dim oAppWord as Object


Set oAppWord = CreateObject("Word.Application.15")

Las siguientes secciones describen cmo manejar distintos programas de Microsoft Office usando la tecnologa
Automation.

Los objetos, colecciones, mtodos y propiedades de los modelos de objeto de Microsoft Office son numerosos.
Solamentesedescribenacontinuacinlosmsusados.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
ComunicacinconWorddesdeExcel

1.ElmodelodeobjetodeWord

ExtractodelmodelodeobjetodeWord:

2.PrincipalescoleccionesdelmodelodeobjetodeWord

AddIns

ColeccindeobjetosAddInquerepresentalosmodelosycomplementosdisponiblesenWord,tantosi
estncargadosactualmentecomosinoloestn.

AutoCaptions

ColeccindeobjetosAutoCaptionquerepresentalasleyendasagregadasautomticamentecuando
esoselementosseinsertanenundocumento.

CaptionsLabels

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
ColeccindeobjetosCaptionLabelquerepresentalosrtulosdelasleyendasagregadas
automticamentecuandoesoselementosseinsertanenundocumento.

COMAddIns

ColeccindeobjetosCOMAddinquerepresentanloscomplementosCOM(ComponentObjectModel),
accesiblesdesdeWord.

Dialogs

ColeccindeobjetosDialogquerepresentanloscuadrosdedilogointegradosdeWord.

Documents

ColeccindeobjetosDocumentquerepresentantodoslosarchivosabiertosactualmenteenWord.

FileConverters

ColeccindeobjetosConverterquerepresentantodoslosconversoresdearchivodisponiblespara
abriryguardararchivosdesdeWord.

Languages

ColeccindeobjetosLanguagequerepresentatodoslosidiomasdisponiblesenWordparala
comprobacindeortografaygramtica.

ListGalleries

ColeccindeobjetosListGalleryquerepresentalastresbibliotecasdemodelosdelista(convietas,
nmerosyjerarqua).

RecentFiles

ColeccindeobjetosRecentFilequerepresentalosltimosarchivosabiertosenWord.

Tasks

ColeccindeobjetosTaskquerepresentaelconjuntodeaplicacionesenejecucin.

Templates

ColeccindelosobjetosTemplatequerepresentalosmodelosactualmentedisponibles.

Windows

ColeccindeobjetosWindowquerepresentatodaslasventanasactualmentedisponiblesenWord.

3.PrincipalesobjetosdelmodelodeobjetodeWord

AutoCorrect

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
ObjetoquecontienelainformacinrelativaalacorreccinautomticadeWord(opciones,excepciones,
etc.).

DefaultWebOptions

ObjetoquerepresentalosatributosglobalesqueusaMicrosoftWordalguardarundocumentocomo
pginaweboalabrirunapginaweb.

EmailOptions

ObjetoquecontienelosatributosglobalesqueMicrosoftWordutilizaalcrearyeditarmensajesde
correoelectrnicoylasrespuestasaesosmensajes.

FileDialog

Objetoquerepresentaelcuadrodedilogoquelepermitirejecutaracciones conunarchivo(por
ejemplo,abrirunarchivo,guardarlo,etc.).

FontNames

Objetoquecontienelosnombresdetodaslasfuentesdisponibles.

LanguageSettings

Objetoquedevuelvelainformacindeldiccionariodesinnimos.

MailingLabel

Objetoquerepresentaaunaetiquetadecorreo.

MailMessage

ObjetoquerepresentaelmensajedecorreoelectrnicoactivosiWordessueditordeemail.

Options

RepresentalasopcionesdelaaplicacinydeldocumentodeWord.

Selection

Representalaseleccinactualdentrodeunaventanaodeunpanel.

System

Contieneinformacinsobreelsistemadesuordenador.

4.LacoleccinDocuments

LacoleccinDocumentsestformadaportodoslosobjetosDocumentabiertosenWord.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Principalesmtodos

Add

CreaunnuevodocumentoyloagregaalacoleccinDocuments.

Ejemplo:Documents.AddTemplate:="Normal"

Close

CierratodoslosdocumentosdeWordabiertos.

Ejemplo:Documents.Close

Open

AbreeldocumentoespecificadoyloagregaalacoleccinDocuments.

Ejemplo:Documents.OpenFileName:="C:\Clientes\Informe.docx", ReadOnly:=True

Save

Guardatodoslosdocumentosabiertos.

Ejemplo:Documents.Save

5.ObjetosDocument

LosobjetosDocumenthacenreferenciaaundocumentodeWord.ActiveDocumentdesignaaldocumentoactivo.

Principalesmtodos

Activate

Activaundocumentoyaabierto.

Ejemplo:Documents("Compras.docx").Activate

Close

CierraundocumentodeWordabierto.

Ejemplo:Documents("Compras.docx").CloseoActiveDocument.Close

PrintOut

Imprimeundocumentoopartedel.

Ejemplo:imprimirlastresprimeraspginasdeldocumentoactivo.

ActiveDocument.ActiveWindow.PrintOut_Range:=wdPrintFromTo, From:="1",To_="3"

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
PrintPreview

Muestralavistapreliminardeundocumento.

Ejemplo:ActiveDocument.PrintPreview

Range

DevuelveunobjetoRange(Selection).

Ejemplo:ActiveDocument.Range(0,50).Bold=True

Save

Guardaundocumento.

Ejemplo:ActiveDocument.Save

SaveAs

Guardaundocumentoconunnuevonombreoenotroformato.

Ejemplo:ActiveDocument.SaveAsFileName:=strDocName

Principalescolecciones

Characters

Coleccindeloscaracteresdeundocumento.

Paragraphs

Coleccindelosprrafosdeundocumento.

Tables

Coleccindelastablascontenidaseneldocumento.

Words

Coleccindelaspalabrasdeundocumento.

Ex:ActiveDocument.Words.Count

Principalesobjetos

AttachedTemplate

DevuelveunobjetoTemplatequerepresentaelmodeloasociadoaldocumentoespecificado.

DocumentTheme

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
ObjetoquerepresentaeltemadeOfficeaplicadoaldocumentoespecificado.

MailMerge

Objetoquepermiteaccederalasopcionesdefusinycombinacindecorrespondencia enWord.

PageSetup

Objetoquerepresentalasopcionesdeconfiguracindepgina.

Permissions

Objetoquerepresentalasopcionesdeseguridadparaeldocumentoespecificado.

WebOptions

ObjetoquerepresentalosatributosglobalesusadosenWordparaguardarundocumentocomo
pginaweb.

6.Ejemplo

Esteejemplomuestracmoinsertaruntexto(ttulo)ypegarunatablayungrficodeExcelenunnuevodocumento
deWord.

Public Sub CopiarEnWord()


Dim oAppWord As New Word.Application
Dim oDocWord As New Word.Document
Agrega un nuevo documento
With oAppWord
.Visible = True
Set oDocWord = .Documents.Add
.Activate
End With

With oAppWord.Selection
Agrega una lnea de ttulo y le aplica un formato
.TypeText Text:="Resultado de ventas de 2014"
.HomeKey Unit:=wdLine
.EndKey Unit:=wdLine, Extend:=wdExtend
.ParagraphFormat.Alignment = wdAlignParagraphCenter
.Font.Size = 18
With .Font
.Name = "Arial"
.Size = 18
.Bold = True
.Italic = False
.SmallCaps = True
End With

Copia la tabla de Excel en el Portapapeles


Range("A1:D10").Copy
Pega la tabla en Word con vnculo

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
.EndKey Unit:=wdLine
.TypeParagraph
.TypeParagraph
.PasteSpecial Link:=True, DataType:=wdPasteOLEObject, _
Placement:=wdInLine, DisplayAsIcon:=False

Copia el grfico de Excel en el Portapapeles


ActiveSheet.ChartObjects(1).Activate
ActiveChart.ChartArea.Select
ActiveChart.ChartArea.Copy
Pega el grfico en Word
.TypeParagraph
.TypeParagraph
.Paste
End With

With oDocWord
Guarda el documento de Word en la misma
carpeta que el libro de Excel
.SaveAs ThisWorkbook.Path & "\Resultado_2014.docx", _
Allowsubstitutions:=True
Vista previa del resultado en Word
.PrintPreview
End With
Reinicializa el objeto
Set oAppWord = Nothing
End Sub

ResultadoenWord2016:

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
- 8- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
ComunicacinconAccessdesdeExcel

1.ElmodelodeobjetodeAccess

ExtractodelmodelodeobjetodeAccess:

2.PrincipalescoleccionesdelmodelodeobjetodeAccess

COMAddIns

Coleccindemacroscomplementarias(objetosCOMAddIn)registradaenAccess

Forms

Coleccindeformularios(objetosForm)abiertosactualmenteenunabasededatosdeAccess.

Modules

Coleccindemdulosestndaresymdulosdeclase(objetosModule)abiertosactualmenteenuna
basededatosdeAccess.

Printers

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
ColeccindeobjetosPrinterquerepresentantodaslasimpresorasdisponiblesactualmenteenel
sistema.

References

ColeccindeobjetosReferencequerepresentanlasreferenciasVBAdeunabasededatosdeAccess.

Reports

Coleccindelistados(objetosReport)abiertosactualmenteenunabasededatosdeAccess.

3.PrincipalesobjetosdelmodelodeobjetodeAccess

DBEngine

ObjetoquerepresentaelmotordebasededatosMicrosoftJet.

DoCmd

ObjetoquepermiterealizaraccionesdeAccess,comoelcierredeventanas,laaperturadeformularios,
deinformesLamayorpartedelasaccionesdemacrossepuedenconvertirenVBAatravsdel
objetoDoCmd.

FileDialog

Objetoquerepresentauncuadrodedilogoquepermiterealizaraccionessobreunarchivo(ej.:
aperturadeunarchivo,grabacindeunarchivo).

LanguageSettings

ObjetoqueenvainformacindelosparmetrosdeidiomadeAccess.

Screen

Objetoquepermiteaccederalformulario,alestadooalcontrolqueactualmentetieneelfoco.

CurrentProject(oCodeProject)

ObjetoqueagrupavariascoleccionesdeobjetosdeAccessespecficos:

AllForms ColeccindetodoslosformulariosdeunabasededatosdeAccess.

AllMacros ColeccindetodaslasmacrosdeunabasededatosdeAccess.

AllModules ColeccindetodoslosmdulosdeunabasededatosdeAccess.

AllReports ColeccindetodoslosinformesdeunabasededatosdeAccess.

CurrentData(oCodeData)

ObjetoqueagrupavariascoleccionesdeobjetosdeAccessespecficos:

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
AllTables ColeccindetodaslastablasdeunabasededatosdeAccess.

AllQueries ColeccindetodaslasconsultasdeunabasededatosdeAccess.

4.Ejemplos

a.ListartablasdeunabasedeAccess

EsteejemplomuestracmoverlalistadetablasdelabasedeAccessNorthwind.accdb.

Sub Tablas_Access()
Dim oAppAccess As Access.Application
Dim i, j As Integer
Inicia una sesin de Microsoft Access
Set oAppAccess = CreateObject("Access.application")
Muestra la lista de tablas recorriendo
la coleccin "Alltables" del objeto "CurrentData"
With oAppAccess
.OpenCurrentDatabase (ThisWorkbook.Path & "\Northwind.accdb")
j = 2
For i = 1 To .CurrentData.AllTables.Count - 1
If Left(UCase(.CurrentData.AllTables(i).Name), 4) _
<> "MSYS" Then
Range("C" & j) = .CurrentData.AllTables(i).Name
j = j + 1
End If
Next i
End With
Sale de la aplicacin Access
oAppAccess.Quit
Reinicializa el objeto
Set oAppAccess = Nothing
End Sub

b.MostrarunatabladeAccessenExcel

ElobjetoQueryTablerepresentaunrangodedatosexterno(basededatos,pgina web,etc.)contenidaenuna
hojadeclculo.LaspropiedadesdeesteobjetoseexplicanenelcaptulodedicadoaInternet.

Sub Mostrar_Tabla()
Dim i As Integer

Borra los datos de la ltima tabla mostrada


If ActiveSheet.ListObjects.Count > 0 Then
For i = ActiveSheet.ListObjects(1).ListColumns.Count To 1 Step -1
ActiveSheet.ListObjects(1).ListColumns(i).Delete
Next i
End If

Muestra el contenido de la tabla seleccionada


haciendo una consulta en la base de datos "Northwind"

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
On Error GoTo 1:
If ActiveCell <> "" And ActiveCell.Column = 3 Then
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
"OLEDB;Provider=Microsoft.ACE.OLEDB.16.0;", _
"Data Source=" & ThisWorkbook.Path & "\Northwind.accdb;", _
"Mode=Share Deny Write;Jet OLEDB:Engine Type=6"), _
Destination:=Range("$D$2")).QueryTable
.CommandType = xlCmdTable
.CommandText = Array(ActiveCell)
.RowNumbers = False
.PreserveFormatting = True
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.AdjustColumnWidth = True
.PreserveColumnInfo = True
.AdjustColumnWidth = True
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
Else
MsgBox "Debe seleccionar un nombre de tabla", vbExclamation
End If
On Error GoTo 0
Exit Sub
1:
MsgBox "La tabla seleccionada no se puede mostrar", _
vbExclamation

End Sub

ResultadoenExcel:

Enesteejemplo,losdatosimportadossepuedenactualizarentodomomentopormediodelmtodoRefreshdel
objetoListObject.

Sub Actualiza_Datos()
Actualiza todas las consultas
de la hoja activa

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Dim oQTb As ListObject
For Each oQTb In ActiveSheet.ListObjects
If oQTb.SourceType = xlSrcQuery Then
oQTb.Refresh
End If
Next
End Sub

c.AbrirunatablaoconsultadeAccessenunnuevolibro

El mtodo OpenDatabase utilizado permite importar una tabla o el resultado de una consulta de Access en un
nuevolibrodeExcel.

Sub Abrir_Tabla()
Dim sTableName As String
Dim oWbk As Workbook
Dim sWbkName As String
Dim oFso As Object
Controla la celda seleccionada
If ActiveCell = "" Or ActiveCell.Column <> 3 Then Exit Sub
Abre la tabla seleccionada
sTableName = ActiveCell
Set oWbk = Workbooks.OpenDatabase( _
Filename:=ThisWorkbook.Path & "\Northwind.accdb", _
CommandText:=Array(sTableName), CommandType:=xlCmdTable)
Controla si el archivo de Excel ya existe
sWbkName = ThisWorkbook.Path & "\" & sTableName & ".xlsx"
If Dir(sWbkName) <> "" Then
If MsgBox("Libro " & sTableName _
& " ya existente, desea eliminarlo?", _
vbQuestion + vbYesNo) = vbYes Then
Set oFso = CreateObject("Scripting.FileSystemObject")
oFso.deletefile oWbkName
Set oFso = Nothing
Else
Exit Sub
End If
End If
Guarda y cierra el libro creado
oWbk.SaveAs sWbkName
oWbk.Close
End Sub

Losdatosimportadostambinpuedenactualizarseentodomomento.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
ComunicacinconOutlookdesdeExcel

1.ObjetosdeOutlook

AppointmentItem

Objetoquerepresentaunareunin,unacitanicaobienunacitaoreuninperidicas.

ContactItem

ObjetoquerepresentauncontactoalmacenadoenunacarpetadecontactosdeOutlook.

Folder

ObjetoquerepresentaunacarpetadeOutlook.

JournalItem

ObjetoquerepresentaunaentradadeldiarioalmacenadaenunacarpetaDiario(registrodetodaslas
transaccionesrealizadasenOutlookduranteunperododado).

MailItem

Objetoquerepresentaunmensajedecorreoelectrnico(email)dentrodeunacarpetademensajes
deOutlook.

NoteItem

ObjetoquerepresentaunanotadeOutlookdentrodeunacarpetaNotas.

PostItem

Objetoquerepresentaunapublicacindeunacarpetapblicaqueotrosusuariospuedenexaminar.

TaskItem

ObjetoquerepresentaunatareaalmacenadaenlacarpetaTareasdeOutlook.

2.AccesoalosobjetosdeOutlook

a.Creacindeunobjeto(email,contacto...)enOutlook

ElmtodoCreateItemdelobjetoApplicationpermitecrearunainstanciadeunobjetoparaunmensajedecorreo
ounacita.

Ejemplo:

CreacindeunnuevocontactoenOutlook.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Sub Crea_Contacto()
Dim oAppOutlook As Outlook.Application
Dim oContacto As Outlook.ContactItem
Inicia una sesin de Microsoft Outlook
Set oAppOutlook = CreateObject("outlook.application")
Crea un nuevo contacto con un nombre y una direccin
Set oContacto = oApp Outlook.CreateItem(olContactItem)
oContacto.LastName = "PEREZ Patricia"
oContacto.MailingAddress = "pati.perez@yahoo.es"
Guarda el contacto
oContacto.Save
End Sub

b.Accesoalosobjetos(contactos,citas )deOutlook

Elmtodo GetDefaultFolder del objetoNameSpacepermiteelaccesoalconjuntodecarpetasdeOutlook.Este


mtodousaunparmetroquepermiteespecificarlacarpetaquesedeseausar.

Sintaxisdelmtodo:

expression.GetDefaultFolder(FolderType)
expression Variable que representa un objeto NameSpace
FolderType Constante que representa el tipo de carpeta que se devuelve:
olFolderCalendar carpeta Calendario
olFolderContacts carpeta Contactos
olFolderDrafts carpeta Borrador
olFolderInbox carpeta Bandeja de entrada
olFolderJunk carpeta Correo no deseado
olFolderNotes carpeta Notas
olFolderOutbox carpeta Bandeja de salida
olFolderSentMail carpeta Enviados
olFolderTasks carpeta Tareas
olFolderToDo carpeta Para hacer

ParateneraccesoalalistadeobjetoscontenidosenunacarpetadeOutlook(contactos,citas,etc.),procedadela
siguientemanera:

l InicializarunavariableobjetodetipoNameSpace.

l Usar el mtodo GetDefaultFolder del objeto NameSpace para tener acceso a la carpeta deseada: el mtodo
devolverunobjetoFolder.

l Recorrer la coleccin Items del objeto Folder hasta llegar al conjunto de elementos de la carpeta (ciclo For...
Each).

Ejemplo:

EsteejemplodaaccesoalconjuntodereunionesenelcalendariodeOutlook.

Sub Reunion()
Dim oAppOutlook As Outlook.Application
Dim oNameSpace As Outlook.Namespace

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Dim oFolder As Outlook.Folder
Dim oItem As AppointmentItem

Abre una sesin de Microsoft Outlook


Set oAppOutlook = CreateObject("outlook.application")

Recorre las reuniones en el calendario


Set oNameSpace = oAppOutlook.GetNamespace("MAPI")
Set oFolder = oNameSpace.GetDefaultFolder(olFolderCalendar)
For Each oItem In oFolder.Items
Debug.Print oItem.Start & " " & oItem.End _
& " " & oItem.Subject
Next
End Sub

3.EjemplodeusodelobjetoMailItem

Esteejemplocreaunmensajedecorreoelectrnico(email)conundocumentodeWordcomoadjunto.

Sub Envia_Email()
Dim oAppOutlook As Outlook.Application
Dim oMail As Outlook.MailItem
Abre una sesin de Microsoft Outlook
Set oAppOutlook = CreateObject("outlook.application")
Crea un nuevo mensaje
Set oMail = oAppOutlook.CreateItem(olMailItem)
With oMail
Ttulo, Texto, Destinatarios, Adjuntos
.Subject = "RESULTADO DE VENTAS"
.Body = "Adjunto envo el documento con los resultados de
ventas del ao 2014." _
& Chr(13) & "Atentamente," & Chr(13) _
& "Equipo comercial"
.BodyFormat = olFormatHTML
To = "laura@northwindtraders.com"
To = "jaime@northwindtraders.com"
.Attachments.Add ThisWorkbook.Path & "\Resultados_2014.docx"
Enva el mensaje
.Send
End With
Cierra la aplicacin Outlook
oAppOutlook.Quit
Reinicializa el objeto
Set oAppOutlook = Nothing

End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Objetosvinculadosoincrustados

EsposiblemanipularlosobjetosvinculadosoincrustadosenExcelatravsdelacoleccinOLEObjects de objetos
OLEObject.

ElobjetoemparentadopuedeserunobjetoWorksheetounobjetoChart.

Ejemplo

ElsiguienteprocedimientomodificaeltamaoyaplicaunbordeatodoslosobjetosincrustadosenlahojadeclculoProductos.

Sub Format_OLE()
Dim ole1 As OLEObject
For Each ole1 In Worksheets("Productos").OLEObjects
With ole1
.Height = 100
.Width = 100
.Border.Color = vbRed
.Border.LineStyle = xlContinuous
.Border.Weight = xlMedium
End With
Next ole1
End Sub

1.MtodosdelobjetoOLEObject

Activate Duplicate

Add Item

BringToFront Select

Copy SendToBack

CopyPicture UpDate

Cut Delete

2.PropiedadesdelobjetoOLEObject

AutoLoad

Truesielobjetosecargaautomticamentecuandoseabreellibroquelocontiene.

OLEType

DevuelvexlOLELinkoxlOLEEmbed.

Application Name

AutoUpdate Object

Border Parent

Bottom Right

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Cell Placement

Count PrintObject

Creator ProgId

Enabled ShapeRange

Height Shadow

Index SourceName

Interior Top

Left TopLeftCell

LinkedCell Visible

ListFillRange Width

Locked ZOrder

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
MtodosypropiedadesrelativosalosvnculosconExcel

1.MtodosypropiedadesdelobjetoWorkbook

ChangeLink(mtodo)

Modificaunvnculoentredosdocumentos.

ChangeLink (NAME,NEWNAME,type)

NAME Nombredelvnculoquesedebemodificar.

NEWNAME Nuevonombredelvnculo.

type Tipodevnculoquehayquedevolver:xlLinkTypeExcelLinks,xlLinkTypeOLELinks.

LinkInfo(mtodo)

Devuelveinformacinacercadelafechayelestadodeactualizacindelvnculo.

LinkInfo(NAME,LINKINFO,type,EditionRef)

NAME Nombredelvnculo.

LINKINFO Tipodeinformacinquehayquedevolver:(xlUpdateStateoxlEditionDate).

type Tipo de vnculo que se debe devolver: (xlLinkInfoOLELinks, xlLinkInfoPublishers o


xllinkInfoSubscribers).

EditionRef Sielvnculoesunaedicin,esteargumentoespecificalareferenciaalaedicin.

LinkSources(mtodo)

DevuelveunamatrizVisualBasicconlosvnculosdellibro.

LinkSources(type)

type Tipo de vnculo que hay que devolver: xlExcelLinks, xlOLELinks, xlPublishers,
xlSubscribers.

OpenLinks(mtodo)

Abreeldocumentodeorigendeunvnculo.

OpenLinks(NAME,readonly,type)

NAME Nombredelvnculo.

Readonly Aperturaenmododesololectura(TrueoFalse).

type Tipodelvnculo:(xlExcelLinks,xlOLELinks,xlPublishersoxlSubscribers).

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
SaveLinkValues(propiedad)

PropiedadquedevuelveTruesiMicrosoftExcelguardalosvaloresdelosvnculosexternosconellibro.

SetLinkOnData(mtodo)

CreaunprocedimientoqueseejecutarcadavezqueseactualiceunvnculoDDE.

SetLinkOnData(NAME,PROCEDIMIENTO)

NAME Nombredelvnculo.

PROCEDIMIENTO Nombredelprocedimientoquesedebeejecutarcuandoseactualizaelvnculo.

UpDateLink(mtodo)

Actualizaunvnculo.

UpDateLink(NAME,type)

NAME Nombredelvnculo.

type Tipodevnculo(xlLinkTypeExcelLinksoxlLinkTypeOLELinks).

2.Mtodosypropiedadesdeotrosobjetos

AskToUpDateLinks(propiedaddelobjetoApplication)

PropiedadquedevuelveTruesiExcelinvitaalusuarioaactualizarlosvnculoscuandoseabrenlosarchivosquelos
contienen.

LinkSource(propiedaddelobjetoDocumentProperty)

Devuelveodefineelorigendeunapropiedaddeundocumentopersonalizadoconvnculos.

LinkToContent(propiedaddelobjetoDocumentProperty)

PropiedadquedevuelveTruesielvalordeunapropiedaddedocumentopersonalizadaestvinculadaalcontenido
deldocumentocontenedor.

ActivateMicrosoftApp(mtododelobjetoApplication)

ActivaunaaplicacindeMicrosoft.

Application.ActivateMicrosoftApp(INDEX)

INDEX Aplicacin de Microsoft que hay que activar. Algunos ejemplos: xlMicrosoftWord,
xlMicrosoftAccess,xlMicrosoft Project,etc.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
ConsultasporInternet

ElsiguienteprocedimientoinsertaenExcelunatablaprocedentedeunsitioWeb:

Hagaclicenelbotn situadoenelgrupoObtenerdatosexternosdelapestaaDatos.

Escribaladireccindelsitiowebdeseadoenlabarradedireccionesdelnavegador.

Seleccione las zonas que desea importar por medio del icono , ubicado en la parte superior de cada

tablaeliconosetransformaren .

Silodesea,modifiquelasopcionesdeconsultahaciendoclicenelbotnOpciones.

HagaclicenelbotndecomandoImportar.

SeleccioneeldestinodelatablaenelcuadrodedilogoImportardatosyhagaclicenAceptar.

Ejemplo:

ElsiguienteejemploimportalascotizacionesdelaBolsadeValoresdeMadrid desdeelsitiowww.bolsamadrid.es.

ResultadoenExcel:

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
ElobjetoQueryTable

ElobjetoQueryTable(tabladeconsulta)representaunrangodedatosexternoscontenidoenunahojadeclculo.
Estosdatospuedenprocederdeunorigenexterno,comounabasededatosdeMicrosoftAccessoSQLServer,ode
datosextradosconunaconsultaweb.

ElobjetoQueryTablepertenecealacoleccinQueryTablesdelobjetoWorksheet.

1.PropiedadesdelobjetoQueryTable

Propiedadesdelrangodedatosexternos

Ciertaspropiedadesdelobjeto QueryTablesecorrespondenconlasopcionesdelcuadrodedilogoPropiedades
delrangodedatosexternos.

Paramostrarestecuadro:

Activeelrangodedatosexternohaciendoclicenunadesusceldas.

SeleccioneelcomandoPropiedadesdelgrupoConexionesdelapestaaDatos (ohagaclicenelbotn
derechodelratnyseleccionePropiedadesdelrangodedatosenelmencontextual).

Aparecelasiguienteventana:

N. Propiedades Valoresdevueltos

1. Name Cadenadecaracteres

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
2. SavePassword Booleano

3. BackgroundQuery Booleano

4. RefreshPeriod Enterolargo

5. RefreshOnFileOpen Booleano

6. SaveData Booleano

7. FileNames Booleano

8. RowNumbers Booleano

9. AdjustColumnWidth Booleano

10. PreserveColumnInfo Booleano

11. PreserveFormatting Booleano

12. RefreshStyle Constantes:


xlInsertDeleteCells
xlInsertEntireRows
xlOverwriteCells

13. FillAdjacentFormulas Booleano

OpcionesdelasconsultasWeb

Ciertaspropiedadesdelobjeto QueryTablesecorrespondenconlasopcionesdelcuadrodedilogoOpcionesde
consultaweb.

Paramostrarestecuadrodedilogo:

Coloqueelcursorenelrangodedatosexternodelaconsultaweb.

HagaclicenelbotnderechodelratnyseleccionelaopcinModificarconsultaenelmencontextual.

HagaclicenelbotnOpciones,arribaaladerechadelcuadrodedilogoModificarconsultaweb.

N. Propiedades Valoresdevueltos

1. WebFormatting Constantes:
xlWebFormattingNone
xlWebFormattingRTF

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
xlWebFormattingAll

2. WebPreFormattedTextToColumns Booleano

3. WebConsecutiveDelimiterAsOne Booleano

4. WebSingleBlockTextImport Booleano

5. WebDisableDateRecognition Booleano

6. WebDisableRedirections Booleano

Otraspropiedadesusadasporlasconsultasweb

Connection

Cadenadecaracteres.URLdelorigendedatosweb.

Destination

ObjetoRange.Devuelvelaceldadelaesquinasuperiorizquierdadelrangodedatosexternos.

EditWebPage

Variant.URLdelapginaweb.

EnabledEditing

Booleano.Indicasielusuariopuedemodificarlaconsulta.

EnableRefresh

Booleano.Indicasielusuariopuedeactualizarlosdatosdelrangodedatosexternos.

MaintainConnection

Booleano.Indicasilaconexinalorigendedatosexternossemantienedespusdelaactualizaciny
hastaquesecierraellibro.

Name

Nombredelrangodeorigendedatosexternos.

QueryType

Constante.IndicaeltipodeconsultaqueMicrosoftExcelutilizapararellenarelorigendedatos
externos(xlWebQueryparalasconsultasweb).

ResultRange

ObjetoRange.Representaelreadelahojadeclculoocupadaporelorigendedatosexternos.

WebSelectionType

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Constante.Estableceunvalorquedeterminaqupartedelapginawebseimportar:todalapgina,
todaslastablasdelapginaosoloalgunasdeellas.

Constantes:xlWebEntirePage,xlWebAllTables,xlWebSpecifiedTables

WebTables

Cadenadecaracteres.Listadelimitada,porcomas,delosnombresonmerosdendicedelastablas
quehayqueimportar.

Mtodos

CancelRefresh

Cancelatodaslasconsultasensegundoplanodelrangodedatosexternoespecificado.

Delete

Eliminaelrangodedatosexternoespecificado.

Refresh

Actualizaelrangodedatosexterno.

ResetTimer

Restableceeltemporizadorautomticodeactualizacinutilizandoelltimointervaloestablecido
mediantelapropiedadRefreshPeriod(frecuenciadeactualizacin).

SaveAsODC

GuardaelorigendelosdatosexternoscomoarchivodeconexindedatosdeMicrosoftOffice.
(extensin.odc).Nofuncionaconlasconsultasweb.

2.Ejemplos

Creacindeunaconsultaweb

Esteprocedimientocreaunaconsultawebqueimportaunatablaespecificada.Losargumentospermitendefinir:

l LaURLdelsitioweb.

l Elnombredelrangodeorigendedatosexternos.

l Eldestinoenellibro(objetoRange).

l Elnmerodelatablaquehayqueimportar.

Sub CreateWebQuery(strURL As String, strName As String, _


oRngDesti As Range, sTable As Integer)

Crea una consulta web

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Modifica las opciones de importar y las propiedades de
la consulta
Actualiza los datos por medio del mtodo "Refresh"
With ActiveSheet.QueryTables.Add(Connection:=strURL, _
Destination:=oRngDesti)
Propiedades de la consulta
.Name = strName
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = True
.BackgroundQuery = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 30
Opciones de importar
.WebSelectionType = xlSpecifiedTables
.WebTables = sTable
.WebFormatting = xlWebFormattingAll
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
Actualiza los datos
.Refresh BackgroundQuery:=False

Corrige los datos


Cells.Replace What:="", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Da formato a los datos de la columna F
Selection.NumberFormat = "#,##0"
End With
End Sub

Ejemplo de llamada del procedimiento: importar la tabla nmero 13 de la pgina web


http://www.bolsamadrid.es/esp/aspx/Mercados/Precios.aspx?indice=ESI100000000enlahoja"Acciones" dellibroactivo.

Sub ImportarCotizaciones()
Dim oRng As Range
Dim sUrl As String
Dim sName As String
Dim i As Integer

Elimina las consultas existentes y borra los datos


ThisWorkBook.WorkSheets("Acciones").Select
If ActiveSheet.QueryTables.Count > 0 Then
For i = ActiveSheet.QueryTables.Count To 1 Step -1
ActiveSheet.QueryTables(i).Delete

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
Range("A1:X100").Delete
Next i
End If

Llama al procedimiento CreateQueryWeb


sUrl = "URL;http://www.bolsamadrid.es/esp/aspx/Mercados/Precios.aspx?indice=ESI100000000"
sName = "accind1_1"
Set oRng = ActiveWorkbook.Worksheets("Acciones").Range("A1")
CreateWebQuery sUrl, sName, oRng, 13
End Sub

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Publicacindepginasweb

Sepuedecrearunapginawebenformatohtmlapartirdeunlibro,deunahojadeclculo,deungrficoodeun
rangodeceldasyactualizarlapginaalguardarellibro.

ParapublicarunapginawebdesdedeExcel,sigaestasinstrucciones:

SeleccionelaopcinGuardardelapestaaArchivo.

DesplieguelasopcionesdelalistaTipoyseleccioneeltipodearchivoPgina web(*.htm*.html).

Haga clic en el botn Publicar para seleccionar los elementos que se van a publicar y las opciones de
publicacin(marquelasopcionesVolver a publicar automticamente cada vez que se guarde el libroy
Abrirpginaenelexploradorweb).

HagaclicotravezenelbotnPublicarparacrearlapginaweb.

Lapginasecrearyaparecerensunavegador.

EnVBA,paraasociarunelementodeunlibroaunapginaweb,sedebecrearunobjetoPublishObject(usandoel
mtodoAdddelacoleccinPublishObjects).Parapublicarlapginaweb,luegodeberusarelmtodoPublishdel
objetoPublishObject.

1.Asociacindeunelementodelibroaunapginaweb

Sintaxis

PublishObjects.Add(SourceType, FileName, Sheet, Source,


HtmlType, DivID, Title)

SolamentesonobligatorioslosargumentosSourceTypeyFileName.

PublishObjects ExpresinquedevuelveunacoleccinPublishObjects.

SourceType Tipo de elemento que se va a publicar (xlSourceSheet, SourceRange,


xlSourceworkbook,xlSourceChart,xlSourceQuery,xlSourcePivotTable).

Sheet Nombredelahojadeclculoguardadacomopginaweb.

Source Nombredelelementoquehayquepublicarsisetratadeungrfico,deuninforme
detabladinmicaodeunatabladeconsulta.

HtmlType Indica si el elemento publicado se guarda como componente de Microsoft Office


Webinteractivoocomotextoeimgenesestticas.

DivId Identificador nico usado en la etiqueta DIV de HTML para identificar el elemento
enlapginaweb.

Title Ttulodelapginaweb.

2.Publicacindelapginaweb

Sintaxis

PublishObject.Publish(Create)

PublishObject Expresin que devuelve un objeto PublishObject o una coleccin

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
PublishObjects.

Create SiesteargumentotieneelvalorTrueyelarchivoHTMLyaexiste,sesustituye.
ElvalorpordefectoesFalse.

3.Ejemplo

PublicacindellibroEmpleados:estelibrotienedoshojasdeclculo:Empleados yServicios.

Sub Publicar()
Dim WebPage As PublishObject

Crea un objeto para guardar una pgina web


Set WebPage = ActiveWorkbook.PublishObjects.Add _
(xlSourceWorkbook, ThisWorkbook.Path & "\Empleados.html" _
, , , xlHtmlStatic, , "LISTA DE EMPLEADOS")

Publica la pgina
With WebPage
.Publish (True)
.AutoRepublish = True
End With

End Sub

VistapreviadelapginawebEmpleados.htmlcreadaenInternetExplorer.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
LosobjetosWebOptionsyDefaultWebOptions

Los objetos WebOptions y DefaultWebOptions contienen los atributos usados por Excel al guardar un documento
comopginaweb.

ElobjetoDefaultWebOptionscontienelasopcioneswebpordefectodelaaplicacinExcel:sucontenedoreselobjeto
Application. Las propiedades del objeto corresponden a los atributos accesibles al hacer clic en el botn
Opciones webdelacategoraOpcionesavanzadasdelasopcionesdeExcel.

El objetoWebOptions contiene las opciones web del libro especificado: su contenedor es el objeto Workbook.Las
propiedades del objeto corresponden a los atributos accesibles desde el botn Herramientas/Opciones web al
guardarunlibroenformato"Pginaweb".

CiertaspropiedadessoncomunesaambosobjetoslasdemssonespecficasalobjetoDefaultWebOptions.

1.Propiedades

a.OpcionesdelapestaaGeneral

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
PropiedadesdelobjetoDefaultWebOptions

1. SaveHiddenData Booleano

2. LoadPictures Booleano

b.OpcionesdelapestaaExploradores

Propiedadescomunesaambosobjetos

1. TargetBrowser Constantes:
msoTargetBrowserIE4(IE5oIE6)
msoTargetBrowserV3(oV4)

2. AllowPNG Booleano

3. RelyOnCSS Booleano

4. RelyOnVML Booleano

PropiedadesdelobjetoDefaultWebOptions

5. SaveNewWebPagesAsWebArchives Booleano

c.OpcionesdelapestaaArchivos

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Propiedadescomunesaambosobjetos

1. OrganizeInFolder Booleano

2. UseLongFileNames Booleano

PropiedadesdelobjetoDefaultWebOptions

3. UpdateLinkOnSave Booleano

4. CheckIfOfficeIsHTMLEditor Booleano

d.Otraspropiedades

Propiedadescomunesaambosobjetos

Encoding

Constante.Tipodecodificacinusada(correspondealaopcinseleccionadaenlalistadesplegablede
lapestaaCodificacin).

FolderSuffix

Cadenadecaracteres.SufijodelarchivousadoporExcelalguardarundocumentocomopginaweb.

PixelsPerInch

Enterolargo.Densidad(cantidaddepxelesporpulgada)delasimgenesyceldasdetablasdeuna
pginaweb.

ScreenSize

Constante.Tamaomnimodepantallaptimo(anchoporalto,enpxeles)quesedebeutilizaralver

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
eldocumentoconunexploradorweb(ejemplo:msoScreenSize800x600,msoScreenSize1024x768,
etc.).

PropiedadesdelobjetoDefaultWebOptions

AlwaysSaveInDefaultEncoding

Booleano.Indicasiseusalacodificacinpredeterminadaalguardarunapginaweb.

2.MtododelobjetoWebOptions

UseDefaultFolderSuffix

Estableceelsufijodecarpetaparaellibroespecificado,correspondientealidiomaquehaya
seleccionadooinstalado.

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Importar,exportaryasignararchivosXML

ElmodelodeobjetodeExcelXMLpresentadoaqudescribelosnuevosobjetosquepermitencargardatosenformato
XMLenloslibrosdeExcel.

1.Colecciones

ListObjects

ColeccindelaslistasdeunahojadeclculodeExcel.EstaslistaspuedencontenerdatosXML.

ListColumns

ColeccindelascolumnasdeunalistadeExcel.

XmlMaps

ColeccindelosobjetosXMLdeunlibro.Estosobjetosseusanparacontrolarlarelacinentrelos
rangosdeceldasdeExcelyloselementosdeunesquemaXML.

XmlSchemas

ColeccindelosesquemasXMLcontenidosenunobjetoXML.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
XmlNamespaces

ColeccindelosespaciosdenombresXMLincluidosenellibroespecificado.

2.MtodosdelobjetoWorkbook

XmlImport

ImportaunarchivodedatosXML.

Ejemplo:

Sub ImportXML()
Dim oMapEmpleados As XmlMap

Importa el archivo empleados.xml en la hoja activa


ActiveWorkbook.XmlImport Url:=ActiveWorkbook.Path _
& "\Empleados.xml", ImportMap:=MapEmpleados, _
Overwrite:=True, Destination:=Range("A1")
oMapEmpleados.Name = "Empleados"
End Sub

SaveAsXMLData

ExportalosdatosdeunobjetoXMLMapaunarchivoXML.

Ejemplo:

Sub ExportXML()

Exporta el XMLMap al archivo Clientes2.xml


ActiveWorkbook.SaveAsXMLData _
Filename:=ActiveWorkbook.Path & "\Clientes2.xml", _
Map:=ActiveWorkbook.XmlMaps(1)
End Sub

3.EventosdelobjetoWorkbook

AfterXmlExport

OcurredespusdeexportarunarchivoXML.

AfterXmlImport

OcurredespusdeimportarunarchivoXML.

BeforeXmlExport

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
OcurreantesdeexportarunarchivoXML.

BeforeXmlImport

OcurreantesdeimportarunarchivoXML.

Ejemplo:

Private Sub Workbook_AfterXmlImport(ByVal Map As XmlMap, _


ByVal IsRefresh As Boolean, ByVal Result As XlXmlImportResult)
If Result = xlXmlImportSuccess Then
MsgBox "Importacin exitosa"
Else
MsgBox "Problema con la importacin del archivo " & Map.Name
End If
End Sub
_______________________________________________________________________
Private Sub Workbook_BeforeXmlImport(ByVal Map As XmlMap, _
ByVal Url As String, ByVal IsRefresh As Boolean, Cancel As Boolean)
If MsgBox("Desea importar el archivo " & Url & "?", _
vbQuestion + vbYesNo) = vbNo Then
MsgBox "Importacin cancelada", vbExclamation
Cancel = True
End If
End Sub

4.MtodosdelobjetoXmlMap

Delete

PermitequitarunXMLMap.

Ejemplo:ActiveWorkbook.XmlMaps(1).Delete

Import

PermiteactualizarunmapeoXMLapartirdeunarchivoXML.

Ejemplo:ActiveWorkbook.XmlMaps(1).Import"C:\Empleados.xml"

Export

ExportaaunarchivodedatosXMLelcontenidodelasceldasasignadasalobjetoXmlMap
especificado.

Ejemplo:ActiveWorkbook.XmlMaps(1).Export"C:\Empleados.xml"

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
ElobjetoHyperLink

ElobjetoHyperLinkrepresentaunhipervnculocontenidoenunahojadeclculo,unrangodeceldasoungrfico.

ElobjetoHyperLinkpertenecealacoleccinHyperLinksdelosobjetoscontenedoresRange,WorkbookyChart.

1.Propiedades

Address

Cadenadecaracteres.Direccindelaceldaquecontieneelhipervnculoespecificado.

EmailSubject

Cadenadecaracteres.Textodelalneadelasuntodelcorreoelectrnicodelhipervnculoespecificado
(propiedadusadaconloshipervnculosdelosmensajesdecorreoelectrnico).

Name

Cadenadecaracteres.Nombredelhipervnculo.

Range

ObjetoRange.Rangovinculadoalhipervnculo.

ScreenTip

Cadenadecaracteres.Textodelaetiquetainformativadelhipervnculoespecificado.

Shape

ObjetoShape.Formavinculadaalhipervnculoespecificado.

SubAddress

Cadenadecaracteres.Ubicacindentrodeldocumentoalaquehacereferenciaelhipervnculo.

TextToDisplay

Cadenadecaracteres.Textoquesemostrarparaelhipervnculoespecificado.

Type

Enterolargo.Tipodelhipervnculoespecificado.

2.Mtodos

AddToFavorites

AgregaunaccesodirectoalhipervnculoenlacarpetaFavoritos.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
CreateNewDocument

Creaunnuevodocumentovinculadoalhipervnculoespecificado.

Delete

Eliminaelhipervnculoespecificado.

Follow

Cargaeldocumentodedestinoasociadoalhipervnculoespecificadoymuestraeldocumentoenla
aplicacinapropiada.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
PresentacindelasAPI

La interfaz de programacin de Windows API (Application Programming Interface) ofrece funciones que le permiten
controlarlosaspectosmsnfimosdelsistema.PuedeextenderypersonalizarsusaplicacionesdeExcelllamandoa
funciones de Windows API desde VBA. Si bien Excel contina evolucionando y su lenguaje de programacin nativo
(VBA)integracadavezmsfuncionesdesistema,paraciertastareassedebenusarlasfuncionesAPI.

Una API es una serie de funciones que se pueden usar para trabajar con un componente, una aplicacin o un
sistema operativo. Se compone generalmente de uno o ms archivos DLL (Dynamic Link Library o biblioteca de
vnculosdinmicos).

La API ms usada es la API de Windows, que incluye las DLL que forman el sistema operativo Windows. Cada
aplicacindeWindowsinteractadirectaoindirectamenteconlaAPIdeWindows.Estogarantizauncomportamiento
coherentedetodaslasaplicacionesquefuncionanbajoWindows.

LasDLLdelaaplicacinWindowsmsusadassonlassiguientes:

Kernel32.dll Funcionesdebajoniveldelsistemaoperativo,talescomolaadministracindememoria
yderecursos.

User32.dll Funciones de administracin de Windows, tales como el tratamiento de mensajes,


relojes,mensycomunicacin.

GDI32.dll Biblioteca GDI (GraphicsDeviceInterface), que contiene las funciones de salida hacia los
perifricos(grficos,contextodevisualizacinyadministracindefuentes).

Existen otras API, como por ejemplo la interfaz MAPI (Mail Application Programming Interface), que permite escribir
aplicacionesdecorreoelectrnico.

ParaobtenermsdatossobrelasfuncionesdelaAPIdeWindows,existendosfuentesdeinformacin:

l El Visor de API (archivo ejecutable ApiLoad.exe, incluido en Microsoft Office 2007 Developer y en Microsoft Visual
Basic) permite mostrar las constantes, las declaraciones y los tipos de API. Los elementos seleccionados se pueden
copiar del Visor de API hacia las aplicaciones VBA. La informacin del Visor de API se almacena en archivos de texto
(win32api.txt,mapi32.txt,etc.)queluegosepuedenexportaraunabasededatosdeAccessparafacilitarlaconsulta
posterior.

l LaplataformaMicrosoftSDK (SoftwareDevelopmentKit)contieneladocumentacincompletadelaAPIdeWindows
yestdisponiblegratuitamenteenelsitioMicrosoftDeveloperNetwork.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
LlamaraunafuncindelaAPIdeWindows

Para llamar a una funcin de la API de Windows, se debe declarar con la instruccin Declare en la seccin
Declaracionesdeunmdulodelproyecto(generalmenteunmduloespecficodelosprocedimientosgeneralesdela
aplicacin).

1.SintaxisdelainstruccinDeclare

En las versiones de 32 bits de Visual Basic, se deben respetar las minsculas y maysculas en los nombres de
funcionesyprocedimientosdelasDLL.

[Public|Private] Declare Sub <nom_proc> Lib "<nom_DLL>"_

[Alias "<nom_alias>"] [([lista_argumentos])]


[Public|Private] Declare Function <nom_fonc> Lib "<nom_DLL>"_
[Alias "<nom_alias>"] [([lista_argumentos])] [As <type>]

nom_proc,nom_fonc NombredelprocedimientoodelafuncinusadaenVisualBasic.

nom_DLL NombredelaDLL.

nom_alias NombredelprocedimientoodelafuncinenlaDLL.

lista_argumentos [Optional][ByVal | ByRef][ParamArray] nomvariable[()][As type] (ver


captuloEllenguajeVBA).

CiertasDLLnoproveenunnombreparasusprocedimientosyfunciones,sinounnmeroordinal.Ladeclaracinde
estosprocedimientosofuncionesusalamismasintaxis,perosedebedefinirelnmeroordinalaniveldelaliascon
uncarcternumeral(#),seguidodelnmero(ejemplo:Alias"#52").

2.Pasodeargumentos

Las funciones y procedimientos de las DLL estn escritos principalmente en lenguaje C y hacen, por lo tanto,
referenciaasusintaxis.Poreso,elpasodeargumentosaunprocedimientoounafuncindeunaDLLdesdeVisual
Basicnosiempreessimple.AniveldelasDLLqueusanlasintaxisdelenguajeC,todoslosargumentossepasan
porvalor,salvolasmatrices.

LascadenasenlenguajeCseconsiderancomomatricesdecaracteres.

Ciertos argumentos de procedimientos de DLL pueden aceptar distintos tipos de datos (a semejanza de los
Variant) se deben declarar como tipo Any (ejemplo:variable As Any).Paraestetipodeargumento,VisualBasic
consideraquelmismosepasasistemticamenteporreferenciasihayquepasarloporvalor,sedebeexplicitara
niveldelallamada(ynodeladeclaracin),delprocedimientoodelafuncinconlamencinByVal.

Pordefecto,VisualBasicpasalosargumentosporreferencia.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
ListadefuncionesAPIdeWindows

Esta lista incluye las funciones de la API de Windows usadas habitualmente. Los ejemplos de uso de algunas de
estasfuncionessedescribenenlasiguienteseccin.

GetWindowsDirectory

DevuelvelarutacompletadeldirectoriodeWindows.

GetSystemDirectory

DevuelvelarutacompletadeldirectoriodesistemadeWindows.

GetSystemInfo

Devuelveunaseriededatossobreelsistema.Estosdatossealmacenanenunaestructuradetipo
SYSTEM_INFO.

GetActiveWindow

Devuelveelidentificadordelaventanaactiva.

FindExecutable

Retornaelnombreylarutadelaaplicacinasociadosaunarchivo(aplicacinasociadaalaextensin
delarchivo).

FindWindow

Devuelveelidentificadordelaventanaenfuncindesunombreydelaclaseapartirdelacualse
defini.

GetPrivateProfileString

DevuelveunaopcindeunarchivoIniapartirdeunnombredeseccinydeclave.

GetTempPath

Devuelvelarutaalacarpetatemporaldelsistema.

GetUserName

Devuelveelnombredelusuario.

WNetGetUser

Devuelveelnombredelogindered.

SetFocus

Poneelfocodeentradaenlaventanareferenciadaporsuidentificador.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
EjemplosdeusodefuncionesAPIdeWindows

1.RecuperareldirectorioWindows

DeclaracindelafuncinAPI:

Esta funcin API devuelve el directorio Windows


Private Declare Function GetWindowsDirectory _
Lib "kernel32" Alias "GetWindowsDirectoryA" _
(ByVal lpWindowsDir As String, _
ByVal lpWindowsHeight As Long) _
As Long

LlamadadelafuncinAPI:

Function GetWinPath() As String

Esta funcin VBA devuelve el directorio Windows


Dim StrResult As String
Dim StrProfile As String

StrResult = String(255, " ")


StrProfile = GetWindowsDirectory(StrResult, 255)

Corta la cadena al primer carcter nulo


If StrProfile <> "" Then
StrResult = Trim(StrResult)
GetWinPath = Left(StrResult, InStr(1, StrResult, vbNullChar) - 1)
Else
GetWinPath = ""
End If

End Function

2.AbrirlacalculadoradeWindows

EsteejemplopruebasilacalculadoradeWindowsestactiva,ylainiciasinoloest.

Aqu se usan dos funciones API: la primera, FindWindow, busca la ventana "Calculadora" la segunda,
FindExecutable,buscalaubicacindelarchivoCalc.exe.

DeclaracindelafuncinAPI:

Esta funcin API busca una ventana


Public Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long

Esta funcin API busca un archivo ejecutable


Public Declare Function FindExecutable Lib "shell32.dll" _

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Alias "FindExecutableA" (ByVal lpFile As String, _
ByVal lpDirectory As String, ByVal lpResult As String) As Long

LlamaralasfuncionesAPI:

Private Function Calculadora() As Boolean


Dim strClassName As String
Dim strWindowName As String
Dim Hwnd As Long
Dim blnExe As Boolean
Dim strRepCalc As String
Dim strResult As Long

Inicializacin
Calculadora = False

Busca una ventana "Calculadora" activa


strClassName = vbNullString
strWindowName = "Calculadora"
Hwnd = FindWindow(strClassName, strWindowName)
Si no la encuentra, busca el directorio
de Calc.exe y ejecuta la aplicacin
If Hwnd = 0 Then
strRepCalc = String$(255, 0)
strResult = FindExecutable("Calc.exe", "C:\", strRepCalc)
If strResult = 0 Then
MsgBox "Aplicacin Calculadora no encontrada"
Exit Function
End If
blnExe = Shell(strRepCalc, vbNormalFocus)
If Not blnExe Then
MsgBox "No se pudo ejecutar la aplicacin"
Exit Function
End If
Else
MsgBox "La aplicacin Calculadora ya est activa"
Exit Function
End If

Calculadora = True
MsgBox "Se inici la aplicacin Calculadora"
End Function

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
ElobjetoFileSystemObject

ElobjetoFileSystemObjectproporcionaaccesoalsistemadearchivosdeunequipo.Permiteespecialmentebuscar,
crear,eliminarymoverarchivosocarpetas.

1.Mtodos

Mtodosrelativosalosarchivos

CopyFile

Copiaunoomsarchivosdeunlugaraotro.

CreateTextFile

CreaunnombredearchivoespecificadoydevuelveunobjetoTextStreamquesepuedeutilizarpara
leeroescribirenunarchivo.

DeleteFile

Eliminaunarchivoespecificado.

FileExists

Devuelveunvalorbooleanoqueindicasiexisteelarchivoespecificado.

MoveFile

Mueveunoomsarchivosdeunlugaraotro.

OpenTextFile

AbreelarchivoespecificadoydevuelveunobjetoTextStreamquesepuedeutilizarparaleerel
archivooagregardatos.

Mtodosrelativosalascarpetas

CopyFolder

Copiaunacarpetadeunlugaraotro.

CreateFolder

Creaunacarpeta.

DeleteFolder

Eliminaunacarpetaespecificadajuntoconsucontenido.

FolderExists

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Devuelveunvalorbooleanoqueindicasiexistelacarpetaespecificada.

MoveFolder

Mueveunaomscarpetasdeunlugaraotro.

Mtodosrelativosalasunidadesdedisco

DriveExists

Devuelveunvalorbooleanoqueindicasiexistelaunidadespecificada.

GetDrive

DevuelveunobjetoDrivequecorrespondealaunidadparalarutaespecificada.

GetDriveName

Devuelveunacadenaquecontieneelnombredelaunidadparaunarutaespecificada.

2.Propiedades

Drives

DevuelveunacoleccinformadaporlosobjetosDrivedisponiblesenelequipolocal.

3.Ejemplo:copiadearchivosdeExcel

ElsiguienteejemplobuscatodoslosarchivosdeExcelquehayenlamismacarpetaqueellibroactivoyloscopiaen
eldirectorio"C:\ArchivosExcel".

Sub CopiaArchivos()
Dim oFso As Object
Dim strFile As String
Crea un nuevo directorio (salvo que ya exista)
Set oFso = CreateObject("Scripting.FileSystemObject")
If Not oFso.folderExists("C:\Archivos Excel") Then
oFso.createfolder ("C:\Archivos Excel")
End If

Busca los archivos de Excel y los copia en el directorio


strFile = Dir(ThisWorkbook.Path & "\*.xls*", vbNormal)
Do While strFile <> ""
oFso.copyfile ThisWorkbook.Path & "\" & strFile, "C:\Archivos Excel\"
Archivo siguiente
strFile = Dir
Loop
End Sub

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Presentacingeneral

LaaplicacindeExcelpresentadaenestecaptulopermiteadministrarpresupuestosrealizadosconExcel.

Lasprincipalesfuncionalidadesdeestaaplicacinson:

l Creacindeunnuevopresupuestoapartirdeunmodelo.

l Bsqueda de presupuestos en funcin de criterios (cliente, fecha), con la posibilidad de abrir o de eliminar uno o ms
presupuestos.

l Creacindenuevosclientesybsquedadeclientes.

Todoslosarchivosnecesariosparalaaplicacinsedebeninstalarenelmismodirectorio.Estosarchivosseentregan
conlosejemplosdellibroysonlossiguientes:

l ElarchivoquecontieneelcdigodelaaplicacindeExcel:GestPresupuesto.xlsm.

l LabasededatosdeAccessqueincluyelatabladeclientesylosformulariosdebsquedaydecreacindeuncliente:
Clientes.accdb.

l LaplantilladeExcelquesirvedebaseparalageneracindepresupuestos:Presupuesto.xltx.

Los presupuestos generados se presentan como archivos de Excel denominados de la siguiente manera: fecha de
creacinenlaformaAAAAMMDDyextensinxlsx(ejemplo:20130410.xlsx).Estossegeneranenunsubdirectoriode
laaplicacinquellevaelnombredelcliente.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
DescripcindelaaplicacinGestPresupuesto

AlabrirelarchivoGestPresupuesto.xlsm,lapresentacingeneraldelaaplicacineslasiguiente:

Estaaplicacincomprendelossiguienteselementos:

l UnacintadeOfficepersonalizadacreadaapartirdelautilidadCustomUIEditor(encontrarunadescripcindetallada
deestautilidadenelcaptuloMejoras enlainterfazdeusuario).

l UnanicahojadeclculollamadaGestindepresupuestosqueconstituyelapantalladebienvenidadelaaplicacin:
ttulodelaaplicacin,menespecficodelaaplicacin.Elmdulodeclase GestPresupuestoasociadoaestahojano
contieneningncdigo.

l Dos formularios, BuscarPresupuesto y NuevoPresupuesto, permiten, respectivamente, buscar y crear un nuevo


presupuesto.

l Dosmdulosestndares:elmduloProcCintacontienelosprocedimientosllamadosdesdelosbotonesdecomandode
lacintaelmduloProcGenecontienelasvariablespblicasylosprocedimientosgeneralesdelaaplicacin.

Estaaplicacinnecesitaqueseseleccionenlassiguientesreferencias:

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
CintadeOffice2013personalizada

1.Presentacin

La cinta personalizada est formada por la pestaa GESTIN DE PRESUPUESTOS, que contiene los siguientes
elementos:

l UngrupoPRESUPUESTOSqueincluyedosbotonesdecomando:NuevopresupuestoyBuscarpresupuesto.

l UngrupoCLIENTESqueincluyedosbotonesdecomando:NuevoClienteyBuscarCliente.

2.CdigoXMLdelacintapersonalizada

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
MduloThisWorbook

1.Presentacin

Estemdulopermite:

l ModificarlapresentacindeExcel:ocultalabarradefrmulasylosencabezadosdefilasycolumnas.

l RestablecerelentornodeExcelcuandosedesactivaellibro:muestralabarradefrmulasylosencabezadosdefilas
ycolumnas.

2.CdigoVBAdelmduloThisWorkbook

Option Explicit
Dim TabMenu() As String
________________________________________________________________
Private Sub Workbook_Open()
Ruta de la aplicacin
strFolder = ThisWorkbook.Path & "\"
End Sub
Private Sub Workbook_Activate()
Oculta la barra de frmulas y los encabezados
Application.DisplayFormulaBar = False
Application.ActiveWindow.DisplayHeadings = False
End Sub
________________________________________________________________
Private Sub Workbook_Deactivate()
Muestra la barra de frmulas y los encabezados
With Application
.DisplayFormulaBar = True
.ActiveWindow.DisplayHeadings = True
End With
End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
FormularioNuevoPresupuesto

1.Presentacin

Estemdulopermite:

l Crear un nuevo presupuesto a partir del modelo Presupuesto.xltx y guardar el presupuesto en el subdirectorio del
cliente.

l Mostrarlosdatosdelclienteenlasceldasconnombre(CodCli,Empresa,Direccin, etc.)dellibro.

l Aplicarallibroeltemaseleccionadoenelformulario.

2.Listadecontroles

N. Nombredelcontrol Descripcin

1. cboClient Cuadrodelistadesplegable

2. txtFecha Cuadrodetexto

3. spinDate Permiteincrementarodecrementarlafechaenunda

4. cboTema Cuadrodelistadesplegable

5. cmdCrear Botndecomando

3.ListadeceldasconnombredelmodeloPresupuesto.xltx

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
1.Presupuesto 5.Direccion
2.Contacto 6.CPostal
3.Fecha 7.Ciudad
4.Empresa 8.Pais

4.CdigoVBAdelformularioNuevoPresupuesto

Option Explicit
___________________________________________________________________
Private Sub UserForm_Initialize()
Muestra la lista de los clientes
Lista_Clientes ("NuevoPresupuesto")
Muestra los temas de Microsoft Office
Muestra_Temas_Office
Fecha por defecto
txtFecha = Format(Date, "DD/MM/YYYY")
End Sub
___________________________________________________________________
Private Sub txtDate_BeforeUpdate(ByVal Cancel As _
MSForms.ReturnBoolean)
Controla la fecha introducida
If txtFecha <> "" Then Cancel = Not Ctrl_Fecha(txtFecha)
End Sub
___________________________________________________________________
Private Sub Muestra_Temas_Office()
Dim strPath As String
Dim strfile As String
Muestra la lista de los temas de Microsoft Office
cboTheme.Clear
Ruta de acceso a los temas
strPath = Left(Application.Path, Len(Application.Path) - 9) _
& "\Document Themes 16\"
strfile = Dir(strPath & "*.thmx")
Muestra el nombre del archivo sin la extensin
Do While strfile <> ""
cboTema.AddItem Left(strfile, Len(strfile) - 5)

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
strfile = Dir
Loop
End Sub
___________________________________________________________________
Private Sub CmdCrear_Click()
Dim wbk As Workbook
Dim wbkName As String
Dim fso As Object
Dim strTheme As String
Controla la introduccin de datos
If cboCliente = "" Or txtFecha = "" Then
MsgBox "Cliente y fecha obligatorios", vbExclamation
Exit Sub
End If
Cierra los libros (excepto ThisWorkbook)
For Each wbk In Workbooks
If wbk.Name <> ThisWorkbook.Name Then
wbk.Close
End If
Next wbk
Comprueba que el libro no exista
wbkName = strFolder & cboCliente & "\" & Right(txtFecha, 4) & _
Mid(txtFecha, 4, 2) & Left(txtFecha, 2) & ".xlsx"
If Dir(wbkName) <> "" Then
MsgBox "El libro " & wbkName & " ya existe", vbExclamation
Exit Sub
End If
Abre un nuevo libro basado en la plantilla Presupuesto.xltx
Set wbk = Workbooks.Add(Template:=strFolder & "Presupuesto.xltx")
Crear el subdirectorio del cliente si no existe
If Dir(strFolder & cboCliente, vbDirectory) = "" Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.createfolder (strFolder & cboCliente)
End If
Guarda el libro en este directorio
wbkName = Right(txtFecha, 4) & Mid(txtFecha, 4, 2) & Left(txtFecha, 2) _
& ".xlsx"
wbk.SaveAs strFolder & cboCliente & "\" & wbkName
wbk.Activate
Asigna las celdas del libro a partir de la tabla clientes
(Procedimiento del mdulo ProcGene)
Muestra_Cliente wbk, cboCliente
wbk.ActiveSheet.Range("A9").Activate
Muestra el tema de Office seleccionado
strTheme = Left(Application.Path, Len(Application.Path) - 9) _
& "\Document Themes 16\" & cboTema & ".thmx"
wbk.ApplyTheme strTheme
Cierra el formulario
Unload Me
End Sub
________________________________________________________________
Private Sub SpinDate_SpinDown()
Da anterior
If IsDate(txtFecha) Then txtFecha = DateValue(txtFecha) - 1
End Sub

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
________________________________________________________________
Private Sub SpinDate_SpinUp()
Da siguiente
If IsDate(txtFecha) Then txtFecha = DateValue(txtFecha) + 1
End Sub

Despus de ejecutar este mdulo, se habr creado un nuevo presupuesto y se muestra en Excel para que el
usuariolocomplete:

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
FormularioBuscarPresupuesto

1.Presentacin

Estemdulopermite:

l Buscar presupuestos en funcin del cdigo de cliente o la fecha del presupuesto (si no se indica ningn criterio, se
muestrantodoslospresupuestosdisponibles).

l Abriroeliminarunoomspresupuestosenlalistadepresupuestosobtenida.

2.Listadecontroles

N. Nombredelcontrol Descripcin

1. cboCliente Cuadrodelistadesplegablemodificable.

2. cboOpe Cuadrodelistadesplegablemodificablequecontiene
losoperadoresdecomparacin(>=o<=).

3. txtFecha Cuadrodetexto.

4. cmdBuscar Botndecomando.

5. cmdSupr Botndecomando.

6. cmdAbrir Botndecomando.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
7. lstPresup Cuadrodelistadesplegable.

3.CdigoVBAdelformularioBuscarPresupuesto

Option Explicit

Private Sub UserForm_Initialize()


Operador para el campo Fecha
cboOpe.AddItem ">="
cboOpe.AddItem "<="
Permite seleccionar varios presupuestos
lstPresupuestos.MultiSelect = fmMultiSelectMulti
Casilla de verificacin para seleccionar los presupuestos
lstPresupuestos.ListStyle = fmListStyleOption
Muestra los clientes en la lista desplegable
Lista_Clientes ("BuscaPresupuesto")
End Sub
_________________________________________________________________________
Private Sub txtFecha_BeforeUpdate _
(ByVal Cancel As MSForms.ReturnBoolean)
Controla la fecha introducida
If txtFecha <> "" Then Cancel = Not Ctrl_Fecha(txtFecha)
End Sub
_________________________________________________________________________
Private Sub CmdAbrir_Click()
Dim wbk As Workbook
Dim sPath As String
Abrir los presupuestos seleccionados
On Error GoTo Err:
For j = 0 To lstPresupuestos.ListCount - 1
If lstPresupuestos.Selected(j) Then
Ruta del presupuesto
sPath = ThisWorkbook.Path & "\" & lstPresupuestos.List(j, 0) _
& "\" & Format(DateValue(lstPresupuestos.List(j, 1)), "YYYYMMDD")
Set wbk = Workbooks.Open(sPath)
wbk.Activate
End If
Next j
On Error GoTo 0
Unload Me
Exit Sub
Err:
No se pueden abrir dos presupuestos con el mismo nombre
en la misma aplicacin de Excel
If Err.Number = 1004 Then
MsgBox Err.Description
End If
Resume Next
End Sub
_________________________________________________________________________
Private Sub cmdBuscar_Click()
Dim strCli As String

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Dim i As Integer
Modifica el puntero del ratn
Application.Cursor = xlWait
Controla los datos introducidos
If (cboOpe <> "" And txtFecha = "") _
Or (cboOpe = "" And txtFecha <> "") Then
MsgBox "Debe introducir un operador y una fecha", vbExclamation
Exit Sub
End If
Muestra los presupuestos de un cliente o de todos los clientes
lstPresupuestos.Clear
If cboCliente = "" Then
For i = 0 To cboCliente.ListCount - 1
strCli = cboCliente.List(i)
MuestraPresupuestos (strCli)
Next i
Else
MuestraPresupuestos (cboCliente)
End If
Modifica el puntero del ratn
Application.Cursor = xlDefault
End Sub
_________________________________________________________________________
Private Sub MuestraPresupuestos(strCli As String)
Dim strRep As String
Dim strPresupuestos As String
Muestra la lista de presupuestos de un cliente
strRep = ThisWorkbook.Path & "\" & strCli & "\"
strPresupuestos = Dir(strRep & "*.*")
Do While strPresupuestos <> ""
If Ctrl_Presupuestos(strPresupuestos) Then
lstPresupuestos.AddItem strCli
lstPresupuestos.List(lstPresupuestos.ListCount - 1, 1) =
FechaPresupuesto(Left(strPresupuestos, 8))
i = i + 1
End If
strPresupuestos = Dir
Loop
End Sub

Function FechaPresupuesto(zPresupuesto)
Transforma el nmero de presupuesto en fecha
FechaPresupuesto = Right(zPresupuesto, 2) & "/" & Mid(zPresupuesto, 5, 2) _
& "/" & Left(zPresupuesto, 4)

End Function
__________________________________________________________________________
Private Function Ctrl_Presupuestos(strFileName As String) As Boolean
Dim dte
Controla la fecha del presupuesto
Ctrl_Presupuestos = False
If cboOpe <> "" And txtFecha <> "" Then
strFileName = Left(strFileName, Len(strFileName) - 5)
dte = Right(strFileName, 2) & "/" _
& Mid(strFileName, 5, 2) & "/" & Left(strFileName, 4)

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
If Not IsDate(dte) Then Exit Function
If cboOpe = ">=" And DateValue(dte) < DateValue(txtFecha) _
Then Exit Function
If cboOpe = "<=" And DateValue(dte) > DateValue(txtFecha) _
Then Exit Function
End If
Ctrl_Presupuestos = True
End Function
__________________________________________________________________________
Private Sub cmdEliminar_Click()
Dim strLista As String
Dim fso As Object
Dim strfile As String
Muestra los presupuestos seleccionados
For i = 0 To lstPresupuestos.ListCount - 1
If lstPresupuestos.Selected(i) Then
strLista = strLista & vbCr _
& lstPresupuestos.List(i, 0) & " de " & lstPresupuestos.List(i, 1)
End If
Next i
Eliminar los presupuestos seleccionados despus de pedir confirmacin
If MsgBox("Quiere eliminar los siguientes presupuestos? " & strLista, _
vbQuestion & vbYesNo) = vbYes Then
Set fso = CreateObject("Scripting.FileSystemObject")
For i = 0 To lstPresupuestos.ListCount - 1
If lstPresupuestos.Selected(i) Then
strfile = ThisWorkbook.Path & "\" & lstPresupuestos.List(i, 0) _
& "\" & Format(DateValue(lstPresupuestos.List(i, 1)), "YYYYMMDD")
& ".XLSX"
fso.Deletefile strfile
End If
Next i
End If
Vuelve a actualizar la lista de presupuestos
cmdBuscar_Click

End Sub

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
MdulosProcCintayProcGene

1.CdigoVBAdelmduloProcCinta

Option Explicit
________________________________________________________________________
Variables de mdulos
Dim blnAccess As Boolean
Dim appAccess As Access.Application
________________________________________________________________________
Sub Aadir_cliente(control As IRibbonControl)
Abre Access si no lo est y abre el formulario
de introduccin de clientes en modo aadir
If AccessActivo Then
appAccess.DoCmd.OpenForm "Ficha_Cliente"
appAccess.DoCmd.GoToRecord , "", acNewRec
Application.ActivateMicrosoftApp xlMicrosoftAccess
Else
MsgBox "No se puede acceder a Access", vbExclamation
End If
End Sub
________________________________________________________________________
Sub Buscar_Cliente(control As IRibbonControl)
Abre Access si no lo est y abre el formulario
de introduccin de clientes
If AccessActivo Then
appAccess.DoCmd.OpenForm "Ficha_Cliente"
Application.ActivateMicrosoftApp xlMicrosoftAccess
Else
MsgBox "No se puede acceder a Access", vbExclamation
End If
End Sub
________________________________________________________________________
Private Function AccessActivo() As Boolean
Comprueba si se ha abierto Access
On Error GoTo Err:
If blnAccess Then
Comprueba si la base de datos Clientes est abierta
Else
Ejecuta Access y abre la base Clientes.accdb
ejecutaAccess:
On Error GoTo Err2:
Set appAccess = CreateObject("Access.application")
appAccess.OpenCurrentDatabase (ThisWorkbook.Path & "\Clientes.accdb")
appAccess.Visible = True
blnAccess = True
End If
AccessActivo = True
Exit Function
Err:
blnAccess = False
GoTo ejecutaAccess:
Exit Function

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Err2:
AccessActivo = False
End Function
________________________________________________________________________
Sub Nuevo_Presupuesto(control As IRibbonControl)
Muestra el formulario de entrada de presupuestos
NuevoPresupuesto.Show
End Sub
________________________________________________________________________
Sub Buscar_Presupuesto(control As IRibbonControl)
Muestra el formulario de bsqueda de presupuestos
BuscaPresupuesto.Show
End Sub
________________________________________________________________________

2.CdigoVBAdelmduloProcGene

Option Explicit
___________________________________________________________________
Variables pblicas
Public i As Integer
Public j As Integer
Directorio de la aplicacin
Public strFolder As String
Objetos ADO
Private cnnCli As ADODB.Connection
Private rstCli As ADODB.Recordset
___________________________________________________________________
Public Sub Lista_Clientes(FormName As String)
Apertura de la base Clientes.accdb
If Not AbreBase Then Exit Sub
Apertura de la tabla Clientes
Set rstCli = New ADODB.Recordset
With rstCli
.ActiveConnection = cnnCli
.CursorType = adOpenForwardOnly
.LockType = adLockOptimistic
.Open ("Clientes")
End With
Muestra la lista de clientes extrados de la tabla
Clientes de la base de Access Clientes.accdb
Do While Not rstCli.EOF
Select Case UCase(FormName)
Case "BUSCAPRESUPUESTO"
BuscaPresupuesto.cboCliente.AddItem rstCli("Sociedad")
Case "NUEVOPRESUPUESTO"
NuevoPresupuesto.cboCliente.AddItem rstCli("Sociedad")
End Select
rstCli.MoveNext
Loop
Cierre de los objetos de Access
rstCli.Close

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
cnnCli.Close
End Sub
___________________________________________________________________
Public Sub Muestra_Cliente(wbk As Workbook, strCli As String)
Apertura de la base Clientes.accdb
If Not AbreBase Then Exit Sub
Apertura de la tabla Clientes
Set rstCli = New ADODB.Recordset
With rstCli
.ActiveConnection = cnnCli
.CursorType = adOpenForwardOnly
.LockType = adLockOptimistic
.Open ("SELECT * FROM Clientes WHERE Sociedad = " & strCli & "")
End With
Muestra datos del cliente en las celdas
del libro Presupuestos
If Not rstCli.EOF Then
With wbk.Sheets(1)
.Range("PRESUPUESTO") = Left(wbk.Name, Len(wbk.Name) - 4)
.Range("FECHA") = NuevoPresupuesto.txtFecha
.Range("PRESUPUESTO") = Left(wbk.Name, Len(wbk.Name) - 4)
.Range("SOCIEDAD") = rstCli("Sociedad")
.Range("DIRECCION") = rstCli("Direccion")
.Range("CPOSTAL") = rstCli("Codigo Postal")
.Range("CIUDAD") = rstCli("Ciudad")
.Range("PAIS") = UCase(rstCli("Pais"))
.Range("CONTACTO") = UCase(rstCli("Apellido")) & " " & UCase(rstCli("Nombre"))
End With
End If
Cierre de los objetos de Access
rstCli.Close
cnnCli.Close
Set rstCli = Nothing
Set cnnCli = Nothing
End Sub
___________________________________________________________________
Public Function AbreBase() As Boolean
Apertura de la base Clientes.accdb
On Error GoTo Err:
Set cnnCli = New ADODB.Connection
With cnnCli
.Provider = "Microsoft.ACE.OLEDB.16.0"
.Open ThisWorkbook.Path & "\Clientes.accdb"
End With
On Error GoTo 0
AbreBase = True
Exit Function
Err:
On Error GoTo 0
AbreBase = False
MsgBox "Problema en la apertura de la base Clientes.accdb", _
vbExclamation
End Function
___________________________________________________________________
Function Ctrl_Fecha(zFecha As control) As Boolean

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Control de la fecha
If zFecha <> "" Then
Sustituye los . por /
zFecha = Replace(zFecha, ".", "/")
If IsDate(zFecha) Then
zFecha = Format(DateValue(zFecha), "DD/MM/YYYY")
Ctrl_Fecha = True
Else
MsgBox "Debe introducir una fecha en formato DD/MM/AAAA", _
vbExclamation
Ctrl_Fecha = False
End If
End If
End Function

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
MdulosProcCintayProcGene

1.CdigoVBAdelmduloProcCinta

Option Explicit
________________________________________________________________________
Variables de mdulos
Dim blnAccess As Boolean
Dim appAccess As Access.Application
________________________________________________________________________
Sub Aadir_cliente(control As IRibbonControl)
Abre Access si no lo est y abre el formulario
de introduccin de clientes en modo aadir
If AccessActivo Then
appAccess.DoCmd.OpenForm "Ficha_Cliente"
appAccess.DoCmd.GoToRecord , "", acNewRec
Application.ActivateMicrosoftApp xlMicrosoftAccess
Else
MsgBox "No se puede acceder a Access", vbExclamation
End If
End Sub
________________________________________________________________________
Sub Buscar_Cliente(control As IRibbonControl)
Abre Access si no lo est y abre el formulario
de introduccin de clientes
If AccessActivo Then
appAccess.DoCmd.OpenForm "Ficha_Cliente"
Application.ActivateMicrosoftApp xlMicrosoftAccess
Else
MsgBox "No se puede acceder a Access", vbExclamation
End If
End Sub
________________________________________________________________________
Private Function AccessActivo() As Boolean
Comprueba si se ha abierto Access
On Error GoTo Err:
If blnAccess Then
Comprueba si la base de datos Clientes est abierta
Else
Ejecuta Access y abre la base Clientes.accdb
ejecutaAccess:
On Error GoTo Err2:
Set appAccess = CreateObject("Access.application")
appAccess.OpenCurrentDatabase (ThisWorkbook.Path & "\Clientes.accdb")
appAccess.Visible = True
blnAccess = True
End If
AccessActivo = True
Exit Function
Err:
blnAccess = False
GoTo ejecutaAccess:
Exit Function

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Err2:
AccessActivo = False
End Function
________________________________________________________________________
Sub Nuevo_Presupuesto(control As IRibbonControl)
Muestra el formulario de entrada de presupuestos
NuevoPresupuesto.Show
End Sub
________________________________________________________________________
Sub Buscar_Presupuesto(control As IRibbonControl)
Muestra el formulario de bsqueda de presupuestos
BuscaPresupuesto.Show
End Sub
________________________________________________________________________

2.CdigoVBAdelmduloProcGene

Option Explicit
___________________________________________________________________
Variables pblicas
Public i As Integer
Public j As Integer
Directorio de la aplicacin
Public strFolder As String
Objetos ADO
Private cnnCli As ADODB.Connection
Private rstCli As ADODB.Recordset
___________________________________________________________________
Public Sub Lista_Clientes(FormName As String)
Apertura de la base Clientes.accdb
If Not AbreBase Then Exit Sub
Apertura de la tabla Clientes
Set rstCli = New ADODB.Recordset
With rstCli
.ActiveConnection = cnnCli
.CursorType = adOpenForwardOnly
.LockType = adLockOptimistic
.Open ("Clientes")
End With
Muestra la lista de clientes extrados de la tabla
Clientes de la base de Access Clientes.accdb
Do While Not rstCli.EOF
Select Case UCase(FormName)
Case "BUSCAPRESUPUESTO"
BuscaPresupuesto.cboCliente.AddItem rstCli("Sociedad")
Case "NUEVOPRESUPUESTO"
NuevoPresupuesto.cboCliente.AddItem rstCli("Sociedad")
End Select
rstCli.MoveNext
Loop
Cierre de los objetos de Access
rstCli.Close

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
cnnCli.Close
End Sub
___________________________________________________________________
Public Sub Muestra_Cliente(wbk As Workbook, strCli As String)
Apertura de la base Clientes.accdb
If Not AbreBase Then Exit Sub
Apertura de la tabla Clientes
Set rstCli = New ADODB.Recordset
With rstCli
.ActiveConnection = cnnCli
.CursorType = adOpenForwardOnly
.LockType = adLockOptimistic
.Open ("SELECT * FROM Clientes WHERE Sociedad = " & strCli & "")
End With
Muestra datos del cliente en las celdas
del libro Presupuestos
If Not rstCli.EOF Then
With wbk.Sheets(1)
.Range("PRESUPUESTO") = Left(wbk.Name, Len(wbk.Name) - 4)
.Range("FECHA") = NuevoPresupuesto.txtFecha
.Range("PRESUPUESTO") = Left(wbk.Name, Len(wbk.Name) - 4)
.Range("SOCIEDAD") = rstCli("Sociedad")
.Range("DIRECCION") = rstCli("Direccion")
.Range("CPOSTAL") = rstCli("Codigo Postal")
.Range("CIUDAD") = rstCli("Ciudad")
.Range("PAIS") = UCase(rstCli("Pais"))
.Range("CONTACTO") = UCase(rstCli("Apellido")) & " " & UCase(rstCli("Nombre"))
End With
End If
Cierre de los objetos de Access
rstCli.Close
cnnCli.Close
Set rstCli = Nothing
Set cnnCli = Nothing
End Sub
___________________________________________________________________
Public Function AbreBase() As Boolean
Apertura de la base Clientes.accdb
On Error GoTo Err:
Set cnnCli = New ADODB.Connection
With cnnCli
.Provider = "Microsoft.ACE.OLEDB.16.0"
.Open ThisWorkbook.Path & "\Clientes.accdb"
End With
On Error GoTo 0
AbreBase = True
Exit Function
Err:
On Error GoTo 0
AbreBase = False
MsgBox "Problema en la apertura de la base Clientes.accdb", _
vbExclamation
End Function
___________________________________________________________________
Function Ctrl_Fecha(zFecha As control) As Boolean

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Control de la fecha
If zFecha <> "" Then
Sustituye los . por /
zFecha = Replace(zFecha, ".", "/")
If IsDate(zFecha) Then
zFecha = Format(DateValue(zFecha), "DD/MM/YYYY")
Ctrl_Fecha = True
Else
MsgBox "Debe introducir una fecha en formato DD/MM/AAAA", _
vbExclamation
Ctrl_Fecha = False
End If
End If
End Function

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Listadeinstrucciones

1.Cadenasdecaracteres

LSet

Alineaalaizquierdaunacadenadecaracteresdentrodeunavariabletipocadena.

Mid

Reemplazaunacantidadespecificadadecaracteresdentrodeunavariablecadenaporloscaracteres
extradosdeotracadena.

RSet

Alineaaladerechaunacadenadecaracteresdentrodeunavariabletipocadena.

2.FechaHora/Matemticas

Date

Devuelvelafechadelsistemaencurso.

Randomize

Inicializaelgeneradordenmerosaleatorios.

Time

Devuelvelahoradelsistema.

3.Declaracin

Const

Declaralasconstantesquehayqueutilizarenlugardevaloresfijos.

Declare

Seutilizaaniveldemduloparadeclararlasreferenciasaprocedimientosexternosenunabiblioteca
DLLounrecursodecdigoMacintosh.

DefType

DefinelostiposdedatospordefectodelasvariablesyvaloresdevueltosporprocedimientosFunction
cuyosnombrescomienzanconloscaracteresespecificados(DefBool, DefInt, ..., DefStr).

Dim

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Declaravariablesylesreservaespaciodealmacenamientoenlamemoria.

Enum

Declarauntipoparaunaenumeracin.

Event

Declarauneventodefinidoporelusuario.

Function

Declaraelnombre,losargumentosyelcdigoqueformaelcuerpodeunprocedimientoFunction.

Let

Asignaelvalordeunaexpresinaunavariableoaunapropiedad(equivalealsigno=).

OptionBase

Defineelmenorvalordelndiceparalasmatrices:0o1.

OptionCompare

Defineelmododecomparacindecadenas:BinaryoText.

OptionExplicit

Obligaladeclaracinexplcitadetodaslasvariablesdelmdulo.

OptionPrivateModule

Declaraelmdulocompletocomoprivado.

Private

Declaralasvariablesprivadasyreservasuespaciodealmacenamientoenlamemoria.

PropertyGet

Declaraelnombre,losargumentosyelcdigodeunprocedimientoProperty quepermiteleerelvalor
deunapropiedad.

PropertyLet

Declaraelnombre,losargumentosyelcdigodeunprocedimientoProperty queleasignaunvalora
unapropiedad.

PropertySet

Declaraelnombre,losargumentosyelcdigodeunprocedimientoProperty queasignauna
referenciaaunobjeto.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Public

Declaralasvariablespblicasylesreservaespaciodealmacenamientoenlamemoria.

ReDim

Dimensionavariablesdetipotabladinmicaylesreservaespaciodealmacenamientoenlamemoria.

Set

Asignaunareferenciaaunobjeto.

Static

Definelasvariablesestticasylesreservaespaciodealmacenamientoenlamemoria.

Sub

Declaraelnombre,losargumentosyelcdigodeunprocedimientoSub.

Type

Defineuntipodedatosdefinidoporelusuario.

4.Error

Error

Simulalaocurrenciadeunerror.

OnError

Activaunarutinadetratamientodeerroresyespecificasuubicacindentrodeunprocedimiento.
Tambinpermitedesactivarunarutinadetratamientodeerrores.

Resume

Restablecelaejecucindelcdigocuandoterminaunarutinadetratamientodeerrores.

5.Archivo

Close

Finalizalasoperacionesdeentradaysalidaenunarchivoabiertoconlainstruccin Open.

FileCopy

Copiaunarchivo.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
Get

Leelosdatosdeunarchivoabiertoylosguardaenunavariable.

Input#

Leelosdatosapartirdeunarchivosecuencialabiertoylosasignaavariables.

Kill

Eliminalosarchivosdeldisco.

LineInput#

Leeunalneadedatosapartirdeunarchivosecuencialabiertoylaasignaaunavariabledetipo
cadena.

Lock...Unlock

Controlaelaccesoporpartedeotrosprocesosatodoopartedeunarchivoabiertomediantela
instruccinOpen.

Open

Permiteejecutarunaoperacindeentradaysalidaenunarchivo.

Print#

Escribelosdatosconformatoenunarchivosecuencial.

Put

Escribeelcontenidodeunavariableenunarchivodedisco.

Reset

CierratodoslosarchivosdediscosabiertosconlainstruccinOpen.

Seek

DefinelaposicindelaprximalecturayescrituraenunarchivoabiertoconlainstruccinOpen.

SetAttr

Definelosatributosdeunarchivo.

Width#

AsignalalongituddelalneadesalidaaunarchivoabiertoconlainstruccinOpen.

Write#

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Escribedatosenunarchivosecuencial.

Ejemplo

ElsiguienteprocesopermiteleerunarchivodetextoeimportarlosvaloresenceldasdeExcel.

Sub ImportaArchivoTexto()
Dim oSht As Worksheet
Dim sNomArchivo As String
Dim iNumArchivo As Integer
Dim sLinea As String
Dim Tabla() As String
Dim iRow As Long
Dim iCol As Long
Dim i As Long

Archivo import existe?


sNomArchivo = ThisWorkbook.Path & "\Clientes.txt"
If Dir(sNomArchivo, vbNormal) = "" Then
MsgBox "Archivo " &sNomArchivo & " inexistente"
Exit Sub
End If

Hoja de destino
Set oSht = ThisWorkbook.Sheets(1)
oSht.Cells.Clear

Apertura de archivo de texto


iNumArchivo = FreeFile
iRow = 1
Open sNomArchivo For Input As #iNumArchivo
Recorre las lneas del archivo de texto
Do While Not EOF(iNumArchivo)
iCol = 1
Line Input #iNumArchivo, sLinea
Tabla = Split(sLinea, ";")
Copia los campos de la lnea en las celdas de Excel
For i = LBound(Tabla) To UBound(Tabla)
oSht.Cells(iRow, iCol) = Replace(Tabla(i), Chr(34), "")
iCol = iCol + 1
Next
iRow = iRow + 1
Loop
Close #iNumArchivo

End Sub

ElsiguienteprocedimientopermitecrearunarchivodetextoyescribirlosdatosdelasceldasdeExcel.

Sub ExportaArchivoTexto()
Dim oSht As Worksheet

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
Dim sNomArchivo As String
Dim iNumArchivo As Integer
Dim sLinea As String
Dim oRngExport As Range
Dim iNbRows As Long
Dim iNbCols As Long
Dim i, j As Integer
Dim vCelda As Variant

Archivo Export existe?


sNomArchivo = ThisWorkbook.Path & "\Clientes.txt"
If Dir(sNomArchivo, vbNormal) <> "" Then
Kill sNomArchivo
End If

Seleccin de celdas de Excel


Set oSht = ThisWorkbook.Sheets(1)
oSht.Range("A1").CurrentRegion.Select
Set oRngExport = Application.Selection
iNbRows = oRngExport.Rows.Count
iNbCols = oRngExport.Columns.Count

Creacin del archivo de texto


iNumArchivo = FreeFile
Open sNomArchivo For Output As #iNumArchivo

Recorre las lneas y columnas de la hoja


For i = 1 To iNbRows
For j = 1 To iNbCols
vCelda = Trim(oRngExport.Cells(i, j).Value)
If IsNumeric (vCelda) Then vCelda = Val(vCelda)
If IsEmpty(oRngExport.Cells(i, j).Value) Then
vCelda = Chr(32)
End If
Escritura en el archivo de texto
If j = iNbCols Then
sLinea = sLinea & vCell
Write #iNumArchivo, sLinea
sLinea = ""
Else
sLinea = sLinea & vCelda & ";"
End If
Next j
Next i
Close #1

End Sub

6.Estructuracin

Call

TransfiereelcontrolaunprocedimientoSub,Function,DLLoaunprocedimientoderecursosde

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
cdigoMacintosh.

Do...Loop

Repiteunbloquedeinstruccionesmientrassecumpleunacondicinohastaquelacondicinsehace
verdadera.

End

Terminaunprocedimientoounbloque.

Exit

SaledeunbloquedecdigoDo...Loop,For...Next,Function,SuboProperty.

ForEach...Next

Repiteungrupodeinstruccionesparacadaelementodeunamatrizodeunacoleccin.

For...Next

Repiteunbloquedeinstruccionesundeterminadonmerodeveces.

GoTo

Realizaunabifurcacinincondicionalhaciaunalneadeterminadadeunprocedimiento.

GoSub...Return

Realizaunabifurcacinhaciaunasubrutinadentrodeunprocedimientoyluegoretornaalainstruccin
inmediatamenteposterioralabifurcacin.

OnGoSubyOnGoTo

Realizaunabifurcacinhaciaunadelaslneasespecificadas,segnelvalordeunaexpresindada.

Rem

Permitelaentradadecomentarios(equivalealapstrofo).

SelectCase

Ejecutaunoomsgruposdeinstruccionessegnelvalordeunaexpresindada.

Stop

Interrumpelaejecucindeunprocedimiento.

If...Then...,ElseIf...yElse...EndIf

Permitelaejecucincondicionaldeungrupodeinstruccionessegnelresultado deunaexpresin
dada.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
While...Wend

Ejecutaunaseriedeinstruccionesmientrassecumplaunacondicindada.

With

Ejecutaunaseriedeinstruccionessobreunnicoobjetoountipodefinidoporelusuario.

7.Sistema

Beep

Emiteunasealsonora.

ChDir

Cambiaeldirectorioolacarpetaactual.

ChDrive

Cambialaunidaddediscoactual.

MkDir

Creaunnuevodirectorioonuevacarpeta.

Name

Modificaelnombredeunarchivo,deundirectorioodeunacarpeta.

RmDir

Eliminaundirectorioounacarpetaexistente.

8.Diversas

AppActivate

Activaunaventanadeaplicacin.

DeleteSetting

EliminaelvalordeunaseccinodeunaclaveenlabasederegistrodeWindows.

Erase

Reinicialoselementosdematricesdetamaofijoyliberaelespaciodealmacenamientoasignadoa
matricesdinmicas.

- 8- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Implements

Especificaunainterfazounaclasequeseimplementarenelmdulodeclasedondeaparece.

Load

Cargaunobjetoperonolomuestra.

RaiseEvent

Eliminauneventodeclaradoenelniveldemdulodentrodeunaclase,formularioodocumento.

SaveSetting

GuardaocreaunaentradaparaunaaplicacinenlabasederegistrodeWindows.

SendKeys

Envaunaomspulsacionesdeteclasalaventanaactiva,comosisehubieranpresionadodesdeel
teclado.NodisponibleenMacintosh.

Unload

Eliminaunobjetodelamemoria.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 9-
Listadefunciones

Lasfuncionescuyonombreterminaconelsigno$devuelvenvaloresenvariablesdetipoString,ynodetipoVariant.

1.Conversiones

CBool

ConvierteunaexpresinadatosdetipoBoolean.

CByte

ConvierteunaexpresinadatosdetipoByte.

CCur

ConvierteunaexpresinadatosdetipoCurrency.

CDate

ConvierteunaexpresinadatosdetipoDate.

CDbl

ConvierteunaexpresinadatosdetipoDouble(dobleprecisin).

CDec

ConvierteunaexpresinadatosdetipoDecimal.

CInt

ConvierteunaexpresinadatosdetipoInteger(nombreentero).

CLng

ConvierteunaexpresinadatosdetipoLong(enterolargo).

CSng

ConvierteunaexpresinadatosdetipoSingle(simpleprecisin).

CStr

ConvierteunaexpresinadatosdetipoString.

CVar

ConvierteunaexpresinadatosdetipoVariant.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
CVErr

DevuelveuntipoVariantdeunsubtipoErrorquecontieneunnmerodeerrorespecificadoporel
usuario.

Format,Format$

Aplicaunformatoaunaexpresinsegnlasinstruccionescontenidasenunaexpresindetipo
formato.

FormatCurrency

DevuelveunaexpresinconformatoenformadevalordetipoCurrencyusandoelsmbolomonetario
definidoenelpaneldecontroldelsistema.

FormatDateTime

Devuelveunaexpresinconformatodefechauhora.

FormatNumber

Devuelveunaexpresinconformatodenmero.

FormatPercent

Devuelveunaexpresinconformatodeporcentaje(multiplicadopor100)conelcarcter%alfinal.

Hex,Hex$

Devuelveunacadenadecaracteresquerepresentaelvalordeunnmeroescritoenforma
hexadecimal.

Oct,Oct$

Devuelveunacadenaquerepresentaelvaloroctaldeunnmero.

QBColor

DevuelveunvalorqueindicaelcdigodecolorRGBcorrespondientealnmerodecolorindicado.

RGB

DevuelveunnmeroenteroquerepresentaelvalordeuncolorRGB.

Str,Str$

Devuelveunacadenadecaracteresquerepresentaelnmeroespecificado.

StrConv

Devuelveunvalorconvertidoalformatoindicado.

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Val

Devuelveelvalornumricocontenidoenunacadenadecaracteres.

2.Cadenasdecaracteres

Asc

Devuelveelcdigodecarctercorrespondientealprimercarcterdeunacadena.

Chr,Chr$

Devuelveelcarctercorrespondientealcdigodecarcterespecificado.

InStr

Devuelvelaposicindelaprimeraocurrenciadeunacadenadentrodeotracadena.

InStrRev

Devuelvelaposicindelaocurrenciadeunacadenadentrodeotra,apartirdelfindelacadena.

LCase,LCase$

Devuelveunacadenaconsuscaracterespasadosaminsculas.

Left,Left$

Devuelveunnmeroespecificadodecaracteresdeunacadena,comenzandodesdelaizquierda.

Len

Devuelvelacantidaddecaracterescontenidosenunacadenaolacantidaddebytesnecesariospara
almacenarunavariable.

LTrim,LTrim$

Devuelveunacopiadeunacadenaeliminandolosespaciosalaizquierda.

Mid,Mid$

Devuelveunnmeroespecificadodecaracteresextradosdeunacadenadecaracteres.

Replace

Devuelveunacadenaenlaqueunasubcadenaespecificadasereemplazaporotrasubcadena.

Right,Right$

Devuelveunnmeroespecificadodecaracteresdeunacadena,comenzandodesdeladerecha.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-
RTrim,RTrim$

Devuelveunacopiadeunacadenaeliminandolosespaciosaladerecha.

Space,Space$

Devuelveunacadenaformadaporunnmerodeespaciosespecificado.

StrComp

Devuelveunvalorqueindicaelresultadodelacomparacindecadenas.

String,String$

Creaunacadenaconstituidaporunacadenadecaracteresqueserepiteconlalongitudespecificada.

StrReverse

Devuelveunacadenaquecontienelosmismoscaracteresquelacadenadada, peroenordeninverso.

Trim,Trim$

Devuelveunacopiadeunacadenaeliminandolosespaciosalaizquierdayaladerecha.

UCase,UCase$

Devuelveunacadenaconsuscaracterespasadosamaysculas.

Ejemplo

Esteprocedimientopermiteasignaruncdigodeidentificacinsegnelsexo,apellidoynombreyelaodenacimiento.

Sub CalculaIdentificador()
Dim i As Integer
Dim codigo As String

Recorre las filas de la hoja


i = 2

- 4- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
With ThisWorkbook.Sheets(1)
Do While .Cells(i, 2) <> ""
cdigo 1 o 2 segn el sexo
seguido de las tres primeras letras del apellido en maysculas,
ms la inicial del nombre y el ao de nacimiento
If .Cells(i, 2) = "F" Then
codigo = "2-"
Else
codigo = "1-"
End If
codigo = codigo & UCase(Left(.Cells(i, 3), 3) & "-" _
& UCase(Left(.Cells(i, 4), 1)) & "-" _
& Right(.Cells(i, 5), 4))
.Cells(i, 1) = codigo
i = i + 1
Loop
End With

End Sub

3.Matemticas

Lasfuncionesmatemticassellamanfuncionesintrnsecas.

Abs

Devuelveelvalorabsolutodeunnmero.

Atn

Devuelveelarcotangentedeunnmero.

Cos

Devuelveelcosenodeunngulo.

Exp

Devuelvee(labasedeloslogaritmosneperianos),elevadoaunapotenciadada.

Fix

Devuelvelaparteenteradeunnmero.

Int

Devuelvelaparteenteradeunnmero.LadiferenciaconlafuncinFixconsisteenque,sielvalordel
argumento"nmero"esnegativo,Intdevuelveelprimerenteronegativomenoroigualalargumento,
mientrasqueFixdevuelveelprimerenteronegativomayoroigualalargumento.

Log

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 5-
Devuelveellogaritmoneperianodeunnmero.

Rnd

Devuelveunnmeroaleatorio.

Round

Devuelveunnmeroredondeadoaunacantidadespecificadadeposicionesdecimales.

Sgn

Devuelveunnmeroenteroqueindicaelsignodelargumento.

Sin

Devuelveelsenodeunngulo.

Sqr

Devuelvelarazcuadradadeunnmero.

Tan

Devuelvelatangentedeunngulo.

Ejemplo

Sub FctsCalculos()
Diferencia entre Int y Fix
nb1 = -125.45
Muestra -126
MsgBox Int(nb1)
Muestra -125
MsgBox Fix(nb1)
Devuelve un nmero aleatorio comprendido entre 1 y 49
nb2 = Int(49*Rnd)+1
MsgBox nb2
End Sub

Otrasfunciones,sibiennosonintrnsecas,sepuedenobtenerapartirdefuncionesintrnsecas.

Algunosejemplos:

Secante=1/Cos(X).

Cosecante=1/Sin(X).

Cotangente=1/Tan(X).

- 6- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
4.Financieras

DDB

Devuelveunvalorqueindicalaamortizacindeunbienalolargodeunperodoespecificado(utilizael
mtododeamortizacindecrecienteatasadobleuotromtodoprecisado).

FV

Devuelveunvalorqueindicaelimportefuturodeunaanualidadbasadaenpagosconstantesy
peridicosyconunatasadeintersfija.

IPmt

Devuelveunvalorqueindicaelimporte,paraunperododado,deunaanualidadbasadaenpagos
constantesyperidicosyconunatasadeintersfija.

IRR

Devuelveunvalorqueindicalatasainternaderetornodeunaseriedemovimientosdefondos
peridicos(pagosycobros).

MIRR

Devuelveunvalorqueindicalatasainternaderetornomodificadadeunaseriedemovimientosde
fondosperidicos(pagosycobros).

NPer

Devuelveunvalorqueindicalacantidaddeperodosdeunaanualidadbasadaenmovimientos
constantesyperidicosyconunatasadeintersfija.

NPV

Devuelveunvalorqueindicaelvaloractualnetodeunainversin,calculadaenfuncindeunaseriede
movimientosdefondosperidicos(pagosycobros)ysegnunatasadedescuento.

Pmt

Devuelveunvalorqueindicaelimportedeunaanualidadbasadaenmovimientosconstantesy
peridicosyconunatasadeintersfija.

PPmt

Devuelveunvalorqueindicaelreembolsocorrespondienteaunperododeterminadodeuna
anualidadbasadaenpagosperidicosyconstantesconunatasadeintersfija.

PV

Devuelveunvalorqueindicaelimporteactualdeunaanualidadbasadaenpagosperidicos
constantesquesevanarealizarenelfuturo,conunatasadeintersfija.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 7-
Rate

Devuelveunvalorqueindicalatasadeintersporperodoparaunaanualidad.

SLN

Devuelveunvalorqueindicalaamortizacindeunbienparaunperododadosegnelmtodolineal.

SYD

Devuelveunvalorqueindicalaamortizacinglobaldeunbienparaunperododado.

5.Fechasyhoras

Date,Date$

Devuelvelafechadelsistemaencurso.

DateAdd

Devuelveunvalorquerepresentalafechacorrespondienteaunafechadada,msunintervalode
tiempoespecificado.

DateDiff

Devuelveunvalorqueindicalacantidaddeintervalosdetiempoentredosfechasdadas.

DatePart

Devuelveunvalorquecontieneelelementoespecificadodeunafechadada.

DateSerial

Devuelvelafechacorrespondienteaunao,unmesyundaespecificados.

DateValue

Devuelveunafecha.

Day

Devuelveunnmeroenterocomprendidoentre1y31querepresentaeldadelmes.

Hour

Devuelveunnmeroenterocomprendidoentre0y23querepresentalahoradelda.

Minute

Devuelveunnmeroenterocomprendidoentre0y59querepresentalosminutos.

- 8- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Month

Devuelveunnmeroenterocomprendidoentre1y12querepresentaelmesdelao.

MonthName

Devuelveunacadenaqueindicaelmesespecificado.

Now

Devuelvelafechaylahoraactualestomadasdelrelojdelsistema.

Second

Devuelveunnmeroenterocomprendidoentre0y59querepresentalossegundos.

Time,Time$

Devuelvelahoraactual.

Timer

Devuelvelacantidaddesegundostranscurridosdesdelamedianoche.

TimeSerial

Devuelveunafechaquecontienelahoraexacta(horas,minutosysegundos).

TimeValue

Devuelveunahora.

WeekDay

Devuelveunnmeroenteroquerepresentaeldadelasemana.

WeekdayName

Devuelveunacadenaqueindicaeldadelasemanaespecificada.

Year

Devuelveunnmeroenteroquerepresentaelao.

Ejemplo

Diversosclculosconfechasyhoras:

Sub CalcFechasyHoras ()
Muestra la fecha del da
MsgBox "Hoy es " & Date

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 9-
Muestra la cantidad de segundos transcurridos desde medianoche
MsgBox "Medianoche fue hace " & _
Timer & " segundos"
Calcula y muestra el tiempo que resta de trabajo,
suponiendo que la jornada termina a las 17 h 30
Resto = TimeSerial(17 - Hour(Time), _
30 - Minute(Time), 0 - Second(Time))
MsgBox "Finalizando a las 17h30, falta " & Resto & _
" horas de trabajo"
Calcula y muestra el ltimo da del mes en curso
Final = DateSerial(Year(Now), Month(Now) + 1, 1) - 1
MsgBox "el ltimo da del mes en curso es " & Final
Muestra el nombre del da de la semana de esa fecha
(- 1 porque para Excel la semana empieza el domingo)
MsgBox "Ser un " & WeekdayName(Weekday(Final) - 1)
End Sub

6.Archivos,Sistema

CurDir,CurDir$

Devuelvelarutadeaccesoactual.

Dir,Dir$

Devuelveelnombredeunarchivo,deundirectorioodeunacarpetaquecoincideconunaplantillao
unatributodearchivoespecificadoodevuelvelaetiquetadevolumendeunaunidaddedisco.

EOF

Devuelveunvalorqueindicasisehallegadoalfinaldeunarchivo.

FileAttr

Devuelveunvalorquerepresentaelmododelarchivoparalosarchivosabiertosusandolainstruccin
Open.

FileDateTime

Devuelvelafechaylahoradecreacinodelaltimamodificacindeunarchivo.

FileLen

Devuelveeltamaodeunarchivoenbytes.

FreeFile

Devuelveunnmeroqueindicaelsiguientenmerodearchivodisponibleparasuusoenlainstruccin
Open.

GetAttr

- 10 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
Devuelveunnmeroquerepresentalosatributosdeunarchivo,directorioocarpetaolaetiquetade
unvolumen.

Input,Input$

Devuelveloscaracteres(bytes)ledosapartirdeunarchivosecuencialabierto.

Loc

Devuelvelaposicindelecturayescrituraactualesenunarchivoabierto.

LOF

DevuelvelalongitudenbytesdeunarchivoabiertoconlainstruccinOpen.

Seek,Seek$

DevuelvelaposicindelecturayescrituraactualesenunarchivoabiertoconlainstruccinOpen.

Ejemplo

Procedimiento para mostrar los nombres, las fechas de ltima modificacin y los tamaos de los cinco primeros archivos
encontradosenlacarpetaactual.

Sub ListaArchivos ()
Dim strPath As String
Dim strFile As String

strPath = CurDir() & "\"


strFile = Dir(strPath)
For i = 1 To 5
If i = 1 Then
strFile = Dir(strPath)
Else
strFile = Dir()
End If
If strFile <> "" Then
MsgBox "Archivo: " & strFile & Chr(13) & _
"Fecha: " & FileDateTime(strFile) & Chr(13) & _
"Tamao: " & Format(FileLen(strFile), "# ##0")
End If
Next i
End Sub

7.Verificacindevariables

IsArray

Devuelveunvalorqueindicasiunavariableesonounamatriz.

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 11 -
IsDate

Devuelveunvalorqueindicasiunaexpresinsepuedeconvertirafecha.

IsEmpty

Devuelveunvalorqueindicasiunavariablehasidoonoiniciada.

IsError

Devuelveunvalorqueindicasiunaexpresinesonounvalordeerror.

IsMissing

Devuelveunvalorqueindicasiselepasaunprocedimientounargumentoopcional.

IsNull

Devuelveunvalorqueindicasiunaexpresincontieneonounvalorvlido.

IsNumeric

Devuelveunvalorqueindicasiunaexpresinsepuedeinterpretarcomounnmero.

IsObject

Devuelveunvalorqueindicasiunidentificadorrepresentaunavariableobjeto.

TypeName

Devuelveunacadenaqueproporcionainformacinacercadeunavariable.

VarType

Devuelveunvalorqueindicaelsubtipodeunavariable.

8.Interaccin

CreateObject

CreaunobjetoOLEAutomation.

GetObject

RecuperaunobjetoOLEAutomationenunarchivo.

InputBox

Muestrauncuadrodedilogoconunainvitacin,esperaqueelusuarioescriba untextoopulseun
botnyluegodevuelveelcontenidodelcuadrodetexto.

- 12 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
MsgBox

Muestraunmensajeenuncuadrodedilogo,esperaqueelusuariopulseunbotnyluegodevuelve
unvalorqueindicaelbotnpulsadoporelusuario.

Shell

Ejecutaunprogramaejecutable.

9.Matrices

Array

DevuelveundatodetipoVariantquecontieneunamatriz.

Filter

Devuelveunamatrizdebaseceroquecontieneunsubconjuntodeunamatrizdecadenasbasadoen
loscriteriosdefiltradoespecificados.

Joint

Devuelveunacadenacreadaporlaunindevariassubcadenascontenidasenunamatriz.

LBound

Devuelveelmenorvalordelndicedisponibleparaladimensinindicadaenunamatriz.

Split

Devuelveunamatrizdeunadimensin,basadaencero,quecontienelacantidadespecificadade
subcadenas.

UBound

Devuelveelmayorvalordelndicedisponibleparaladimensinindicadaenunamatriz.

10.SQL

SQLBind

EspecificadndeseencuentranlosresultadosdelaextraccinconlafuncinSQLRetrieve.

SQLClose

Cierraunaconexinconunorigendedatosexternos.

SQLError

Devuelveinformacindeerrordetalladacuandoseutilizadespusdequeseproduzcaunerroren

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 13 -
otradelasfuncionesODBC.

SQLExecQuery

EjecutaunaconsultaenunorigendedatosconunaconexinestablecidaconlainstruccinSQLOpen.

SQLGetSchema

Devuelveinformacinacercadelaestructuradelorigendedatosdeunaconexinenparticular.

SQLOpen

Estableceunaconexinconunorigendedatos.

SQLRequest

Conectaconunorigendedatosexternoyejecutaunaconsultadesdeunahojadeclculoa
continuacin,devuelveelresultadodelaconsultaenformadematrizVisualBasic.

SQLRetrieve

Recuperatodoslosresultados,opartedeellos,deunaconsultaejecutadaconanterioridad.

SQLRetrieve,ToFile

Devuelvetodoslosresultadosdeunaconsultaejecutadaconanterioridadylosguardaenunarchivo.

11.Diversas

CallByName

Ejecutaunmtododeunobjeto,oestableceodevuelveunapropiedaddeunobjeto.

Choose

Seleccionaydevuelveunvalorapartirdeunalistadeargumentos.

DoEvents

Detienemomentneamentelaejecucinycedeelcontrolalsistemaoperativo,paraqueestepueda
procesarotroseventos.

Environ

Devuelveelvalorasociadoaunavariabledeentornodelsistemaoperativo.

GetAllSettings

Devuelveunalistadeclavesysusvaloresrespectivos(originalmentecreadosconlainstruccin
SaveSetting)apartirdelaentradadeunaaplicacinenlabasederegistrodeWindows.

- 14 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
GetSetting

DevuelveelvalordeclavedeunaentradadeaplicacinenlabasederegistrodeWindows.

Iif

Devuelveunouotrodedosargumentossegnlaevaluacindeunaexpresin.

Spc

FuncinutilizadaconlainstruccinPrint #oelmtodoPrintparaposicionarlasalida.

Switch

Evalaunalistadeexpresionesydevuelveunvalorounaexpresinasociadaalaprimeraexpresin
delalistaquetieneelvalorTrue.

Tab

FuncinutilizadaconlainstruccinPrint #oelmtodoPrintparaposicionarlasalida.

12.Solver

SolverAdd

Agregaunarestriccinalproblemaactual.

SolverChange

Modificaunarestriccinalproblemaactual.

SolverDelete

Eliminaunarestriccinalproblemaactual.

SolverFinish

IndicaaExcelqudebehacerconlosresultadosyquclasedeinformedebecrearalfinalizarel
procesoderesolucin.

SolverFinishDialog

EsigualalafuncinSolverFinish,perotambinmuestraelcuadrodedilogoResultadosdeSolver
despusderesolverelproblema.

SolverGet

DevuelvelainformacinrelativaalaconfiguracindeSolver.

SolverLoad

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 15 -
Cargalaconfiguracindeunmodeloexistente.

SolverOK

DefineunmodelobsicodeSolver.

SolverOKDialog

EsigualaSolverOKperotambinmuestraelcuadrodedilogoSolver.

SolverOptions

Especificalasopcionesavanzadasdeunmodelo.

SolverReset

Reiniciatodalaconfiguracin.

SolverSave

Guardalaconfiguracindeunmodelo.

SolverSolve

Procedeconlaresolucindeunmodelo.

- 16 - Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
ConstantesVBA

Visual Basic para Aplicaciones permite definir constantes para mejorar la legibilidad del cdigo y facilitar su
mantenimiento.

TambinpuedeutilizarlassiguientesconstantesVBA(constantesintrnsecas)entodosucdigo.

1.Constantesdecolor

Constante Valor Descripcin

vbBlack 0x0 Negro

vbRed 0xFF Rojo

vbGreen 0xFF00 Verde

vbYellow 0xFFFF Amarillo

vbBlue 0x0FF0000 Azul

vbMagenta 0x0FF00FF Magenta

vbCyan 0x0FFFF00 Cian

vbWhite 0x0FFFFFF Blanco

2.Constantesdefecha

Constante Valor Descripcin

vbSunday 1 Domingo

vbMonday 2 Lunes

vbTuesday 3 Martes

vbWednesday 4 Mircoles

vbThursday 5 Jueves

vbFriday 6 Viernes

vbSaturday 7 Sbado

3.Constantesdeteclascorrespondientesaletrasynmeros

LosvaloresdelasteclasAaZsonlosmismosquesusequivalentesASCII.

Constante Valor Descripcin

vbKeyA 65 TeclaA

vbKeyB 66 TeclaB

vbKeyC 67 TeclaC

... ... ...

vbKeyZ 90 TeclaZ

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 1-
Losvaloresdelasteclas0a9sonlosmismosquesusequivalentesASCII.

Constante Valor Descripcin

vbKey0 48 Tecla1

vbKey1 49 Tecla2

vbKey2 50 Tecla3

... ... ...

vbKey0 57 Tecla9

4.Constantesdeteclasdefuncin

Constante Valor Descripcin

vbKeyF0 0x70 TeclaF1

vbKeyF1 0x71 TeclaF2

... ... ...

vbKeyF11 0x7A TeclaF11

... ... ...

vbKeyF16 0x7F TeclaF16

5.Constantesdeteclasdiversas

Constante Valor Descripcin

vbKeyCancel 0x3 Tecla[Cancelar]

vbKeyBack 0x8 Tecla[Retroceso]

vbKeyTab 0x9 Tecla[Tab]

vbKeyClear 0xC Tecla[Supr]

vbKeyReturn 0xD Tecla[Intro]

vbKeyShift 0x10 Tecla[Mays]

vbKeyControl 0x11 Tecla[Ctrl]

vbKeyMenu 0x12 Tecla[MEN]

vbKeyPause 0x13 Tecla[PAUSA]

vbKeyCapital 0x14 Tecla[BloqMays]

vbKeyEspace 0x1B Barraespaciadora

vbKeySpace 0x20 Barraespaciadora

vbKeyPageUp 0x21 Tecla[AvPg]

vbKeyPageDown 0x22 Tecla[RePg]

vbKeyEnd 0x23 Tecla[Fin]

vbKeyHome 0x24 Tecla[Inicio]

vbKeyLeft 0x25 Tecla[Flechaizquierda]

vbKeyUp 0x26 Tecla[Flechaarriba]

- 2- Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo
vbKeyRight 0x27 Tecla[Flechaderecha]

vbKeyDown 0x28 Tecla[Flechaabajo]

vbKeySelect 0x29 TeclaSeleccin

vbKeyPrint 0x2A Tecla[ImprPant]

vbKeyExecute 0x2B Tecla[EJECUTAR]

vbKeySnapshot 0x2C TeclaSNAPSHOT

vbKeyInsert 0x2D Tecla[Insertar]

vbKeyDelete 0x2E Tecla[Suprimir]

vbKeyHelp 0x2F TeclaAyuda

vbKeyNumlock 0x90 Tecla[BloqNum]

vbKeyLButton 0x1 Botnizquierdodelratn

vbKeyRButton 0x2 Botnderechodelratn

Editions ENI Tous droits rservs Copie personnelle de Guillermo Becerra Pinedo - 3-