Está en la página 1de 240

M

MME
EEM
MMO
OOR
RRI
IIA
AAS
SS C
CCU
UUR
RRS
SSO
OO M
MMA
AAC
CCR
RRO
OOS
SS
E
EEN
NN E
EEX
XXC
CCE
EEL
LL 2
220
000
007
77

P
PPO
OOR
RR:
::
C
CCA
AAR
RRL
LLO
OOS
SS A
AAL
LLV
VVA
AAR
RRE
EEZ
ZZ C
CCA
AAN
NNC
CCH
HHI
IIL
LLA
AA
(
((c
cca
aaa
aal
llv
vva
aar
rre
ee@
@@g
ggm
mma
aai
iil
ll.
..c
cco
oom
mm)
))


L
LLA
AAB
BBO
OOR
RRA
AAT
TTO
OOR
RRI
IIO
OO D
DDE
EE S
SSI
IIS
SST
TTE
EEM
MMA
AAS
SS
F
FFA
AAC
CCU
UUL
LLT
TTA
AAD
DD D
DDE
EE M
MMI
IIN
NNA
AAS
SS
U
UUN
NNI
IIV
VVE
EER
RRS
SSI
IID
DDA
AAD
DD N
NNA
AAC
CCI
IIO
OON
NNA
AAL
LL
S
SSE
EED
DDE
EE M
MME
EED
DDE
EEL
LLL
LLI
IIN
NN

2 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

C
CCO
OON
NNT
TTE
EEN
NNI
IID
DDO
OO

C
CCO
OON
NNT
TTE
EEN
NNI
II D
DDO
OO ............................................................................................................................................. 2
1
11.
.. I
II N
NNT
TTR
RRO
OOD
DDU
UUC
CCC
CCI
II O
OON
NN A
AA L
LLA
AAS
SS M
MMA
AAC
CCR
RRO
OOS
SS ..................................................................................................... 10
1.1 El Lenguaje VBA .......................................................................................................................... 10
1.1.1 Objetivos del lenguaje VBA ................................................................................................. 10
1.1.2 Algunas definiciones ........................................................................................................... 11
1.1.3 Escritura de cdigo VBA ...................................................................................................... 11
1.2 Las macros de Excel .................................................................................................................... 11
1.2.1 Mostrar la ficha Programador en la cinta de opciones ......................................................... 11
1.2.2 Descripcin de la ficha Programador ................................................................................... 12
1.2.2.1 Grupo Cdigo .............................................................................................................. 12
1.2.2.2 Grupo Controles .......................................................................................................... 12
1.2.3 Grabacin de macros .......................................................................................................... 13
1.2.3.1 Grabar la primera macro ................................................................................................. 13
1.2.3.2 Ejecutar una macro ......................................................................................................... 13
1.2.3.3 Grabar una macro con referencias relativas .................................................................... 14
1.2.3.4 Definir el lugar de almacenamiento de una nueva macro ................................................ 15
1.2.3.5 Eliminar una macro ......................................................................................................... 15
1.2.3.6 Grabar un libro con macros ............................................................................................. 16
1.2.4 Las macros y la seguridad ................................................................................................... 17
1.2.4.1 Modificacin de la configuracin de seguridad ................................................................ 17
1.2.4.2 Descripcin de las diferentes opciones de seguridad ....................................................... 18
1.2.4.3 Firmas electrnicas de macros ........................................................................................ 18
1.2.5 Modificar el cdigo de una macro ....................................................................................... 19
1.3 Asignacin de macros ................................................................................................................. 21
1.3.1 Asociar una macro a un botn de comando ........................................................................ 21
1.3.2 Asignar una macro a una imagen ........................................................................................ 21
1.3.3 Asociar una macro a una zona de un objeto grfico ............................................................ 21
1.3.4 Asociar una macro a una imagen Control ActiveX ............................................................... 22
1.3.5 Asociar una macro a un icono de la barra de herramienta de acceso rpido........................ 23
1.4 El entorno de desarrollo VBE ...................................................................................................... 25
1.4.1 Acceso al entorno VBE ........................................................................................................ 25
1.4.2 Cerrar el entorno VBE ......................................................................................................... 25
1.4.3 Volver a Excel ..................................................................................................................... 25
1.4.4 Descripcin del entorno VBE ............................................................................................... 26
1.5 Configuracin del Editor VBA ...................................................................................................... 28
1.2.6 Configuracin de la tipografa ............................................................................................. 28
3 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

1.2.7 Configuracin de la introduccin de cdigo ........................................................................ 29
1.2.8 Gestin de errores .............................................................................................................. 30
1.2.9 Acople de una ventana ....................................................................................................... 31
1.2.10 Elegir las ventanas que hay que mostrar ............................................................................. 32
1.6 Novedades de la versin 2007 .................................................................................................... 32
1.6.1 Novedades de Excel 2007 ................................................................................................... 32
1.6.2 Las novedades de VBA Excel 2007 ....................................................................................... 32
2
22.
.. E
EEL
LL L
LLE
EEN
NNG
GGU
UUA
AAJ
JJE
EE V
VVB
BBA
AA........................................................................................................................... 34
2.1 Mdulos ..................................................................................................................................... 34
2.1.1 El Explorador de Proyectos ................................................................................................. 34
2.1.2 Acceso a los mdulos .......................................................................................................... 35
2.1.3 Importar y exportar cdigo VBA .......................................................................................... 36
2.2 Procedimientos .......................................................................................................................... 36
2.2.1 Definiciones ........................................................................................................................ 36
2.2.2 Acceso a los procedimientos ............................................................................................... 37
2.2.3 Procedimientos Sub ............................................................................................................ 37
2.2.4 Procedimientos Function .................................................................................................... 38
2.2.5 Declaracin de procedimientos ........................................................................................... 39
2.2.6 Alcance de los procedimientos ........................................................................................... 40
2.2.7 Argumentos de los procedimientos .................................................................................... 40
2.2.8 Argumentos con nombre .................................................................................................... 41
2.2.9 Llamar a un procedimiento ................................................................................................. 42
2.2.10 Llamar a una funcin VBA en una frmula Excel .................................................................. 43
2.2.11 Ejemplos de procedimientos y funciones ............................................................................ 45
2.3 Variables .................................................................................................................................... 46
2.3.1 Tipos de variables ............................................................................................................... 46
2.3.1.1 Numricas ...................................................................................................................... 46
2.3.1.2 Cadenas de caracteres .................................................................................................... 47
2.3.1.3 Boolean o lgicas ............................................................................................................ 47
2.3.1.4 Fecha .............................................................................................................................. 48
2.3.1.5 Variant ............................................................................................................................ 48
2.3.1.6 Objeto ............................................................................................................................ 49
2.3.1.7 Tipos definidos por el usuario (o TDU) ............................................................................ 50
2.3.2 Declaracin de variables ..................................................................................................... 51
2.3.2.1 Declaraciones implcitas .................................................................................................. 51
2.3.2.2 Declaraciones explcitas .................................................................................................. 52
2.3.2.3 Sintaxis de las instrucciones de declaracin .................................................................... 52
2.3.3 Declaracin de los tipos de variables................................................................................... 53
2.3.3.1 Declaraciones explcitas del tipo ..................................................................................... 53
2.3.3.2 Declaraciones implcitas del tipo ..................................................................................... 54
2.3.4 Arreglos (Arrays) ................................................................................................................. 55
4 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2.3.4.1 Declaracin de un arreglo ............................................................................................... 56
2.3.5 Constantes ......................................................................................................................... 58
2.3.5.1 Constantes personalizadas .............................................................................................. 58
2.3.5.2 Constantes integradas o intrnsecas en VBA .................................................................... 58
2.4 Operadores ................................................................................................................................ 61
2.4.1 Operadores aritmticos ...................................................................................................... 61
2.4.2 Operadores de comparacin ............................................................................................... 61
2.4.3 Operadores lgicos ............................................................................................................. 62
2.4.4 Operador de concatenacin ................................................................................................ 63
2.4.5 Prioridad de los operadores ................................................................................................ 63
2.5 Estructuras de decisin .............................................................................................................. 64
2.5.1 Instruccin IF ...................................................................................................................... 64
2.5.1.1 If...Then .......................................................................................................................... 64
2.5.1.2 If...Then...End If .............................................................................................................. 64
2.5.1.3 If...Then...Else...End If ..................................................................................................... 65
2.5.1.4 If... Then...ElseIf...Else...End If ......................................................................................... 65
2.5.2 Instruccin Select Case ....................................................................................................... 67
2.6 Estructuras en ciclo .................................................................................................................... 68
2.6.1 Instruccin Do...Loop .......................................................................................................... 68
2.6.2 Instruccin While...Wend ................................................................................................... 70
2.6.3 Instruccin For...Next ......................................................................................................... 70
2.6.4 Instruccin For Each...Next ................................................................................................. 72
2.6.5 Salir de las estructuras de control ....................................................................................... 72
2.7 Sentencia With End With ........................................................................................................ 73
2.8 Reglas de escritura del cdigo ................................................................................................... 74
2.8.1 Comentarios ....................................................................................................................... 74
2.8.2 Carcter de continuacin de lnea ....................................................................................... 74
2.8.3 Sangras .............................................................................................................................. 74
2.8.4 Nombres de procedimientos, variables y constantes .......................................................... 75
3
33.
.. L
LLA
AA P
PPR
RRO
OOG
GGR
RRA
AAM
MMA
AAC
CCI
II
N
NN D
DDE
EE O
OOB
BBJ
JJE
EET
TTO
OOS
SS E
EEN
NN E
EEX
XXC
CCE
EEL
LL .................................................................................. 76
3.1 Presentacin .............................................................................................................................. 76
3.2 El modelo de objetos de Excel ................................................................................................... 76
3.2.1 Objetos y colecciones ......................................................................................................... 78
3.2.1.1 Objetos ........................................................................................................................... 78
3.2.1.2 Colecciones ..................................................................................................................... 79
3.3 Principios de uso de los objetos y las colecciones ...................................................................... 79
3.3.1 Propiedades ....................................................................................................................... 79
3.3.2 Propiedades que representan objetos ................................................................................ 80
3.3.3 Mtodos ............................................................................................................................. 81
3.3.4 Eventos............................................................................................................................... 82
3.3.5 Colecciones ........................................................................................................................ 83
5 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

3.3.6 Redaccin automtica de instrucciones .............................................................................. 84
3.4 Instrucciones usadas con los objetos ......................................................................................... 86
3.4.1 La instruccin With ............................................................................................................. 86
3.4.2 La instruccin For Each...Next ............................................................................................. 87
3.4.3 La instruccin If TypeOf ...................................................................................................... 88
3.4.4 La instruccin Set ................................................................................................................ 88
3.5 El Examinador de objetos .......................................................................................................... 89
3.5.1 Presentacin ....................................................................................................................... 89
3.5.2 Bsqueda en el Examinador de objetos .............................................................................. 91
4
44.
.. O
OOB
BBJ
JJE
EET
TTO
OOS
SS D
DDE
EE E
EEX
XXC
CCE
EEL
LL ......................................................................................................................... 92
4.1 El objeto Application ................................................................................................................. 92
4.1.1 Propiedades que representan las opciones de Excel ........................................................... 92
4.1.1.1 Opciones de la categora Ms frecuentes ........................................................................ 93
4.1.1.2 Opciones de la categora Frmulas .................................................................................. 94
4.1.1.3 Opciones de comprobacin de errores ............................................................................ 95
4.1.1.4 Opciones de la categora Revisin ................................................................................... 96
4.1.1.5 Opciones de la categora Guardar ................................................................................... 97
4.1.1.6 Opciones de la categora Avanzadas................................................................................ 98
4.1.2 Propiedades relativas a la presentacin de la aplicacin ................................................... 103
4.1.3 Propiedades diversas ........................................................................................................ 104
4.1.4 Mtodos del objeto Application ........................................................................................ 106
4.1.4.1 Mtodos que actan sobre las frmulas y clculos ........................................................ 106
4.1.4.2 Mtodos que actan sobre las celdas............................................................................ 106
4.1.4.3 Mtodos que actan sobre las listas personalizadas...................................................... 106
4.1.4.4 Mtodos que muestran los cuadros de dilogo ............................................................. 106
4.1.4.5 Mtodos relacionados con las acciones en Excel ........................................................... 107
4.1.4.6 Mtodos relativos al correo .......................................................................................... 107
4.1.4.7 Mtodos relativos al protocolo DDE .............................................................................. 107
4.1.4.8 Otros mtodos .............................................................................................................. 108
4.1.5 Ejemplos de cdigos que usan el objeto Application ......................................................... 108
4.2 Objeto Workbook .................................................................................................................... 110
4.2.1 Objetos y colecciones ....................................................................................................... 111
4.2.1.1 Objetos ......................................................................................................................... 111
4.2.1.2 Colecciones ................................................................................................................... 112
4.2.2 Propiedades ..................................................................................................................... 112
4.2.2.1 Propiedades relativas a la actualizacin y grabado de libros .......................................... 112
4.2.2.2 Propiedades relativas a libros compartidos ................................................................... 113
4.2.2.3 Otras propiedades ........................................................................................................ 114
4.2.3 Lista de mtodos .............................................................................................................. 115
4.2.3.1 Mtodos que actan directamente sobre los libros ....................................................... 115
4.2.3.2 Mtodos relativos a la seguridad .................................................................................. 116
6 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.2.3.3 Mtodos relativos a libros compartidos ........................................................................ 116
4.2.3.4 Mtodos relacionados con datos vinculados ................................................................. 116
4.2.3.5 Mtodos relativos al envo de libros .............................................................................. 117
4.2.4 Ejemplos de cdigos que usan el objeto Workbook........................................................... 117
4.3 El objeto Worksheet ................................................................................................................ 120
4.3.1 Objetos y colecciones ....................................................................................................... 121
4.3.1.1 Objetos ......................................................................................................................... 121
4.3.1.2 Colecciones ................................................................................................................... 121
4.3.2 Propiedades ..................................................................................................................... 122
4.3.3 Mtodos ........................................................................................................................... 123
4.3.4 Ejemplos de cdigos que usan el objeto Worksheet .......................................................... 124
4.4 El objeto Range ........................................................................................................................ 126
4.4.1 Propiedades y mtodos que devuelven un objeto Range .................................................. 126
4.4.1.1 Propiedades que devuelven un objeto Range ................................................................ 126
4.4.1.2 Mtodos que devuelven un objeto Range ..................................................................... 127
4.4.2 Sintaxis de las propiedades que devuelven un objeto Range ............................................. 127
4.4.2.1 Cells .............................................................................................................................. 127
4.4.2.2 Range ........................................................................................................................... 127
4.4.2.3 OffSet ........................................................................................................................... 129
4.4.2.4 Areas ............................................................................................................................ 129
4.4.3 Lista de objetos y colecciones ........................................................................................... 130
4.4.3.1 Objetos ......................................................................................................................... 131
4.4.3.2 Colecciones ................................................................................................................... 131
4.4.4 Propiedades ..................................................................................................................... 131
4.4.4.1 Propiedades relacionadas con la posicin y el formato de las celdas ............................. 131
4.4.4.2 Propiedades que se relacionan con el contenido de celdas y con las frmulas ............... 132
4.4.4.3 Otras propiedades ........................................................................................................ 133
4.4.5 Mtodos ........................................................................................................................... 133
4.4.5.1 Mtodos que devuelven un objeto ............................................................................... 133
4.4.5.2 Mtodos que se relacionan con la presentacin de las celdas ....................................... 133
4.4.5.3 Mtodos que se relacionan con el contenido de las celdas ............................................ 134
4.4.5.4 Mtodos que se relacionan con los nombres de celdas ................................................. 134
4.4.5.5 Mtodos que se relacionan con los filtros ..................................................................... 135
4.4.5.6 Mtodos que se relacionan con el modo esquema ........................................................ 135
4.4.5.7 Mtodos que se relacionan con la herramienta de Auditora ........................................ 135
4.4.5.8 Otros mtodos .............................................................................................................. 135
4.5 Ejemplos de uso de los objetos ................................................................................................ 136
4.5.1 Clculo del importe de un premio ..................................................................................... 136
4.5.2 Asignacin de comentarios a las celdas ............................................................................. 138
5
55.
.. C
CCU
UUA
AAD
DDR
RRO
OOS
SS D
DDE
EE D
DDI
II
L
LLO
OOG
GGO
OO................................................................................................................ 140
5.1 Presentacin ............................................................................................................................ 140
7 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

5.2 Cuadros de dilogo integrados ................................................................................................ 140
5.2.1 El objeto Dialog ................................................................................................................ 140
5.2.2 Los mtodos GetOpenFileName y GetSaveAsFileName ..................................................... 146
5.3 Cuadros de dilogo predefinidos ............................................................................................. 148
5.3.1 La funcin InputBox .......................................................................................................... 148
5.3.2 El mtodo InputBox .......................................................................................................... 148
5.3.3 La funcin MsgBox ............................................................................................................ 149
5.3.4 Constantes usadas en los cuadros de dilogo .................................................................... 152
6
66.
.. F
FFO
OOR
RRM
MMU
UUL
LLA
AAR
RRI
IIO
OOS
SS ............................................................................................................................ 154
6.1 Presentacin ............................................................................................................................ 154
6.2 Crear un formulario ................................................................................................................. 154
6.3 Lista de controles ..................................................................................................................... 155
6.3.1 Crear un control................................................................................................................ 156
6.3.2 Propiedades de los controles ............................................................................................ 156
6.3.2.1 Determinar el acceso a un control ................................................................................. 156
6.3.2.2 Dimensionar un control ................................................................................................ 157
6.3.2.3 Ubicar un control .......................................................................................................... 157
6.3.2.4 Aplicar formato ............................................................................................................. 157
6.3.2.5 Administrar las futuras entradas ................................................................................... 158
6.3.2.6 Resumen de propiedades por objeto ............................................................................ 158
6.4 Personalizar un formulario ...................................................................................................... 160
6.4.1 Escribir procedimientos .................................................................................................... 160
6.4.2 Lista de eventos ................................................................................................................ 161
6.4.3 Resumen de eventos por objeto ....................................................................................... 162
6.4.4 Cancelar un evento ........................................................................................................... 163
6.4.5 Ejecucin y cierre de un formulario ................................................................................... 164
6.4.6 Eventos invocados ............................................................................................................ 165
6.5 Ejemplo de formulario personalizado ...................................................................................... 165
6.5.1 Presentacin ..................................................................................................................... 165
6.5.2 Cdigo asociado al botn macro de la ficha Empleados ..................................................... 167
6.5.3 Cdigo VBA asociado al formulario ................................................................................... 168
7
77.
.. B
BBA
AAR
RRR
RRA
AAS
SS D
DDE
EE C
CCO
OOM
MMA
AAN
NND
DDO
OOS
SS Y
YY M
MME
EEN
NN
S
SS .............................................................................................. 172
7.1 Presentacin ............................................................................................................................ 172
7.2 Ejemplos de barras de comandos ............................................................................................ 173
7.2.1 Barras de herramientas personalizadas ............................................................................. 173
7.2.2 Grupo "Comandos de mens" en formato Office 2007...................................................... 173
7.2.3 Agregar un comando a la barra de herramientas de acceso rpido ................................... 173
7.3 Barras de comandos ................................................................................................................ 174
7.3.1 Terminologa .................................................................................................................... 174
7.3.1.1 Barra de comandos ....................................................................................................... 174
7.3.1.2 Control ......................................................................................................................... 174
8 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

7.3.2 Crear una barra de comandos ........................................................................................... 174
7.3.3 Eliminar una barra de comandos ....................................................................................... 175
7.3.4 Mostrar una barra de comandos ....................................................................................... 176
7.4 Controles de las barras de comandos ...................................................................................... 177
7.4.1 Agregar un control ............................................................................................................ 177
7.4.2 Especificar el ttulo de un control ...................................................................................... 177
7.4.3 Eliminar un control ........................................................................................................... 178
7.4.4 Asociar un procedimiento a un control ............................................................................. 178
7.4.5 Otras propiedades ............................................................................................................ 178
7.4.6 Lista de imgenes asociadas a los botones de comando .................................................... 179
7.5 Ejemplos de mens personalizados ......................................................................................... 181
7.5.1 Presentacin ..................................................................................................................... 181
7.5.2 Cdigo de los ejemplos ..................................................................................................... 183
7.5.3 Cdigo del mdulo de clase ThisWorkbook ....................................................................... 183
7.5.4 Cdigo de la hoja "Nota de Gastos" .................................................................................. 184
7.5.5 Cdigo del mdulo ProcMenus ......................................................................................... 184
7.5.6 Cdigo del mdulo ProcAction .......................................................................................... 188
8
88.
.. A
AAD
DDM
MMI
II N
NNI
IIS
SST
TTR
RRA
AAC
CCI
II
N
NN D
DDE
EE E
EEV
VVE
EEN
NNT
TTO
OOS
SS ................................................................................................... 191
8.1 Presentacin ............................................................................................................................ 191
8.2 Escritura de eventos ................................................................................................................ 191
8.2.1 Eventos de libro, de hoja o de formulario ......................................................................... 191
8.2.2 Eventos del objeto Application .................................................................................. 193
8.2.2.1 Etapa 1 ......................................................................................................................... 193
8.2.2.2 Etapa 2 ......................................................................................................................... 193
8.2.2.3 Etapa 3 ......................................................................................................................... 195
8.2.3 Evento asociado a un grfico incrustado ........................................................................... 195
8.2.3.1 Etapa 1 ......................................................................................................................... 196
8.2.3.2 Etapa 2 ......................................................................................................................... 196
8.2.3.3 Etapa 3 ......................................................................................................................... 197
8.3 Eventos del objeto Application ......................................................................................... 198
8.4 Eventos del objeto Workbook ................................................................................................ 199
8.5 Eventos del objeto Worksheet ............................................................................................. 200
8.6 Eventos del objeto Chart ....................................................................................................... 201
9
99.
.. D
DDE
EEP
PPU
UUR
RRA
AAC
CCI
II
N
NN Y
YY A
AAD
DDM
MMI
IIN
NNI
II S
SST
TTR
RRA
AAC
CCI
II
N
NN D
DDE
EE E
EER
RRR
RRO
OOR
RRE
EES
SS .......................................................................... 202
9.1 Diferentes tipos de error ......................................................................................................... 202
9.1.1 Errores de sintaxis ............................................................................................................ 202
9.1.2 Errores de compilacin ..................................................................................................... 203
9.1.3 Errores de ejecucin ......................................................................................................... 204
9.1.4 Errores de lgica ............................................................................................................... 205
9.2 Depuracin .............................................................................................................................. 205
9.2.1 Presentacin ..................................................................................................................... 205
9 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

9.2.2 La barra de herramientas Depuracin ............................................................................... 205
9.2.3 El objeto Debug ............................................................................................................... 206
9.3 Administracin de errores en VBA ........................................................................................... 207
9.3.1 On Error (Instruccin) .................................................................................................. 207
9.3.2 Error (Funcin) .............................................................................................................. 209
9.3.3 Error (Instruccin) ......................................................................................................... 209
9.3.4 Err (Objeto) .................................................................................................................... 209
9.3.4.1 Propiedades del objeto Err ......................................................................................... 209
9.3.4.2 Mtodos del objeto Err ............................................................................................... 210
1
110
00.
.. C
CCO
OOD
DDI
IIG
GGO
OO D
DDE
EE U
UUN
NNA
AA M
MMI
II N
NNI
IIA
AAP
PPL
LLI
IIC
CCA
AAC
CCI
II
N
NN .......................................................................................... 212
10.1 Presentacin general ............................................................................................................... 212
10.2 Descripcin de la aplicacin GestPresupuesto ......................................................................... 213
10.3 Mdulo ThisWorbook .......................................................................................................... 214
10.3.1 Presentacin ..................................................................................................................... 214
10.3.2 Cdigo VBA ....................................................................................................................... 215
10.4 Formulario NuevoPresupuesto ......................................................................................... 217
10.4.1 Presentacin ..................................................................................................................... 217
10.4.2 Lista de controles .............................................................................................................. 217
10.4.3 Lista de celdas con nombre del modelo Presupuesto.xltx .................................................. 217
10.4.4 Cdigo VBA ....................................................................................................................... 218
10.5 Formulario BuscarPresupuesto ....................................................................................... 220
10.5.1 Presentacin ..................................................................................................................... 220
10.5.2 Lista de controles .............................................................................................................. 221
10.5.3 Cdigo VBA ....................................................................................................................... 221
10.6 Mdulos ProcActions y ProcGene .................................................................................. 224
10.6.1 Cdigo VBA del mdulo ProcActions .......................................................................... 224
10.6.2 Cdigo VBA del mdulo ProcGene .................................................................................... 226
1
111
11.
.. A
AAN
NNE
EEX
XXO
OOS
SS ................................................................................................................................... 229
11.1 Lista de instrucciones............................................................................................................... 229
11.2 Lista de funciones .................................................................................................................... 231
11.3 Constantes VBA ....................................................................................................................... 238
11.3.1 Constantes de color .......................................................................................................... 238
11.3.2 Constantes de fecha ......................................................................................................... 238
11.3.3 Constantes de teclas correspondientes a letras y nmeros ............................................... 239
11.3.4 Constantes de teclas de funcin........................................................................................ 239
11.3.5 Constantes de teclas diversas ........................................................................................... 239

10 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

1
11.
.. I
IIN
NNT
TTR
RRO
OOD
DDU
UUC
CCC
CCI
IIO
OON
NN A
AA L
LLA
AAS
SS M
MMA
AAC
CCR
RRO
OOS
SS

1.1 El Lenguaje VBA
Visual Basic para Aplicaciones (VBA Visual Basic for Applications) es el lenguaje de
programacin comn a todas las aplicaciones del paquete Microsoft Office 2007 (Word, Access,
Excel, Outlook y PowerPoint).
1.1.1 Objetivos del lenguaje VBA
Trabajando en Excel, el uso del lenguaje VBA le permite:
Automatizar acciones repetitivas: VBA permite efectuar en una nica operacin una
cantidad importante de comandos de Excel.
Interactuar sobre los libros de Excel: el contenido y la presentacin de todos los
elementos contenidos en un libro (hojas, celdas, grficos, etc.) pueden modificarse a
travs de cdigo VBA.
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 crear interfaces amigables
para la entrada o la salida de informacin.
Personalizar la interfaz de Excel: usted puede agregar a la interfaz de Excel nuevos
mens y comandos. El cdigo VBA puede asociarse a mtodos abreviados de teclado,
iconos, etc.
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 (tamao de fuente)
del objeto Application.
Ejemplo:
Application.StandardFont = "Arial"
Application.StandardFontSize = "10"
Comunicar Excel con otras aplicaciones Microsoft Office: VBA permite intercambiar
informacin entre las aplicaciones Office usando objetos especficos propios de cada
uno. Por ejemplo, puede insertar una tabla o un grfico Excel en un archivo de Word,
crear mensajes Outlook con un archivo Excel adjunto, etc.

11 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

1.1.2 Algunas definiciones
Proyecto: Cada libro abierto en Excel tiene asociado un proyecto que contiene todos los
mdulos de cdigo VBA agrupados en categoras.
Mdulo: Los mdulos contienen las macros grabadas y sus propios procedimientos y funciones
escritos en VBA. Los mdulos pueden exportarse como archivos independientes para luego ser
importados en otros libros.
Procedimiento: Los procedimientos son subprogramas escritos en VBA. Cada macro grabada
genera un procedimiento con el mismo nombre de la macro. De la misma manera, usted puede
crear procedimientos usando la instruccin Sub.
Funcin: Las funciones son procedimientos que devuelven un valor. Para crear una funcin se
debe utilizar la instruccin Function.
1.1.3 Escritura de cdigo VBA
Hay dos maneras de crear un procedimiento VBA:
Generar automticamente el cdigo a partir de la grabacin de macros,
Escribir directamente el cdigo del procedimiento en el Editor de Visual Basic (o entorno
VBE).
La primera solucin es ms sencilla pero mucho ms limitada que la segunda. Los
procedimientos generados automticamente slo permiten automatizar acciones repetitivas
realizadas con Excel (formato de celdas, ordenar datos, etc.).
Si desea efectuar operaciones especficas: algoritmos de clculo, intercambio de mensajes y de
informacin con el usuario, controlar la coherencia de datos en un libro o cualquier otra
operacin que haga uso de estructuras repetitivas o condicionales, usted debe crear sus propios
procedimientos en el editor de VBA.

1.2 Las macros de Excel
1.2.1 Mostrar la ficha Programador en la cinta de opciones
12 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Para escribir macros, ejecutar macros grabadas o crear aplicaciones Excel, debe mostrar la ficha
Programador de la siguiente manera:
a. Haga clic en el botn Microsoft Office , luego en el botn
(ubicado bajo el cuadro de dilogo).
b. Seleccione la categora Ms frecuentes en el men de la izquierda.
c. Active la opcin Mostrar ficha Programador en la cinta de opciones ubicada en
Opciones principales para trabajar con Excel.
d. Haga clic en el botn Aceptar: la ficha Programador se aadir a la cinta de opciones de
Excel, a la derecha de la ficha Vista.
1.2.2 Descripcin de la ficha Programador

1.2.2.1 Grupo Cdigo
Nombre del botn Descripcin
Visual Basic Abre el entorno de desarrollo. El mtodo abreviado de teclado es [Alt] [F11].
Macros Muestra la lista de macros. El mtodo abreviado de teclado es [Alt] [F8].
Grabar macro Comienza la grabacin de una macro.
Usar referencias relativas Permite usar referencias relativas a la primera celda seleccionada.
Seguridad de macros Personaliza la configuracin de seguridad de las macros.
1.2.2.2 Grupo Controles
Nombre del botn Descripcin
Insertar Permite insertar controles (formularios o ActiveX) en Excel.
Modo Diseo
Activa o desactiva el modo Diseo. En el modo Diseo los controles ActiveX
pueden seleccionarse y modificarse pero no pueden ejecutarse.
Propiedades Muestra las propiedades del objeto Excel seleccionado (hoja o control).
Ver cdigo Permite acceder directamente al cdigo asociado al control seleccionado.
Ejecutar cuadro de
dilogo
Ejecuta un cuadro de dilogo personalizado.

El grupo XML permite administrar asignaciones XML.
13 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

1.2.3 Grabacin de macros
1.2.3.1 Grabar la primera macro
Para crear una macro con el grabador:
a. Haga clic en el botn de la ficha Programador o en el botn de la barra de
estado.
b. En el cuadro de dilogo que aparece, escriba el nombre de la macro, su descripcin y, si
lo desea, el mtodo abreviado de teclas asociado.

c. Haga clic en el botn Aceptar para iniciar la grabacin.
d. Realice en Excel las operaciones que desee grabar. Por ejemplo, seleccione el rango de
celdas A1:B8", y aplique un relleno y un borde a esas celdas.
e. Haga clic en el botn de la ficha Programador o en el botn de
la barra de estado para detener la grabacin de la macro.
1.2.3.2 Ejecutar una macro
Para ejecutar una macro desde Excel:
a. Haga clic en el botn de la ficha Programador o pulse el mtodo abreviado de
teclas [Alt] [F8].
14 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

b. Haga doble clic en el nombre de la macro o primero seleccinela y luego haga clic en el
botn Ejecutar.
Para visualizar la informacin relativa a una macro (mtodo abreviado de teclado y
descripcin), seleccione la macro en la lista y haga clic en el botn Opciones.

Para detener la ejecucin de una macro, pulse [Escape] o [Ctrl][Pausa].

1.2.3.3 Grabar una macro con referencias relativas
Si graba una macro en el modo referencias absolutas (modo por defecto), los rangos de celdas
referenciados en las operaciones de seleccin, desplazamientos sern fijos. Por ejemplo:
Range("A2") designa la celda A2.
Si graba una macro en el modo referencias relativas, los rangos de celdas sern expresados en
relacin a la posicin de la primera celda activa. Por ejemplo: ActiveCell.Range("A2")
designa la celda ubicada bajo la celda activa, ActiveCell.Range("B1") designa la celda
ubicada a la derecha de la celda activa.
ActiveCell.Range("A1") siempre hace referencia a la primera celda activa. A1
puede considerarse la referencia relativa a la primera celda activa.
Para grabar una macro con referencias relativas:
a. Haga clic en el botn de la ficha Programador: el botn quedar activo (se ver de
color naranja).
b. Si vuelve a hacer clic en el botn , ste quedar desactivado y las macros se grabarn
con referencias absolutas.
Ejemplo:
La misma secuencia de operaciones se ha registrado en dos macros: la primera
(RefRelativa) se grab con la opcin referencias relativas, la segunda (RefAbsoluta), con
la opcin referencias absolutas.

La secuencia de operaciones es la siguiente:
15 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

seleccin de un rango de celdas,
desplazar el rango dos filas hacia abajo y una columna a la derecha.
Sub RefAbsoluta()
'Referencias absolutas
Range("B2:C8").Select
Selection.Cut Destination:=Range("C4:D10")
Range("C4:D10").Select
End Sub

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
1.2.3.4 Definir el lugar de almacenamiento de una nueva macro
Para definir el lugar de almacenamiento de una nueva macro:
a. Haga clic en el botn de la ficha Programador o pulse el mtodo abreviado
[Alt] [F8].
b. Abra la lista Grabar macro en y seleccione el libro en el que desee crear la macro.
Si elige Libro de macros personal, la macro se grabar en el libro personal.xlsb; la macro
ser accesible desde todos los libros Excel.

1.2.3.5 Eliminar una macro
Para eliminar una macro:
a. Haga clic en el botn de la ficha Programador o pulse el mtodo abreviado
[Alt] [F8].
b. Seleccione la macro que desea eliminar y haga clic en el botn Eliminar. Haga clic en el
botn S para confirmar la eliminacin.
16 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

1.2.3.6 Grabar un libro con macros
Para grabar un libro con macros:
a. Haga clic en el botn de la ficha Programador o pulse el mtodo abreviado
[Alt] [F8].
b. Haga doble clic en el nombre de la macro o pulse la combinacin de teclas asociada a la
macro.
Para visualizar la informacin relativa a una macro (mtodo abreviado de teclado y
descripcin), seleccione la macro de la lista y haga clic en el botn Opciones....

Si guarda por primera vez un libro con macros, aparecer el mensaje siguiente:

a. Haga clic en el botn No para anular la grabacin del libro sin las macros.
b. En el cuadro de dilogo Guardar como, abra la lista Tipo de archivo y seleccione Libro de
Excel habilitado para macros (*.xlsm).
Los libros que contienen macros tienen la extensin xlsm (en vez de xslx) y su icono se
distingue por un signo de exclamacin.


17 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Para grabar un nuevo libro con macros, tambin puede realizar las siguientes operaciones:
a. Haga clic en el botn Microsoft Office .
b. Arrastre el puntero del ratn hasta la opcin Guardar como.
c. Haga clic en Libro de Excel habilitado para macros.

1.2.4 Las macros y la seguridad
La configuracin de seguridad de las macros permite controlar lo que ocurre al abrir un libro
que contiene macros.
Las modificaciones de la configuracin de seguridad de macros rigen solamente en Excel y
no afectan a las otras aplicaciones de Microsoft Office.
1.2.4.1 Modificacin de la configuracin de seguridad
a. Haga clic en el botn de la ficha Programador.
b. Seleccione la opcin deseada.
c. Haga clic en Aceptar para validar su eleccin.

Si se cambia la configuracin de seguridad, las nuevas opciones se aplicarn a todos los
libros, excepto a los libros ya abiertos en Excel. Para aplicarlas a estos libros, debe
cerrarlos y abrirlos nuevamente.
18 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

1.2.4.2 Descripcin de las diferentes opciones de seguridad
Deshabilitar todas las macros sin notificacin: Todas las macros y todas las advertencias
de seguridad sern deshabilitadas.
Deshabilitar todas las macros con notificacin: Opcin por defecto. Las macros sern
deshabilitadas pero aparecer la siguiente advertencia de seguridad (bajo la cinta de
opciones) para los libros que contienen macros:

Tambin es posible habilitar las macros, solamente para este libro, de la siguiente
manera:
Haga clic en el botn ubicado a la derecha de la advertencia de
seguridad anterior.
Seleccione la opcin Habilitar este contenido y haga clic en el botn Aceptar: las
macros sern habilitadas y desaparecer la advertencia de seguridad.
Deshabilitar todas las macros excepto las firmadas digitalmente: Si las macros de un
libro tienen firma digital de un origen aprobado, las macros podrn ejecutarse. Si el
origen no est autorizado, aparecer una notificacin: en este caso es posible habilitar
las macros firmadas o aprobar el origen. Las macros sin firma digital no podrn
habilitarse.
Habilitar todas las macros (no recomendado; puede ejecutarse cdigo posiblemente
peligroso): Si se selecciona esta opcin, todas las macros sern habilitadas. Se
recomienda no usar esta opcin de forma permanente.
Cualquiera que sea la opcin elegida, si se instala un programa antivirus compatible con
Microsoft Office System 2007, los libros que contengan macros sern analizados antes
de abrirse.
1.2.4.3 Firmas electrnicas de macros
Para firmar digitalmente un proyecto macro, debe:
a. Obtener un certificado digital de parte de una autoridad de certificacin comercial,
como Verisign (www.verisign.com), e instalarlo,
19 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

b. Firmar digitalmente su proyecto. Para ello, pase al entorno VBE (accesible desde el
comando de la ficha Programador) y seleccione la opcin Firma digital del men
Herramientas. Haga clic en el botn Elegir para seleccionar su certificado.
Para probar sus proyectos macros, en su ordenador, puede crear su propio certificado de
autofirma con la ayuda de Selfcert.exe (programa distribuido con Microsoft Office 2007).

1.2.5 Modificar el cdigo de una macro
Para acceder al cdigo de una macro:
a. Haga clic en el botn de la ficha Programador o pulse el mtodo abreviado
[Alt] [F8].
b. Seleccione la macro que desea modificar y haga clic en el botn Modificar.
El cdigo de la macro aparecer en una ventana del entorno Microsoft Visual Basic (ver El
entorno de desarrollo VBE mas adelante).
Una macro corresponde a un procedimiento en lenguaje VBA. Un procedimiento VBA es
una secuencia de instrucciones agrupadas en un bloque de cdigo que comienza con
Sub y termina con End Sub.
20 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


Puede modificar o completar el cdigo dentro de este procedimiento.
Ejemplo:
Inserte el siguiente cdigo al final del procedimiento mostrado es la figura anterior:
...
MsgBox "El formato de celdas " & Selection.Address & _
vbCr & "se ha modificado correctamente"
End Sub

Para probar su procedimiento, haga clic en el icono de la barra de herramientas Estndar o use la
tecla [F5]. Aparecer el siguiente mensaje:


21 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

1.3 Asignacin de macros
Se puede asociar una macro a distintos controles (botones de comando, imgenes, etc.) o a la barra de
herramientas de acceso rpido para dar al usuario un acceso amigable y rpido para ejecutar macros.
1.3.1 Asociar una macro a un botn de comando
a. Haga clic en el botn de la ficha Programador.
b. Dibuje el botn con la ayuda de la herramienta (parte superior izquierda de la barra
de Controles de formulario).
Al soltar el botn del ratn, aparecer el cuadro de dilogo Asignar macro.
c. Seleccione el Nombre de la macro en la lista y haga clic en Aceptar.
1.3.2 Asignar una macro a una imagen
a. Inserte una imagen con un clic en el botn de la ficha Insertar.
b. Haga clic con el botn secundario del ratn y seleccione la opcin Asignar macro.
c. Seleccione el Nombre de la macro en la lista y haga clic en el botn Aceptar.
1.3.3 Asociar una macro a una zona de un objeto grfico
1. Inserte un objeto grfico (imagen, imagen prediseada, forma o SmartArt, accesibles
desde el grupo Ilustraciones de la ficha Insertar).
2. Para definir en el objeto una zona que permita ejecutar una macro, haga clic en
(en la ficha Insertar), seleccione la forma deseada y dibuje la forma dentro
del objeto que acaba de crear.
3. Haga clic con el botn derecho del ratn y seleccione la opcin Asignar macro.
22 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4. Seleccione el Nombre de la macro en la lista y valide con un clic en el botn Aceptar.
5. Seleccione la forma insertada. Aparecer la seccin Herramientas de dibujo y haga clic
en la ficha Formato.
6. En el grupo Estilos de forma de la ficha Formato, haga clic en la lista
y luego en .
7. En el mismo grupo Estilo de forma de la ficha Formato, haga clic en la lista
, luego en .
8. Ahora, al hacer clic en la forma, se ejecutar la macro.
1.3.4 Asociar una macro a una imagen Control ActiveX
a. Active el modo Diseo (si es que no est ya activo) con un clic en el botn de la
ficha Programador.
b. Haga clic en el botn de la ficha Programador.
c. Dibuje una imagen con la ayuda de la herramienta (dentro de los controles ActiveX) y
suelte el botn del ratn.
d. Ahora puede mostrar y modificar las propiedades de la imagen (en particular, asociar
una imagen por medio de la propiedad Picture) con un clic en el botn .
e. Haga clic con el botn derecho del ratn y seleccione la opcin Ver cdigo.
f. Dentro del procedimiento VBA asociado a la imagen, escriba la instruccin Call seguida
del nombre de la macro que desea ejecutar.
23 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


g. Desactive el modo Diseo con un clic en el botn de la ficha Programador.
h. Haga clic en la imagen: la macro Test se ejecuta.
1.3.5 Asociar una macro a un icono de la barra de
herramienta de acceso rpido
Tambin es posible insertar en la barra de herramienta de acceso rpido un comando que
permita ejecutar una macro. Para ello:
a. Haga clic en el botn Microsoft Office , luego en el botn Opciones de Excel (abajo
y a la derecha del cuadro de dilogo).
b. Seleccione la categora Personalizar en el men de la izquierda.
c. En la lista desplegable de categoras, arriba y a la izquierda, seleccione Macros:
aparecern las macros disponibles en la columna de la izquierda.
d. Seleccione una macro y haga clic en el botn Agregar: la macro pasar a la columna de la
derecha.
24 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


e. Haga clic en el botn Modificar para seleccionar un nuevo icono para la macro.
f. Puede modificar el orden de los comandos por medio de las dos flechas situadas a la
derecha.
g. En la lista desplegable situada arriba a la derecha, puede seleccionar su libro: en este
caso las modificaciones efectuadas solamente se aplicarn a ese libro.
h. Haga clic en el botn Aceptar para validar.
Ahora habr un nuevo comando en la barra de herramienta de acceso rpido para ejecutar la
macro.

25 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

1.4 El entorno de desarrollo VBE
VBE (Visual Basic Editor) es el entorno en el que puede introducir, modificar y probar su cdigo
VBA. Este entorno se llama tambin IDE (Integrated Development Environment) o editor de VBA.
El entorno VBE pone a su disposicin numerosas herramientas para facilitar la programacin y la
puesta a punto de su cdigo VBA: herramientas de depuracin, introduccin asistida,
explorador de objetos, etc.
1.4.1 Acceso al entorno VBE
Para acceder al entorno VBE desde Excel, haga clic en el botn de la ficha Programador
o pulse la combinacin [Alt] [F11].
Si el entorno VBE ya est abierto, puede acceder a ello desde la barra de tareas Windows:

1.4.2 Cerrar el entorno VBE
Para cerrar el entorno VBE y volver a Excel, haga clic en el botn Cerrar de la ventana (X roja
ubicada arriba a la derecha de la ventana principal del entorno VBE).

1.4.3 Volver a Excel
Para volver a Excel sin cerrar el entorno VBE, use cualquiera de estas tres posibilidades:
a. Haga clic en el icono de la barra de herramientas Estndar,
b. O pulse el mtodo abreviado [Alt] [F11].
26 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

1.4.4 Descripcin del entorno VBE

Todas las ventanas del entorno VBE pueden visualizarse desde el men Ver.

(1) La barra de herramientas Estndar

Los botones de la barra de herramientas Estndar se listan a continuacin de izquierda
derecha:
1 Ver Microsoft Excel 11 Interrumpir macro
2 Insertar una hoja 12 Detener macro
3 Guardar libro 13 Modo de diseo
4 Cortar 14 Explorador de proyectos
5 Copiar 15 Ventana de Propiedades
27 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

6 Pega 16 Examinador de objetos
7 Buscar 17 Cuadro de herramientas
8 Deshacer 18 Ayuda de Microsoft Visual Basic
9 Repetir 19 Posicin actual en la ventana de cdigo
10 Ejecutar macro

(2) El explorador de proyectos
Cada libro abierto en Excel tiene asociado un proyecto. El explorador de proyectos permite
ver todos los proyectos y todos los mdulos de cada proyecto segn una estructura en
rbol. Los mdulos se agrupan en cuatro categoras:
mdulos asociados a objetos Excel (libro y hojas),
mdulos asociados a formularios,
mdulos estndares,
mdulos de clase.
Cada mdulo puede contener muchos procedimientos.
(3) La ventana Propiedades
Permite mostrar las propiedades relativas al libro, a las hojas de clculo, a las hojas grficas y
a los formularios.
(4) La ventana Cdigo
En esta ventana se encuentran dos zonas con listas desplegables:
la zona objeto (10) muestra la lista de los objetos de mdulo,
la zona procedimiento (11) muestra los procedimientos o los eventos del objeto
seleccionado en la zona objeto. Los eventos ya usados aparecen en negrita.
(5) Instrucciones que se completan automticamente
Una lista desplegable aparece automticamente cuando se escribe el nombre de un objeto
seguido de un punto. La lista muestra los mtodos, propiedades y constantes disponibles
para ese objeto.

28 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Si la lista no est activa, seleccione Opciones en el men Herramientas y marque la casilla
Lista de miembros automtica de la ficha Editor.

(6) Ventana Inmediato
Permite mostrar los valores de las variables, modificarlas, y ejecutar las instrucciones.
(7) Ventana Locales
Contiene todos los valores de las variables del procedimiento en curso.
(8) Ventana Inspeccin
Contiene todos los valores de las variables que previamente hayan sido definidas como
expresiones de inspeccin.
Las ventanas Inmediato, Locales e Inspeccin se usan principalmente para la depuracin
de aplicaciones (ver captulo Depuracin y administracin de errores).
(9) El Explorador de objetos
Permite visualizar, para cada objeto, sus propiedades, mtodos y constantes.

1.5 Configuracin del Editor VBA
1.2.6 Configuracin de la tipografa
Las palabras clave, las funciones y las instrucciones VBA aparecen en azul; los objetos, mtodos
y propiedades, en negro, y los comentarios, en verde. Las instrucciones que contienen errores
se destacan en rojo.
Para modificar el estilo (color, tipo de letra, tamao) de los diferentes tipos de cdigo,
seleccione Opciones en el men Herramientas y haga clic en la ficha Formato del editor.
29 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


1.2.7 Configuracin de la introduccin de cdigo
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 completan automticamente, etc.
Para activar estas opciones, seleccione Opciones en el men Herramientas y haga clic en la ficha
Editor.
30 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


1.2.8 Gestin de errores
Las opciones de interceptacin de errores permiten establecer si la ejecucin del cdigo se
interrumpir al ocurrir un error de ejecucin.
Para activar esta opcin, seleccione Opciones en el men Herramientas y haga clic en la ficha
General.
31 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


Si su cdigo VBA incluye una gestin de errores, seleccione la opcin Interrumpir en errores no
controlados o las instrucciones de gestin de errores no sern tenidas en cuenta.
Ciertos ejemplos de estas memorias incluyen una gestin de errores; es importante que active
esta opcin para que funcionen correctamente.
La gestin de errores se explica en el captulo Depuracin y administracin de errores.
1.2.9 Acople de una ventana
Una ventana acoplada se coloca automticamente cuando la mueve. Una ventana no est
acoplada si puede ubicarse en cualquier lugar de la pantalla y permanecer ah.
Para definir las ventanas que desea acoplar, seleccione Opciones en el men Herramientas y
haga clic en la ficha Acoplar.
Active las ventanas que desea acoplar y desactive las otras. Luego haga clic en Aceptar.
32 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


1.2.10 Elegir las ventanas que hay que mostrar
Nombre de la ventana que hay
que mostrar
Men
Barra de
herramientas
Teclado
Propiedades Ver - Ventana Propiedades

[F4]
Proyectos Ver - Explorador de proyectos

[Ctrl] [R]
Inmediato Ver - Ventana Inmediato [Ctrl] [G]
Inspeccin Ver - Ventana Inspeccin
Ventana Locales Ver - Ventana Locales
Explorador de objetos Ver - Examinador de objetos

[F2]
Mdulo Ver - Cdigo

[F7]

1.6 Novedades de la versin 2007
1.6.1 Novedades de Excel 2007
Excel 2007 forma parte del paquete Microsoft Office 2007 (tambin llamado Office 12) y se
beneficia, en consecuencia, de la mayor parte de las mejoras de esta versin: nueva interfaz de
usuario (cinta de opciones y fichas que agrupan los comandos y reemplazan los mens y barras
de herramientas), comparte las herramientas grficas (entre Excel, Word y PowerPoint), temas
de Office, grabacin de archivos en formato pdf y xps, etc.
Otras novedades que incluye Excel 2007: capacidad general aumentada (aumenta la cantidad de
filas y columnas), mayor facilidad en la redaccin de frmulas, mejoras en el formato
condicional, tablas Excel, filtros y ordenamientos, etc.
1.6.2 Las novedades de VBA Excel 2007
Al contrario de lo que ocurre con la interfaz de Excel, el entorno de desarrollo conserva sus
mens y barras de herramientas.
De todas formas, la documentacin en lnea se ha mejorado considerablemente: el aspecto de
Visual Studio, ejemplos de cdigo de tareas y modelo de objetos enriquecido (informacin
sobre los cambios en relacin a las versiones anteriores).
33 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

De la misma forma, las mejoras en Excel introducen un enriquecimiento en el modelo de
objetos de Excel, como por ejemplo:
Nuevos objetos asociados a los formatos condicionales: Databar (barra para formato
condicional de una barra de datos), IconCriterion (representa el criterio con un
icono individual dentro de un juego de iconos), etc.
Nuevos mtodos del objeto Workbook: ApplyTheme (permite aplicar un tema a un
libro), ExportAsFixedFormat (permite publicar un libro en formato PDF o XPS), etc.
Nuevas propiedades asociadas al objeto Application: ShowDevTools (indica si la
ficha Programador est visible en la cinta de opciones), ShowMenuFloaties (indica si
las minibarras de herramientas deben aparecer cuando el usuario hace clic con el botn
derecho del ratn), etc.
34 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2
22.
.. E
EEL
LL L
LLE
EEN
NNG
GGU
UUA
AAJ
JJE
EE V
VVB
BBA
AA

2.1 Mdulos
2.1.1 El Explorador de Proyectos
El cdigo VBA asociado a un libro est agrupado en un proyecto que contiene varias carpetas:
a. La carpeta Microsoft Excel Objetos
Contiene un mdulo de clase asociado al libro del proyecto (llamado por defecto
ThisWorkbook) y un mdulo de clase por cada una de las hojas de clculo u hojas de
grfico del libro. En particular, en estos mdulos de clase se encuentran los
procedimientos de eventos asociados al libro y a las hojas.
b. La carpeta Formularios
Contiene los formularios (UserForm) del proyecto y el cdigo VBA asociado.
c. La carpeta Mdulos
Agrupa los diferentes mdulos estndares (compuestos por uno o ms procedimientos)
que pueden ser llamados desde cualquier procedimiento del proyecto.
d. La carpeta Mdulos de clase
Contiene los mdulos de clase usados para la creacin de nuevas clases de objetos. Los
mdulos de clase son utilizados especialmente para la escritura de los procedimientos
de eventos asociados a los objetos Application y Chart (ver captulo
Administracin de eventos).
La lista de todos los mdulos aparece en forma jerrquica en el Explorador de proyectos del
entorno VBE.
Si el explorador de proyectos no est a la vista, elija la opcin Explorador de proyectos
del men Ver o pulse el mtodo abreviado [Ctrl] [R].

35 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


Para ver el cdigo asociado a un mdulo, haga doble clic sobre el nombre del mdulo.
Los elementos del lenguaje VBA descritos en este captulo pueden usarse en los diferentes
mdulos.
2.1.2 Acceso a los mdulos
Para insertar un nuevo mdulo en el entorno VBE, use la opcin Mdulo del men Insertar, o
haga clic en el icono de la barra de herramientas Estndar y luego en Mdulo.
Si la ventana Mdulo est maximizada, el nombre del mdulo aparece sobre la barra de
ttulo de Microsoft Visual Basic.
a. Para pasar de un mdulo a otro, en la ventana Proyecto, haga doble clic en el nombre
del mdulo que desea activar.
b. Para eliminar un mdulo, en la ventana Proyecto, haga un clic derecho en el nombre del
mdulo que desea eliminar, elija la opcin Quitar mdulo e indique si desea exportar el
mdulo o no.
c. Para dar nombre a un mdulo, active el mdulo. Si es necesario, abra la ventana de
Propiedades y cambie la propiedad Name.

36 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2.1.3 Importar y exportar cdigo VBA
Los mdulos y formularios pueden exportarse a un archivo para luego importarlo a otro
proyecto Excel.
a. Para exportar un archivo, haga clic sobre el nombre del archivo en el explorador de
proyectos, luego seleccione la opcin Exportar archivo del men Archivo (o del men
contextual) o pulse la combinacin de teclas [Ctrl] [E].
b. Para importar un archivo, haga clic sobre el nombre del archivo en el explorador de
proyectos, luego seleccione la opcin Importar archivo del men Archivo (o del men
contextual) o pulse la combinacin de teclas [Ctrl] [M].
La extensin del archivo creado depende del tipo de archivo exportado:
Los mdulos de clase (mdulos asociados al libro y a las hojas y mdulos de clase
independientes) tienen la extensin .cls,
Los formularios tienen la extensin .frm,
Los mdulos estndares tienen la extensin .bas.

2.2 Procedimientos
2.2.1 Definiciones
Los procedimientos son subprogramas que permiten descomponer una tarea de programacin
compleja en un conjunto de tareas ms breves y simples. Permiten organizar el cdigo dentro
de mdulos para obtener un cdigo de mantenimiento ms simple y fcilmente reutilizable.
En VBA Excel, se distinguen tres tipos de procedimientos:
Los procedimientos Sub (por subrutina) se llaman subprogramas o procedimientos Sub
Los procedimientos Function se llaman funciones,
Los procedimientos Property se llaman procedimientos de propiedad.
En este captulo, solamente nos interesan los dos primeros, que son los ms utilizados.
Puntos comunes entre procedimientos Sub y funciones:
Ambos contienen instrucciones y/o mtodos VBA,
Ambos aceptan argumentos,
37 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Ambos pueden ser llamados desde otras funciones u otros procedimientos Sub.
Caracterstica especfica de las funciones: devuelven valores.
2.2.2 Acceso a los procedimientos
Para acceder a un procedimiento desde la ventana de cdigo de un mdulo, abra la
segunda lista de la ventana del mdulo, haga clic sobre el nombre del procedimiento al
que desea acceder o recorra los procedimientos con [Ctrl] [Flecha arriba] y [Ctrl] [Flecha
abajo].

Para seleccionar una palabra en el cdigo, haga doble clic sobre la palabra.
Para seleccionar una lnea, ubique el puntero del ratn a la izquierda de la lnea y haga
clic cuando el puntero se convierte en una flecha.
Para seleccionar un grupo de caracteres, use la tcnica de arrastre y soltar o haga
[Mays] clic.
Para seleccionar un procedimiento completo, ubique el puntero del ratn a la izquierda
de cualquiera lnea del procedimiento. Cuando el puntero se convierte en una flecha,
haga doble clic.
Para ejecutar un procedimiento, haga clic en el procedimiento que desea ejecutar y
pulse [F5] o .
Para eliminar un procedimiento, seleccione todo el procedimiento, y pulse [Supr].
2.2.3 Procedimientos Sub
Hay dos tipos de procedimientos Sub:
38 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Los procedimientos Sub generales
Los procedimientos Sub asociados a eventos.
Un procedimiento general es un procedimiento declarado en un mdulo (generalmente un
mdulo estndar). El llamado a este tipo de procedimiento se define explcitamente en el
cdigo.
Un procedimiento asociado a un evento es un procedimiento que se ejecuta automticamente
ante ciertos eventos de un objeto. Su nombre se forma con el nombre del objeto, seguido del
guin bajo "_" y del nombre del evento (ejemplo: Workbook_Open). El llamado a estos
procedimientos es implcito, es decir, el procedimiento se ejecuta automticamente cuando se
produce el evento asociado.
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 puede ejecutarse con un
botn de comando o una opcin de men que permita abandonar la aplicacin.
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.xls
cuando se abre el libro Resumen.xls. Este procedimiento est asociado al evento Open del
objeto Workbook y se encuentra en el mdulo ThisWorkbook del libro Resumen.xls.
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
2.2.4 Procedimientos Function
Los procedimientos Function, llamados comnmente funciones, devuelven un valor que resulta
de un clculo. El valor se devuelve a travs del nombre de la funcin.
El lenguaje Visual Basic incluye numerosas funciones integradas, tales como las usadas en
clculos con fechas (day, week, year, format, etc.). Adems de estas funciones integradas, usted
puede crear sus propias funciones personalizadas.
39 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.



Ejemplo:
La siguiente funcin pide al usuario que confirme su deseo de abandonar la aplicacin y
devuelve True si el usuario responde que S, y False en caso contrario.
Function Terminar() As Boolean
If MsgBox("Desea salir del programa?", _
vbQuestion + vbYesNo) = vbYes Then
Terminar = True
Else
Terminar = False
End If
End Function
2.2.5 Declaracin de procedimientos
Sintaxis de un procedimiento Sub:
[Private | Public] [Static] Sub NomProc([argumentos])
<secuencia de instrucciones>
End Sub
Sintaxis de un procedimiento Function:
[Private | Public] [Static] Function NomProc ([argumentos]) [As <tipo>]
<secuencia de instrucciones>
End Function
Para crear un procedimiento Sub o Function, se deben respetar los siguientes pasos:
a. determine el alcance del procedimiento: privado o pblico,
b. declare el procedimiento segn su tipo con la palabra clave Sub o Function,
seguida del nombre del procedimiento,
c. defina los argumentos que se deban pasar como parmetros al procedimiento e
indquelos entre parntesis despus del nombre del procedimiento,
d. en el caso de una funcin, si es necesario, indique el tipo del valor devuelto despus
de la palabra clave As,
e. redacte el cdigo que permita efectuar la operacin deseada. Si es necesario, use
Exit Sub o Exit Function para salir del procedimiento. En el caso de una
funcin, asigne el resultado al nombre de la funcin,
f. finalice el procedimiento con End Sub o End Function.
40 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2.2.6 Alcance de los procedimientos
El alcance de un procedimiento determina la extensin de su uso.
Un procedimiento Public puede ser llamado desde todos los mdulos de todos los proyectos
Excel.
Un procedimiento Private solamente puede ser llamado desde un procedimiento dentro del
mismo mdulo.
La palabra clave Static indica que las variables locales del procedimiento son mantenidas
entre un llamado y otro, es decir, se conservan los valores de las variables.
Si no se indica Public o Private, los procedimientos son pblicos por defecto.
2.2.7 Argumentos de los procedimientos
Los argumentos se usan para transferir a los procedimientos parmetros en forma de datos. La
cantidad de argumentos puede variar de 0 a varios.
Para declarar un argumento, basta especificar su nombre. Sin embargo, la sintaxis completa
para declarar un argumento es la siguiente:
[Optional] [ByVal | ByRef] [ParamArray] <variable> [As tipo]
La opcin Optional: indica que el argumento es opcional y puede omitirse. Los
argumentos opcionales deben ubicarse al final de la lista de argumentos, y ser de tipo
Variant.
La opcin ByVal: indica que el argumento se pasa por valor. El procedimiento accede a una
copia de la variable; su valor inicial no se modifica por el procedimiento al que se lo pasa.
La opcin ByRef (opcin por defecto): indica que el argumento se pasa por referencia. En
este caso, el procedimiento puede acceder a la variable propiamente dicha; de esta manera,
su valor real puede ser modificado por el procedimiento al que lo pasa.
La palabra clave ParamArray: se usa nicamente como ltimo argumento de la lista para
indicar que se trata de una matriz opcional de elementos de tipo Variant. No puede
usarse con las palabras clave ByVal, ByRef u Optional.
Variable: especifica el nombre del argumento. Para las variables de matriz, no especificar su
dimensin.
Tipo: especifica el tipo de datos del argumento pasado al procedimiento (Byte, Boolean,
Integer, Long, etc.).
41 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2.2.8 Argumentos con nombre
El pasaje de argumentos a un procedimiento segn su orden de aparicin es a veces difcil de
realizar, especialmente cuando hay parmetros opcionales. De la misma forma, la legibilidad de
los llamados a procedimientos con muchos parmetros no siempre es fcil.
Los argumentos con nombre facilitan el pasaje de argumentos gracias a las siguientes ventajas:
El orden de los argumentos con nombre no es importante.
Los argumentos opcionales pueden omitirse.
La sintaxis de los argumentos con nombres es:
NomArg := valor
Ejemplo:
El siguiente cdigo VBA:
If MsgBox("Desea salir de la aplicacin?", _
vbYesNo + vbQuestion, "Gestin de ventas") = vbYes Then
Application.Quit
End If
puede transformarse en:
If MsgBox(Prompt:= "Desea salir de la aplicacin?", _
Buttons:=vbYesNo + vbQuestion, _
Title:="Gestin de ventas") = vbYes Then
Application.Quit
End If
Tambin el orden de los parmetros puede modificarse:
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. Los argumentos opcionales aparecen entre corchetes.
42 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


2.2.9 Llamar a un procedimiento
Sintaxis:
[Call] NomProc [lista de argumentos]
Si se indica la palabra clave Call, debe colocar la lista de argumentos entre parntesis.
Recuerde que en la sintaxis, los corchetes significan opcionalidad.
Para almacenar el resultado de una funcin en una variable, use la siguiente sintaxis:
<variable> = NomProc ([lista de argumentos])
Para llamar a un procedimiento de otro mdulo, use la siguiente sintaxis:
NombreMdulo.NombreProcedimiento
Ejemplo: ThisWorkbook.Salir_Aplicacion
Para llamar a un procedimiento de otro libro, use la siguiente sintaxis:
Application.Run "NombreLibro!NombreMdulo.NombreProcedimiento"
Ejemplo: Application.Run "Ventas.xls!ThisWorkbook.Salir_Aplicacion"
Para ejecutar el comando anterior, el libro Ventas.xls debe estar abierto.

43 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


2.2.10 Llamar a una funcin VBA en una frmula Excel
Las funciones VBA pueden usarse en las frmulas Excel. Todas las funciones declaradas como
Public estn disponibles en el asistente para funciones de Excel (en la categora Funciones
Definidas por el usuario).
Ejemplo:
Este ejemplo usa una funcin VBA que calcula la edad de una persona a partir de su fecha de
nacimiento.
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
Para usar esta funcin en Excel:
a. Seleccione la opcin Insertar funcin de la ficha Formulas.
b. En el cuadro de dilogo Insertar funcin, en la lista O seleccione una categora, elija
Definidas por el usuario; la funcin CalcEdad estar ahora accesible:
44 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


c. Seleccione la funcin y haga clic en Aceptar; el cuadro de dilogo le pedir los
argumentos de la funcin como se ve aqu:


Este ejemplo muestra la importancia del nombre de los argumentos de las funciones:
cuanto ms explcitos sean stos, ms fcil ser usar la funcin en Excel.
Ahora puede modificar la frmula para incluir el texto "aos" y extender la frmula a toda la
lista.
45 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

El resultado en Excel es el siguiente:

2.2.11 Ejemplos de procedimientos y funciones
Copiar el contenido de una tabla de valores en la hoja de Excel activa.
Sub Mostrar_Tabla()
Dim TabVal As Variant
Dim Celda As Range
Dim i As Integer
'Muestra el contenido de la tabla en la hoja de clculo activa
TabVal = Array("Buen Da", 1.244, "=A1+12", "=A2+12")
For i = 0 To 3
Set Celda = Range("A" & i + 1)
If MCell(Celda, TabVal(i)) Then
MsgBox "La celda se actualiz con xito"
Else
MsgBox "La celda no se pudo actualizar"
End If
Next i
End Sub

El cdigo de estos ejemplos debe escribirse en un mdulo estndar o en el mdulo
ThisWorkbook.
La funcin MCell informa sobre el valor asignado a una celda. Devuelve True si la celda se
actualiz correctamente, y False en caso contrario.
Private Function MCell(Celda As Range, Valor As Variant) As Boolean
'Actualizacin de una celda a partir de un valor
MCell = False
46 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

If Not IsEmpty(Celda) Then Exit Function
Celda.Value = Valor
If Celda.Text <> "#VALOR!" Then
MCell = True
End If
End Function
Si prueba este ejemplo, obtendr el siguiente resultado:

La tercera celda no se pudo actualizar.

2.3 Variables
Las variables permiten almacenar valores intermedios durante la ejecucin del cdigo VBA para
usarlos luego en clculos, comparaciones, pruebas, etc.
Las variables se identifican por un nombre que permite hacer referencia al valor que contienen
y un tipo que determina la naturaleza de los datos que pueden almacenar.
Para declarar una variable puede usarse la instruccin Dim:
Dim NomVariable As Tipo
2.3.1 Tipos de variables
2.3.1.1 Numricas
Tipo Rango
Tamao en
bytes
Byte 0 a 255 1
Integer (entero) -32 768 a 32767 2
47 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Long (entero largo) -2 147 483 648 a 2 147 483 647 4
Single (real simple
de coma flotante)
-3.402823E38 a 1.401298E-45 (valores negativos)
1.401298E-45 a 3.402823E38 (valores positivos)
4
Double (real doble
de coma flotante)
-1.79769313486231E308 a 4.94065645841247E-324 (valores
negativos)
4.94065645841247E-324 a 1.79769313486231E308 (valores
positivos)
8
Currency (moneda
de punto fijo)
-922 337 203 685 477.5808 a 922 337 203 685 477.5807 8
Decimal
+/-79 228 162 514 264 337 593 543950 335 sin separador
decimal;
+/-7.9228162514264337593543950335 con 28 cifras a la
derecha del separador decimal; el menor nmero distinto de
cero es +/-0.0000000000000000000000000001
12

El valor por defecto de los tipos de datos numricos es cero.
2.3.1.2 Cadenas de caracteres
El tipo es String. Existen dos tipos de cadenas:
Las cadenas de longitud variable pueden contener aproximadamente dos mil millones de
caracteres.
Las cadenas de longitud fija pueden contener de 1 a aproximadamente 64 Kb de
caracteres.

El valor por defecto de los tipos de datos String es "" (String nulo).
Ejemplo:
'Cadena de longitud variable
Dim Domicilio As String
'Cadena de longitud fija (20 caracteres)
Dim Nombre As String * 20
2.3.1.3 Boolean o lgicas
El tipo es Boolean. La variable puede tomar los valores True (Verdadero) o False (Falso).
Ocupa 2 bytes.
El valor por defecto de los tipos de datos lgicos es False.
48 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2.3.1.4 Fecha
El tipo es Date. La variable puede tomar los valores de fecha y de hora del primero de enero
del ao 100 al 31 de diciembre de 9999. Ocupa 8 bytes.
El valor por defecto de los tipos de datos Date es 1899-12-30 12:00:00 AM
2.3.1.5 Variant
Las variables de tipo Variant pueden contener datos de todo tipo, adems de los valores
especiales Empty, Error y Null.
Usar el tipo de dato Variant ofrece ms flexibilidad en el tratamiento de datos. Por ejemplo,
si una variable de tipo Variant contiene cifras, se puede usar su valor real o su representacin
en forma de cadena, segn el contexto.
De todas formas, las variables de tipo Variant requieren 16 bytes de memoria para nmeros
y 22 bytes + la longitud de la cadena para los caracteres; esto puede ser perjudicial en el caso de
procedimientos largos o en mdulos complejos.
El valor por defecto de los tipos de datos Variant es Empty.
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 da Integer
Valx = 10
MsgBox Valx & " es de tipo " & TypeName(Valx)
'Ejemplo da String
Valx = "Ejemplo"
MsgBox Valx & " es de tipo " & TypeName(Valx)
'Esta multiplicacin da Double
Valx = 12500.32 * 1E+21
MsgBox Valx & " es de tipo " & TypeName(Valx)
'#1/1/99# da Date
Valx = #1/1/99#
MsgBox Valx & " es de tipo " & TypeName(Valx)
'True da Boolean
Valx = True
MsgBox Valx & " es de tipo " & TypeName(Valx)
End Sub
49 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2.3.1.6 Objeto
El tipo es Object. Para crear una variable que contenga un objeto, comience por declarar la
variable como tipo Objeto y luego asgnele un objeto.
El valor por defecto de los tipos de datos Objeto es Nothing.
Para declarar una variable Objeto:
a. Si el tipo de objeto no se conoce, use la sintaxis:
Dim NomVariable As Object
b. Si se conoce el tipo de objeto, use la sintaxis:
Dim NomVariable As TipoObjeto
Ejemplo:
Sub Variables_Objeto()
'Test se declara como objeto
'NomCli se declara como hoja de clculo
'AImprimir se declara como grfico
Dim Test As Object
Dim NomCli As Worksheet
Dim AImprimir As Chart
End Sub
Para asignarle un objeto a una variable Objeto, use la instruccin Set:
Set NomVariable = ObjetoaAsignar
Ejemplo:
Declaracin de una variable ZonaTest destinada a contener un objeto Range y asignacin de
las celdas A6 a B15 a esta variable:
Dim ZonaTest As Range
Set ZonaTest = Range("A6:B15")
Para finalizar la asociacin entre una variable y un objeto determinado, use la siguiente
sintaxis:
Set NomVariable = Nothing

50 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2.3.1.7 Tipos definidos por el usuario (o TDU)
Los tipos de datos personalizados se crean con la instruccin Type usada a nivel de mdulo.
Sintaxis:
Type NomTipoPersonalizado
NomElemento1 As TipoDatos
NomElemento2 As TipoDatos
...
End Type
La definicin del tipo personalizado solamente puede hacerse en la seccin de
declaracin de un mdulo.
Ejemplo:
Declaracin de un tipo personalizado constituido por una letra y un nmero entero en el
mdulo de cdigo ProGene.

Uso del tipo personalizado para controlar los cdigos de artculos introducidos de la celda B6
a la celda B11 de la hoja de clculo activa. En caso de error, se muestra un mensaje.
51 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


2.3.2 Declaracin de variables
Para crear una variable, debe declararla, es decir, darle un nombre. Luego puede usar ese
nombre para modificar el valor de la variable, usar ese valor, etc.
La declaracin de variables en VBA puede ser implcita o explcita.
2.3.2.1 Declaraciones implcitas
Se hacen directamente al asignar un valor a un nombre de variable. El tipo de datos ser
entonces el tipo por defecto, o sea, Variant.
Ejemplo:
I = 12
Importe = 12000
Nombre = "Juan Carlos"
52 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2.3.2.2 Declaraciones explcitas
Requieren el uso de una instruccin de declaracin (Dim, Public, Private, Static). Si el
tipo de la variable no se indica, la variable resultar del tipo por defecto, o sea, 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 opcin Requerir declaracin de variables del
men Herramientas - Opciones - ficha Editor.
Ejemplo:
Dim I
Private Importe As Double
Public Nombre As String

Para optimizar la velocidad de ejecucin del cdigo VBA, se recomienda declarar las
variables en forma explcita.

2.3.2.3 Sintaxis de las instrucciones de declaracin
{Dim | Private | Public | Static} NomVariable [As <TipodeDatos>]
En la sintaxis, las llaves, {}, significan seleccin y el pipe, |, significa exclusin, es decir, en la
sintaxis anterior se debe escribir una de las palabras claves: Dim, Private, Public o Static.
a. Dim
Las variables declaradas con la instruccin Dim a nivel de mdulo estn disponibles para todos
los procedimientos del mdulo. No son accesibles desde ningn otro mdulo. Las variables
declaradas con la instruccin Dim a nivel de procedimiento solamente estn disponibles dentro
del procedimiento.
b. Private
Solamente se puede usar a nivel de mdulo. Las variables Private solamente estn
disponibles para el mdulo en el que son declaradas.

53 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

c. Public
Solamente se puede usar a nivel de mdulo. Las variables declaradas con la instruccin
Public son accesibles desde el conjunto de mdulos de todos los proyectos Excel abiertos. Si
la instruccin Option Private Module se especifica en la seccin de declaracin del
mdulo, las variables solamente son pblicas dentro del proyecto que las recibe.
d. Static
Solamente se puede usar a nivel de procedimiento. Las variables declaradas con la instruccin
Static conservan su valor durante toda la duracin de la ejecucin del cdigo.

2.3.3 Declaracin de los tipos de variables
2.3.3.1 Declaraciones explcitas del tipo
El tipo de la variable se especifica en la declaracin, tras la palabra clave As.

Ejemplo:
Sub TotalAcum()
Dim Total As Integer
Static Acum As Integer
Total = Total + 10
Acum = Acum + 10
'Devuelve 10 en cada ejecucin del procedimiento
MsgBox Total
54 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

'Devuelve 10 en la primera ejecucin, luego 20 la segunda vez,
'30 la tercera, etc.
'Las variables Static conservan el ultimo valor asignado
MsgBox Acum
End Sub

Usted puede declarar ms de una variable en una misma instruccin pero, atencin, el tipo de
datos solamente ser tenido en cuenta para la ltima variable, el tipo Variant se asignar a
las otras. Si no desea este comportamiento, establezca explcitamente el tipo de dato a cada
variable.
Ejemplo:
La siguiente instruccin declara la variable Identificador de tipo Variant y las variables
Superficie y Latitud de tipo entero.
Dim Identificador, Superficie As Integer
Dim Latitud As Integer
2.3.3.2 Declaraciones implcitas del tipo
El tipo de variable se declara por el uso de un sufijo en el momento de su utilizacin o por la
instruccin DefType.
a. Empleo de un sufijo
Usted debe agregar uno de los siguientes caracteres al nombre de la variable:
Sufijo Tipo de datos
% Integer
& Long
! Single
# Double
@ Currency
$ String

Ejemplo:
'Declara la variable como tipo Cadena (String).
Dim Nombre$
'Declara la variable como tipo Moneda (Currency).
Dim Deuda@
'Declara la variable como tipo Real de doble precisin (Double).
Dim Incremento#

55 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

b. Instruccin DefType
Estas instrucciones se emplean en la zona de declaracin del mdulo para definir los tipos de
datos por defecto de las variables cuyos nombres comienzan por los caracteres especificados. La
siguiente tabla muestra el listado de las instrucciones DefType para correspondiente a cada tipo
de dato:
Instruccin Tipo de datos
DefBool Boolean
DefDbl Double
DefInt Integer
DefDate Date
DefLng Long
DefStr String
DefCur Currency
DefObj Object
DefSng Single
DefVar Variant
DefByte Byte
Ejemplo:
'Todas las variables cuyos nombres comienzan por una letra comprendida entre I
'y K y por la letra N son variables de tipo entero (Integer).
DefInt I-K, N
'Las variables que comienzan por una letra comprendida entre A y H sern de
'tipo cadena (String).
DefStr A-H

Las instrucciones DefType no tienen efecto si se establece la instruccin Option
Explicit.

2.3.4 Arreglos (Arrays)
Un arreglo es un conjunto de elementos contiguos, todos del mismo tipo, que comparten un
nombre comn, a los que se puede acceder por la posicin (ndice) que ocupa cada uno de ellos
dentro del arreglo. Un arreglo puede tener varias dimensiones: A los arreglos de una dimensin
se les llama vectores o listas, a los de dos dimensiones tablas o matrices, a los arreglos de 3
dimensiones en adelante se les llama arreglos multidimensionales. El mximo nmero de
dimensiones de un arreglo en VBA es 60.
56 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Un arreglo de dos dimensiones se representa con una variable con dos subndices: el primer
subndice corresponde a las filas y el segundo subndice corresponde a las columnas.
En VBA hay dos tipos de arreglos: arreglos estticos que tienen siempre el mismo tamao y
arreglos dinmicos cuyo tamao cambia en tiempo de ejecucin.
2.3.4.1 Declaracin de un arreglo
Para crear una variable arreglo, use la siguiente sintaxis:
{Dim|Private|Public|Static} variable([dimensiones]) [As tipo]
variable: Es un identificador que nombra el arreglo
tipo: Define el tipo de la variable. Puede ser un tipo simple (Integer, Long, Single, Double,
String, etc), un tipo objeto (Object, Workbook, Range, etc) o un tipo definido por el
usuario.
dimensiones: es una lista de expresiones numricas, separadas por comas y que definen
las dimensiones del arreglo. Si se especifica las dimensiones, el arreglo es esttico, si se
omite, el arreglo es dinmico. dimensiones puede ser de la forma:
[LimInferior To] LimSuperior[, [LimInferior To] LimSuperior]...
donde LimInferior corresponde al ndice menor del arreglo en esa dimensin. Como
es opcional, si se omite, su valor es cero. LimSuperior corresponde al ndice superior
del arreglo en esa dimensin.
Ntese que los parntesis son obligatorios en la declaracin de una variable arreglo.
Por defecto, el menor valor del ndice de un arreglo en una dimensin es 0. Para modificar el
menor valor del ndice, use la instruccin Option Base {0 | 1} en la seccin de
declaracin del mdulo.
Para definir el contenido de un arreglo, se puede usar la funcin Array (el arreglo debe ser
dinmico) o despliegue los datos en una hoja o asigne una por una cada variable del arreglo
usando los ndices.
Ejemplo:
El siguiente ejemplo muestra, en la hoja activa de Excel, la lista de los factores de conversin a
euros para cinco pases.
Const FacFRF = 6.55957
Const FacBEF = 40.3399
Const FacDEM = 1.95583
57 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Const FacESP = 166.386
Const FacITL = 1936.27

Sub Muestra_Factor()
Dim Pais As Variant
Dim Factor(5) As Double
Dim i As Integer
'Lista de pases
Pas = 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
En este ejemplo, es igualmente posible usar una matriz de dos ndices. El cdigo VBA del
procedimiento queda como sigue:
Sub Muestra_Factor2
'Matriz de dos ndices
Dim TabFactor(5, 1) 'Por defecto esta matriz es de tipo Variant
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
58 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2.3.5 Constantes
Una constante permite asignar un nombre explcito a un valor y este no se puede cambiar.
2.3.5.1 Constantes personalizadas
La declaracin de una constante se hace con la instruccin Const en la seccin de declaracin
de un mdulo o un procedimiento.
Const NomConstante [As <TipoDato>] = <expresin>
TipoDato: Corresponde al tipo de dato de la constante. El tipo de datos no puede ser un
objeto (Object) ni un tipo personalizado (Type). Si no se especifica el tipo de dato, su
tipo se determinar de acuerdo al valor asignado.
expresin: Corresponde al valor de la constante. No puede ser una funcin definida por
el usuario, ni una funcin intrnseca de Visual Basic pero si puede ser una expresin que
involucre operadores, otras constantes y literales.
Ejemplo: Declaracin de algunas constantes.
Sub Constantes()
'Ejemplos de constantes autorizadas:
Const Val1 = "Mega+" 'El tipo de datos es String
Const Val2 = 148 'El tipo de datos es Integer
Const Val3 = 125.45 'El tipo de datos es Double
Const Val4 As Single = 125.45
Const Val5 As Double = Val2 * Val3
Const Val6 As String = Val1 & " cuesta " & Val2
'Ejemplo de constante no autorizada por el uso de una funcin VB
'por lo que la siguiente instruccin genera un error
Const Val6 = Sqr(Val4)
End Sub
Para crear una constante accesible al conjunto de los libros, se la debe declarar en la seccin de
declaracin de un mdulo y ubicar la instruccin Public antes de la instruccin Const.
2.3.5.2 Constantes integradas o intrnsecas en VBA
Las constantes usadas por los objetos Microsoft Excel van precedidas por las letras "xl"; las
constantes usadas con otras instrucciones y funciones Visual Basic van precedidas por las letras
"vb", y las constantes Microsoft Office van precedidas por las letras "mso".
Para mostrar la lista de constantes integradas, abra el examinador de objetos con un clic en
el icono o pulsando la tecla de funcin [F2]. Escriba la palabra Constants en la lista
desplegable Texto de bsqueda y luego haga clic en el icono .
59 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


Para obtener la lista de constantes Visual Basic, proceda de la siguiente manera:
a. Abra la ayuda de Visual Basic por medio del icono de la barra de herramientas
Estndar o de la tecla [F1],
b. Escriba la palabra "Constantes" en la zona de bsqueda y haga clic en el botn
Buscar:
60 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


c. La lista de constantes clasificadas por tipo estar ahora accesible:

61 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


2.4 Operadores
Los operadores permiten realizar operaciones aritmticas con variables y/o constantes,
comparar variables entre ellas, evaluar varias condiciones, etc.
Se distinguen varios tipos de operadores:
Operadores aritmticos,
Operadores de comparacin,
Operadores lgicos,
Operador de concatenacin.
El operador de asignacin es el signo =. El valor de la expresin situada a la derecha del
signo igual es asignado a la variable situada a la izquierda del signo (ejemplo: IntA = 12).
2.4.1 Operadores aritmticos
Permiten efectuar clculos aritmticos con variables y/o constantes.
Operador Clculo realizado
+ Adicin
- Sustraccin y/o Negacin
/ Divisin real
Mod Residuo de la divisin
\ Divisin entera
* Multiplicacin
^ Potenciacin
2.4.2 Operadores de comparacin
Comparan dos valores o dos cadenas de caracteres.
Operador Clculo realizado
< Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que
= Igual a
<> Distinto de
62 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

La instruccin Option Compare {Binary|Text|Database} utilizada a nivel de
mdulo permite declarar el mtodo de comparacin por defecto que conviene usar en la
comparacin de cadenas. Puede tomar tres valores posibles:
Option Compare Binary (opcin por defecto) realiza la comparacin de cadenas
basada en el orden derivado de la representacin binaria interna de los caracteres: A < B
< E < Z < a < b < e < z < < < < < ...
Option Compare Text realiza la comparacin de cadenas sin distinguir maysculas
de minsculas: (A=a) < (=) < (B=b) < (E=e) < (=) < (Z=z) < (=)...
Option Compare Database realiza la comparacin de cadenas basado en el orden
determinado por el identificador de parmetros regionales de la base de datos en la que
se realiza la comparacin de cadenas.
2.4.3 Operadores lgicos
Permiten evaluar simultneamente dos (o ms) valores booleanos o expresiones que devuelven
este tipo de valor. Generalmente se usan con la instruccin If.
Operador Clculo realizado
And
Si todas las expresiones tienen el valor True, el
resultado es True. Si una de las expresiones tiene
el valor False, el resultado es False.
Or
Si por lo menos una de las expresiones tiene el
valor True, el resultado es True (o inclusivo).
Xor
Si una y slo una de las expresiones tiene el valor
True, el resultado es True (o exclusivo).
Not Devuelve el contrario de la expresin.
Eqv
Devuelve True si las dos expresiones tienen el
mismo valor de verdad.
Imp
Devuelve False cuando la primera expresin es
True y la segunda False, en caso contrario
devuelve True.
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.
63 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2.4.4 Operador de concatenacin
El operador de concatenacin es el signo &. Combina dos expresiones de cadena.
Ejemplo:
Concatenacin del apellido y el nombre.
StrApeNom = Apellido & " " & Nombre
2.4.5 Prioridad de los operadores
Cuando hay varios operadores en una misma expresin, cada uno de ellos se evala en un
orden predeterminado, llamado prioridad de los operadores.
Los operadores se evalan en el siguiente orden: operadores aritmticos, operador de
concatenacin, operadores de comparacin, operadores lgicos.
Los operadores de comparacin tienen la misma prioridad; es decir, son evaluados por orden de
aparicin, de izquierda a derecha.
Los operadores aritmticos y lgicos se evalan en el siguiente orden de prioridad:
Aritmtico Lgico
^ Not
- (Negacin) And
*, / Or
\ Xor
Mod Eqv
+, - Imp
El uso de parntesis permite modificar la prioridad para que un elemento de una expresin sea
evaluado antes que los otros. Las operaciones encerradas entre parntesis se evalan siempre
antes que las otras.
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.
Se aconseja usar parntesis para mejorar la legibilidad del cdigo.
64 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2.5 Estructuras de decisin
Las estructuras de decisin, llamadas tambin alternativas o bifurcaciones condicionales,
permiten, tras una evaluacin de una condicin, optar por uno u otro bloque de cdigo.
Se distinguen dos instrucciones de bifurcacin condicional:
If ... Then ... Else
Select ... Case
La funcin IIf tambin puede usarse para definir un valor en funcin de una condicin.
Ejemplo: Port = IIf(Cantidad < 100, 100, 0)
2.5.1 Instruccin IF
Permite ejecutar ciertas instrucciones en funcin del resultado de una condicin.
2.5.1.1 If...Then
If <condicin> Then <instruccin> [:<instruccin>]
Si hay varias instrucciones, seprelas por el signo de puntuacin : (dos puntos). Esta sintaxis se
usa especialmente para pruebas cortas y simples.
Ejemplo:
Si la celda A1 est vaca, emita un bip y muestre un mensaje.
Sub Test_Celda_A1()
If IsEmpty(Range("A1").Value) Then Beep: MsgBox "Olvid el ttulo"
End Sub
2.5.1.2 If...Then...End If
If <condicin> Then
<instruccin1>
<instruccin2>
...
End If

65 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Ejemplo:
Sub Test_Titulo()
'Si la celda A1 no est vaca
'entonces ponerla en negrita y pintarla de rojo
If Not IsEmpty(Range("A1").Value) Then
With Range("A1")
.Font.Bold = True
.Interior.ColorIndex = 3
End With
End If
End Sub
2.5.1.3 If...Then...Else...End If
If <condicin> Then
<instrucciones>
Else
<instrucciones>
End If
Ejemplo:
Al cambiar la moneda (euro o US$) de la celda C3, modificar el formato del rango D6: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
Call Aplicar_Formato
End If
End Sub
Este procedimiento modifica el formato de las celdas en funcin de la moneda elegida.
Sub Aplicar_Formato()
'Formato o $
Range("D6:F11").NumberFormat = "0.00"
If UCase(Range("C3").Value) = "EURO" Then
Range("D6:F11").NumberFormat = "0.00 "
Else
Range("D6:F11").NumberFormat = "0.00"" $"""
End If
End Sub
2.5.1.4 If... Then...ElseIf...Else...End If
If <condicin> Then
<instrucciones>
ElseIf <condicin> Then
66 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

<instrucciones>
ElseIf <condicin> Then
<instrucciones>
...
...
Else
<instrucciones>
End If
Ejemplo:
Este procedimiento modifica los textos de las celdas seleccionadas: si la ltima letra es una
minscula, pasa todo a maysculas; si no, pasa todo a minsculas con la primera letra en
mayscula.
Sub Mayus_Minus()
Dim Celda As Range
Dim CodAscii As String

'Recorre las celdas de la seleccin
For Each Celda In Selection
If IsEmpty(Celda.Value) Then
Beep
MsgBox "La celda " & Celda.Address & " est vaca"
Else
'Cdigo Ascii de la ltima letra
CodAscii = Asc(Right(Celda.Value, 1))
'Si est en mayscula
If CodAscii >= 65 And CodAscii <= 90 Then
Celda.Value = UCase(Left(Celda.Value, 1)) _
& LCase(Right(Celda.Value, Len(Celda.Value) - 1))
'Si est en minscula
ElseIf CodAscii >= 97 And CodAscii <= 122 Then
Celda.Value = UCase(Celda.Value)
Else
MsgBox "El ltimo carcter de la celda: " _
& Celda.Address & " no es una letra"
End If
End If
Next
End Sub
67 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2.5.2 Instruccin Select Case
Ejecuta una secuencia de instrucciones especficas en funcin del valor de una expresin.
Select Case <ExpresinTest>
Case <ListaExpresiones>
<instrucciones>
Case <ListaExpresiones>
<instrucciones>
...
...
Case Else
<instrucciones>
End Select
<ListaExpresiones> puede tomar una de las siguientes formas:
Un valor literal (ejemplo: Case 10)
Una lista de valores separadas por comas (ejemplo: Case 1, 5, 10)
Un rango de valores: a To b, con a <= b (ejemplo: Case 1 To 5)
Una expresin condicional: Is oper_rel valor (ejemplo: Case Is >= 5)
Ejemplo:
Llamado a un procedimiento que determina la frmula de clculo del total en funcin de la
cantidad, del precio y del flete.
Private Sub Calc_Total()
Dim ACalcular As Range
Dim Cell As Range

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

68 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

La funcin Total devuelve una frmula Excel. El flete es gratuito a partir de dos unidades
ordenadas, el porcentaje de descuento tambin depende de la cantidad ordenada.
Function Total(zCant As Range, ZPrecio As Range, zFlete As Range) As String
'Determinacin de la frmula de clculo del total
'en funcin de la cantidad ordenada
Select Case zCant
Case 1
Total = "=" & ZPrecio.Address & "+" & zFlete.Address
Case 2 To 10
Total = "=" & zCant.Address & "*" & ZPrecio.Address
Case 11 To 100
Total = "=" & zCant.Address & "*" & ZPrecio.Address & "* 0.95"
Case 101 To 1000
Total = "=" & zCant.Address & "*" & ZPrecio.Address & "* 0.9"
Case Else
Total = "Error en la cantidad"
End Select
End Function

2.6 Estructuras en ciclo
Las estructuras en ciclos (o repetitivas) permiten repetir la ejecucin de un conjunto de
instrucciones. Se distinguen varios tipos de estructuras en ciclo:
Do...Loop
While...Wend
For...Next
For Each...Next
Do...Loop y While...Wend repiten las operaciones en funcin de una cierta condicin, mientras
que For...Next repite las operaciones una cantidad de veces dada por un contador. For
Each...Next permite recorrer los elementos de una coleccin.
2.6.1 Instruccin Do...Loop
Ejecuta un bloque de instrucciones un nmero indeterminado de veces.
Sintaxis 1:
Las instrucciones se ejecutan mientras que la condicin devuelve el valor True.
69 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Do While <Condicin>
<Instrucciones>
Loop
Sintaxis 2:
Las instrucciones se ejecutan una primera vez sin condicin y luego mientras la condicin
devuelva True.
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 strRep
Do
strRep = InputBox("Introduzca un nmero > 100")
Loop While (Not IsNumeric(strRep) Or strRep <= 100)
End Sub
Sintaxis 3
Las instrucciones se ejecutan hasta que la condicin toma el valor True (mientras que la
condicin devuelva el valor False).
Do Until <Condicin>
<Instrucciones>
Loop
Sintaxis 4:
Las instrucciones se ejecutan una primera vez sin condicin y luego hasta que la condicin
devuelva el valor True.
Do
<Instrucciones>
Loop Until <Condicin>

70 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Ejemplo:
El siguiente cdigo solicita al usuario que escriba un nmero hasta que el valor introducido sea
numrico y mayor que 100.
Sub Introducir_Numero()
Dim strRep
Do
strRep = InputBox("Introduzca un nmero > 100")
Loop Until (IsNumeric(strRep) And strRep > 100)
End Sub
2.6.2 Instruccin While...Wend
Ejecuta una serie de instrucciones en un ciclo mientras se cumple la condicin especificada.
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").Value) Or Not IsNumeric(Range("C9").Value)
Range("C9").Value = InputBox("Introduzca el precio del producto")
Wend
End Sub
2.6.3 Instruccin For...Next
Ejecuta un bloque de instrucciones segn el valor de un contador.
For <contador>=<inicio> To <fin> [Step <incremento>]
<instrucciones>
Next
Ejemplo:
Este procedimiento inserta los totales trimestrales en una matriz de resultados mensuales;
adems, el procedimiento elimina los totales si ya los haba.
71 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Sub Totales_Trimestrales()
Dim nTrim As Integer
Dim i As Integer
Dim Celda As Range
'Inserta los totales trimestrales cada 3 meses,
'los pone en negrita con un borde
nTrim = 1
For i = 5 To 17 Step 4
If Left(Cells(2, i).Value, 4) <> "Trim" Then
Cells(2, i).EntireColumn.Insert
Cells(2, i).Value = "Trim. " & nTrim
nTrim = nTrim + 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 Celda In Range(Cells(2, i), Cells(11, i))
CeldaBorderAround ColorIndex:=1, Weight:=xlThin
Next Celda
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).Value, 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 ColorIndex correspondiente.
Sub Muestra_Colores()
Dim i As Integer
With Sheets("Colores")
For i = 1 To 56
Cells(i, 1).Interior.ColorIndex = i
Cells(i, 2).Value = i
Next i
End With
End Sub

72 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

2.6.4 Instruccin For Each...Next
Ejecuta un bloque de instrucciones para cada elemento de una coleccin de objetos o de un
arreglo.
For Each <elemento> In <Grupo>
<Instrucciones>
Next <elemento>

Ejemplo:
Estos procedimientos aplican un color de letra a las celdas en funcin de su contenido.
Sub Colores_Celda()
Dim ZonaaModificar As Range
Dim Celda As Range

'Aplica un color en funcin del valor de la celda
Set ZonaaModificar = Range("B3:Q11")
For Each Celda In ZonaaModificar
Select Case Celda.Value
Case Is < 1000
Celda.Font.Color = RGB(150, 150, 250)
Case Is < 5000
Celda.Font.Color = RGB(90, 100, 250)
Case Is < 10000
Celda.Font.Color = RGB(10, 20, 250)
Case Is < 20000
Celda.Font.Color = RGB(5, 10, 175)
Case Else
Celda.Font.Color = RGB(5, 5, 100)
End Select
Next
End Sub

2.6.5 Salir de las estructuras de control
La instruccin Exit For permite salir directamente de un ciclo For o For Each, mientras
que Exit Do sale directamente de un ciclo Do. No existe una instruccin para salir de ciclos
WhileWend


73 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

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

2.7 Sentencia With End With
Permite la ejecucin de varias acciones sobre un objeto.
With objeto
<Instrucciones>
End With
Ejemplo:
Sub Paginacion()
'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

74 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Ntese que para hacer referencia a una propiedad o mtodo del objeto dentro una
sentencia With, la instruccin inicia con un punto.

2.8 Reglas de escritura del cdigo
2.8.1 Comentarios
Los comentarios permiten documentar el cdigo VBA para hacerlo ms legible. Se puede usar la
instruccin Rem al inicio de una lnea o un apstrofe (') al inicio o final de la lnea.
REM comentario
'comentario
El editor VBE al validar una lnea de comentario, sta se muestra, por defecto, en verde.
2.8.2 Carcter de continuacin de lnea
Una instruccin VBA puede escribirse en muchas lneas usando un guin bajo "_" precedido de
un espacio.
Ejemplo:
'Pide la introduccin de un precio en tanto que
'est vaco o sea incorrecto

Do While IsEmpty(Precio) Or Not IsNumeric(Precio) _
Or Precio < 50 Or Precio > 500
Precio = InputBox("Escribir un importe comprendido entre " _
& "50 y 500")
Loop
2.8.3 Sangras
Las sangras (o tabulaciones) permiten una mayor legibilidad del cdigo. Es especialmente
importante usarlos en las estructuras de control (sobre todo si hay varias instrucciones If
anidadas) y las estructuras de decisin.
a. Para generar las sangras, use la tecla [Tab].
75 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

b. Para retroceder a la tabulacin precedente, use las teclas [Mays] [Tab].
c. Para modificar el tamao de la tabulacin (cuatro espacios por defecto), seleccione
Opciones en el men Herramientas del editor VBE, haga clic en la ficha Editor y
modifique el valor Ancho de tabulacin.
2.8.4 Nombres de procedimientos, variables y constantes
Los nombres de los procedimientos, constantes, variables y argumentos deben respetar las
siguientes reglas:
El primer carcter debe ser una letra
No se diferencian minsculas de maysculas (se aceptan letras acentuadas), aunque se
respetan unas y otras
No se usan nombres reservados a Visual Basic o palabras clave con restricciones
No se usan el punto, el espacio ni los signos !, $, # y @ como parte del nombre
Un nombre no puede tener ms de 255 caracteres
Para los procedimientos Function, no se usa un nombre igual a una referencia de
celda
No se indican varias veces los mismos nombres de variables y de constantes en un
mismo nivel de alcance.

76 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

3
33.
.. L
LLA
AA P
PPR
RRO
OOG
GGR
RRA
AAM
MMA
AAC
CCI
II
N
NN D
DDE
EE O
OOB
BBJ
JJE
EET
TTO
OOS
SS E
EEN
NN
E
EEX
XXC
CCE
EEL
LL

3.1 Presentacin
VBA Excel es un lenguaje de programacin orientado a objetos, si bien no dispone de todas las
funcionalidades de los lenguajes de este tipo. La mayora de los elementos que maneja Excel
son objetos: los libros, las hojas de clculo, los rangos de celdas, las celdas, etc.
Los objetos se organizan segn un modelo jerrquico: ciertos objetos contienen otros objetos
que pueden, a su vez, contener otros. Estos objetos se llaman contendedores u objetos Parent.
Por ejemplo, el objeto Application es un contenedor de objetos Workbook (libros abiertos
en Excel), que a su vez contiene objetos Worksheet (hojas de clculo de un libro). El
contenedor principal es el objeto Application.
Un conjunto de objetos del mismo tipo constituye una coleccin (coleccin Workbooks:
conjunto de libros abiertos en Excel; coleccin Worksheets: conjunto de hojas de clculo de
un libro).
Un objeto dispone de un conjunto de caractersticas llamadas propiedades (por ejemplo, para el
objeto Application: la propiedad UserName representa el nombre del usuario, la
propiedad Version devuelve el nmero de versin de Microsoft Excel) y de comportamientos
o acciones llamados mtodos (por ejemplo, para el objeto Application, el mtodo
FindFile muestra el cuadro de dilogo Abrir; el mtodo Quit sale de Excel, etc.).
A un objeto le suceden eventos provocados por el usuario (por ejemplo: la apertura de un libro,
un clic en un botn de comando, el cambio de la celda activa, etc.) o por el sistema.
Las clases son modelos que permiten crear objetos de un mismo tipo. Los objetos de una misma
clase heredan sistemticamente todos los mtodos, propiedades y eventos de su clase. Es
posible crear clases de objetos con VBA Excel usando mdulos de clase.

3.2 El modelo de objetos de Excel
Este cuadro permite distinguir los principales objetos y colecciones de objetos de Excel.
77 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


78 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

3.2.1 Objetos y colecciones
La siguiente lista resume la utilidad de los objetos y colecciones del modelo.
3.2.1.1 Objetos
Mtodo Descripcin
Application Objeto que hace referencia a la aplicacin Microsoft Excel activa
AnswerWizard Objeto que representa la ayuda intuitiva de Excel
Assistant
Objeto que representa el Ayudante de Office. Usa la propiedad Visible para
mostrar el Ayudante y la propiedad On para activarlo
AutoCorrect Objeto que contiene los atributos de Autocorreccin de Microsoft Excel
AutoRecover
Objeto que representa las opciones de recuperacin automtica de un libro. Estas
macros son accesibles desde Excel a partir de la ficha Guardar del men
Herramientas - Opciones
CellFormat
Objeto que representa los criterios de bsqueda en el formato de las celdas (se usa
con las propiedades FindFormat y ReplaceFormat del objeto
Application)
Debug
Objeto que muestra los datos en la ventana Inmediato, durante la ejecucin del
cdigo
DefaultWebOptions
Objeto que contiene los atributos usados por Excel para la apertura o grabacin de
una pgina Web
ErrorCheckingOptions
Objeto que contiene las opciones de comprobacin de errores de la aplicacin
Excel
LanguageSettings Objeto que contiene informacin sobre la configuracin de idioma de Excel
Speech
Objeto que contiene los mtodos y propiedades que se relacionan con las
funciones de sntesis de voz
SpellingOptions Objeto que representa las opciones de ortografa de la aplicacin
VBE Objeto que representa Visual Basic Editor
WorkSheetFunction
Objeto que contiene todas las funciones disponibles en Excel. Este objeto permite
obtener el resultado de una funcin aplicada a un rango de celdas

Ejemplo:

Prom = Application.WorksheetFunction.Average(Selection)




79 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

3.2.1.2 Colecciones
Coleccin Descripcin
AddIns
Coleccin que contiene todos los complementos (objetos AddIn). A estos
complementos se llega desde Excel a travs del men Herramientas -
Complementos
COMAddIns Representa los complementos COM actualmente instalados en Microsoft Excel
CommandBars
Coleccin de barras de herramientas de la aplicacin activa (objetos
CommandBar)
Dialogs Coleccin de los cuadros de dilogo integrados de Excel
Names Coleccin de todos los nombres (celdas y rangos con nombre) del libro activo
ODBCErrors
Coleccin de todos los errores ODBC generados por la ltima operacin efectuada
en un informe de tabla dinmica o en una tabla de consulta
OLEDBErrors
Coleccin que representa la informacin relacionada con el error devuelto por la
consulta OLEDB ms reciente
RecentFiles Coleccin de los ltimos archivos usados
SmartTagRecognizers
Coleccin de motores de reconocimientos que devuelven etiquetas inteligentes.
Esta lista es accesible desde Excel a travs de la ficha Etiquetas inteligentes del
men Herramientas - Opciones de Autocorreccin
UsedObjects Coleccin de los objetos usados en Excel
Watches
Coleccin de objetos que representa los rangos de inspeccin cuando la hoja de
clculo es recalculada
Windows Coleccin de todas las ventanas de la aplicacin Excel o de un libro
Workbooks Coleccin de los libros (objeto Workbook) abiertos
Worksheets Coleccin de las hojas de clculo (objeto Worksheet) de un libro

3.3 Principios de uso de los objetos y las
colecciones
3.3.1 Propiedades
Las propiedades sirven para describir un objeto. Ciertas propiedades son de slo lectura y no
pueden, por lo tanto, modificarse con el cdigo VBA.
Sintaxis:
{<objeto> | <variable objeto>}.<propiedad>

80 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Ejemplo:
'Modificacin del puntero del ratn
Application.Cursor = xlWait
'Muestra la versin de la aplicacin Excel activa. Propiedad de slo lectura
MsgBox Application.Version
Application.Cursor = xlDefault
3.3.2 Propiedades que representan objetos
Los objetos globales y los objetos definidos en el cdigo a travs de clases manejadas por VBA
tienen ciertas propiedades cuyo valor se actualiza automticamente por el sistema.
Estas propiedades especficas permiten acceder directamente a ciertos objetos: ventana activa,
libro activo, celdas de la hoja activa, etc. La siguiente tabla muestra las propiedades especficas
ms usadas.
Propiedad Objeto Parent Objeto devuelto
ActiveCell
Application
Window
Objeto Range que representa la primera celda activa de la
ventana activa o especificada.
ActiveChart
Application
Window
Workbook
Objeto Chart que representa el grfico activo.
ActiveControl
Frame
PageUser
Form
Objeto Control que representa el control (ActiveX) activo.
ActiveMenuBar CommandBars
Objeto CommandBar que representa la barra de men activa en
Excel.
ActivePane Window Objeto Pane que representa el panel activo de la ventana activa.
ActiveSheet
Application
Window
Workbook
Objeto Worksheet que representa la hoja activa del libro activo
o del libro especificado.
ActiveWindow Application Objeto Window que representa la ventana activa.
ActiveWorkbook Application Objeto Workbook que representa el libro de la ventana activa.
NextPrevious
Chart
Range
Worksheet
Devuelve respectivamente el prximo (Next) o el anterior
(Previous) objeto de un mismo tipo (Chart, Range o
Worksheet).
Parent Objetos mltiples Devuelve el objeto contenedor.
Selection
Application
Windows
Objeto Range que representa la o las celdas seleccionadas.
ThisCell Application
Devuelve la celda por la que la funcin definida por el usuario es
llamada como objeto Range.
ThisWorkbook Application
Objeto Workbook que representa el libro sobre el que se ejecuta
el cdigo de la macro actual.
81 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Las propiedades especficas que devuelven un objeto Range (Cells, Offset,
Columns, Rows, etc.) se explican en detalle en el captulo 4.
3.3.3 Mtodos
Los mtodos permiten realizar acciones sobre los objetos.
Son similares a los procedimientos:
Pueden usar o no argumentos
Ciertos mtodos pueden devolver un valor como los procedimientos Function, otros no,
como los procedimientos Sub.
Sintaxis de mtodo que no devuelve un valor:
{<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.xls"

Como en el caso de los procedimientos, los distintos argumentos de un mtodo se
separan por comas. Si un argumento opcional no se define explcitamente, el mtodo
usar un valor por defecto.

Sintaxis de mtodo que devuelve un valor
<variable> = {<objeto> | <variable objeto>}.<mtodo>[(<Lista de
argumentos>)]
Ejemplo:
'Muestra el cuadro de dilogo Abrir
Dim strFileName As Variant
82 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

strFileName = Application.GetOpenFilename
(FileFilter:="Libros Excel (*.xlsm), *.xlsm", _
Title:="Seleccione el archivo que desea abrir")
'Si selecciona un archivo, lo abre
If strFileName <> False Then
Workbooks.Open strFileName
End If
3.3.4 Eventos
Un evento es una accin especfica que se realiza sobre un cierto objeto. Microsoft Excel
responde a varios tipos de eventos: apertura o cierre de un libro, seleccin de celdas, agregar
una hoja de clculo, etc. Los eventos resultan generalmente de una accin del usuario.
El uso de un procedimiento asociado a eventos le permite definir su propio cdigo como
respuesta a un evento que se produce en un libro, una hoja o un formulario.
Ejemplo:
Cuando se agrega una nueva hoja de clculo al libro, aparece un mensaje para el usuario.


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 Excel; el captulo 8 est ntegramente dedicado a este tema.

83 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

3.3.5 Colecciones
Para hacer referencia a un objeto de una coleccin, puede usarse alguna de las siguientes
sintaxis:
NomColeccin!NomObjeto
NomColeccin![NomObjeto]
NomColeccin("NomObjeto")
NomColeccin(var)
NomColeccin(index)
donde var representa una variable de tipo String que contiene el nombre del objeto,
index representa el nmero del ndice del objeto en la coleccin.
Para asegurar una mejor legibilidad del cdigo, se aconseja usar siempre la misma sintaxis. Las
sintaxis tercera y quinta se recomiendan porque permiten activar el asistente del editor de
cdigo. Adems, la quinta sintaxis es ms til para recorrer los objetos de una coleccin.
Atencin: el primer elemento de la mayora de las colecciones lleva el ndice 1. Use los
ndices solamente para recorrer una coleccin. Evite, por ejemplo, usar
ActiveWorkbook.ActiveSheet(3) para hacer referencia a una hoja de clculo
del libro activo, ya que el ndice de la hoja puede cambiar (si mueve las hojas o si elimina
alguna).
Ejemplo:
El siguiente cdigo activa la hoja de clculo Hoja1 del libro Presupuesto.xls. El cdigo usa las
colecciones Workbooks y Worksheets.
Workbooks("Presupuesto.xls").Worksheets("Hoja1").Activate
'o tambin se puede usar la instruccin
Workbooks![Presupuesto.xls].Worksheets!Hoja1.Activate
'o tambin se puede usar la instruccin
Workbooks![Presupuesto.xls].Worksheets![Hoja1].Activate
Recorrer una coleccin: este cdigo cambia el nombre de las hojas de clculo del libro activo.
Dim i As Integer
For i = 1 To ActiveWorkbook.Worksheets.Count
ActiveWorkbook.Worksheets(i).Name = "Presupuesto N " & i
Next i
84 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Una coleccin tambin puede recorrerse con la instruccin For Each Next.
Dim Hoja As Worksheet
For Each Hoja In ActiveWorkbook.Worksheets
Hoja.Name = "Presupuesto N " & Hoja.Index
Next Hoja
3.3.6 Redaccin automtica de instrucciones
El editor VBA incluye una tecnologa que lo ayuda en el empleo de objetos. Cuando usted
escribe el nombre de un 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:
a. Escriba el nombre de la coleccin Workbooks seguido de un punto, aparece la
siguiente lista desplegable.

El icono representa los mtodos, el icono representa las propiedades y las
colecciones.
b. Usted puede hacer avanzar la lista escribiendo las primeras letras del mtodo, propiedad
o coleccin buscada o con la ayuda de la barra de desplazamiento. Para seleccionar un
elemento de la lista, haga doble clic sobre l.
85 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

c. Escriba un punto si acaba de seleccionar un objeto para ver la lista de sus propiedades y
mtodos. Si selecciona un mtodo, escriba un espacio para obtener la lista de
configuracin del mtodo.
d. Para seguir este ejemplo, seleccione el mtodo Open, y luego escriba un espacio.

Aparecer una lista con los argumentos del mtodo. Los argumentos opcionales
aparecen entre corchetes. El argumento actual se ver en negrita. Si para un argumento
dado existe una lista de valores predefinidos, aparecer una lista desplegable con las
constantes correspondientes.
Tambin puede activar la lista de propiedades y mtodos de la siguiente manera:
a. Ubique el cursor detrs del punto situado despus del mtodo.
b. Haga un clic derecho para hacer aparecer el men contextual.
c. Seleccione la opcin Lista de propiedades y mtodos.
86 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.



3.4 Instrucciones usadas con los objetos
3.4.1 La instruccin With
La instruccin With permite acceder varias veces al mismo objeto, indicndolo una sola vez.
Ofrece varias ventajas:
Optimizacin del tiempo de ejecucin del cdigo
Ganar tiempo en la escritura del cdigo
Mejor legibilidad del cdigo.
Sintaxis:
With <Objeto>
<cdigo que usa los mtodos y propiedades>
<que se relacionan con el objeto>
End With

87 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Ejemplo:
Agregar y modificar una hoja de clculo.
With ActiveWorkbook
'Crea una hoja despus de la ltima hoja del libro activo
'Ntese que se omite el primer argumento del mtodo Add: Before
.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").Value = "Revisin del Presupuesto"
End With
End With
3.4.2 La instruccin For Each...Next
La instruccin For Each... Next permite recorrer los objetos de una coleccin o de un
arreglo.
Sintaxis:
For Each <elemento> In <grupo>
<secuencia de instrucciones>
[Exit For]
<secuencia de instrucciones>
Next <elemento>
Ejemplo:
Modificacin del contenido de la celda A1 y de la cantidad de hojas del libro activo.
Sub NumPresupuesto()
Dim Hoja As Worksheet

For Each Hoja In ActiveWorkbook.Worksheets
Hoja.Cells(1, 1).Value = "PRESUPUESTO N " & Hoja.Index
Hoja.Name = "Presupuesto " & Hoja.Index
Next Hoja
End Sub

88 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

3.4.3 La instruccin If TypeOf
La instruccin If TypeOf permite comprobar el tipo de un objeto.
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
...
End If
...
3.4.4 La instruccin Set
La instruccin Set permite atribuir la referencia de un objeto a una variable, llamada variable
objeto.
Esta instruccin puede usarse para crear un nuevo objeto (usando en ese caso un mtodo que
permita crear el objeto) o para hacer referencia a un objeto ya existente.
Sintaxis:
Set <VarObjeto> = [New] <expresin objeto>
Set <VarObjeto> = Nothing
<VarObjeto>: es una variable que contendr el objeto que hay que crear.
La palabra clave New: permite crear una nueva instancia de la clase. Si la variable
<VarObjeto> contiene una referencia a un objeto, esta ltima es abandonada.
<expresin objeto>: puede ser el nombre de un objeto o de una variable objeto del
mismo tipo, o sea, una funcin o mtodo que devuelva un objeto del mismo tipo.
89 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Nothing: reinicializa la variable objeto y libera el conjunto de recursos del sistema y la
memoria asociadas al objeto.
Ejemplo:
Creacin de un libro con dos hojas y asignacin de un nombre a cada una de ellas.
Dim Libro As Workbook
Dim i As Integer

'Creacin de un nuevo libro
Set Libro = Application.Workbooks.Add

'Eliminar las hojas a partir de la tercera
With Libro
For i = 3 To .Worksheets.Count
.Worksheets(i).Delete
Next i

'Asignar los nombres a las hojas 1 y 2
.Worksheets(1).Name = "Ventas Ao 2006"
.Worksheets(2).Name = "Ventas Ao 2007"
.SaveAs "C:\Ventas\Histrico"
End With
Modificar una hoja en un libro abierto.
Dim Libro As Workbook
Dim Hoja As Worksheet

Set Libro = Application.Workbooks![Histrico.xls]
Set Hoja = Libro.Worksheets![Ventas Ao 2007]
With Hoja
.Name = "Ventas 2007"
.Range("A2").Value = "Ventas del ao 2007"
End With
Set Hoja = Nothing

3.5 El Examinador de objetos
3.5.1 Presentacin
Dada la cantidad y diversidad de objetos Excel, es til poder encontrar la informacin que se
relaciona con los distintos objetos.
90 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

El Examinador de objetos muestra la informacin relativa a los objetos, mtodos, propiedades,
eventos y constantes. Se puede obtener el Examinador de objetos de distintas maneras:
Men Icono barra de herramientas Teclado
Ver Examinador de objetos
(barra de herramientas Estndar)
[F2]


1. Lista de bibliotecas actualmente cargada.
2. Texto buscado: objeto, propiedad, coleccin, evento, mtodo, etc.
3.
Resultado 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 Resultado aparece
remarcada.
5.
Propiedades (icono , mtodos, (icono , eventos (icono ) y constantes (icono ) se
relacionan con la clase de objeto seleccionada o remarcada en la lista de la izquierda.
6. Detalle del elemento seleccionado.
91 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

3.5.2 Bsqueda en el Examinador de objetos
Para hacer una bsqueda en el Examinador de objetos, proceda de la siguiente manera:
a. Indique la palabra buscada en la segunda lista desplegable.
b. Haga clic en el icono . Si la ventana Resultados muestra muchas lneas, desplcese
hasta la que le interese; la parte inferior de la ventana se actualizar.
92 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


4
44.
.. O
OOB
BBJ
JJE
EET
TTO
OOS
SS D
DDE
EE E
EEX
XXC
CCE
EEL
LL

4.1 El objeto Application
El objeto Application representa la aplicacin Microsoft Excel activa. Es el objeto por
defecto y, por lo tanto, es generalmente opcional (ejemplo: Version equivale a
Application.Version).
Este objeto contiene:
a. Las propiedades relativas al entorno Excel (opciones de Excel, etc.) y a la presentacin
de la interfaz (puntero del ratn, texto de la barra de estado, tamao y estado de la
ventana de la aplicacin, etc.),
b. Distintos mtodos para realizar acciones en el entorno Excel,
c. Propiedades que devuelven objetos y colecciones de primer nivel (objetos y colecciones
del modelo de objetos Excel: Workbooks, Charts, etc.),
d. Propiedades especficas que hacen referencia directa a objetos: ActiveCell,
ActiveSheet, ActiveWindow, etc.
Las propiedades que hacen referencia a objetos se explican en el captulo anterior.

4.1.1 Propiedades que representan las opciones de Excel
Las principales opciones de Excel pueden ser devueltas o definidas a partir de propiedades del
objeto Application. La mayora de estas propiedades son de lectura y escritura.
Para acceder a las opciones Excel en la versin 2007, haga clic en el botn Microsoft
Office y luego en el botn Opciones de Excel (situado en la parte inferior del
cuadro de dilogo).
93 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.1.1.1 Opciones de la categora Ms frecuentes

# Propiedades Valores devueltos
1 ShowSelectionFloaties Boolean
2 EnableLivePreview Boolean
3 ShowDevTools Boolean
4 AlwaysUseClearType Boolean
5 StandardFont. Entero largo
6 StandardFontSize Entero largo
7 SheetsInNewWorkbook Entero largo
8 UserName Cadena de caracteres
94 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.1.1.2 Opciones de la categora Frmulas

# Propiedades Valores devueltos
1 Calculation
Constantes: xlCalculationAutomatic,
xlCalculationManual,
xlCalculationSemiautomatic
2 CalculateBeforeSave Boolean
3 Iteration Boolean
4 MaxIterations Entero largo
5 MaxChange Doble
6 ReferenceStyle Constantes: xlA1, xlR1C1
7 DisplayFormulaAutoComplete Boolean
95 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


8 GenerateTableRefs
Constantes: xlGenerateTableRefStruct,
xlGenerateTableRefA1
9 GenerateGetPivotData Boolean
4.1.1.3 Opciones de comprobacin de errores
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 para una aplicacin.
# Propiedades Valores devueltos
10 BackgroundChecking Boolean
11 IndicatorColorIndex
Constante xlColorIndex
12 EvaluateToError Boolean
13 InconsistentTableFormula Boolean
14 TextDate Boolean
15 NumberAsText Boolean
16 InconsistentFormula Boolean
17 OmittedCells Boolean
18 UnlockedFormulaCells Boolean
19 EmptyCellReferences Boolean
20 ListDataValidation Boolean
96 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.1.1.4 Opciones de la categora Revisin

Opciones de revisin ortogrfica:
Las siguientes propiedades dependen de la propiedad SpellingOptions del objeto
Application. Esta propiedad devuelve un objeto SpellingOptions, que representa las
opciones de revisin ortogrfica para una aplicacin.
# Propiedades Valores devueltos
1 IgnoreCaps Boolean
2 IgnoreMixedDigits Boolean
3 IgnoreFileNames Boolean
4 GermanPostReform Boolean
5 SuggestMainOnly Boolean
6 ArabicModes
Constante xlArabicModes
7 DictLang Entero largo
97 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.1.1.5 Opciones de la categora Guardar

# Propiedades Valores devueltos
1 DefaultSaveFormat
Constante xlFileFormat
2 AutoRecover.Time Entero largo
3 AutoRecover.Path Cadena de caracteres
4 DefaultFilePath Cadena de caracteres
5 EnableAutoRecover Boolean

La opcin 5 se aplica al libro activo (Application.ActiveWorkbook).
98 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.1.1.6 Opciones de la categora Avanzadas

# Propiedades Valores devueltos
1 MoveAfterReturn Boolean
2 MoveAfterReturnDirection
Constantes xlDown, xlUp,
xltoRight, xltoLeft
3 FixedDecimal Boolean
4 FixedDecimalPlaces Entero largo
5 CellDragAndDrop Boolean
6 AlertBeforeOverwriting Boolean
7 EditDirectlyInCell Boolean
8 ExtendList Boolean
99 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

9 AutoPercentEntry Boolean
10 EnableAutoComplete Boolean
11 RollZoom Boolean
12 EnableLargeOperationAlert Boolean
13 LargeOperationCellThousandCount Entero largo
14 UseSystemSeparators Boolean
15 DecimalSeparator Cadena de caracteres
16 ThousandsSeparator Cadena de caracteres
17 DisplayPasteOptions Boolean
18 DisplayInsertOptions Boolean
19 CopyObjectsWithCells Boolean
20 HighQualityModeForGraphics Boolean

100 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


# Propiedades Valores devueltos
1 RecentFiles.Maximum Entero largo
2 DisplayFormulaBar Boolean
3 ShowWindowsInTaskbar Boolean
4 DisplayFunctionToolTips Boolean
5 ShowChartTipNames Boolean
6 ShowChartTipValues Boolean
7 DisplayCommentIndicator
Constantes xlNoIndicator,
xlIndicatorOnly,
xlCommentAndIndicator

101 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Las siguientes propiedades dependen de la propiedad ActiveWindow del objeto
Application. Esta propiedad devuelve un objeto Window que representa la ventana activa.
# Propiedades Valores devueltos
8 DisplayHorizontalScrollBar Boolean
9 DisplayVerticalScrollBar Boolean
10 DisplayWorkbookTabs Boolean
11 AutoFilterDateGrouping Boolean
12 DisplayHeadings Boolean
13 DisplayFormulas Boolean
14 DisplayPageBreaks Boolean
15 DisplayZeros Boolean
16 DisplayOutline Boolean
17 DisplayGridlines Boolean
18 GridlineColorIndex
Constante xlColorIndex

102 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


# Propiedades Valores devueltos
1 MultiThreadedCalculation.Enabled Boolean
2 MultiThreadedCalculation.ThreadMode
Constantes
xlThreadModeAutomatic
xlThreadModeManual
3 MultiThreadedCalculation.ThreadCount Entero
4 SaveLinkValues Boolean
5 PrecisionAsDisplayed Boolean
6 Date1904 Boolean
7 UpdateRemoteReferences Boolean
8 EnableSound Boolean
9 EnableAnimations Boolean
103 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

10 IgnoreRemoteRequests Boolean
11 AskToUpdateLinks Boolean
12 WarnOnFunctionNameConflict Boolean
13 MapPaperSize Boolean
14 AltStartupPath Cadena de caracteres
15 TransitionMenuKey Cadena de caracteres
16 TransitionNavigKeys Boolean
17 TransitionExpEval Boolean
18 TransitionFormEntry Boolean

Las opciones 4 a 7 se aplican al libro activo (Application.ActiveWorkbook) y las
opciones 17 y 18, a la hoja activa (Application.ActiveSheet)
4.1.2 Propiedades relativas a la presentacin de la aplicacin
Propiedad Tipo Descripcin
Height Real doble Altura de la ventana
Left Real doble
Distancia entre el borde izquierdo de la
pantalla y el borde izquierdo de la ventana
principal de Microsoft Excel
Top Real doble
Distancia entre el borde superior de la pantalla
y el borde superior de la ventana principal de
Microsoft Excel
Width Real doble
Distancia entre los bordes izquierdo y derecho
de la ventana de la aplicacin
Caption Cadena de caracteres
Nombre mostrado en la barra de ttulos de la
ventana Microsoft Excel
Cursor
Constantes:
xlDefault: Puntero por defecto
xlIBeam: Puntero en I
xlNorthwestArrow: Flecha Noroeste
xlWait: Reloj de arena
Aspecto del puntero del ratn en Excel
DisplayFullScreen Boolean
Indica si Excel funciona en modo de pantalla
completa
FormulaBarHeight Entero largo
Altura, en nmero de lneas, de la barra de
frmulas
ShowMenuFloaties Boolean
Indica si las minibarras de herramientas deben
aparecer cuando el usuario hace un clic
derecho en la ventana del libro
StatusBar Cadena de caracteres Texto de la barra de estado
Visible Boolean
Indica si la ventana principal de la aplicacin
est visible
104 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.1.3 Propiedades diversas
Propiedad Tipo Descripcin
AutoFormatAsYouTypeReplaceHyperlinks Boolean
Indica si Excel convierte en
hipervnculos las rutas de
Internet de forma automtica
a medida que se las escribe
AutomationSecurity
Constantes:
msoAutomationSecurityByUI
msoAutomationSecurityForceDisable
msoAutomationSecurityLow
Modo de seguridad que
emplea Microsoft Excel al
abrir archivos con macros
ActivePrinter Cadena de caracteres
Nombre de la impresora
activa
CalculationInterruptKey
Constantes: xlAnyKey, xlEscKey,
xlNoKey
Indica la tecla que puede
interrumpir el reclculo en
Microsoft Excel
CalculationState
Constantes: xlCalculating, xlDone,
xlPending
Indica el estado de clculo de
la aplicacin, para el reclculo
en curso en Microsoft Excel
ClipboardFormats Variant
Devuelve una matriz que
contiene los formatos que se
encuentran en el
portapapeles
CutCopyMode
Constantes:
False: No est en modo Cortar ni Copiar
xlCopy: Est en modo Copiar
xlCut: Est en modo Pegar
Devuelve o define el estado
del modo Cortar o Copiar
DataEntryMode
Constantes:
xlOn: Modo de entrada de datos activado
xlOff: Modo de entrada de datos
desactivado
xlStrict: Modo de entrada de datos
activado y tecla [Escape] desactivada
Devuelve o define el modo de
entrada de datos
DisplayAlerts Boolean
Muestra (si tiene el valor
True) u oculta los mensajes
de alerta cuando se ejecuta
una macro
EnableCancelKey
Constantes:
xlDisabled: no se interrumpe
xlInterrupt: interrumpe el
procedimiento en cursoy pasa al modo
Depurar
xlErrorHandler: en caso de
interrupcin, el procedimiento genera un
Controla la forma en que
Microsoft Excel trata la
manera en que el usuario
interrumpe el procedimiento
en curso pulsando la
combinacin de teclas
[Ctrl][Pausa]
105 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

error(cdigo de error 18)
EnableEvents Boolean
Permite desactivar (False)
los eventos del objeto
Application
FindFormat
Devuelve o define los criterios
de bsqueda para el tipo de
formato de celda que hay que
encontrar
GenerateGetPivotData Boolean
Indica si Excel puede obtener
datos de un informe de tabla
dinmica
Hinstance Entero largo
Devuelve el controlador de
instancia de la instancia que
llama a Microsoft Excel
Hwnd Entero largo
Devuelve un objeto que
designa el identificador de
ventana superior de la
ventana Microsoft Excel
MapPaperSize Boolean
Indica si los documentos se
ajustan automticamente
cuando cambia el tamao de
papel
MouseAvailable Boolean
Indica si hay un ratn
disponible
OrganizationName Cadena de caracteres Nombre de la empresa
PreviousSelections Variant
Devuelve una matriz de
objetos Range que contiene
los ltimos cuatro rangos
seleccionados
RecordRelative Boolean
True si las macros se graban
usando referencias relativas
ReplaceFormat Boolean
Establece los criterios de
reemplazo que se emplean
para sustituir formatos de
celda (se usa con la propiedad
FindFormat)
TemplatesPath Cadena de caracteres
Ruta de acceso local de la
carpeta donde estn
guardadas las plantillas
Version Cadena de caracteres
Nmero de versin de la
aplicacin Excel activa


106 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.1.4 Mtodos del objeto Application
4.1.4.1 Mtodos que actan sobre las frmulas y clculos
Mtodo Descripcin
Calculate Fuerza un clculo de los datos para todos los libros abiertos
CalculateFull Fuerza un reclculo completo de los datos en todos los libros abiertos
CalculateFullRebuild
Para todos los libros abiertos, fuerza un reclculo completo de los datos y vuelve a
establecer las dependencias
CheckAbort Detiene el reclculo
ConvertFormula
Convierte las referencias de celda en una frmula pasando del estilo de referencia
A1 al estilo R1C1
Evaluate
Calcula la expresin pasada como argumento y devuelve el resultado. La expresin
debe corresponder a una frmula en ingls

4.1.4.2 Mtodos que actan sobre las celdas
Mtodo Descripcin
DoubleClick Equivale a hacer doble clic sobre la celda activa
GoTo
Selecciona un rango o un procedimiento Visual Basic en cualquier libro y activa ese
mismo libro si no lo est
Intersect Devuelve un objeto Range que representa la interseccin de dos o ms rangos
Union Devuelve la unin de al menos dos rangos

4.1.4.3 Mtodos que actan sobre las listas personalizadas
Mtodo Descripcin
AddCustomList Agrega una lista personalizada
DeleteCustomList Elimina una lista personalizada
GetCustomListContents Devuelve una lista personalizada (matriz de cadena de caracteres)
GetCustomListNum
Devuelve el nmero de la lista personalizada correspondiente a una matriz de
cadena de caracteres

4.1.4.4 Mtodos que muestran los cuadros de dilogo
Los mtodos GetOpenFileName, GetSaveAsFileName, FindFile e InputBox se
explican en el captulo 5, titulado "Los cuadros de dilogo".
107 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.1.4.5 Mtodos relacionados con las acciones en Excel
Mtodo Descripcin
ExecuteExcel4Macro Ejecuta una funcin macro Microsoft Excel 4.0, y devuelve su resultado
OnKey
Ejecuta un procedimiento especificado cuando el usuario pulsa una tecla o una
combinacin de teclas
OnRepeat
Define el comando del men Repetir y el nombre del procedimiento ejecutado al
seleccionar la opcin Repetir (men Edicin) despus de la ejecucin del
procedimiento que define esta propiedad
OnTime Programa la ejecucin de un procedimiento en un momento determinado
OnUndo
Define el texto de la opcin de men Deshacer y el nombre del procedimiento
ejecutado cuando se selecciona la opcin Deshacer (men Edicin) despus de la
ejecucin del procedimiento que define esta propiedad
Quit Sale de Microsoft Excel
Repeat Repite la ltima operacin ejecutada desde la interfaz de usuario
SaveWorkspace Guarda el rea de trabajo en curso
SendKeys Simula la pulsacin de teclas en la aplicacin activa
Undo Deshace la ltima operacin realizada desde la interfaz de usuario
RecordMacro Graba el cdigo si se activa el grabador de macros
Run Ejecuta un procedimiento o llama a una funcin
Wait
Hace una pausa en la ejecucin de la macro hasta un momento especificado.
Devuelve el valor True cuando llega la hora especificada

4.1.4.6 Mtodos relativos al correo
Mtodo Descripcin
MailLogon
Se conecta y abre una sesin de correo MAPI o de Microsoft Exchange. Si Microsoft
Mail no se est ejecutando an, se debe usar este mtodo para establecer una
sesin de correo para permitir el uso de funciones de distribucin de documentos
o de mensajes
MailLogoff Cierra una sesin de correo MAPI abierta por Microsoft Excel

4.1.4.7 Mtodos relativos al protocolo DDE
Estos mtodos (DDEExecute, DDEInitiate, etc.) se explican en el captulo 10 - Vnculos
entre aplicaciones.

108 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.1.4.8 Otros mtodos
Mtodo Descripcin
ActivateMicrosoftApp
Activa una aplicacin Microsoft. Si sta ya est en ejecucin, el mtodo la activa. Si
no lo est, el mtodo abre una nueva instancia de la aplicacin
CentimetersToPoints Convierte centmetros en puntos (un punto equivale a 0,035 centmetros)
CheckingSpelling
Comprueba la ortografa de una palabra y devuelve True si la palabra se encontr
en uno de los diccionarios
DisplayXMLSourcePane
Abre el panel de tareas Office XML Source y muestra la asignacin XML
especificada por el argumento XmlMap
Help Muestra un tema de ayuda
InchesToPoints Convierte pulgadas en puntos
MacroOptions Opciones del cuadro de dilogo Opciones de macro
RegisterXLL
Carga un recurso de cdigo XLL y registra automticamente las funciones y
comandos que contiene
Volatile
Define una funcin personalizada como voltil. Una funcin voltil se recalcula
cada vez que se realiza un clculo en cualquier celda de la hoja de clculo

4.1.5 Ejemplos de cdigos que usan el objeto Application
a. Modificacin de la interfaz de Excel
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 2007"
'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


109 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

b. Creacin de una lista personalizada
Dim i As Integer
Dim NumList As Integer
Dim TabList As Variant

With Application
'Crea la lista personalizada
.AddCustomList Array("Este", "Norte", "Oeste", "Sur", "Centro")
'Obtiene el nmero de la lista personalizada y luego su contenido
NumList = .GetCustomListNum(Array("Este", "Norte", _
"Oeste", "Sur", "Centro"))
TabList = .GetCustomListContents(NumList)
'Muestra el contenido de la lista en columna
For i = LBound(TabList, 1) To UBound(TabList, 1)
Cells(i, 1).Value = TabList(i)
Next i
End With
c. Seleccin de columnas no consecutivas
Dim MultipleRange As Range
'Crea un objeto Range formado por las columnas 1,3 y 5
Set MultipleRange = Application.Union(Cells(1, 1), Cells(1, 3), _
Cells(1, 5)).EntireColumn
'Pone en negrita las celdas y las selecciona
MultipleRange.Font.Bold = True
MultipleRange.Select
d. Evaluacin del resultado de una frmula
Este ejemplo calcula el promedio y el valor mximo de un rango de celdas que contiene notas.
Las notas se comparan, a continuacin, con estos valores y se agrega un comentario para cada
una.
Sub Evaluacion()
Dim dProm As Double
Dim dMax As Double
Dim Notas As Name
Dim Celda As Range
'Selecciona del rango de celdas llamado Notas
Set Notas = ThisWorkbook.Names("Notas")
Notas.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 Celda In Selection
With Celda
Select Case .Value
110 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Case Is = dMax
.AddComment "El mejor"
Case Is < dProm
.AddComment "Menor al promedio"
Case Else
.AddComment "Mayor o igual al promedio"
End Select
End With
Next Celda
End Sub



4.2 Objeto Workbook
Este objeto representa un libro Microsoft Excel. El objeto Workbook es un miembro de la
coleccin Workbooks.
El objeto es devuelto por las siguientes propiedades del objeto Application:
Workbooks
ActiveWorkbook
ThisWorkbook
111 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


4.2.1 Objetos y colecciones
4.2.1.1 Objetos
Objeto Descripcin
SmartTagOptions Objeto que representa las opciones relativas a las etiquetas inteligentes
Theme Objeto que representa el tema aplicado al libro
VBProject Objeto que representa el proyecto Visual Basic asociado a un libro
WebOptions Opciones relativas a la grabacin y apertura de una pgina Web
112 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.2.1.2 Colecciones
Coleccin Descripcin
BuiltinDocumentProperties
Coleccin de las propiedades (autor, ttulo, objeto, palabras clave, etc.) del
libro
Charts Coleccin de los grficos de un libro
Connections Coleccin de las conexiones a orgenes de datos para el libro
CustomDocumentProperties Coleccin de las propiedades de un libro (ttulo, autor, comentarios, etc.)
CustomViews Coleccin de las vistas personalizadas de un libro
Names Coleccin de los rangos con nombre de un libro
PublishObjects
Coleccin de los elementos de un libro grabado como pgina Web y que
pueden ser actualizados
Styles Coleccin de los estilos de un libro
TableStyles Coleccin de los distintos estilos aplicables a una tabla
Windows Coleccin de las ventanas de la aplicacin Excel
Worksheets Coleccin de las hojas de clculo de un libro
XmlMaps
Coleccin de los objetos XmlMap que se han agregado a un libro. Estos
objetos se usan para administrar la relacin entre los rangos de lista y los
elementos de un esquema XML
XmlNamespaces
Coleccin de los espacios de nombres XML contenidos en el libro
especificado

4.2.2 Propiedades
4.2.2.1 Propiedades relativas a la actualizacin y grabado de libros
Propiedad Tipo Descripcin
CreateBackup Boolean
Indica si se crea una copia de seguridad cuando se graba el
archivo
EnableAutoRecover Boolean Activa o desactiva la opcin Autorrecuperacin
Saved Boolean
Indica si el libro especificado no ha sido modificado despus de
la ltima grabacin
SaveLinkValues Boolean
Indica si Microsoft Excel guarda los valores de los vnculos
externos con el libro
UpdateLinks Constantes
Parmetro del libro para la actualizacin de los vnculos OLE
incorporados
UpdateRemoteReferences Boolean
Indica si Microsoft Excel actualiza las referencias remotas del
libro


113 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.2.2.2 Propiedades relativas a libros compartidos
Propiedad Tipo Descripcin
AutoUpDateFrequency Entero largo
Devuelve o define el tiempo, en minutos, entre
dos actualizaciones automticas en el libro
compartido. Si esta propiedad recibe el valor 0,
la actualizacin solamente se hace al guardar el
libro
AutoUpDateSaveChanges Boolean
Indica si las modificaciones realizadas al libro
compartido se transmiten a los otros usuarios
cuando el libro es actualizado automticamente
ChangeHistoryDuration Entero largo
Devuelve o establece el nmero de das que se
muestran en el historial de cambios del libro
compartido
ConflictResolution Constantes
Devuelve o define la forma en que se resuelven
los conflictos cuando se actualiza un libro
compartido
HighlightChangesOnScreen Boolean
Indica si las modificaciones en el libro
compartido se resaltan en la pantalla
KeepChangeHistory Boolean
Indica si est habilitado el seguimiento de
cambios en el libro compartido
ListChangesOnNewsheet Boolean
Indica si las modificaciones del libro compartido
se muestran en una nueva hoja de clculo
MultiUserEditing Boolean
Indica si el libro est abierto como una lista
compartida
RevisionNumber Entero largo
Devuelve la cantidad de veces que el libro fue
grabado mientras estaba abierto como lista
compartida
ShowConflictHistory Boolean
Indica si la hoja de clculo Historial de
conflictos est visible en el libro abierto como
lista compartida
UserStatus Variant
Devuelve una matriz de dos dimensiones
indexada a partir de 1, con la informacin de
cada usuario que tenga abierto el libro como
lista compartida
HasPassword Boolean Indica si el libro est protegido con contrasea
Password Cadena de caracteres
Devuelve o define la contrasea necesaria para
abrir el libro
PasswordEncryptionAlgorithm Cadena de caracteres
Devuelve el algoritmo que usa Microsoft Excel
para encriptar las contraseas del libro
PasswordEncryptionProvider Cadena de caracteres
Devuelve el nombre del proveedor del
algoritmo de cifrado que utiliza Microsoft Excel
para encriptar las contraseas del libro
especificado
114 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

PasswordEncryptionKeyLength Entero largo
Indica la longitud de la clave del algoritmo que
utiliza Microsoft Excel para encriptar las
contraseas del libro especificado
PasswordEncryptionFileProperties Boolean
Indica si Microsoft Excel encripta las
propiedades de archivo del libro
ProtectStructure Boolean
Indica si el orden de las hojas de clculo del
libro est protegido
ProtectWindows Boolean Indica si las ventanas del libro estn protegidas
ReadOnly Boolean
Indica si el libro fue abierto en modo de slo
lectura
ReadOnlyRecommanded Boolean
Indica si el libro fue grabado como
recomendado slo lectura
RemovePersonalInformation Boolean
Indica si la informacin personal del libro puede
ser eliminada
VBASigned Boolean
Indica si el proyecto VBA del libro tiene firma
digital
WritePassword Cadena de caracteres
Devuelve o define la contrasea de escritura
para el libro
WriteReserved Boolean Indica si el libro est protegido contra escritura
WriteReservedBy Cadena de caracteres
Indica el nombre del usuario que est
autorizado a sobreescribir el libro

4.2.2.3 Otras propiedades
Propiedad Tipo Descripcin
Colors Variant
Devuelve o define los colores de la paleta del libro. La
paleta tiene 56 entradas, cada una representa un valor
RGB
Date1904 Boolean Indica si el libro usa el sistema de fechas 1904
DefaultPivotTableStyle Variant
Especifica el estilo de tabla de la coleccin
TableStyles que se usa como estilo por defecto
para las tablas dinmicas
DefaultTableStyle Variant
Especifica el estilo de tabla de la coleccin
TableStyles que se usa por defecto
DisplayDrawingObjects Constantes
Devuelve o define la manera en que se muestran las
formas
EnvelopeVisible Boolean
Indica si son visibles el encabezado de composicin de
los mensajes de correo y la barra de herramientas de
sobre
FullNameURLEncoded Cadena de caracteres Nombre del libro, incluye su ruta en el disco
HasVBProject Boolean
Indica si un libro contiene cdigo VBA. Esta propiedad
es especialmente til para determinar si un libro debe
grabarse en un formato que acepte las macros
115 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

IsAddin Boolean Indica si el libro se ejecuta como complemento
PrecisionAsDisplayed Boolean
Indica si los clculos en el libro se realizan usando
solamente los decimales visibles en las celdas
ShowPivotChartActiveFields Boolean
Indica o define si el panel de tareas filtro de grfico
dinmico es visible
ShowPivotTableFieldList Boolean
Indica si la lista de campos de una tabla dinmica puede
mostrarse
TemplateRemoveExtData Boolean
Indica si las referencias de datos externos se eliminan
cuando el libro se graba como plantilla

4.2.3 Lista de mtodos
4.2.3.1 Mtodos que actan directamente sobre los libros
Mtodo Descripcin
AddToFavorites Agrega el libro especificado a la lista de favoritos de la barra de herramientas Web
ApplyTheme Aplica el tema especificado al libro
Close Cierra el libro especificado
DeleteNumberFormat Elimina del libro un formato numrico personalizado
ExportAsFixedFormat Publica un libro en formato PDF o XPS
MergeWorkbook Fusiona, en un libro abierto, los cambios realizados en otro libro
NewWindows Crea una copia de la ventana especificada
OpenDatabase
Abre una base de datos y muestra la informacin en un nuevo libro. Devuelve un
objeto Workbook
Post
Enva el libro especificado a una carpeta pblica. Este mtodo solamente funciona
con un cliente Microsoft Exchange conectado a un servidor Microsoft Exchange
PrintOut Imprime el libro especificado
PrintPreview Muestra la vista preliminar del libro especificado
PurgeChangeHistoryNow Elimina las entradas del registro de cambios del libro especificado
RefreshAll
Actualiza los rangos de datos externos y los informes de tablas dinmicas del libro
especificado
Route Distribuye el libro usando la lista de distribucin activa
Save Guarda las modificaciones del libro especificado
SaveAs
Guarda el libro especificado en otro archivo (equivale a la opcin Guardar como
del men Archivo)
SaveAsCopy
Guarda una copia del libro activo en un nuevo archivo sin modificar el libro abierto
en la memoria
UpdateFromFile
Actualiza un libro de slo lectura a partir de la versin del libro grabado en el disco,
si esta versin es ms reciente que la copia del libro cargado en memoria. Si la
copia del disco no fue modificada despus que cargar el libro en memoria, la copia
del libro residente en memoria no se recarga

116 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.2.3.2 Mtodos relativos a la seguridad
Mtodo Descripcin
ChangeFileAccess
Modifica los permisos de acceso al libro que puede implicar la necesidad de cargar,
desde el disco, una versin actualizada
LockServerFile Bloquea el libro en el servidor para evitar su modificacin
Protect Protege el libro especificado para que no pueda modificarse
ProtectSharing Graba el libro e impide que sea compartido
UnProtect Quita la proteccin del libro especificado
UnprotectSharing Desactiva la proteccin que impide compartir el libro y lo graba

4.2.3.3 Mtodos relativos a libros compartidos
Mtodo Descripcin
AcceptAllChanges Acepta todas las modificaciones hechas al libro compartido especificado
CanCheckIn
Devuelve una variable Boolean que indica si Excel puede extraer un libro
especificado desde un servidor
ExclusiveAccess
Atribuye al usuario actual un acceso exclusivo al libro abierto como lista
compartida
HighlightChangesOptions Controla cmo se muestran los cambios en un libro compartido
RejectAllChanges Impide los cambios sobre el libro compartido especificado
RemoveUser Desconecta el usuario especificado del libro compartido

4.2.3.4 Mtodos relacionados con datos vinculados
Mtodo Descripcin
BreakLink
Convierte las frmulas vinculadas a otros orgenes Microsoft Excel u orgenes OLE
en valores
ChangeLink Modifica un vnculo entre dos documentos
EnableConnections Activa las conexiones de datos en un libro
FollowHyperlink
Muestra un documento de la cach, si ya ha sido transferido a la mquina local. De
lo contrario, este mtodo resuelve el hipervnculo, transfiere el documento destino
a la mquina local y muestra el documento en la aplicacin apropiada
LinkInfo Devuelve informacin acerca de la fecha y el estado de actualizacin del vnculo
LinkSources
Devuelve una matriz de vnculos al libro. Los nombres de la matriz son los nombres
de los documentos vinculados, ediciones o servidores DDE u OLE. Este mtodo
devuelve Empty si no hay vnculos en el libro
OpenLinks Abre los documentos origen de uno o ms vnculos
OpenXml Abre un archivo XML en un nuevo libro. Devuelve un objeto Workbook
ReloadAs
Vuelve a cargar un libro basado en un documento HTML usando la codificacin de
documentos especificada
SetLinkOnDate
Define el nombre de un procedimiento ejecutado a cada actualizacin de un
vnculo DDE
117 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

UpdateLink Actualiza uno o ms vnculos Microsoft Excel, DDE o OLE
WebPagePreview
Muestra la vista previa del libro especificado, tal como se vera al ser guardado
como pgina Web

4.2.3.5 Mtodos relativos al envo de libros
Mtodo Descripcin
SendFaxOverInternet Enva una hoja de clculo como fax a los destinatarios especificados
SendMail Enva un mensaje de correo electrnico con el libro especificado
SendForReview
Enva un mensaje de correo electrnico con el libro que hay que revisar a los
destinatarios especificados
EndReview
Termina la revisin de un archivo enviado para este fin con el mtodo
SendForReview
ReplyWithChanges
Enva un mensaje de correo electrnico al autor de un libro enviado para revisin y
le informa de que la revisin ha sido realizada

4.2.4 Ejemplos de cdigos que usan el objeto Workbook
Para probar estos ejemplos, debe crear un directorio C:\Ventas con la base ejemplo de Access
Northwind.mdb.
a. Creacin de un libro Excel
El siguiente ejemplo permite:
Cerrar todos los libros abiertos excepto el libro activo.
Crear un nuevo libro.
Proteger el libro con contrasea.
Agregar el libro a la lista de Favoritos.
Grabar y cerrar el libro.
Private Sub NuevoLibro()
Dim Libro As Workbook
Dim i As Integer
Dim j As Integer

'Cierra los libros (excepto el libro activo) y guarda los cambios
For Each Libro In Workbooks
If Libro.Name <> ThisWorkbook.Name Then
118 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Libro.Close True
End If
Next Libro

'Crea un nuevo libro
Set Libro = Application.Workbooks.Add
With Libro
'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
b. Importar una base de datos y exportarla al formato HTML
El siguiente ejemplo muestra cmo:
Abrir la tabla Clientes del archivo "Northwind 2007.accdb" en un nuevo libro.
Exportar esta informacin en un archivo HTML.
Abrir el archivo HTML.
Sub CreaHTMLFile()
Dim Libro As Workbook

'Importa la tabla Clientes de la base Access Northwind 2007
'en un nuevo libro
Set Libro = Workbooks.OpenDatabase _
(Filename:=ThisWorkbook.Path & "\Northwind 2007.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. Mostrar las propiedades de un libro
Este ejemplo muestra los nombres y valores de las diferentes propiedades del libro. Algunas de
estas propiedades son accesibles al hacer un clic en el botn Microsoft Office, luego seleccionar
Preparar, y despus Propiedades.
119 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


Sub Propiedades()
Dim i As Integer
Dim m_ObjProp As Object
'Muestra la lista de propiedades del libro
i = 1
For Each m_ObjProp In ThisWorkbook.BuiltinDocumentProperties
On Error Resume Next
ActiveSheet.Cells(i, 2).Value = m_ObjProp.Value
ActiveSheet.Cells(i, 1).Value = m_ObjProp.Name
i = i + 1
Next
End Sub
d. Exportar un libro al formato pdf
Para ejecutar este cdigo, debe previamente ejecutar el programa de instalacin del
complemento Excel SaveAsPDFandXPS.exe (este programa se entrega con los ejemplos).
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
End Sub

120 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.3 El objeto Worksheet
Este objeto representa una hoja de clculo Excel. El objeto Worksheet es un miembro de la
coleccin WorkSheets del objeto Workbook.
Este objeto es devuelto por las siguientes propiedades del objeto Application:
Worksheets
ActiveSheet


121 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.3.1 Objetos y colecciones
4.3.1.1 Objetos
Objeto Descripcin
AutoFilter Objeto que representa el autofiltro de la hoja de clculo especificada
Cells Objeto Range que representa todas las celdas de la hoja de clculo especificada
OutLine Objeto que representa el esquema de la hoja de clculo especificada
PageSetup
Objeto que representa las opciones de configuracin de pgina de la hoja de
clculo especificada
Protection
Objeto que representa las opciones de proteccin para la hoja de clculo
especificada. Estas opciones son accesibles en Excel a travs del men
Herramientas - Proteccin - Proteger hoja
Range Objeto que representa una celda o un rango de celdas (una fila, una columna, etc.)
Sort Objeto que representa el ordenamiento de un rango de datos
Tab Objeto que representa la ficha de la hoja de clculo especificada

4.3.1.2 Colecciones
Coleccin Descripcin
ChartObjects Coleccin de los grficos incrustados en la hoja de clculo especificada
Comments Coleccin de todos los comentarios de celda de la hoja de clculo especificada
CustomProperties
Coleccin de objetos CustomProperty que representa la informacin
complementaria (metadatos para XML o etiquetas inteligentes).
HPageBreaks
Coleccin de los saltos de pgina horizontales en la zona de impresin de la
hoja especificada
Hyperlinks Coleccin de los hipervnculos de la hoja de clculo especificada
ListObjects Coleccin de las listas de la hoja de clculo especificada
Names
Coleccin de los rangos de celdas con nombre de la hoja de clculo
especificada
OLEObjects
Coleccin de los objetos ActiveX y objetos OLE vinculados o incrustados en la
hoja de clculo especificada
PivotTables Coleccin de los informes de tabla dinmica de la hoja de clculo especificada
QueryTables
Coleccin de las tablas de hoja de clculo creadas a partir de datos enviados
desde un origen de datos externo
Scenarios Coleccin de los escenarios de la hoja de clculo especificada
SmartTags
Coleccin de las etiquetas inteligentes asociadas a las celdas de la hoja de
clculo
VPageBreaks
Coleccin de los saltos de pgina verticales en la zona de impresin de la hoja
especificada


122 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.3.2 Propiedades
Propiedad Tipo Descripcin
AutoFilterMode Boolean
Indica si las flechas del men desplegable de los autofiltros
aparecen en la hoja de clculo especificada
ConsolidationFunction
Constante (xlMax,
xlMin, xlSum, etc.).
Devuelve la funcin usada para la consolidacin actual
ConsolidationOptions

Matriz de Boolean que representa las opciones relativas a
la consolidacin (rtulos en la fila superior, rtulos en la
columna izquierda, vnculos con los datos de origen)
ConsolidationSources

Matriz de cadenas de caracteres que contiene los nombres
de las hojas origen para la consolidacin actual de la hoja
de clculo especificada
DisplayPageBreaks Boolean
Indica si se muestran los saltos de pgina (automticos y
manuales) de la hoja especificada
DisplayRightToLeft Boolean
Corresponde a la opcin Ver la hoja actual de derecha a
izquierda del cuadro de dilogo Herramientas - Opciones -
ficha Internacional
EnabledAutofilter Boolean
Indica si las flechas del Autofiltro estn activas solamente
cuando est activa la proteccin de slo interfaz de usuario
EnableCalculation Boolean
Indica si Excel recalcula automticamente la hoja de clculo
cuando es necesario
EnableFormatConditionsCalculation Boolean
Devuelve o define si los formatos condicionales se aplican
automticamente si es necesario
EnableOutLining Boolean
Indica si los smbolos del esquema estn activos cuando
est activa la proteccin de slo interfaz de usuario
EnablePivotTable Boolean
Indica si los controles y las acciones de la tabla dinmica
estn activos cuando est activa la proteccin de slo
interfaz de usuario
EnableSelection Constante
Devuelve o define los elementos que pueden seleccionarse
en la hoja (xlNoRestrictions, xlNoSelection,
xlUnlockedCells)
FilterMode Boolean Indica si hay aplicado un filtro a la hoja especificada
MailEnvelope
Representa el encabezado de mensajes de correo
electrnico para la hoja especificada
Name Cadena de caracteres
Cadena de caracteres que contiene el nombre de la hoja de
clculo
ProtectContents Boolean Indica si el contenido de la hoja especificada est protegido
ProtectDrawingObjects Boolean Indica si las formas grficas estn protegidas
ProtectionMode Boolean
Indica si est activa la proteccin de slo interfaz de
usuario
ProtectScenarios Boolean Indica si estn protegidos los escenarios de hoja de clculo
ScrollArea Cadena de caracteres Devuelve o establece el rango en que est permitido el
123 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

desplazamiento de la hoja de clculo especificada
StandardHeight Real doble
Devuelve el alto estndar (valor por defecto) de las filas de
la hoja de clculo especificada
StandardWidth Real doble
Devuelve el ancho estndar (valor por defecto) de las
columnas de la hoja de clculo especificada
Type Constantes
Devuelve o define el tipo de la hoja de clculo especificada
(xlChart, xlDialogSheet, etc.)
Visible Boolean Indica si la hoja de clculo especificada est visible
4.3.3 Mtodos
Mtodo Descripcin
Activate Activa la hoja de clculo especificada. Equivale a hacer clic sobre la ficha de la hoja
Calculate Recalcula las celdas de la hoja de clculo especificada
CheckSpelling
Efecta la verificacin ortogrfica de la hoja de clculo especificada (equivale a la
opcin Ortografa del men Herramientas)
CircleInvalid Rodea con un crculo las entradas incorrectas en la hoja de clculo especificada
ClearArrows Borra las flechas de auditora de la hoja de clculo especificada
ClearCircles Borra los crculos que rodean las entradas incorrectas de la hoja de clculo
Copy
Hace una copia de la hoja de clculo especificada (antes o despus de una de las
hojas del libro)
Delete Elimina la hoja de clculo especificada
Evaluate
Calcula la expresin pasada como argumento y devuelve el resultado. La expresin
debe corresponder a una frmula de clculo en ingls
ExportAsFixedFormat Publica una hoja de clculo en formato PDF o XPS
Move
Mueve la hoja de clculo especificada a una posicin dada (antes o despus de una
de las hojas del libro)
Paste Pega el contenido del portapapeles en la hoja de clculo especificada
PasteSpecial
Pega el contenido del portapapeles en la hoja de clculo especificada respetando el
formato especificado (pegado especial)
PrintOut Imprime la hoja de clculo especificada
PrintPreview Muestra la vista preliminar de la hoja de clculo especificada
Protect Protege la hoja de clculo especificada
ResetAllPageBreaks Redefine los saltos de pgina de la hoja de clculo especificada
SaveAs Guarda la hoja de clculo en un nuevo libro
Select Selecciona la hoja de clculo
SetBackgroundPicture Define el grfico de fondo de la hoja de clculo especificada
ShowAllData Muestra todas las filas de la lista actualmente filtrada
ShowDataForm
Muestra los datos de la hoja de clculo especificada como formulario (corresponde
a la opcin Formulario del men Datos)
UnProtect Desactiva la proteccin de la hoja de clculo especificada

124 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.3.4 Ejemplos de cdigos que usan el objeto Worksheet
a. Ordenar las hojas de clculo de un libro
El siguiente ejemplo permite:
Ordenar las hojas de un libro,
Modificar el color de las fichas de cada hoja.
Sub OrganizarHojas()
Dim Hoja As Worksheet
Dim i As Integer

'Ordena las hojas del libro activo
Call OrdenaHojas(ActiveWorkbook)

'Recorre las hojas de clculo
For i = 1 To ActiveWorkbook.Worksheets.Count
Set Hoja = ActiveWorkbook.Worksheets(i)
With Hoja
'Modifica el color de la ficha
.Tab.Color = vbRed
End With
Next i
End Sub



Private Sub OrdenaHojas(Libro1 As Workbook)
Dim i As Integer
Dim j As Integer
'Procedimiento para ordenar alfabticamente las hojas de clculo
'de un libro
With Libro1
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. Proteccin de las hojas de clculo de un libro
Este ejemplo protege las hojas de clculo de un libro permitiendo las siguientes autorizaciones:
formato de celdas, agregar columnas y filas, ordenamiento y autofiltros. Las otras operaciones
(eliminar filas o columnas, modificacin de escenarios, etc.) quedan prohibidas.
125 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


Sub ProtegeHojas()
Dim shtCurrent As Worksheet

For Each shtCurrent In ActiveWorkbook.Worksheets
shtCurrent.Protect Password:="Contrasea", _
Contents:=True, _
AllowFormattingCells:=True, _
AllowInsertingColumns:=True, _
AllowInsertingRows:=True, _
AllowSorting:=True, _
AllowFiltering:=True
Next shtCurrent
End Sub
c. Ordenar una tabla
Este ejemplo ordena una tabla segn tres columnas: ciudad, apellido y nombre.
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

126 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.4 El objeto Range
El objeto Range representa un rango de celdas y puede estar constituido por:
Una celda
Una fila
Una columna
Un rango de celdas contiguas
Un rango de celdas no contiguas
Un rango 3D.
4.4.1 Propiedades y mtodos que devuelven un objeto
Range
4.4.1.1 Propiedades que devuelven un objeto Range
Propiedad Objeto contenedor Objeto devuelto
ActiveCell
Application
Window
Objeto Range que representa la primera celda activa de la ventana activa o
especificada
Areas Range Coleccin que agrupa todos los rangos de una seleccin mltiple
Cells
Application
Range
WorkSheet
Objeto Range que representa una celda o una coleccin de celdas:
De la hoja activa si el objeto contenedor es Application
Del rango especificado si el objeto contenedor es Range
De la hoja de clculo especificada si el objeto contenedor es Worksheet
Columns
Application
Range
WorkSheet
Objeto Range que representa las columnas:
De la hoja activa si el objeto contenedor es Application
Del rango especificado si el objeto contenedor es Range
De la hoja especificada si el objeto contenedor es Worksheet
CurrentRegion Range
Objeto Range que representa el objeto Range especificado, limitado por toda
combinacin de filas y columnas vacas
EntireColumn Representa una o ms columnas enteras del rango especificado
EntireRow
Objeto Range que representa una o ms filas enteras del rango especificado.
End Range
Objeto Range que representa la celda situada al final de la zona de rango
especificado. Corresponde a la combinacin de teclas [Fin][Flecha arriba],
[Fin][Flecha abajo], [Fin][Flecha izquierda] o [Fin][Flecha derecha]
Offset Range Objeto Range especificado desplazado una o ms filas o columnas
Range
Application
Worksheet
Range
Objeto Range que representa un rango de celdas:
De la hoja activa si el objeto contenedor es Application
Del rango especificado si el objeto contenedor es Range
De la hoja especificada si el objeto contenedor es Worksheet
Rows
Application
Range
WorkSheet
Objeto Range que representa todas las filas:
De la hoja activa si el objeto contenedor es Application
Del rango especificado si el objeto contenedor es Range
De la hoja especificada si el objeto contenedor es Worksheet
127 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

UsedRange Worksheet
Objeto Range que representa el rango usado en su totalidad por la hoja de
clculo especificada.
4.4.1.2 Mtodos que devuelven un objeto Range
Mtodo Objeto contenedor Objeto devuelto
Intersect Application Objeto Range que representa la interseccin rectangular de varios rangos.
Union Application
Objeto Range que representa la unin de varios rangos contiguos o
discontinuos.
4.4.2 Sintaxis de las propiedades que devuelven un objeto
Range
4.4.2.1 Cells
Objeto.Cells ([RowIndex],[ColumnIndex])
RowIndex: nmero de fila de la celda.
ColumnIndex: nmero de columna de la celda.
Si no se indica ningn argumento, Cells devuelve la coleccin de celdas del rango
especificado.
Ejemplo:
El siguiente ejemplo modifica el contenido y el color de celdas.
Sub LlenaHoja()
Dim Celda As Range
'Modifica el contenido de la celda B1 de la hoja activa
Application.Cells(1, 2).Value = "Enero"
'Modifica el contenido de la celda B2 de la hoja activa
ActiveSheet.Range("A1:G10").Cells(2, 2).Value = "Febrero"
'Modifica el contenido de la celda B3 de la hoja activa
ActiveSheet.Cells(3, 2).Value = "Marzo"
'Modifica el color de las celdas C1, C2, D1, D2
For Each Celda In Range("C1:D2")
Celda.Interior.Color = vbRed
Next Celda
End Sub
4.4.2.2 Range
Objeto.Range(Cell1,[Cell2])
Donde Cell1 y Cell2 pueden ser:
128 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Una celda (por ejemplo: "A1")
Un rango de celdas (por ejemplo: "A1:B7")
Un nombre de celda (por ejemplo: "Totales")
Si Cell2 est especificado, Range devuelve un rango de celdas contiguas que incluye los dos
rangos especificados.
Ejemplo:
Este ejemplo crea la siguiente tabla en una hoja de clculo.

Sub HojaResultado()
Dim i As Integer

With Application.ActiveSheet
.Range("B1").Value = "Resultados trimestrales"
'Mes 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
129 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.4.2.3 OffSet
Objeto.OffSet([rowOffset],[columnOffset])
rowOffset: Cantidad de filas de desplazamiento.
colOffset: Cantidad de columnas de desplazamiento.
colOffset y rowOffset pueden contener valores negativos.
Ejemplo:
El siguiente ejemplo devuelve la direccin del rango que resulta de un desplazamiento de filas y
columnas.
Sub DevuelveOffset()
With Range("B5:C7")
'Desplazamiento de una fila hacia arriba
'Devuelve $A$5:$B$7
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
4.4.2.4 Areas
Objeto.Areas([Index])
Index: Nmero del rango en distintos rangos del objeto.
Si no se indica ningn argumento, Areas devuelve la coleccin de rangos especificada.
Ejemplo:
Este ejemplo permite:
crear una zona formada por varios rangos de celdas discontinuos,
llenar el primer rango a partir de una matriz,
poner en negrita la fuente para todos los rangos.
Sub MuchosRangos()
Dim ZonaTot As Range
Dim i As Integer
'Unin de muchos rangos discontinuos
Set ZonaTot = Union(Range("B3:E3"), Range("B1:B5"), Range("J2:F6"))
130 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


With ZonaTot
'Primer rango llenado 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
4.4.3 Lista de objetos y colecciones



131 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.4.3.1 Objetos
Objeto Descripcin
Characters Objeto que representa los caracteres del texto de la celda especificada
Comment Objeto que representa el comentario asociado a la celda
Errors Objeto que representa los errores en el rango especificado
Font
Objeto que contiene los atributos de fuente (nombre, tamao, color, etc.) del
rango especificado
Interior Objeto que representa el relleno de las celdas del rango especificado
PivotCell Objeto que representa una celda en un informe de tabla dinmica
Validation Objeto que representa la validacin de datos aplicada al rango especificado
XPath
Objeto que representa un XPath (ruta XML) mapeado en el rango de celdas
especificado

4.4.3.2 Colecciones
Coleccin Descripcin
Areas Coleccin de todos los rangos en una seleccin de muchas zonas
Borders Coleccin de todos los bordes del rango de celdas especificado
FormatConditions Coleccin de los formatos condicionales del rango especificado
HyperLinks Coleccin de los hipervnculos del rango especificado
Phonetics
Coleccin de objetos que contienen la informacin de una cadena de texto
fontica especfica en una celda
QueryTables
Coleccin de objetos que representa las tablas de hoja de clculo creadas a
partir de datos devueltos por un origen de datos externos
SmartTags
Coleccin que representa las etiquetas inteligentes (Smart Tags) asignadas a
cada celda del rango especificado

4.4.4 Propiedades
4.4.4.1 Propiedades relacionadas con la posicin y el formato de
las celdas
Propiedad Tipo Descripcin
AllowEdit Boolean
True si el rango puede ser modificado en una hoja de
clculo protegida
AddressLocal Cadena de caracteres
Devuelve la referencia del rango especificado en el idioma
del usuario
Address Cadena de caracteres Devuelve la referencia del rango en el lenguaje de la macro
Column Entero
Devuelve el nmero de la primera columna de la primera
zona del rango especificado
132 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

ColumnWidth Variant
Devuelve o define el ancho de todas las columnas del
rango especificado
HorizontalAlignment
Constantes: xlCenter,
xlDistributed,
xlJustify, xlLeft,
xlRight
Define o devuelve el tipo de alineacin horizontal
IndentLevel Entero Devuelve o define el nivel de sangra efectivo
Row Entero
Devuelve el nmero de la primera fila de la primera zona
del rango
RowHeight Variant
Devuelve el alto, medido en puntos, de las filas del rango
especificado
UseStandardHeight Boolean
True si el alto de fila del objeto Range es igual al alto
estndar de la hoja
UseStandardWidth Boolean
True si el ancho de columna del objeto Range es igual al
ancho estndar de la hoja
VerticalAlignment
Constantes: xlBottom,
xlCenter,
xlDistributed,
xlJustify, xlTop
Define o devuelve el tipo de alineacin vertical

4.4.4.2 Propiedades que se relacionan con el contenido de celdas y
con las frmulas
Propiedad Tipo Descripcin
CountLarge Variant Determina el valor mximo en el rango
Formula Cadena de caracteres Devuelve o define la frmula en el estilo de referencia A1
FormulaLocal Cadena de caracteres
Devuelve o define la frmula del objeto usando las
referencias de estilo A1 en el idioma del usuario
FormulaR1C1 Cadena de caracteres
Devuelve o define la frmula del objeto usando las
notaciones de estilo R1C1
FormulaR1C1Local Cadena de caracteres
Devuelve o define la frmula usando las notaciones de
estilo R1C1 en el idioma del usuario
PrefixCharacter Variant Devuelve el prefijo de alineacin de la celda
Text Cadena de caracteres
Valor de la celda especificada con el formato especificado
(contenido visible de la celda)
Value Variant
Valor de la celda especificada. Si la celda est vaca, la
propiedad Value devuelve el valor Empty (use la funcin
IsEmpty para testear este caso). Si el objeto Range
contiene varias celdas, devuelve una matriz de valores (use
la funcin IsArray para testear este caso)
WrapText Boolean
True si Microsoft Excel inserta automticamente retornos
de carro en el texto del objeto
133 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


4.4.4.3 Otras propiedades
Propiedad Tipo Descripcin
MergeCells Boolean True si el rango o el estilo contiene celdas combinadas
ListHeaderRows Entero largo
Devuelve la cantidad de filas de encabezado en el rango
especificado
4.4.5 Mtodos
4.4.5.1 Mtodos que devuelven un objeto
Mtodo Descripcin
ColumnDifferences
Devuelve un objeto Range que representa las celdas donde el contenido es
diferente al de la celda de comparacin de cada columna
Find
Busca una informacin especfica en un rango y devuelve un objeto Range que
representa la primera celda donde aparece esa informacin
FindNext Contina una bsqueda (siguiente celda) iniciada con el mtodo Find
FindPrevious Contina una bsqueda (celda anterior) iniciada con el mtodo Find
RowDifferences
Devuelve un objeto Range que representa las celdas en las que el contenido es
diferente del de la celda de comparacin de cada fila
SpecialCells
Devuelve un objeto Range que representa las celdas que corresponden al tipo y al
valor especificados
SetPhonetic Crea un objeto Phonetic para las celdas del objeto Range especificado

4.4.5.2 Mtodos que se relacionan con la presentacin de las
celdas
Mtodo Descripcin
AddComment Agrega un comentario al rango
AutoFit
Modifica el ancho de las columnas del rango o el alto de las filas para ajustar sus
datos
BorderAround
Agrega un borde a un rango y define las propiedades Color, LineStyle y
Weight del nuevo borde
ClearComments Quita todos los comentarios de celda del rango especificado
ClearFormats Elimina los formatos de las celdas
ClearNotes Borra las notas escritas y sonoras de todas las celdas del rango especificado
InsertIndent Inserta una sangra en las celdas del rango especificado
Justify Reorganiza el texto en un rango de forma que lo llene de manera uniforme
Merge Combina las celdas
NoteText
Devuelve o define las notas de celdas asociadas a la celda ubicada en la esquina
superior izquierda del rango
134 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Sort Ordena un rango de valores
TextToColumns Redistribuye en varias columnas una columna de celdas que contiene texto
UnMerge Separa un celda combinada en celdas individuales
4.4.5.3 Mtodos que se relacionan con el contenido de las celdas
Mtodo Descripcin
AutoFill Ejecuta un llenado incremental en las celdas del rango especificado
AutoComplete Devuelve una coincidencia de la funcionalidad Autocompletar de la lista
ClearContents Borra el contenido de las celdas
Consolidate
Consolida datos que provienen de varios rangos situados en diferentes hojas de
clculo en un nico rango situado en una nica hoja de clculo
Copy Copia al portapapeles el objeto Range del rango especificado
CopyFromRecordSet
Copia el contenido de un objeto Recordset ADO o DAO en una hoja de clculo,
comenzando en la esquina superior izquierda del rango especificado
CopyPicture Copia el objeto seleccionado en el portapapeles en forma de imagen
Cut Corta el objeto y lo guarda en el portapapeles o lo pega en un destino especificado
Delete Elimina las celdas e indica cmo reemplazar las celdas eliminadas
FillDown Rellena un rango hacia abajo
FillLeft Rellena un rango hacia la izquierda
FillRight Rellena un rango hacia la derecha
FillUp Rellena un rango hacia arriba
FunctionWizard
Inicia el Asistente para funciones en la celda situada en la esquina superior
izquierda del rango
Insert Inserta celdas e indica cmo desplazar las celdas
Parse
Redistribuye un rango de datos y lo divide en varias celdas. Distribuye el contenido
del rango de manera que llene varias columnas adyacentes; el rango no puede
tener ms de una columna de ancho
PasteSpecial
Efecta el pegado especial de un objeto Range proveniente del portapapeles en el
rango especificado
RemoveDuplicates Elimina los datos repetidos en un rango de valores
Replace
Busca y reemplaza caracteres en las celdas del rango especificado. El uso de este
mtodo no cambia la seleccin ni la celda activa

4.4.5.4 Mtodos que se relacionan con los nombres de celdas
Mtodo Descripcin
ApplyNames Define nombres para las celdas del rango especificado
CreateNames Crea nombres en el rango especificado en funcin de los rtulos de texto de la hoja
ListNames
Pega una lista con los nombres de la hoja de clculo que no estn ocultos,
comenzando por la primera celda del rango

135 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

4.4.5.5 Mtodos que se relacionan con los filtros
Mtodo Descripcin
AdvancedFilter Filtra o copia los datos de una lista en funcin de una zona de criterios
AutoFilter Filtra una lista
4.4.5.6 Mtodos que se relacionan con el modo esquema
Mtodo Descripcin
ApplyOutlineStyles Aplica los estilos del esquema al rango especificado
AutoOutline
Crea automticamente un esquema para el rango especificado. Si el rango tiene
una sola celda, Microsoft Excel crea un esquema para toda la hoja
Group
En un esquema, aumenta el nivel del rango en el esquema. El rango debe ser una
fila o una columna entera o un rango de filas o de columnas. Para un rango
discontinuo de un informe de tabla dinmica, reagrupa el rango. Para una nica
celda del rango de datos de un campo de tabla dinmica, realiza un
reagrupamiento numrico o cronolgico en el campo
Ungroup
Promueve un rango en un esquema (es decir, reduce su nivel de esquema). El
rango especificado debe ser una fila o una columna o bien un rango de filas o
columnas. Si el rango se encuentra en un informe de tabla dinmica, el mtodo
desagrupar los elementos incluidos en el rango

4.4.5.7 Mtodos que se relacionan con la herramienta de Auditora
Mtodo Descripcin
NavigateArrow
Desplaza una flecha de rastreo del rango especificado hacia la o las celdas
precedentes, dependientes o que provocan un error
ShowDependents
Muestra las flechas de rastreo que sealan las celdas dependientes directas del
rango
ShowPrecedents
Muestra las flechas de rastreo que sealan las celdas precedentes directas del
rango
ShowErrors
Muestra las flechas de rastreo a travs de la estructura en rbol de las celdas
precedentes a la celda que origina el error y devuelve el rango que la contiene

4.4.5.8 Otros mtodos
Mtodo Descripcin
Calculate Calcula las frmulas de todos los libros abiertos
CalculateRowMajorOrder
Calcula el rango de celdas indicado a partir de su esquina superior izquierda y hasta
la esquina inferior derecha en el orden fila-campo
Dirty
Indica que el rango especificado se recalcular en la prxima actualizacin de la
hoja
ExportAsFixedFormat Publica los datos de un rango de valores en formato PDF o XPS
PrintOut Imprime el rango de celdas
136 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Run Ejecuta una macro
Table
Crea una tabla de datos a partir de los valores de entrada y de las frmulas
definidas en una hoja de clculo

4.5 Ejemplos de uso de los objetos
4.5.1 Clculo del importe de un premio

El rango de celdas "D6:D14" debe recibir el nombre VN.
Cuando el usuario hace clic en el botn de comando Calcular premios se ejecutar el
procedimiento Calc_Premios. Este procedimiento selecciona el rango de celdas llamado VN
(celdas "D6:D14") y llama a la funcin Premio para calcular la prima y asignarla a la celda de la
derecha.
Sub Calc_Premios()
Dim dblVNProm As Double
Dim cell As Range

'Seleccin del rango llamado VN
ThisWorkbook.Names("VN").RefersToRange.Select
'Clculo del promedio de la seleccin
dblVNProm = Evaluate("AVERAGE(VN)")
137 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

'Recorre las celdas de la seleccin
'La prima calculada se asigna a la celda de la derecha
For Each cell In Selection
Cells(cell.Row, cell.Column + 1).Value = Premio(cell.Value, dblVNProm)
Next cell
End Sub
La funcin Premio calcula el premio en funcin del VN (valor negociado) y del promedio de los
otros VN.
Function Premio(dblVN As Double, dblVNProm As Double) As Double
'Premio en funcin del importe VN
Select Case dblVN
Case Is < 100000
Premio = 0
Case Is < 125000
Premio = 500
Case Is < 150000
Premio = 1000
Case Else
Premio = 2000
End Select

'Si el VN es superior al promedio premio extra de 1000
If dblVN > dblVNProm Then Premio = Premio + 1000
End Function
138 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


4.5.2 Asignacin de comentarios a las celdas

Cuando el usuario hace clic en el botn Comentarios, se ejecuta el procedimiento
Mostrar_Comentarios. Este procedimiento llama al procedimiento Compara_Valor para
comparar cada una de las celdas seleccionadas con la celda situada a su izquierda.
Sub Mostrar_Comentarios()
Dim rng1 As Range
Dim rng2 As Range
Dim rngCurrent As Range
Dim col As Object
Dim i As Integer
Dim j As Integer
'Borra los comentarios y los estilos de la seleccin actual
Set rngCurrent = ThisWorkbook.Worksheets("Ventas").Range("C5:D16")
With rngCurrent
.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 col = .Columns(i)
For j = 1 To col.Cells.Count
139 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Set rng1 = col.Cells(j)
Set rng2 = Cells(rng1.Row, rng1.Column - 1)
Compara_Valor rng1, rng2
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 porcentaje de evolucin (negativo, < 20%, > 20%), se asigna un
comentario y un formato a la primera celda.
Sub Compara_Valor(rng1 As Range, rng2 As Range)
Dim dbl1 As Double, dbl2 As Double, dbl3 As Double
Dim strEvol As String

'Compara los valores de dos celdas y asigna un comentario
With rng1
dbl1 = rng2.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
140 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

5
55.
.. C
CCU
UUA
AAD
DDR
RRO
OOS
SS D
DDE
EE D
DDI
II
L
LLO
OOG
GGO
OO

5.1 Presentacin
El objetivo principal de los cuadros de dilogo es controlar el intercambio de informacin con el
usuario: mostrar mensajes, pedir informacin, vista y entrada de datos, etc.
Existen tres tipos de cuadros de dilogo:
Los cuadros de dilogo llamados cuadros de dilogo integrados, que permiten, por
ejemplo, abrir o guardar un archivo, definir las opciones de Excel, imprimir hojas de
clculo, ordenar datos, etc.
Los cuadros de dilogo predefinidos, que permiten mostrar un mensaje, hacer una
pregunta al usuario o invitarlo a introducir una informacin
Los cuadros de dilogo personalizados o formularios, que permiten mostrar o introducir
datos en una interfaz amigable. La creacin de formularios personalizados se explica en
el captulo siguiente.

5.2 Cuadros de dilogo integrados
5.2.1 El objeto Dialog
Los cuadros de dilogo integrados son objetos Dialog pertenecientes a la coleccin Dialogs
del objeto Application.
Para mostrar un cuadro de dilogo, use el mtodo Show segn la siguiente sintaxis:
Application.Dialogs(xlDialog).Show
donde xlDialog es una constante Excel que indica el cuadro de dilogo que hay que mostrar.
Los valores se listan en la siguiente tabla:
Nombre Valor Cuadro de dilogo
xlDialogActivate 103 Activar
xlDialogActiveCellFont 476 Fuente de celda activa
xlDialogAddChartAutoformat 390 Agregar autoformato de grfico
xlDialogAddinManager 321 Administrador de complementos
141 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

xlDialogAlignment 43 Alineacin
xlDialogApplyNames 133 Aplicar nombres
xlDialogApplyStyle 212 Aplicar estilo
xlDialogAppMove 170 AppMove
xlDialogAppSize 171 AppSize
xlDialogArrangeAll 12 Organizar todo
xlDialogAssignToObject 213 Asignar a un objeto
xlDialogAssignToTool 293 Asignar a herramienta
xlDialogAttachText 80 Adjuntar texto
xlDialogAttachToolbars 323 Adjuntar barras de herramientas
xlDialogAutoCorrect 485 Autocorreccin
xlDialogAxes 78 Ejes
xlDialogBorder 45 Borde
xlDialogCalculation 32 Clculo
xlDialogCellProtection 46 Proteger celda
xlDialogChangeLink 166 Cambiar vnculo
xlDialogChartAddData 392 Agregar datos de grfico
xlDialogChartLocation 527 Ubicacin del grfico
xlDialogChartOptionsDataLabelMultiple 724 Datalabel mltiple de opciones de grfico
xlDialogChartOptionsDataLabels 505 Datalabels de opciones de grfico
xlDialogChartOptionsDataTable 506 Datatable de opciones de grfico
xlDialogChartSourceData 540 Datos de origen de grfico
xlDialogChartTrend 350 Tendencia de grfico
xlDialogChartType 526 Tipo de grfico
xlDialogChartWizard 288 Asistente para grficos
xlDialogCheckboxProperties 435 Propiedades de la casilla de verificacin
xlDialogClear 52 Borrar
xlDialogColorPalette 161 Paleta de colores
xlDialogColumnWidth 47 Ancho de columna
xlDialogCombination 73 Combinado
xlDialogConditionalFormatting 583 Formato condicional
xlDialogConsolidate 191 Consolidar
xlDialogCopyChart 147 Copiar grfico
xlDialogCopyPicture 108 Copiar imagen
xlDialogCreateList 796 Crear lista
xlDialogCreateNames 62 Crear nombres
xlDialogCreatePublisher 217 Crear publicacin
xlDialogCustomizeToolbar 276 Personalizar barra de herramientas
xlDialogCustomViews 493 Vistas personalizadas
xlDialogDataDelete 36 Eliminar datos
xlDialogDataLabel 379 Rtulo de datos
xlDialogDataLabelMultiple 723 Rtulo de datos mltiple
xlDialogDataSeries 40 Serie de datos
xlDialogDataValidation 525 Validacin de datos
xlDialogDefineName 61 Definir nombre
xlDialogDefineStyle 229 Definir estilo
xlDialogDeleteFormat 111 Eliminar formato
xlDialogDeleteName 110 Eliminar nombre
xlDialogDemote 203 Disminuir nivel
142 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

xlDialogDisplay 27 Mostrar
xlDialogDocumentInspector 862 Inspector de documento
xlDialogEditboxProperties 438 Propiedades de cuadro de edicin
xlDialogEditColor 223 Editar color
xlDialogEditDelete 54 Editar eliminacin
xlDialogEditionOptions 251 Opciones de edicin
xlDialogEditSeries 228 Editar serie
xlDialogErrorbarX 463 Barra de error X
xlDialogErrorbarY 464 Barra de error Y
xlDialogErrorChecking 732 Comprobacin de errores
xlDialogEvaluateFormula 709 Evaluar frmula
xlDialogExternalDataProperties 530 Propiedades de los datos externos
xlDialogExtract 35 Extraer
xlDialogFileDelete 6 Eliminar archivo
xlDialogFileSharing 481 Uso compartido de archivos
xlDialogFillGroup 200 Rellenar grupo
xlDialogFillWorkgroup 301 Rellenar grupo de trabajo
xlDialogFilter 447 Filtro de cuadro de dilogo
xlDialogFilterAdvanced 370 Filtro avanzado
xlDialogFindFile 475 Buscar archivo
xlDialogFont 26 Fuente
xlDialogFontProperties 381 Propiedades de fuente
xlDialogFormatAuto 269 Autoformato
xlDialogFormatChart 465 Formato del grfico
xlDialogFormatCharttype 423 Formato de tipo de grfico
xlDialogFormatFont 150 Formato de fuente
xlDialogFormatLegend 88 Formato de leyenda
xlDialogFormatMain 225 Formato de principal
xlDialogFormatMove 128 Mover formato
xlDialogFormatNumber 42 Formato de nmero
xlDialogFormatOverlay 226 Formato del grfico superpuesto
xlDialogFormatSize 129 Formato de tamao
xlDialogFormatText 89 Aplicar formato al texto
xlDialogFormulaFind 64 Buscar frmula
xlDialogFormulaGoto 63 Ir a frmula
xlDialogFormulaReplace 130 Reemplazar frmula
xlDialogFunctionWizard 450 Asistente para funciones
xlDialogGallery3dArea 193 Galera de rea 3D
xlDialogGallery3dBar 272 Galera de Barra 3D
xlDialogGallery3dColumn 194 Galera de Columna 3D
xlDialogGallery3dLine 195 Galera de Lnea 3D
xlDialogGallery3dPie 196 Galera de Circular 3D
xlDialogGallery3dSurface 273 Galera de Superficie 3D
xlDialogGalleryArea 67 Galera de rea
xlDialogGalleryBar 68 Galera de Barra
xlDialogGalleryColumn 69 Galera de Columna
xlDialogGalleryCustom 388 Galera Personalizado
xlDialogGalleryDoughnut 344 Galera de Anillos
xlDialogGalleryLine 70 Galera de Lnea
143 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

xlDialogGalleryPie 71 Galera de Circular
xlDialogGalleryRadar 249 Galera de Radial
xlDialogGalleryScatter 72 Galera de Dispersin
xlDialogGoalSeek 198 Buscar objetivo
xlDialogGridlines 76 Lneas de divisin
xlDialogImportTextFile 666 Importar archivo de texto
xlDialogInsert 55 Insertar
xlDialogInsertHyperlink 596 Insertar hipervnculo
xlDialogInsertNameLabel 496 Insertar etiqueta para nombre
xlDialogInsertObject 259 Insertar objeto
xlDialogInsertPicture 342 Insertar imagen
xlDialogInsertTitle 380 Insertar ttulo
xlDialogLabelProperties 436 Propiedades de etiqueta
xlDialogListboxProperties 437 Propiedades de cuadro de lista
xlDialogMacroOptions 382 Opciones de la macro
xlDialogMailEditMailer 470 Editar formulario de correo
xlDialogMailLogon 339 Inicio de sesin de correo
xlDialogMailNextLetter 378 Siguiente carta de correo
xlDialogMainChart 85 Grfico principal
xlDialogMainChartType 185 Tipo de grfico principal
xlDialogMenuEditor 322 Editor de mens
xlDialogMove 262 Mover
xlDialogMyPermission 834 Mi permiso
xlDialogNew 119 Nuevo
xlDialogNewWebQuery 667 Nueva consulta Web
xlDialogNote 154 Nota
xlDialogObjectProperties 207 Propiedades de objeto
xlDialogObjectProtection 214 Proteger objeto
xlDialogOpen 1 Abrir
xlDialogOpenLinks 2 Abrir vnculo
xlDialogOpenMail 188 Abrir correo
xlDialogOpenText 441 Abrir texto
xlDialogOptionsCalculation 318 Opciones Clculo
xlDialogOptionsChart 325 Opciones de grfico
xlDialogOptionsEdit 319 Opciones Edicin
xlDialogOptionsGeneral 356 Opciones General
xlDialogOptionsListsAdd 458 Opciones Agregar listas
xlDialogOptionsME 647 Opciones ME
xlDialogOptionsTransition 355 Opciones Transicin
xlDialogOptionsView 320 Opciones Ver
xlDialogOutline 142 Esquema
xlDialogOverlay 86 Superpuesto
xlDialogOverlayChartType 186 Tipo de grfico superpuesto
xlDialogPageSetup 7 Configurar pgina
xlDialogParse 91 Analizar
xlDialogPasteNames 58 Pegar nombres
xlDialogPasteSpecial 53 Pegado especial
xlDialogPatterns 84 Tramas
xlDialogPermission 832 Permiso
144 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

xlDialogPhonetic 656 Fontico
xlDialogPivotCalculatedField 570 Campo dinmico calculado
xlDialogPivotCalculatedItem 572 Elemento dinmico calculado
xlDialogPivotClientServerSet 689 Conjunto dinmico cliente servidor
xlDialogPivotFieldGroup 433 Agrupar campos dinmicos
xlDialogPivotFieldProperties 313 Propiedades de campo dinmico
xlDialogPivotFieldUngroup 434 Desagrupar campos dinmicos
xlDialogPivotShowPages 421 Mostrar pginas dinmicas
xlDialogPivotSolveOrder 568 Orden de resolucin dinmico
xlDialogPivotTableOptions 567 Opciones de tabla dinmica
xlDialogPivotTableWizard 312 Asistente para tablas dinmicas
xlDialogPlacement 300 Ubicacin
xlDialogPrint 8 Imprimir
xlDialogPrinterSetup 9 Configurar impresora
xlDialogPrintPreview 222 Vista preliminar
xlDialogPromote 202 Aumentar nivel
xlDialogProperties 474 Propiedades
xlDialogPropertyFields 754 Campos de propiedad
xlDialogProtectDocument 28 Proteger documento
xlDialogProtectSharing 620 Proteger uso compartido
xlDialogPublishAsWebPage 653 Publicar como pgina Web
xlDialogPushbuttonProperties 445 Propiedades de botn
xlDialogReplaceFont 134 Reemplazar fuente
xlDialogRoutingSlip 336 Lista de distribucin
xlDialogRowHeight 127 Alto de fila
xlDialogRun 17 Ejecutar
xlDialogSaveAs 5 Guardar como
xlDialogSaveCopyAs 456 Guardar copia como
xlDialogSaveNewObject 208 Guardar nuevo objeto
xlDialogSaveWorkbook 145 Guardar libro
xlDialogSaveWorkspace 285 Guardar rea de trabajo
xlDialogScale 87 Escala
xlDialogScenarioAdd 307 Agregar escenario
xlDialogScenarioCells 305 Celdas de escenario
xlDialogScenarioEdit 308 Modificar escenario
xlDialogScenarioMerge 473 Combinar escenarios
xlDialogScenarioSummary 311 Resumen del escenario
xlDialogScrollbarProperties 420 Propiedades de barra de desplazamiento
xlDialogSearch 731 Buscar
xlDialogSelectSpecial 132 Seleccin especial
xlDialogSendMail 189 Enviar correo
xlDialogSeriesAxes 460 Ejes de series
xlDialogSeriesOptions 557 Opciones de serie
xlDialogSeriesOrder 466 Orden de las series
xlDialogSeriesShape 504 Forma de las series
xlDialogSeriesX 461 Serie X
xlDialogSeriesY 462 Serie Y
xlDialogSetBackgroundPicture 509 Establecer imagen de fondo
xlDialogSetPrintTitles 23 Imprimir ttulos
145 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

xlDialogSetUpdateStatus 159 Establecer estado de actualizacin
xlDialogShowDetail 204 Mostrar detalle
xlDialogShowToolbar 220 Mostrar barra de herramientas
xlDialogSize 261 Tamao
xlDialogSort 39 Ordenar
xlDialogSortSpecial 192 Ordenar especial
xlDialogSplit 137 Dividir
xlDialogStandardFont 190 Fuente estndar
xlDialogStandardWidth 472 Ancho estndar
xlDialogStyle 44 Estilo
xlDialogSubscribeTo 218 Suscripcin a
xlDialogSubtotalCreate 398 Crear subtotal
xlDialogSummaryInfo 474 Resumen
xlDialogTable 41 Tabla
xlDialogTabOrder 394 Orden de tabulacin
xlDialogTextToColumns 422 Texto en columnas
xlDialogUnhide 94 Mostrar
xlDialogUpdateLink 201 Actualizar vnculo
xlDialogVbaInsertFile 328 Insertar archivo VBA
xlDialogVbaMakeAddin 478 Crear complemento VBA
xlDialogVbaProcedureDefinition 330 Definicin de procedimiento VBA
xlDialogView3d 197 Vista 3D
xlDialogWebOptionsBrowsers 773 Opciones Web Exploradores
xlDialogWebOptionsEncoding 686 Opciones Web Codificacin
xlDialogWebOptionsFiles 684 Opciones Web Archivos
xlDialogWebOptionsFonts 687 Opciones Web Fuentes
xlDialogWebOptionsGeneral 683 Opciones Web General
xlDialogWebOptionsPictures 685 Opciones Web Imgenes
xlDialogWindowMove 14 Mover ventana
xlDialogWindowSize 13 Ajustar tamao de la ventana
xlDialogWorkbookAdd 281 Agregar libro
xlDialogWorkbookCopy 283 Copiar libro
xlDialogWorkbookInsert 354 Insertar libro
xlDialogWorkbookMove 282 Mover libro
xlDialogWorkbookName 386 Nombre del libro
xlDialogWorkbookNew 302 Nuevo libro
xlDialogWorkbookOptions 284 Opciones del libro
xlDialogWorkbookProtect 417 Proteger libro
xlDialogWorkbookTabSplit 415 Dividir libro en fichas
xlDialogWorkbookUnhide 384 Mostrar libro
xlDialogWorkgroup 199 Grupo de trabajo
xlDialogWorkspace 95 rea de trabajo
xlDialogZoom 256 Zoom


146 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

5.2.2 Los mtodos GetOpenFileName y GetSaveAsFileName
Los mtodos GetOpenFileName y GetSaveAsFileName del objeto Application
muestran, respectivamente, los cuadros de dilogo Abrir... y Guardar como... del men Archivo.
A diferencia de los objetos Dialogs correspondientes (constantes xlDialogOpen y
xlDialogSaveAs), estos mtodos no realizan ninguna accin; solamente permiten recuperar
el nombre del archivo introducido o seleccionado por el usuario.
Sintaxis del mtodo GetOpenFileName:
Application.GetOpenFileName(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)
Todos los argumentos son opcionales.
FileFilter: Criterios de filtrado: nombre del filtro seguido de la extensin.Por ejemplo:
"PginaWeb (*.htm;*.html) ,*.htm;*.html".
FileIndex: ndice del criterio de filtrado por defecto.
Title: Ttulo del cuadro de dilogo.
ButtonText: Etiqueta del botn Abrir (solamente para Macintosh).
MultiSelect: Indica si el usuario puede seleccionar varios archivos.
Sintaxis del mtodo GetSaveAsFileName:
Application.GetSaveAsFileName(InitialeFile, FileFilter, FilterIndex, Title, ButtonText)
Todos los argumentos son opcionales.
InitialeFile: nombre del archivo que aparece en la zona de texto Nombre. Si se omite
este argumento, Excel usa el nombre del libro activo.
FileFilter: Criterios de filtrado: nombre del filtro seguido de la extensin.Por ejemplo:
"PginaWeb (*.htm;*.html) ,*.htm;*.html".
FileIndex: ndice del criterio de filtrado por defecto.
Title: Ttulo del cuadro de dilogo.
ButtonText: Etiqueta del botn Abrir (solamente para Macintosh).
Ejemplo:
Este ejemplo permite:
mostrar el cuadro de dilogo Abrir con la posibilidad de seleccionar varios archivos,
guardar en una matriz los nombres de los archivos seleccionados con extensin xls y que
no se encuentren ya abiertos,
147 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

mostrar un mensaje que indica los archivos que hay que abrir,
abrir esos archivos tras pedir confirmacin.
Sub AbreLibros()
Dim strFiles, xlFiles
Dim blnAbierto As Boolean
Dim strMensaje As String
Dim wbk As Workbook
Dim i As Integer, j As Integer
'Muestra el cuadro de dilogo Abrir
strFiles = Application.GetOpenFilename(MultiSelect:=True, _
FileFilter:="Archivos Excel (*.xlsm),*.xlsm", _
Title:="Seleccione los archivos que hay que abrir")
'Prueba si los archivos han sido seleccionados
If TypeName(strFiles) = "Variant()" Then
ReDim xlFiles(UBound(strFiles))
For i = 1 To UBound(strFiles)
'Controla la extensin del archivo
If Right(strFiles(i), 3) = "xls" Then
'Prueba si el archivo ya est abierto
blnAbierto = False
For Each wbk In Workbooks
If wbk.Path & "\" & wbk.Name = strFiles(i) Then
blnAbierto = True
End If
Next wbk
'Guarda el nombre del archivo en una matriz
If Not blnAbierto Then
j = j + 1
xlFiles(j) = strFiles(i)
strMensaje = strMensaje & strFiles(i) & vbCr
End If
End If
Next i
'Abre todos los archivos Excel tras confirmacin
If j > 1 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


148 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

5.3 Cuadros de dilogo predefinidos
5.3.1 La funcin InputBox
Muestra una pregunta y devuelve el texto escrito por el usuario.
InputBox(prompt,title,default,xpos,ypos,helpfile,context)
prompt: Cadena que aparecer como mensaje.
title: Cadena que aparecer en la barra de ttulo.
default: Valor tomado por defecto.
xpos: Posicin horizontal del cuadro de dilogo (expresado en twips).
ypos: Posicin vertical del cuadro de dilogo (expresado en twips).
helpfile: Nombre del archivo de ayuda contextual.
context: Nmero del contexto de ayuda.
Ejemplo:
Este ejemplo muestra un cuadro de dilogo que pide el nombre de las celdas que hay que borrar
(las celdas reciben el nombre de cada mes).
Sub Borrar_Celdas_Nombradas()
Dim opcion 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
opcion = InputBox(Prompt:="Qu mes borra?", Title:="Borrar celdas")
On Error GoTo Errores
Application.Goto Reference:=opcion
Selection.Clear
Exit Sub

Errores:
MsgBox "No puede borrar, nombre de celda inexistente"
End Sub
5.3.2 El mtodo InputBox
Acta como la funcin InputBox pero permite controlar el tipo de datos que hay que
introducir.
Application.InputBox(prompt,title,default,left,top,helpfile,helpContextID,type)
149 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

prompt: Mensaje mostrado.
title: Ttulo del cuadro de dilogo.
default: Valor tomado por defecto.
left: Posicin horizontal del cuadro de dilogo (en puntos).
top: Posicin vertical del cuadro de dilogo (en puntos).
helpfile: Nombre del archivo de ayuda en lnea.
helpContextID: Nmero del contexto de ayuda.
type: Tipo de datos que se devolver:
0 Frmula
1 Nmero
2 Cadena
4 Valor Boolean
8 Referencia de celda
16 Valor de error
64 Matriz de valores en una seleccin de celdas.

Para aceptar varios tipos de datos, haga la suma de los valores. Por ejemplo, si la zona de entrada
puede aceptar un texto o un nmero, indique el valor 3 (1 + 2) como tipo.
Ejemplo:
Pide al usuario seleccionar la o las celda(s) que hay que pintar.
Sub Celdas_A_Pintar()
Dim strRep As Range
'Si el usuario selecciona celdas,
'stas se pintan de rojo
'Si hace clic en Cancelar, termina el procedimiento
On Error GoTo Errores
Set strRep = Application.InputBox( _
Prompt:="Seleccione la o las celda(s) que hay que pintar", _
Title:="Celda que hay que pintar", Default:="A1", Type:=8)
strRep.Interior.ColorIndex = 3
Errores:
End Sub
5.3.3 La funcin MsgBox
Esta funcin muestra un mensaje en un cuadro de dilogo. Puede incluir un icono, y de uno a
tres botones.

150 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Sintaxis de la instruction:
Usada cuando aparece un nico botn.
MsgBox message [,[buttons][, title]]
Sintaxis de la funcin:
Usada cuando aparece ms de un botn. Permite saber qu botn activ el usuario, a travs del
valor devuelto.
MsgBox(message, [buttons][, title][,helpfile, context])
message: Texto del mensaje que aparece en el cuadro de dilogo.
buttons: Expresin numrica que representa la suma de los valores que especifican los
botones que hay que mostrar, el tipo de icono que hay que usar, la identidad del botn por
defecto, y la modalidad del cuadro.
title: Texto en la barra de ttulo.
helpfile: Archivo de ayuda que hay que usar.
context: Nmero del contexto de ayuda.
Valores del argumento buttons:
Constante simblica Valor Significado
Nmero y tipo de botn
vbOKOnly 0 Muestra solamente el botn Aceptar.
vbOKCancel 1 Muestra los botones Aceptar y Cancelar.
vbAbortRetryIgnore 2 Muestra los botones Anular, Reintentar e Ignorar.
vbYesNoCancel 3 Muestra los botones S, No y Cancelar.
vbYesNo 4 Muestra los botones S y No.
vbRetryCancel 5 Muestra los botones Reintentar y Cancelar.
vbMsgBoxHelpButton 16384 Muestra un botn de ayuda.
Tipo de icono
vbCritical 16
Muestra el icono
vbQuestion 32
Muestra el icono
vbExclamation 48
Muestra el icono
vbInformation 64
Muestra el icono
Botn por defecto
vbDefaultButton1 0 Primer botn.
vbDefaultButton2 256 Segundo botn.
vbDefaultButton3 512 Tercer botn.
151 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

vbDefaultButton4 768 Cuarto botn.
Modalidad
vbApplicationModal 0
Aplicacin modal. El usuario debe responder al mensaje que aparece
en el cuadro de mensajes antes de seguir trabajando en la aplicacin
actual.
vbSystemModal 4096
Sistema modal. Se suspenden todas las aplicaciones hasta que el
usuario responda al mensaje que aparece en el cuadro de mensajes.
Presentacin
vbMsgBoxSetForeground 65536 Muestra la ventana del cuadro de mensaje en primer plano.
vbMsgBoxRight 524288 Alinea el texto a la derecha.
vbMsgBoxRtlReading 1048576
Especifica el orden de lectura de derecha a izquierda para los
sistemas hebreo y rabe.

Los valores devueltos tambin se definen mediante constantes:
Constante Valor devuelto Botn elegido
vbOK 1 Aceptar
vbCancel 2 Cancelar
vbAbort 3 Anular
vbRetry 4 Reintentar
vbIgnore 5 Ignorar
vbYes 6 S
vbNo 7 No
Ejemplos:
Uso de la funcin MsgBox
StrRep = MsgBox("Desea guardar los cambios?", Title:= "Confirmacin", _
Buttons:=vbYesNo + vbQuestion + vbDefaultButton2)


Uso de la instruccin MsgBox

MsgBox "Resultado incorrecto", vbCritical, "Error"


152 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


Pide al usuario que seleccione las columnas que se deben eliminar (la seleccin de columnas
puede hacerse a partir de una o ms celdas de la columna), y que confirme la eliminacin.
Sub Confirmacion()
Dim CualCol As Range
Dim AConfirmar As Integer
'Elegir las columnas
Set CualCol = Application.InputBox(Title:="Elija las columnas", _
Prompt:="Seleccione las columnas que desea eliminar", _
Type:=8)
Set CualCol = CualCol.EntireColumn
'Selecciona las columnas y pide confirmacin
CualCol.Select
AConfirmar = MsgBox(Prompt:="Confirme la eliminacin de las columnas", _
Title:="Supresin de las columnas", _
Buttons:=vbYesNo + vbExclamation + vbDefaultButton2)
If AConfirmar = vbYes Then CualCol.Delete
End Sub
5.3.4 Constantes usadas en los cuadros de dilogo
En los mensajes de los cuadros de dilogo, puede usar las siguientes constantes para insertar
algunos caracteres especiales.
Caracteres que desea insertar Constante Equivalente
Retorno de carro y salto de lnea vbCrLf Chr(13) + Chr(10)
Salto de prrafo vbCr Chr(13)
Salto de lnea vbLf Chr(10)
Caracter nulo vbNullChar Chr(0)
Cadena de longitud nula vbNullString ""
Tabulacin vbTab Chr(9)
Retroceso vbBack Chr(8)

Estas constantes pueden usarse en otras instrucciones adems de los cuadros de dilogo.
Ejemplo:
Para mostrar este cuadro de dilogo:
153 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


se utiliz el siguiente procedimiento:
Sub Identificacion()
MsgBox Prompt:="Usted es:" & vbCr & vbTab _
& Application.UserName _
& vbCrLf & vbTab & Application.OrganizationName
End Sub

154 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

6
66.
.. F
FFO
OOR
RRM
MMU
UUL
LLA
AAR
RRI
IIO
OOS
SS

6.1 Presentacin
Los formularios (tambin llamados cuadros de dilogo personalizados, formularios
personalizados, hojas del usuario o UserForm) permiten disponer de interfaces de usuario
simples y amigables para la introduccin, la modificacin o la visualizacin de datos.
Los formularios personalizados son cuadros de dilogo sobre los que se puede:
Ubicar controles ActiveX, tales como cuadros de entrada de texto, listas desplegables,
botones de comando, etc.
Asociar cdigo VBA para responder a distintos eventos del usuario (clic sobre un botn
de comando, introduccin en una zona de texto, seleccin en una lista desplegable,
etc.).

6.2 Crear un formulario
Un formulario se crea en una hoja UserForm.
Para insertar una hoja UserForm , acceda a Microsoft Visual Basic, y luego seleccione las
opciones Insertar - UserForm.
Se agregar una hoja llamada UserFormn (por ejemplo: UserForm1), aparecer un
formulario vaco y el cuadro de herramientas.
Para mostrar la ventana de propiedades, seleccione las opciones:
Men Icono Teclado
Ver Ventana Propiedades
(barra de herramientas Estndar)
[F4]

155 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


Para dimensionar el formulario, seleccinelo y arrastre los controladores de tamao o
indique las propiedades Height y Width del formulario.
La opcin Controles adicionales permite agregar otros controles desde la barra de herramientas.

6.3 Lista de controles
Herramienta Nombre Objeto

Etiqueta Label

Cuadro de texto TextBox

Cuadro combinado ComboBox

Cuadro de lista ListBox

Casilla de verificacin CheckBox

Botn de opcin OptionButton
156 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


Botn de alternar ToggleButton

Marco Frame

Botn de comando CommandButton

Barra de tabulaciones TabStrip

Pgina mltiple (seleccin de pginas) Multipage

Barra de desplazamiento ScrollBar

Botn de nmero (seleccin de valores) SpinButton

Imagen Image

RefEdit (seleccin de rangos) RefEdit
6.3.1 Crear un control
a. Seleccione el control que desea crear y arrastre el puntero para definir un rea rectangular.
b. Al soltar el botn del ratn, aparecer el control y la herramienta Seleccionar objetos ( ) pasar
a ser la herramienta activa.
Para dibujar varios controles del mismo tipo, haga doble clic en la herramienta correspondiente.
6.3.2 Propiedades de los controles
Propiedad Descripcin
(Name) Especifica el nombre del control o formulario
Caption Indica el texto de una etiqueta (control) o barra de titulo (formularios)
ControlTipText Crea una etiqueta informativa
Visible Especifica si un control est oculto o visible
Enabled
Determina si el foco puede estar sobre el control, es decir, si el control se
encuentra habilitado o deshabilitado
Value Define el estado o el contenido de un control
ControlSource
Vincula un control a una celda (cuadro de texto) o un rango de celdas (cuadro de
lista)
6.3.2.1 Determinar el acceso a un control
a. Para definir el orden de tabulacin, seleccione las opciones: Ver Orden de tabulacin
b. Para desactivar la posibilidad de usar la tecla [Tab] para acceder a un control, seleccione el
control e indique False en la propiedad TabStop.
157 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

c. Para asignar una tecla de acceso rpido, seleccione el control e indique la tecla de acceso en
la propiedad 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 y no el control Label propiamente dicho.
6.3.2.2 Dimensionar un control
a. 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 en puntos.
b. Para uniformizar los tamaos, seleccione los controles que desea dimensionar y luego en el
men del VBE la opcin Formato - Igualar tamao y , en funcin del tamao deseado, elija
Ancho, Alto o Ambos.
c. Para ajustar el tamao, seleccione los controles que desea ajustar y seleccione las opciones
Formato - Ajustar tamao al contenido o Ajustar tamao a la cuadrcula.
6.3.2.3 Ubicar un control
a. Para definir la posicin de un control, seleccione el control que desea mover y arrastre el
ratn o seleccione el control y asigne las propiedades Left y Top que indican la distancia
entre el control y el borde izquierdo y superior del formulario.
b. Para alinear controles entre ellos, seleccione los controles que desea alinear y luego en el
men del VBE la opcin Formato Alinear y, segn el control de referencia, elija: Izquierda,
Centro, Derecha, Superior, Medio, Inferior o A la cuadrcula
c. Para administrar el espaciado entre controles, seleccione los controles y luego en el men
del VBE la opcin Formato - Espacio horizontal o Espacio vertical y, en funcin del espacio
deseado, seleccione las opciones Igualar, Aumentar, Disminuir o Quitar.
d. Para centrar un control en el formulario, seleccione el control y luego en el men del VBE la
opcin Formato - Centrar en el formulario - Horizontalmente o Verticalmente
6.3.2.4 Aplicar formato
Para dar formato a los controles, asigne las siguientes propiedades:
Propiedad Descripcin
Font Define la tipografa
BackColor Especifica el color de fondo
ForeColor Especifica el color de primer plano
BorderColor Especifica el color del borde
BorderStyle Especifica el tipo de borde
158 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

SpecialEffect Especifica el aspecto del objeto en la pantalla

6.3.2.5 Administrar las futuras entradas
Propiedad Descripcin
PasswordChar
Indica el caracter que hay que mostrar en lugar de los caracteres reales
introducidos por el usuario
MaxLength Especifica el largo mximo de una entrada
AutoTab
Fuerza una tabulacin automtica cuando una entrada alcanza el mximo largo de
caracteres permitido
AutoSize Redimensiona automticamente un control para mostrar todo su contenido
AutoWordSelect
Especifica si una palabra o un caracter es la unidad bsica utilizada para extender la
seleccin
DragBehavior Indica si el sistema acepta la funcin arrastrar y soltar
EnterKeyBehavior Define el efecto de la tecla [Intro]
HideSelection
Indica si el texto seleccionado permanece resaltado cuando un control pierde el
foco
IntegralHeight
Indica si el control muestra las lneas completas de texto en una lista o lneas
parciales en el sentido vertical
Locked Indica si un control puede modificarse
MultiLine Define si un control puede aceptar y mostrar varias lneas de texto
SelectionMargin
Especifica si el usuario puede seleccionar una lnea de texto al hacer clic a la
izquierda del texto
TabKeyBehavior Determina si se permiten las tabulaciones en la zona de edicin
TextAlign Indica el tipo de alineacin del texto en un control
WordWrap
Indica si se agrega automticamente un retorno de carro al contenido de un
control al final de una lnea

6.3.2.6 Resumen de propiedades por objeto
CheckBox ComboBox
Command
Button
Frame Image Label ListBox MultiPage
(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
159 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

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
WordWrap X X X

OptionButton ScrollBar SpinButton TabStrip TextBox ToggleButton RefEdit
(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
160 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

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

6.4 Personalizar un formulario
6.4.1 Escribir procedimientos
a. Para mostrar la ventana de cdigo de un control: haga doble clic en el control para el que
desee asignar un cdigo, o seleccione el control, y seleccione las opciones:
Men Icono Teclado
Ver Cdigo
(Ventana Explorador de Proyectos)
[F7]
b. Para insertar un nuevo evento, abra la lista de la derecha y seleccione el evento deseado.

161 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Si no indica un evento, el evento sugerido para la mayora de los controles es el evento
Click.
c. Para volver a mostrar un control, seleccione las opciones:
Men Icono Teclado
Ver Objeto
(Ventana Explorador de Proyectos)
[Mayus][F7]
6.4.2 Lista de eventos
Evento Descripcin
Activate Ocurre cuando se activa la hoja
AddControl Ocurre cuando se inserta un control en una hoja
AfterUpDate Ocurre tras modificar datos
BeforeDragOver Ocurre cuando se est ejecutando una operacin de arrastrar y soltar
BeforeDropOrPaste Ocurre cuando el usuario est a punto de colocar o pegar datos en un objeto
BeforeUpDate Ocurre antes de la modificacin de datos
Change Ocurre cuando se modifica la propiedad Value
Click
Ocurre cuando el usuario hace clic en un control o cuando selecciona
definitivamente un valor para un control con ms de un valor posible
DblClick Ocurre cuando el usuario hace doble clic
Deactivate Ocurre cuando la hoja deja de ser la ventana activa
DropButtonClick Ocurre cada vez que se muestra o se oculta una lista desplegable
Enter
Ocurre antes de que un control reciba realmente el foco desde un control de la
misma hoja
Error
Ocurre cuando un control detecta un error y no puede devolver informacin del
error al programa que lo ha llamado
Exit
Ocurre inmediatamente antes de que un control pierda el foco en favor de otro
control de la misma hoja
Initialize Ocurre despus de que se carga un objeto, pero antes de que se muestre
KeyDown Ocurre cuando el usuario pulsa una tecla
KeyPress Ocurre cuando el usuario pulsa una tecla ANSI
KeyUp Ocurre cuando el usuario suelta una tecla
Layout Ocurre cuando cambia el tamao de un control
MouseDown Ocurre cuando el usuario pulsa el botn del ratn
MouseMove Ocurre cuando el usuario mueve el ratn
MouseUp Ocurre cuando el usuario suelta el botn del ratn
QueryClose Se produce antes de cerrar la hoja
RemoveControl Ocurre cuando se elimina el control del contenedor
Resize Se produce cuando cambia el tamao de la hoja
Scroll Ocurre cuando se vuelve a posicionar un cuadro de desplazamiento
SpinDown Ocurre cuando el usuario hace clic en la flecha inferior o izquierda del contador
162 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

SpinUp Ocurre cuando el usuario hace clic en la flecha superior o derecha del contador
Terminate Ocurre tras la descarga de la hoja
Zoom Ocurre cuando cambia el valor de la propiedad Zoom

6.4.3 Resumen de eventos por objeto
CheckBox ComboBox
Command
Button
Frame Image Label ListBox Multipage
Activate
AddControl X X
AfterUpDate 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
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


163 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

OptionButton ScrollBar SpinButton TabStrip TextBox ToggleButton UserForm RefEdit
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
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

6.4.4 Cancelar un evento
En ciertos casos, resulta necesario poder cancelar un evento.
Para ello, se debe asignar el valor True al argumento Cancel del procedimiento asociado a un
evento.


164 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Ejemplo:
Si la fecha introducida es incorrecta, se cancela el evento Exit: el cursor queda situado en la
zona de texto.
Private Sub txtFechaFin_Exit(ByVal Cancel As MSForms.ReturnBoolean)

If IsNull(txtFechaFin.Value) Then Exit Sub
'La fecha debe ser correcta
If Not IsDate(txtFechaFin.Value) Then
MsgBox "Fecha incorrecta", vbCritical
Cancel = True
Exit Sub
End If

'La fecha de fin debe ser = fecha de inicio
If DateValue(txtFechaFin.Value) < DateValue(txtFechaIni.Value) Then
MsgBox "La fecha de fin es anterior a la fecha de inicio", vbCritical
Cancel = True
Exit Sub
End If
End Sub

Solamente los eventos BeforeDragOver, BeforeDropOrPaste, BeforeUpdate,
DblClick, Exit, Error y QueryClose tienen un argumento Cancel. Los dems eventos
no pueden cancelarse.
6.4.5 Ejecucin y cierre de un formulario
a. Para ejecutar un formulario desde de la hoja UserForm, seleccione las opciones:
Men Icono Teclado
Ejecutar Ejecutar Sub/UserForm
(barra de herramientas Estndar)
[F5]

b. Para ejecutar un formulario desde un mdulo, use el mtodo Show o la instruccin Load.
Show (mtodo): Muestra el objeto UserForm indicado.
Sintaxis:
ObjetoUserForm.Show
Load (instruccin): Carga el objeto sin mostrarlo
165 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Sintaxis
Load ObjetoUserForm
c. Para cerrar un formulario, use el mtodo Hide o la instruccin Unload.
Hide (mtodo): Oculta el formulario sin descargarlo
Sintaxis:
ObjetoUserForm.Hide
Unload (instruccin): Elimina el formulario de la memoria
Sintaxis:
Unload ObjetoUserForm
6.4.6 Eventos invocados
Los mtodos e instrucciones de ejecucin y de cierre de formularios desencadenan los
siguientes eventos:
Mtodo o instruccin Eventos
Show
Initialize
Activate
Load Initialize
Hide Sin evento
Unload
QueryClose
Terminate

6.5 Ejemplo de formulario personalizado
6.5.1 Presentacin
Este ejemplo muestra cmo crear un formulario personalizado para introducir o modificar las
fichas "empleados". El libro Empleados.xls contiene dos hojas de clculo y un formulario.
La hoja "Empleados" contiene la lista de empleados:
166 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.



La hoja "Servicios" contiene la lista de servicios:

El formulario Empleados permite:
Modificar la informacin de un empleado y actualizar la hoja Excel Empleados,
Crear un nuevo empleado y agregarlo a la lista de la hoja Excel Empleados.
La lista de servicios se lee desde la hoja Servicios.
167 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.



Lista de controles del formulario Empleados:
# Tipo de control Nombre
1 Cuadro de lista lstEmpleados
2 Botn de comando cmdNuevo
3 Botn de opcin optSra
4 Botn de opcin optSrta
5 Botn de opcin optSr
6 Cuadro de texto txtApellido
7 Cuadro de texto txtNombre
8 Cuadro de lista lstServicios
9 Botn de comando cmdAceptar
10 Botn de comando cmdCerrar
6.5.2 Cdigo asociado al botn macro de la ficha Empleados
Este cdigo est contenido en el mdulo de clase ThisWorkbook.
Sub Mostrar_Formulario()
'Muestra el formulario Empleados
Empleados.Show
End Sub
168 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

6.5.3 Cdigo VBA asociado al formulario
Option Explicit

'Nombre de la aplicacin
Const strAppName = "Introduccin de empleados"
Dim bNuevo As Boolean



Private Sub UserForm_Initialize()
Dim rng As Range
Dim cell As Range
'Muestra la lista de servicios
With ThisWorkbook.Worksheets("Servicios")
.Activate
Set rng = .Range("A1").CurrentRegion
'Ordena los servicios por orden alfabtico
rng.Sort Key1:=Range("A1")
lstServicios.Clear
For Each cell In rng
If cell.Text <> "" Then
lstServicios.AddItem cell.Text
Else
Exit For
End If
Next cell
End With
'Muestra la lista de empleados
Call Mostrar_Empleados
lstEmpleados.ListIndex = 0
'Nuevo empleado por defecto
bNuevo = True
End Sub



Private Sub Mostrar_Empleados()
Dim rng As Range
Dim linea As Range
'Muestra la lista de empleados
With ThisWorkbook.Worksheets("Empleados")
.Activate
Set rng = .Range("A3").CurrentRegion
Set rng = .Range("A4:D" & rng.Rows.Count + 3)
lstEmpleados.Clear
For Each linea In rng.Rows
If Cells(linea.row, 2).Value <> "" Then
lstEmpleados.AddItem Cells(linea.row, 2).Value & " " & _
Cells(linea.row, 3).Value
Else
Exit For
End If
Next linea
169 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

End With
End Sub



Private Sub cmdAceptar_Click()
Dim rng As Range
Dim i As Integer
'Control de datos introducidos
If txtNombre.Value = "" Or txtApellido.Value = "" _
Or IsNull(lstServicios.Value) Then
MsgBox "Nombre, apellido y servicio obligatorio", _
vbExclamation, strAppName
txtNombre.SetFocus
Exit Sub
End If
If Not (optSr.Value Or optSra.Value Or optSrta.Value) 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 rng = .Range("A3").CurrentRegion
i = rng.Rows.Count + 3
Else
'Modificacin del empleado seleccionado
i = lstEmpleados.ListIndex + 4
End If
If optSr.Value Then
.Cells(i, 1).Value = "Sr."
ElseIf optSra.Value Then
.Cells(i, 1).Value = "Sra."
Else
.Cells(i, 1).Value = "Srta."
End If
.Cells(i, 3).Value = Empleados.txtNombre.Value
.Cells(i, 2).Value = Empleados.txtApellido.Value
.Cells(i, 4).Value = Empleados.lstServicios.Value
'Ordenar empleados
Call Ordenar_Empleados
End With
'Muestra la lista de empleados
If bNuevo Then Call Mostrar_Empleados
Call Inicializa_Empleados
End Sub



Private Sub cmdCerrar_Click()
'Pide confirmacin y cierra el formulario
If MsgBox("Desea terminar el ingreso?", _
vbQuestion + vbYesNo, strAppName) = vbYes Then
Unload Me
170 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

End If
End Sub



Private Sub cmdNuevo_Click()
'Inicializa la ficha Empleados
Call Inicializa_Empleados
bNuevo = True
End Sub



Private Sub Ordenar_Empleados()
Dim rng As Range
'Ordena la lista de empleados por apellido y nombre
Set rng = Worksheets("Empleados").Range("A3").CurrentRegion
rng.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 introduccin
With Empleados
txtNombre.Value = ""
txtApellido.Value = ""
optSr.Value = False
optSra.Value = False
optSrta.Value = 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).Value
Case "Sr.": optSr.Value = True
Case "Sra.": optSra.Value = True
Case "Srta.": optSrta.Value = True
End Select
Empleados.txtNombre.Value = .Cells(i, 3).Value
Empleados.txtApellido.Value = .Cells(i, 2).Value
For j = 0 To Empleados.lstServicios.ListCount - 1
171 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

If Empleados.lstServicios.List(j) = .Cells(i, 4).Value Then
Empleados.lstServicios.ListIndex = j
End If
Next j
End With
End Sub


172 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

7
77.
.. B
BBA
AAR
RRR
RRA
AAS
SS D
DDE
EE C
CCO
OOM
MMA
AAN
NND
DDO
OOS
SS Y
YY M
MME
EEN
NN
S
SS

7.1 Presentacin
En Microsoft Office 2007, la interfaz de usuario de las versiones anteriores de Excel (formada
por barras de herramientas y de mens) se reemplaza por la Cinta de opciones, compuesta por
diferentes fichas.
De todas formas, la coleccin Commandbars (coleccin de las barras de herramientas y de
mens de Excel) sigue funcionando en Excel 2007. Esto permite acceder al conjunto de barras,
paneles de tareas y mens de Excel (barras de comandos, barra de estado, barra de frmulas,
mens contextuales, paneles Office, etc.).
El acceso a esta coleccin permite realizar las siguientes operaciones con la ayuda del lenguaje
VBA:
Crear barras de herramientas personalizadas: estas barras se ubican automticamente
en el grupo Barras personalizadas de la ficha Complementos (ltima ficha de la derecha)
y su aspecto es el de las barras de herramientas de las versiones anteriores de Excel
Crear barras de mens personalizadas: se ubican en la ficha Complementos o en una
hoja Excel bajo la forma de mens contextuales (mens "popup")
Crear una barra de comandos personalizada en formato de Office 2007
Personalizar los comandos asignndoles macros.

Todas las barras creadas se insertan en la ficha Complementos de la cinta de opciones.
Es imposible, en la versin 2007, ocultar o reorganizar los comandos de las fichas de la
cinta de opciones.

173 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

7.2 Ejemplos de barras de comandos
7.2.1 Barras de herramientas personalizadas

Se muestran dos barras de comandos: una barra de herramientas y una barra de mens.

7.2.2 Grupo "Comandos de mens" en formato Office 2007

7.2.3 Agregar un comando a la barra de herramientas de
acceso rpido
Las barras de comandos as creadas pueden hacerse accesibles desde la barra de herramientas
de acceso rpido de la siguiente manera:
a. Ubique el cursor bajo la barra de comandos y haga clic con el botn derecho del ratn
b. Seleccione la opcin Agregar a la barra de herramientas de acceso rpido.

174 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Normalmente, las barras de comandos son accesibles a travs de botones de comandos
agregados a la barra de herramientas de acceso rpido:
a. Barras de herramientas personalizadas

b. Comandos de mens


7.3 Barras de comandos
7.3.1 Terminologa
7.3.1.1 Barra de comandos
Representa las barras de herramientas de Excel, las barras de herramientas personalizadas y las
barras de mens.
7.3.1.2 Control
Representa un comando (botn de comando, opcin de men, etc.) de una barra de comandos.
7.3.2 Crear una barra de comandos
CommandBars.Add(Name, Position, MenuBar, Temporary)
175 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Este mtodo devuelve un objeto CommandBar.
Name: Nombre de la nueva barra de comandos.
Position: Posicin de la nueva barra; puede adoptar una de las siguientes constantes:
msoBarLeft a la izquierda
msoBarTop arriba
msoBarRight a la derecha
msoBarBottom abajo
msoBarFloating no anclada
msoBarPopup men contextual
MenuBar: Recibe el valor True si la nueva barra debe reemplazar la barra activa (esta
configuracin est inactiva en la versin 2007).
Temporary: Recibe el valor True en el caso de una barra temporal; las barras
temporales se eliminan al cerrar la aplicacin.
Ejemplo:
Creacin de una barra de men y de una barra de herramientas. Estas barras solamente sern
visibles despus de agregar los controles asociados.
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

Atencin: si el cdigo est escrito en el mdulo de clase ThisWorkbook, es necesario indicar el
objeto Application (ejemplo: Application.CommandBars).
7.3.3 Eliminar una barra de comandos
Expression.Delete
Expression: Expresin que devuelve el objeto CommandBar que hay que eliminar.
176 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Ejemplo:
Eliminar la barra de men y la barra de herramientas (indispensable antes de crear nuevamente
las barras).
Sub Eliminar_Barras()
'Elimina las barras de comandos personalizadas
Application.CommandBars("Menu1").Delete
Application.CommandBars("Menu2").Delete
End Sub
Las barras de comandos tambin pueden referenciarse por el nombre de la variable objeto.
Sub Eliminar_Barras()
'Elimina las barras de comandos personalizadas
Barra1.Delete
Barra2.Delete
End Sub
7.3.4 Mostrar una barra de comandos
La propiedad Visible permite mostrar u ocultar una barra de comandos. Despus de crear
una barra de comandos, la propiedad Visible tiene el valor False.
La propiedad Enabled permite activar o desactivar una barra de comandos. Si una barra de
comandos est desactivada (Enabled = False), sta se elimina de la lista de barras de
herramientas; la propiedad Visible no estar ms disponible.
Ejemplo:
Muestra la barra de comandos Menu2 despus de verificar que sta se encuentra disponible.
Sub Mostrar_Barras()
'Muestra la barra de herramientas Menu2
If Application.CommandBars("Menu2").Enabled = False Then
Application.CommandBars("Menu2").Enabled = True
End If
Application.CommandBars("Menu2").Visible = True
End Sub



177 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

7.4 Controles de las barras de comandos
La coleccin de objetos CommandBarControls representa todos los controles de una barra
de comandos.
Para acceder a esta coleccin, use la propiedad Controls de los objetos CommandBar y
CommandBarPopup.

7.4.1 Agregar un control
Expression.Controls.Add(Type, Id, Parameter, Before, Temporary)
Este mtodo devuelve un objeto CommandBarButton, CommandBarComboBox o
CommandBarPopUp, que son objetos de tipo CommandBarControls.
Expression: Expresin que devuelve un objeto CommandBar; obligatorio.
Type: Tipo de control que hay que agregar; puede ser una de las siguientes constantes:
msoControlButton herramienta u opcin de men
msoControlEdit cuadro de entrada
msoControlDropDown cuadro de lista
msoControlComboBox cuadro de lista
msoControlPopUp men contextual
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 enviar informacin a los procedimientos Visual Basic o para almacenar la informacin
en el control.
Before: Nmero que indica la posicin del nuevo control en la barra de comandos; si no
se especifica este argumento, el control se agrega al final de la barra de comandos.
Temporary: Recibe el valor True en el caso de un control temporal; los controles
temporales se suprimen cuando se cierra la aplicacin Excel.
7.4.2 Especificar el ttulo de un control
Use la propiedad Caption del control. En el caso de un men, esta propiedad indica su ttulo;
en el caso de un botn, indica la etiqueta informativa que aparece.
178 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

7.4.3 Eliminar un control
Expression.Delete
Expression: Expresin que devuelve el objeto CommandBarControls que hay que
eliminar.


7.4.4 Asociar un procedimiento a un control
Use la propiedad OnAction del control. El nombre del procedimiento que desea asociar al
control debe indicarse entre comillas.
Para mostrar la tecla de mtodo abreviado del procedimiento asociado, use la propiedad
ShortCutText del objeto CommandBarButton.
7.4.5 Otras propiedades
Para activar o desactivar un control, use la propiedad Enabled del control.
Para modificar el aspecto de la imagen de un botn, use la propiedad FaceId del objeto
CommandBarButton.
Esta propiedad define el aspecto del botn y no su funcin.
Ejemplos:
Agregar un botn de comando personalizado a la barra de herramientas Menu2. Este botn
abre el cuadro de dilogo Guardar 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
179 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Procedimiento GuardarComo:
Sub GuardarComo()
'Cuadro de dilogo guardar como
Application.Dialogs(xlDialogSaveAs).Show
End Sub
Agregar el men Archivo y la opcin Guardar como a la barra de comandos Menu1.
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"
'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
'Action "GuardarComo"
m_Option.OnAction = "GuardarComo"
End Sub
7.4.6 Lista de imgenes asociadas a los botones de comando
El siguiente procedimiento muestra, en la hoja Excel activa, la lista de imgenes que se pueden
asociar a los botones de comando (propiedad FaceId) y su nmero correspondiente.
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 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).Value = numImagen
180 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

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

El resultado obtenido es el siguiente:


181 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

7.5 Ejemplos de mens personalizados
7.5.1 Presentacin

Este ejemplo crea las siguientes barras de comandos:
Una barra de men con el ttulo "Men Gastos" que permite acceder a las siguientes
opciones:
182 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.




Una barra de men con el ttulo "Gastos":

Un grupo de comandos con el ttulo "Comandos de men":

Una barra de men contextual que aparece cuando el usuario se posiciona en la zona
llamada "Empleado" y hace clic con el botn secundario del ratn. Los empleados se
extraen de la base Access Empleados.accdb (base disponible con los ejemplos del libro).
183 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


7.5.2 Cdigo de los ejemplos
Para crear los mens del siguiente ejemplo, se deben realizar las siguientes operaciones:
a. Crear el documento Excel
b. Definir un rea de impresin
c. Definir un rango de celdas con el nombre "Empleado" que incluya las celdas Apellido y el
nmero de empleado;
d. Definir un rango de celdas con el nombre "NotaDeGastos" que incluya las celdas que hay
que imprimir;
e. Asignar los siguientes nombres a las celdas que contienen la informacin del empleado:
apellido, nmemp, funcin, ciudad;
f. Agregar un mdulo estndar llamado ProcMenus; este mdulo contendr los
procedimientos para crear las diferentes barras de comandos;
g. Agregar un mdulo estndar llamado ProcAcciones; este mdulo contendr los
procedimientos personalizados asociados a los botones de comandos.
7.5.3 Cdigo del mdulo de clase ThisWorkbook
Option Explicit



Private Sub Workbook_Open()
'Muestra los mens personalizados
Call Personalizar_Excel
'Ajusta el zoom
Call Ajuste
End Sub

184 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.



Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Pide confirmacin del cierre del libro
If MsgBox("Desea cerrar el libro?", _
vbQuestion & vbYesNo, "Nota de Gastos") = vbYes Then
'Muestra los mens de Excel
Call Restaurar_Excel
Else
Cancel = True
End If
End Sub
7.5.4 Cdigo de la hoja "Nota de Gastos"
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
7.5.5 Cdigo del mdulo ProcMenus
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
Call Mostrar_Barra_Mens
Call Mostrar_Barra_Herramientas
Call Mostrar_Barra_Comandos
'Men contextual Lista de empleados
Call 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

185 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.



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
'de la barra de comando 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 zoom
Set m_Option = m_Menu.Controls.Add(Type:=msoControlComboBox, ID:=1733)
'Agrega los comandos del men Ver
'con el llamado a los procedimientos accin
Set m_Option = m_Menu.Controls.Add(Type:=msoControlButton)
186 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

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 el llamado a los procedimientos accin
Set m_Option = m_Menu.Controls.Add(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 comandos 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 zoom
Set m_Option = m_Barra.Controls.Add(Type:=msoControlComboBox, ID:=1733)
'Agrega la opcin " Restaurar Excel "
187 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

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(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 comandos 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"
.Caption = "Bordes"
188 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

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 Numemp 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")
Numemp = rstEmp("N de empleado")
.OnAction = "Mostrar_Empleado(" & Numemp & ")"
End With
rstEmp.MoveNext
Loop
'Cierra los objetos Access
rstEmp.Close
Db.Close
End Sub
7.5.6 Cdigo del mdulo ProcAction
Sub Ajuste()
'Ajusta el zoom al contenido
'del rango llamado "NotaDeGastos"
189 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Application.Goto Reference:="NotaDeGastos"
ActiveWindow.Zoom = True
Range("Apellido").Select
End Sub



Sub Mostrar_Empleado(Numemp 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 [N de empleados] = " & Numemp
Set rstEmp = Db.OpenRecordset(strSql)
'Muestra las coordenadas del empleado seleccionado
Range("Apellido") = UCase(rstEmp("Apellido")) & " " & rstEmp("Nombre")
Range("Numemp") = rstEmp("N de empleados")
Range("Funcion") = rstEmp("Funcion")
Range("Ciudad") = rstEmp("Ciudad")
'Cierra los objetos 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 Salir_Apli()
'Pide confirmar el cierre de la aplicacin
If MsgBox(mensSalir, vbQuestion + vbYesNo, p_sAppName) = vbYes Then
On Error Resume Next
ActiveWorkbook.Close
Application.Quit
End If
190 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

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

191 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

8
88.
.. A
AAD
DDM
MMI
IIN
NNI
IIS
SST
TTR
RRA
AAC
CCI
II
N
NN D
DDE
EE E
EEV
VVE
EEN
NNT
TTO
OOS
SS

8.1 Presentacin
Un evento es una accin del usuario o del sistema reconocido por un objeto de Microsoft Excel.
El evento desencadena un procedimiento asociado al evento del objeto activo.
Estos procedimientos le permiten asociar un cdigo personalizado en respuesta a un evento que
se produce en un objeto Excel (libro, hoja, formulario, grfico, etc.).


8.2 Escritura de eventos
8.2.1 Eventos de libro, de hoja o de formulario
Usted puede acceder a los procedimientos de eventos asociados a un objeto de la siguiente
manera:
a. En la ventana Explorador de proyectos, haga doble clic en el objeto deseado (libro, hoja
o formulario) para hacer aparecer la ventana de cdigo correspondiente.
192 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

b. Abra la lista desplegable a la izquierda de la ventana de cdigo y seleccione Workbook,
Worksheet o UserForm, segn el objeto seleccionado.
c. Tambin puede seleccionar un evento vinculado al objeto seleccionado en la lista
desplegable de la derecha para asociarle un cdigo personalizado.
La ejecucin de los procedimientos de eventos puede desactivarse en cualquier momento
asignando el valor False a la propiedad EnableEvents del objeto Application.
Ejemplo:
Este ejemplo muestra cmo obtener un listado histrico de todos los hipervnculos visitados en la
hoja de clculo activa.

Resultado en Excel:
193 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


8.2.2 Eventos del objeto Application
Se necesitan tres etapas para la escritura y ejecucin de los eventos del objeto Application.
8.2.2.1 Etapa 1
a. Inserte un mdulo de clase: Men Insertar - Mdulo de clase o abra la lista y haga
clic en Mdulo de clase.
b. Una vez insertado el mdulo, asgnele un nombre.
Ejemplo:
Dele el nombre ObjApplication al mdulo de clase.
8.2.2.2 Etapa 2
a. En el mdulo de clase, cree un objeto Application con el siguiente cdigo:
Public WithEvents NomObjeto As Application
Ejemplo:
Creacin del objeto MiAplicacion como aplicacin.
Public WithEvents MiAplicacion As Application
El objeto as creado queda disponible en la lista de la izquierda del mdulo.
194 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

b. Seleccione el objeto creado en la lista de la izquierda del mdulo y luego seleccione el
evento esperado en la lista de la derecha. Escriba el cdigo de los procedimientos que
desea generar.
Ejemplo:
Creacin de dos procedimientos de eventos: el primero realiza la insercin de una nueva
hoja; el segundo, la creacin de un nuevo libro.
Public WithEvents MiAplicacion As Excel.Application



Private Sub MiAplicacion_WorkbookNewSheet(ByVal Wb As Workbook, _
ByVal Sh As Object)
Dim NomHoja As String
'Cada vez que se agrega una hoja se pide al usuario
'que introduzca un nombre que a continuacin se destinar a la hoja
'insertada tras las hojas existentes
NomHoja = InputBox("Introduzca el nombre de la hoja")
ActiveSheet.Name = NomHoja
ActiveSheet.Move After:=Sheets(Sheets.Count)
End Sub



Private Sub MiAplicacion_NewWorkbook(ByVal Wb As Workbook)
Dim NbHojas As Integer
Dim NbActual As Integer
Dim Diferencia As Integer
'Por cada nuevo libro,
'solicitamos al usuario la cantidad de hojas
'Segn el caso, se agregan o eliminan las hojas necesarias
Do
NbHojas = Application.InputBox("Cantidad de hojas?", Type:=1)
Loop While NbHojas = False
NbActual = Sheets.Count
Diferencia = NbActual - NbHojas
'Eliminar las hojas de ms
'Supresin de los mensajes de alerta con el fin
'de no obtener mensajes en la supresin de hojas
Do While Diferencia > 0
Application.DisplayAlerts = False
Sheets.Item(Diferencia).Select
ActiveWindow.SelectedSheets.Delete
Diferencia = Diferencia - 1
Loop

'Agregar hojas necesarias
'Se desactivan los eventos para
'no indicar los nombres de las nuevas hojas
Do While Diferencia < 0
Application.EnableEvents = False
195 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Sheets.Add
Diferencia = Diferencia + 1
Loop
'Reactivar eventos y alertas
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
8.2.2.3 Etapa 3
a. Active un mdulo cualquiera y conecte el objeto declarado en el mdulo de clase con el
objeto Application para las siguientes instrucciones:
Dim NomVariable As New NomModuloDeClase

Sub NomProced()
Set NomVariable.NomObjeto = Application
End Sub
Ejemplo:
Agregue el siguiente cdigo en el mdulo Declaraciones.
Option Explicit
Dim app As New ObjApplication



Sub InicializaMiAplicacion()
Set app.MiAplicacion = Application
End Sub
Finalmente llame al procedimiento InicializaMiAplicacion al abrir el libro
(mdulo de clase ThisWorkbook).
Private Sub Workbook_Open()
Call InicializaMiAplicacion
End Sub
Cuando se abra el libro, se ejecutarn automticamente los procedimientos de eventos creados
durante la etapa 2 y se agregarn los libros o las hojas. Estos procedimientos se desactivarn al
cerrar el libro.
8.2.3 Evento asociado a un grfico incrustado
La coleccin Charts (del objeto Workbook) contiene todos los grficos del libro especificado.
196 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Se necesitan tres etapas para la escritura y la ejecucin de los eventos asociados a un grfico
incrustado.
8.2.3.1 Etapa 1
a. Inserte un mdulo de clase: Men Insertar - Mdulo de clase o abra la lista y haga
clic en Mdulo de clase.
b. Una vez insertado el mdulo, asgnele un nombre.
Ejemplo:
Dele el nombre ObjGraficos al mdulo de clase.
8.2.3.2 Etapa 2
a. En el mdulo de clase, cree un objeto grfico para el siguiente cdigo:
Public WithEvents NomObjeto As Chart
Ejemplo:
Creacin del objeto llamado Chart1 como grfico incrustado.
Public WithEvents Chart1 As Chart
El objeto as creado queda disponible en la lista de la izquierda del mdulo.
b. Seleccione el objeto creado en la lista de la izquierda del mdulo y luego seleccione el
evento esperado en la lista de la derecha. Escriba el cdigo de los procedimientos que
desea generar.
Ejemplo:
Creacin de dos procedimientos de eventos: uno desactiva el grfico, el otro especifica sus
dimensiones.
Option Explicit
Public WithEvents Chart1 As Chart



Private Sub Chart1_Deactivate()
Dim Respuesta As String
'Cada vez que se desactiva el grfico
197 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

'se pregunta si hay que guardar el libro
Respuesta = MsgBox("Guardar los cambios?", vbYesNo)
If Respuesta = vbYes Then ActiveWorkbook.Save
End Sub



Private Sub Chart1_Resize()
Dim Grafico As Object
'Cada vez que cambia el tamao del grfico
'se muestran la primera y la ltima celda oculta
Set Grafico = Worksheets(2).ChartObjects(1)
MsgBox "Este grfico oculta la celda: " _
& Grafico.TopLeftCell.Address _
& Chr(13) & "hasta la celda: " _
& Grafico.BottomRightCell.Address
End Sub
8.2.3.3 Etapa 3
a. Active un mdulo cualquiera y conecte el objeto declarado en el mdulo de clase con el
objeto grfico incrustado para las siguientes instrucciones:
Dim NomVariable As New NomModuloDeClase

Sub NomProced ()
Set NomVariable.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()
Set obj.Chart1 = Worksheets(2).ChartObjects(1).Chart
End Sub
Finalmente, llame al procedimiento InitMiAplicacion al abrir el libro (mdulo de
clase ThisWorkbook).

198 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Private Sub Workbook_Open()
Call 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 desactivarn al cerrar el libro.

8.3 Eventos del objeto Application
Evento Descripcin
CalculateUntilAsyncQueriesDone
Ejecuta todas las consultas en curso en las fuentes de datos OLEDB
y OLAP
NewWorkBook Ocurre al crear un nuevo libro
SheetActivate Ocurre al activar una hoja
SheetBeforeDoubleClick
Ocurre al hacer doble clic en una hoja de clculo, antes de la
accin predeterminada para el doble clic
SheetBeforeRightClick
Ocurre al hacer clic con el botn secundario del ratn en una hoja
de clculo, antes de la accin predeterminada
SheetCalculate
Ocurre cuando se recalcula toda la hoja de clculo o despus de
que se actualiza un grfico al modificar sus datos
SheetChange
Ocurre cuando las celdas de una hoja de clculo se modifican por
el usuario o por un vnculo externo
SheetDeactivate Ocurre al desactivar una hoja de clculo
SheetFollowHyperlink
Ocurre cuando el usuario hace clic en un hipervnculo en Microsoft
Excel
SheetPivotTableUpdate Ocurre al actualizar la hoja de informe de una tabla dinmica
SheetSelectionChange
Ocurre cuando cambia la seleccin en cualquier hoja de clculo (el
evento no ocurre si la seleccin se hace sobre una hoja de grfico)
WindowActivate Ocurre al activar una ventana de libro
WindowDeActivate Ocurre cuando se desactiva una ventana de libro
WindowResize Ocurre al cambiar el tamao de una ventana de libro
WorkBookActivate Ocurre cuando se activa un libro
WorkBookAddinInstall
Ocurre cuando se instala un libro bajo la forma de una macro
complementaria
WorkBookAddinUninstall Ocurre cuando se desinstala una macro complementaria
WorkbookAfterXMLExport Ocurre despus de exportar un archivo XML
WorkbookAfterXMLImport Ocurre despus de importar un archivo XML
WorkBookBeforeClose Ocurre justo antes de cerrar un libro
WorkBookBeforePrint Ocurre antes de imprimir un libro abierto
WorkBookBeforeSave Ocurre antes de guardar un libro abierto
199 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

WorkbookBeforeXMLExport Ocurre antes de exportar un archivo XML
WorkbookBeforeXMLImport Ocurre antes de importar un archivo XML
WorkBookDeactivate Ocurre cuando se desactiva un libro abierto
WorkBookNewSheet Ocurre cuando se crea una nueva hoja en un libro abierto
WorkBookOpen Ocurre cuando se abre un libro
WorkbookPivotTableOpenConnection
Ocurre al abrir la conexin de un informe de tabla dinmica con su
fuente de datos
WorkbookPivotTableCloseConnection
Ocurre al cerrar la conexin de un informe de tabla dinmica con
su fuente de datos
WorkbookRowsetComplete
Ocurre cuando el usuario extrae el juego de grabacin de una tabla
dinmica OLAP
WorkbookSync
Ocurre al sincronizar la copia local de una hoja de clculo hecha a
partir de un rea de trabajo con la copia en el servidor

8.4 Eventos del objeto Workbook
Evento Descripcin
Activate Ocurre cuando se activa el libro
AddinInstall Ocurre cuando el libro se instala bajo la forma de una macro complementaria
AddinUninstall
Ocurre cuando el libro se desinstala bajo la forma de una macro
complementaria
AfterXMLExport Ocurre despus de exportar un archivo XML
AfterXMLImport Ocurre despus de importar un archivo XML
BeforeClose
Ocurre antes de cerrar el libro; si el libro fue modificado, este evento se
produce antes de invitar al usuario a guardar los cambios
BeforePrint Ocurre antes de imprimir el libro (o cualquiera de sus partes)
BeforeSave Ocurre antes de grabar el libro
BeforeXMLExport Ocurre antes de exportar un archivo XML
BeforeXMLImport Ocurre antes de importar un archivo XML
Deactivate Ocurre al desactivar un grfico, una hoja de clculo o un libro
NewSheet Ocurre cuando se crea una nueva hoja en el libro
Open Ocurre cuando se abre el libro
PivotTableOpenConnection
Ocurre al abrir la conexin de un informe de tabla dinmica con su fuente de
datos
PivotTableCloseConnection
Ocurre al cerrar la conexin de un informe de tabla dinmica con su fuente de
datos
RowsetComplete
Este evento se desencadena cuando el usuario extrae el juego de grabacin de
una tabla dinmica OLAP
SheetActivate Ocurre cuando se activa una hoja
SheetBeforeDoubleClick
Ocurre al hacer doble clic en una hoja de clculo, antes de la accin
predeterminada para el doble clic
200 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

SheetBeforeRightClick
Ocurre al hacer clic con el botn secundario del ratn en una hoja de clculo,
antes de la accin predeterminada
SheetCalculate
Ocurre cuando se recalcula toda la hoja de clculo o despus de que se
recalcula un grfico al modificar sus datos
SheetChange
Ocurre cuando las celdas de una hoja de clculo se modifican por el usuario o
por un vnculo externo
SheetDeactivate Ocurre cuando se desactiva una hoja de clculo
SheetFollowHyperlink Se produce al hacer clic en cualquier hipervnculo en Microsoft Excel
SheetPivotTableUpdate Ocurre al actualizar la hoja del informe de tabla dinmica
SheetSelectionChange
Se produce cuando cambia la seleccin en una hoja de clculo cualquiera (el
evento no se produce si la seleccin est en una hoja de grfico)
Sync
Ocurre al sincronizar la copia local de una hoja de clculo hecha a partir de un
rea de trabajo con la copia en el servidor
WindowActivate Ocurre al activar un libro
WindowDeActivate Ocurre al desactivar un libro
WindowResize Ocurre cuando cambia el tamao de la ventana

8.5 Eventos del objeto Worksheet
Evento Descripcin
Activate
Ocurre cuando se activa un libro, una hoja de clculo, una hoja de grfico o un
grfico incrustado
BeforeDoubleClick
Ocurre al hacer doble clic en una hoja de clculo o un grfico incrustado, antes de
la accin predeterminada para el doble clic
BeforeRightClick
Ocurre al hacer clic con el botn secundario del ratn en una hoja de clculo o un
grfico incrustado, antes de la accin predeterminada
Calculate Ocurre al recalcular la hoja de clculo
Change
Ocurre cuando algunas celdas de la hoja de clculo estn modificadas por el
usuario o por un vnculo externo
Deactivate Ocurre al desactivar el grfico, la hoja de clculo o el libro
FollowHyperlink Ocurre al hacer clic en un hipervnculo de una hoja de clculo
PivotTableUpdate Ocurre despus de actualizar un informe de tabla dinmica en una hoja de clculo
SelectionChange Ocurre cuando cambia la seleccin en una hoja de clculo



201 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

8.6 Eventos del objeto Chart
Evento Descripcin
Activate Ocurre cuando se activa una hoja de grfico o un grfico incrustado
BeforeDoubleClick
Ocurre al hacer doble clic en un grfico incrustado o una hoja de grfico, antes de
la accin predeterminada para el doble clic
BeforeRightClick
Ocurre al hacer clic con el botn secundario en un grfico incrustado o una hoja de
grfico, antes de la accin predeterminada correspondiente
Calculate Ocurre despus de que el grfico se actualice con datos nuevos o modificados
Deactivate Ocurre cuando se desactiva el grfico, la hoja de clculo o el libro
DragOver Ocurre al arrastrar un rango de celdas sobre un grfico
DragPlot Ocurre al arrastrar y colocar un rango de celdas sobre un grfico
MouseDown
Ocurre al presionar el botn izquierdo o derecho del ratn cuando el puntero est
sobre un grfico
MouseMove Ocurre al cambiar la posicin del puntero del ratn sobre un grfico
MouseUp
Ocurre al soltar el botn izquierdo o derecho del ratn cuando el puntero est
sobre un grfico
Resize Se produce al cambiar el tamao del grfico
Select Se produce al seleccionar un elemento del grfico
SeriesChange Ocurre cuando el usuario modifica el valor de un punto de datos del grfico

202 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

9
99.
.. D
DDE
EEP
PPU
UUR
RRA
AAC
CCI
II
N
NN Y
YY A
AAD
DDM
MMI
IIN
NNI
IIS
SST
TTR
RRA
AAC
CCI
II
N
NN D
DDE
EE
E
EER
RRR
RRO
OOR
RRE
EES
SS

9.1 Diferentes tipos de error
Se distinguen diferentes tipos de error en el lenguaje VBA:
Errores de sintaxis
Errores de compilacin
Errores de ejecucin
Errores de lgica
9.1.1 Errores de sintaxis
Los errores de sintaxis se detectan automticamente a medida que se introduce el cdigo en
VBA.
Para activar la comprobacin de sintaxis, en el men Herramientas, seleccione Opciones,
luego seleccione la ficha Editor y marque la casilla Comprobacin de sintaxis automtica.
Ejemplo:

203 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Los errores de sintaxis no corregidos provocarn un error de compilacin, de ah el
mensaje que aparece.

9.1.2 Errores de compilacin
Los errores de compilacin se detectan cuando Excel trata de compilar el cdigo.
El cdigo VBA puede compilarse de dos maneras:
A pedido, al seleccionar la opcin Compilar VBAProject del men Depuracin.
En este caso, el cdigo se compila en su totalidad.
Automticamente al ejecutar el cdigo. En este caso, solamente se compila el cdigo
contenido en los procedimientos cuando son llamados por primera vez. Los
procedimientos no llamados no se compilarn.
Se recomienda compilar el programa antes de ejecutarlo para ganar tiempo en la
actualizacin.
Ejemplo:

204 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Es posible anticipar los errores de ejecucin debidos a las variables no declaradas usando
la instruccin Option Explicit. Si trata de usar un nombre de variable no
declarado, se produce un error durante la compilacin.

9.1.3 Errores de ejecucin
Los errores de ejecucin se detectan cuando Excel trata de ejecutar el cdigo. Una instruccin,
una operacin, una llamada a una funcin, etc. invlidas provocan un error de ejecucin. Por
ejemplo, el uso de un ndice errneo en una coleccin o la asignacin de un valor no numrico a
una variable numrica pueden provocar un error de ejecucin.
Ejemplo:
La hoja de clculo "Enero" no existe en el libro activo.


205 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

9.1.4 Errores de lgica
Los errores de lgica tienen que ver con errores de razonamiento o con una mala traduccin de
un razonamiento en cdigo VBA. Por ejemplo, un algoritmo de clculo puede producir un error
en el resultado si en su transcripcin a VBA, si se omite o se traduce mal una operacin o si el
algoritmo es errneo.
Los errores de lgica son los ms difciles de detectar. En general, no producen un error de
ejecucin: pero producen un resultado distinto del esperado.
Para analizar este tipo de error, el entorno VBE dispone de herramientas de depuracin que
permiten ejecutar el cdigo paso a paso y verificar el contenido de las variables a medida que se
desarrolla el programa.

9.2 Depuracin
9.2.1 Presentacin
La depuracin puede activarse de distintas maneras:
Ejecutando el programa paso a paso
Insertando puntos de interrupcin en el cdigo VBA
Haciendo clic en el botn Depurar cuando se produce un error de ejecucin.
Las diferentes herramientas de depuracin permiten:
Conocer en todo momento el valor de las variables o de las expresiones
Ejecutar instrucciones
Modificar interactivamente el cdigo
Ejecutar el cdigo paso a paso
Agregar puntos de interrupcin
9.2.2 La barra de herramientas Depuracin
La barra de herramientas Depuracin permite acceder directamente a las herramientas de
depuracin.
206 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


1. Modo de diseo: activa o desactiva el modo de diseo.
2. Ejecutar (mtodo abreviado de teclado [F5]): ejecuta el cdigo del procedimiento en curso, de la
hoja UserForm activa o de una macro.
3. Interrumpir (mtodo abreviado de teclado [Ctrl][Pausa]): interrumpe la ejecucin del programa
en curso y pasa al modo Interrupcin.
4. Restablecer: borra el contenido de las variables y reinicializa el proyecto.
5. Alternar punto de interrupcin (mtodo abreviado de teclado [F9]): define o elimina un punto de
interrupcin en la lnea actual; el cdigo se ejecutar hasta el punto de interrupcin, y luego
pasar al modo depuracin.
6. Paso a paso por instrucciones (mtodo abreviado de teclado [F8]): ejecuta el cdigo haciendo
una interrupcin despus de cada instruccin del procedimiento en curso y de los procedimientos
llamados.
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 llamados son ejecutadas de manera continua).
8. Paso a paso para salir (mtodo abreviado de teclado [Ctrl][Mays][F8]): ejecuta en forma
continua las restantes lneas del procedimiento en curso.
9. Ventana Locales: muestra los valores de las variables locales del procedimiento.
10. Ventana Inmediato (mtodo abreviado de teclado [Ctrl][G]): muestra la ventana Inmediato, que
permite ejecutar una instruccin de forma interactiva.
11. Ventana Inspeccin: muestra la lista de las variables de una inspeccin.
12. Inspeccin rpida (mtodo abreviado de teclado [Mays][F9]): muestra el valor de la expresin
seleccionada.
13. Pila de llamadas (mtodo abreviado de teclado [Ctrl][L]): muestra la lista de llamadas de
procedimiento cuya ejecucin est en curso.
9.2.3 El objeto Debug
El objeto Debug permite enviar datos de salida a la ventana Inmediato durante la ejecucin.
Mtodo Descripcin
Print Muestra texto en la ventana Inmediato
Assert
Suspende de forma condicional la ejecucin de la lnea en la que aparece el
mtodo

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 ...
207 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Resultado en la ventana Inmediato:

9.3 Administracin de errores en VBA
Cuando se produce un error, VBA genera un error de ejecucin que interrumpe la aplicacin.
Otros errores pueden hacer que el cdigo VBA se comporte de manera imprevisible.
Para evitar esto, es posible manejar el error con la ayuda de las siguientes instrucciones,
funciones y/o objetos:
On Error (Instruccin)
Error (Funcin)
Error (Instruccin)
Err (Objeto)
9.3.1 On Error (Instruccin)
Indica una secuencia de instrucciones que se ejecutar en caso de error.
Sintaxis 1:
On Error GoTo lnea
Activa la rutina de administracin de errores que comienza en la lnea indicada por el
argumento lnea.
El argumento lnea debe ser una etiqueta o nmero de lnea y debe pertenecer al mismo
procedimiento que la instruccin On Error. Si el argumento lnea es un nmero de lnea,
debe ser obligatoriamente el primer caracter no vaco de la lnea.
Sintaxis de la rutina de administracin de errores:
Lnea:
instrucciones
Resume
208 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

La instruccin Resume permite continuar la ejecucin del cdigo cuando termina la rutina de
administracin de errores, es decir, una vez resuelto el problema que produjo el error.
Hay tres sintaxis diferentes para Resume:
Resume 0: reanuda la ejecucin del cdigo donde el error se produjo.
Resume Next: reanuda a partir de la instruccin que sigue inmediatamente a la que
gener el error.
Resume Lnea: reanuda en la lnea especificada por el argumento Lnea.
Para impedir la ejecucin del cdigo de administracin de errores cuando no hay errores,
coloque una instruccin Exit Sub, Exit Function o Exit Property inmediatamente
antes de la rutina de administracin de errores.
Sintaxis 2:
On Error Resume Next
Especifica que, en caso de error, la ejecucin debe continuar.
Sintaxis 3:
On Error GoTo 0
Permite interrumpir o desactivar la administracin de errores cuando el procedimiento est
todava en ejecucin.
Ejemplo:
Este procedimiento selecciona cada hoja y le cambia el nombre (por medio de un cuadro de
dilogo) con una rutina de administracin de error que se ejecuta cuando el nombre elegido es
incorrecto o corresponde a un nombre existente.
Sub Errores_Nombre_Hojas()
Dim HojaTest As Worksheet, NuevoNombre 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 HojaTest In Sheets
HojaTest.Select
1 NuevoNombre = InputBox(Prompt:="Escriba el nombre de hoja activa", _
Default:=HojaTest.Name)
'Sale del procedimiento si el usuario hace clic en el
'botn Cancelar o no indica ningn nombre
If NuevoNombre = "" Then Exit Sub
HojaTest.Name = NuevoNombre
209 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

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", vbExclamation
Resume 1
End Sub
9.3.2 Error (Funcin)
Devuelve un mensaje que corresponde a un nmero de error.
Sintaxis:
Error(CdigoError)
9.3.3 Error (Instruccin)
Simula la ocurrencia de un error.
Sintaxis:
Error CdigoError
Los cdigos de error personalizados deben tener un valor superior al de los cdigos de error
estndares e inferior a 65535.
9.3.4 Err (Objeto)
El objeto Err contiene informacin que permite conocer el origen de un error de ejecucin.
9.3.4.1 Propiedades del objeto Err
Propiedad Descripcin
Description Devuelve una cadena de caracteres que contiene una breve descripcin del error
HelpContext Devuelve el identificador de contexto asociado a un tema de un archivo de ayuda
HelpFile
Devuelve una cadena de caracteres que contiene la ruta de acceso completa del
archivo de ayuda
210 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

LastDLLError
Devuelve un cdigo de error de sistema producido por una llamada a una
biblioteca de vnculos dinmicos (DLL)
Number Devuelve o establece un valor numrico que especifica el nmero del error
Source
Devuelve o establece una cadena de caracteres que especifica el nombre del
objeto o la aplicacin que gener el error

9.3.4.2 Mtodos del objeto Err
Mtodo Descripcin
Clear Borra todas las propiedades establecidas del objeto Err
Raise Permite generar errores de ejecucin
Ejemplo:
El siguiente cdigo muestra un mensaje que brinda informacin sobre la naturaleza del error.
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim rng As Range

'Muestra un mensaje si la hoja activada
'es el resumen de ventas
On Error GoTo Errores

If Sh.Name = "Resumen" Then
MsgBox "Resumen de las diferentes hojas ", vbExclamation
Set rng = 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
Errores:
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
Para probar este ejemplo:
a. Escribir el cdigo en el mdulo ThisWorkbook
b. Llamar una hoja Resumen
c. Poner el cursor en la hoja Resumen
La ejecucin de este cdigo (si no existe la hoja Enero) devuelve el siguiente cuadro de mensaje:
211 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


Si la hoja Enero existe, no se produce ningn error.

212 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

1
110
00.
.. C
CCO
OOD
DDI
IIG
GGO
OO D
DDE
EE U
UUN
NNA
AA M
MMI
IIN
NNI
IIA
AAP
PPL
LLI
IIC
CCA
AAC
CCI
II
N
NN

10.1 Presentacin general
La aplicacin Excel presentada en este captulo permite administrar presupuestos realizados con
Excel.
Las principales funcionalidades de esta aplicacin son:
Creacin de un nuevo presupuesto a partir de un modelo
Bsqueda de presupuestos en funcin de criterios (cliente, fecha), con la posibilidad de
abrir o de eliminar uno o ms presupuestos
Creacin de nuevos clientes y bsqueda de clientes.
Todos los archivos necesarios para la aplicacin deben instalarse en el mismo directorio. Estos
archivos se entregan con los ejemplos de las memorias y son los siguientes:
El archivo que contiene el cdigo de la aplicacin Excel: GestPresupuesto.xlsm
La base de datos Access que incluye la tabla de clientes y los formularios de bsqueda y
de creacin de un cliente: Presupuesto.accdb
El modelo Excel que sirve de base a la generacin de presupuestos: Presupuesto.xltx.
Los presupuestos generados se presentan como archivos Excel denominados de la siguiente
manera: fecha de creacin en la forma AAAAMMDD y extensin xlsx (ejemplo: 20070410.xlsx).
stos se generan en un subdirectorio de la aplicacin que lleva el nombre del cdigo de cliente
(ejemplo: ALFKI, ANATR, etc.).
Esta aplicacin necesita que se seleccionen las siguientes referencias:
213 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


Microsoft ActiveX Data Objects es la referencia que permite acceder a la tecnologa de
acceso a los datos de Microsoft, llamada ADO. Esta tecnologa se dice universal porque
permite acceder a todo tipo de bases de datos (SQL Server, Oracle, Access...). Puede
encontrar una descripcin completa del modelo objeto ADO en el archivo ADO210.chm
ubicado en la carpeta C:\Program Files\Common Files\Microsoft Shared\OFFICE12\1036.

10.2 Descripcin de la aplicacin
GestPresupuesto
Esta aplicacin comprende los siguientes elementos:
Una nica hoja de clculo llamada Gestin de presupuestos que constituye la pantalla
de bienvenida de la aplicacin: ttulo de la aplicacin, men especfico de la aplicacin. El
mdulo de clase GestPresupuesto asociado a esta hoja no contiene ningn cdigo.
Dos formularios BuscarPresupuesto y NuevoPresupuesto permiten, respectivamente,
buscar y crear un nuevo presupuesto.
Dos mdulos estndares: el mdulo ProcActions contiene los procedimientos llamados
por los comandos de men especficos de la aplicacin (estos procedimientos estn
asociados a las propiedades onAction de los diferentes comandos del men); el
214 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

mdulo ProcGene contiene las variables pblicas y los procedimientos generales de la
aplicacin.


10.3 Mdulo ThisWorbook
10.3.1 Presentacin
Este mdulo permite:
Agregar los comandos de mens en la ficha Complementos
Modificar la presentacin de Excel: oculta la barra de frmulas y los encabezados de filas
y columnas
Restablecer el entorno Excel cuando se desactiva el libro: muestra la barra de frmulas y
los encabezados de filas y columnas
Suprimir los comandos de mens especficos de la aplicacin cuando se cierra el libro
Al abrir el libro, la presentacin de la aplicacin es la siguiente:
215 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.


10.3.2 Cdigo VBA
Option Explicit
Dim TabMenu() As String



Private Sub Workbook_Activate()
'Oculta la barra de frmulas y los encabezados
Application.DisplayFormulaBar = False
Application.ActiveWindow.DisplayHeadings = False
End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim m_Ctrl As CommandBarControl
'Elimina los comandos personalizados
'de la barra de comandos "Tools"
For Each m_Ctrl In Application.CommandBars("Tools").Controls
If Not m_Ctrl.BuiltIn Then
On Error Resume Next
m_Ctrl.Delete
End If
Next m_Ctrl
On Error GoTo 0
216 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

End Sub



Private Sub Workbook_Deactivate()
Dim m_Ctrl As CommandBarControl
'Muestra la barra de frmulas y los encabezados
With Application
.DisplayFormulaBar = True
.ActiveWindow.DisplayHeadings = True
End With
End Sub



Private Sub Workbook_Open()
Dim cmd As CommandBar
Dim opt As CommandBarControl
'Ruta de acceso de la aplicacin
strFolder = ThisWorkbook.Path & "\"
'Agrega los comandos personalizados
'a nivel de la ficha Complementos
Set cmd = Application.CommandBars("Tools")
'Nuevo Presupuesto
Set opt = cmd.Controls.Add(Type:=msoControlButton, ID:=18, Before:=1)
opt.Caption = "Nuevo presupuesto"
opt.OnAction = "Crear_Presupuesto"
opt.TooltipText = "Crea un nuevo presupuesto"
'Buscar Presupuesto
Set opt = cmd.Controls.Add(Type:=msoControlButton, ID:=1849, Before:=2)
opt.OnAction = "Buscar_Presupuesto"
opt.Caption = "Buscar presupuesto "
opt.TooltipText = "Busca un presupuesto por cliente y por fecha"
'Opcin inactiva
Set opt = cmd.Controls.Add(Type:=msoControlButton, Before:=3)
opt.OnAction = " "
opt.Caption = " "
opt.Enabled = False
'Nuevo Cliente
Set opt = cmd.Controls.Add(Type:=msoControlButton, ID:=18, Before:=1)
opt.Caption = "Nuevo cliente"
opt.OnAction = "Agrega_Cliente"
opt.TooltipText = "Crea un nuevo cliente"
'Buscar Cliente
Set opt = cmd.Controls.Add(Type:=msoControlButton, ID:=1849, Before:=2)
opt.OnAction = "Buscar_Cliente"
opt.Caption = "Buscar cliente"
opt.TooltipText = "Busca un cliente"
End Sub



217 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

10.4 Formulario NuevoPresupuesto
10.4.1 Presentacin
Este mdulo permite:
Crear un nuevo presupuesto a partir del modelo Presupuesto.xltx, y guardar el
presupuesto en el subdirectorio del cliente
Mostrar los datos del cliente en las celdas con nombre (CodCli, Empresa, Direccin, etc.)
del libro,
Aplicar al libro el tema seleccionado en el formulario.
10.4.2 Lista de controles
Nombre del control
Descripcin
1) cboClient Cuadro de lista desplegable
2) txtFecha Cuadro de texto
3) cboTema Cuadro de lista desplegable
4) cmdCrear Botn de comando
10.4.3 Lista de celdas con nombre del modelo
Presupuesto.xltx



218 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

1. Presupuesto 5. Direccion
2. CodCli 6. CPostal
3. Fecha 7. Ciudad
4. Empresa 8. Pais
10.4.4 Cdigo VBA
Option Explicit



Private Sub UserForm_Initialize()
'Muestra la lista de clientes
Call Lista_Clientes("NuevoPresupuesto")
'Muestra los temas Microsoft Office
Call Mostrar_Temas_Office
'Fecha por defecto
txtFecha.Value = Format(Date, "DD/MM/YYYY")
End Sub



Private Sub txtFecha_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
'Controla la fecha introducida
If txtFecha.Value <> "" Then Cancel = Not Ctrl_Fecha(txtFecha)
End Sub



Private Sub Mostrar_Temas_Office()
Dim strPath As String
Dim strfile As String
'Muestra la lista de temas Microsoft Office
cboTema.Clear
'Ruta de acceso a las plantillas
strPath = Left(Application.Path, Len(Application.Path) - 9) _
& "\Document Themes 12\"
strfile = Dir(strPath & "*.thmx")
'Muestra el nombre de archivo sin la extensin
Do While strfile <> ""
cboTema.AddItem Left(strfile, Len(strfile) - 5)
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 los datos introducidos
219 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

If cboClient.Value = "" Or txtFecha.Value = "" 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
Next wbk
'Verifica que el libro ya no exista
wbkName = strFolder & cboClient.Value & "\" & Right(txtFecha.Value, 4) & _
Mid(txtFecha.Value, 4, 2) & Left(txtFecha.Value, 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")
'Crea el subdirectorio del cliente si no existe
If Dir(strFolder & cboClient.Value, vbDirectory) = "" Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.createfolder (strFolder & cboClient.Value)
End If
'Guarda el libro en el directorio
wbkName = Right(txtFecha.Value, 4) & Mid(txtFecha.Value, 4, 2) & _
Left(txtFecha.Value, 2) & ".xlsx"
wbk.SaveAs strFolder & cboClient.Value & "\" & wbkName
wbk.Activate
'Asigna las celdas del libro a partir de la tabla Cliente
'(Procedimiento del mdulo ProcGene)
Mostrar_Cliente wbk, cboClient.Value
wbk.ActiveSheet.Range("A9").Activate
'Aplica el tema Office seleccionado
strTheme = Left(Application.Path, Len(Application.Path) - 9) _
& "\Document Themes 12\" & cboTema & ".thmx"
wbk.ApplyTheme strTema
'Cierra el formulario
Unload Me
End Sub
Despus de ejecutar este mdulo, se habr creado un nuevo presupuesto y se muestra en Excel
para que el usuario lo complete:
220 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.



10.5 Formulario BuscarPresupuesto
10.5.1 Presentacin
Este mdulo permite:
Buscar presupuestos en funcin del cdigo de cliente y/o la fecha del presupuesto (si no
se indica ningn criterio, se muestran todos los presupuestos disponibles)
Abrir o eliminar uno o ms presupuestos en la lista de presupuestos obtenida.
221 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

10.5.2 Lista de controles

Nombre del control Descripcin
1. cboClient Cuadro de lista desplegable modificable.
2. cboOpe Cuadro de lista desplegable modificable que contiene los operadores de
comparacin (>= o <=).
3. txtFecha Cuadro de texto.
4. cmdBuscar Botn de comando.
5. cmdSupr Botn de comando.
6. cmdAbrir Botn de comando.
7. lstPresup Cuadro de lista desplegable.
10.5.3 Cdigo VBA
Option Explicit



Private Sub UserForm_Initialize()
'Operador para el campo Fecha
cboOpe.AddItem ">="
222 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

cboOpe.AddItem "<="
'Selecciona varios presupuestos
lstPresup.MultiSelect = fmMultiSelectMulti
'Muestra los clientes en la lista desplegable
Call Lista_Clientes("BuscarPresupuesto")
End Sub



Private Sub txtFecha_BeforeUpdate (ByVal Cancel As MSForms.ReturnBoolean)
'Controla la fecha introducida
If txtFecha.Value <> "" Then Cancel = Not Ctrl_Fecha(txtFecha)
End Sub



Private Sub CmdAbrir_Click()
'Abre los presupuestos seleccionados
On Error GoTo Errores
For j = 0 To lstPresup.ListCount - 1
If lstPresup.Selected(j) Then
Workbooks.Open lstPresup.List(j)
End If
Next j
On Error GoTo 0
Unload Me
Exit Sub

Errores:
'No se pueden abrir dos presupuestos con el mismo nombre
'en la misma aplicacin Excel
If Err.Number = 1004 Then
MsgBox Err.Description
End If
Resume Next
End Sub



Private Sub cmdBuscar_Click()
Dim strCli As String
'Controla los datos introducidos
If (cboOpe.Value <> "" And txtFecha.Value = "") _
Or (cboOpe.Value = "" And txtFecha.Value <> "") Then
MsgBox "Debe introducir un operador y una fecha", vbExclamation
Exit Sub
End If
'Modifica el puntero del ratn
Application.Cursor = xlWait
'Muestra los presupuestos de un cliente o de todos los clientes
lstPresupuesto.Clear
If cboClient.Value = "" Then
For i = 0 To cboClient.ListCount - 1
strCli = cboClient.List(i)
Call Mostrar_Presup(strCli)
223 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Next i
Else
Call Mostrar_Presup(cboClient)
End If
'Restablece el puntero del ratn
Application.Cursor = xlDefault
End Sub



Private Sub Mostrar_Presup(strCli As String)
Dim strRep As String
Dim strPresup As String
'Muestra la lista de presupuestos de un cliente
strRep = strFolder & strCli & "\"
strPresup = Dir(strRep & "*.*")
Do While strPresup <> ""
If Ctrl_Presup(strPresup) Then
lstPresup.AddItem strRep & strPresup
End If
strPresup = Dir
Loop
End Sub



Private Function Ctrl_Presup(strFileName As String) As Boolean
Dim dte
'Controla la fecha del presupuesto
Ctrl_Presup = False
If cboOpe.Value <> "" And txtFecha.Value <> "" Then
strFileName = Left(strFileName, Len(strFileName) - 5)
dte = Right(strFileName, 2) & "/" _
& Mid(strFileName, 5, 2) & "/" & Left(strFileName, 4)
If Not IsDate(dte) Then Exit Function
If cboOpe.Value = ">=" And _
DateValue(dte) < DateValue(txtFecha.Value) Then Exit Function
If cboOpe.Value = "<=" And _
DateValue(dte) > DateValue(txtFecha.Value) Then Exit Function
End If
Ctrl_Presup = True
End Function



Private Sub cmdSupr_Click()
Dim strLista As String
Dim fso As Object
'Muestra los presupuestos seleccionados
For i = 0 To lstPresup.ListCount - 1
If lstPresup.Selected(i) Then
strLista = strLista & vbCr & lstPresup.List(i)
End If
Next i
'Elimina los presupuestos seleccionados despus de pedir confirmacin
224 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

If MsgBox("Desea eliminar estos presupuesto? " & strLista, _
vbQuestion & vbYesNo) = vbYes Then
Set fso = CreateObject("Scripting.FileSystemObject")
For i = 0 To lstPresup.ListCount - 1
If lstPresup.Selected(i) Then
fso.Deletefile lstPresup.List(i)
End If
Next i
End If
'Actualiza la lista de presupuestos
Call cmdBuscar_Click
End Sub

10.6 Mdulos ProcActions y ProcGene
10.6.1 Cdigo VBA del mdulo ProcActions
Option Explicit
'Variables de los mdulos
Dim blnAccess As Boolean, appAccess As Access.Application

Sub Agrega_Cliente()
'Ejecuta Access si no est abierto y abre el formulario
'de entrada de clientes
If AccessActivo Then
appAccess.DoCmd.OpenForm "Entrada de clientes"
Else
MsgBox "Imposible abrir Access", vbExclamation
End If
End Sub



Sub Buscar_Cliente()
'Ejecuta Access si no est abierto y abre el formulario
'de entrada de clientes
If AccessActivo Then
appAccess.DoCmd.OpenForm "Buscar clientes"
Else
MsgBox "Imposible abrir Access", vbExclamation
End If
End Sub



Private Function AccessActivo() As Boolean
'Verifica si Access est abierto
On Error GoTo Errores
If blnAccess Then
'Verifica si la base de datos Presupuesto est abierta
225 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

'Inicializacin es un mdulo de la base Presupuesto
appAccess.Run "Inicializacin"
Else
'Inicia Access y abre la base Presupuesto.accdb
ejecutaAccess:
On Error GoTo Errores2
Set appAccess = CreateObject("Access.application")
appAccess.OpenCurrentDatabase (strFolder & "\Presupuesto.mdb")
appAccess.Visible = True
blnAccess = True
End If
AccessActivo = True: Exit Function

Errores:
blnAccess = False
GoTo ejecutaAccess
Exit Function

Errores2:
AccessActivo = False
End Function



Sub Crear_Presupuesto()
'Muestra el formulario NuevoPresupuesto
NuevoPresupuesto.Show
End Sub



Sub Buscar_Presupuesto()
'Muestra el formulario de bsqueda de presupuestos
BuscaPresup.Show
End Sub



Sub Salir()
'Pide confirmar la salida de la aplicacin
If MsgBox("Desea salir de la aplicacin Presupuesto?", _
vbQuestion & vbYesNo) = vbYes Then
On Error Resume Next
appAccess.Quit
On Error GoTo 0:
ActiveWorkbook.Close
End If
End Sub


226 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

10.6.2 Cdigo VBA del mdulo ProcGene
Option Explicit
'Variables pblicas
Public i As Integer
Public j As Integer
'Directorio de la aplicacin
Public Const strFolder = "C:\Presupuesto\"
'Objetos ADO
Private cnnCli As ADODB.Connection
Private rstCli As ADODB.Recordset



Public Sub Lista_Clientes(FormName As String)
'Abre la base Access Presupuesto.accdb
If Not AbreBase Then Exit Sub
'Abre 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 Presupuesto.accdb
Do While Not rstCli.EOF
Select Case UCase(FormName)
Case "BuscarPresupuesto"
BuscarPresupuesto.cboClient.AddItem rstCli("CLI_CODCLI")
Case "NuevoPresupuesto"
NuevoPresupuesto.cboClient.AddItem rstCli("CLI_CODCLI")
End Select
rstCli.MoveNext
Loop
'Cierra los objetos Access
rstCli.Close
cnnCli.Close
Set rstCli = Nothing
Set cnnCli = Nothing
End Sub



Public Sub Mostrar_Cliente(wbk As Workbook, strCli As String)
'Abre la base Presupuesto.accdb
If Not AbreBase Then Exit Sub
'Abre la tabla Clientes
Set rstCli = New ADODB.Recordset
With rstCli
.ActiveConnection = cnnCli
.CursorType = adOpenForwardOnly
.LockType = adLockOptimistic
227 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

.Open ("SELECT * FROM Clientes WHERE CLI_CODCLI = " & strCli & "")
End With
'Muestra los datos del cliente en las celdas del libro Presupuesto
If Not rstCli.EOF Then
With wbk.Sheets(1)
.Range("FECHA").Value = NuevoPresup.txtFecha.Value
.Range("PRESUPUESTO").Value = Left(wbk.Name, Len(wbk.Name) - 4)
.Range("CODCLI").Value = rstCli("CLI_CODCLI")
.Range("EMPRESA").Value = rstCli("CLI_EMPRESA")
.Range("DIRECCIN").Value = rstCli("CLI_DIRECCIN")
.Range("CPOSTAL").Value = rstCli("CLI_CPOSTAL")
.Range("CIUDAD").Value = rstCli("CLI_CIUDAD")
.Range("PAS").Value = UCase(rstCli("CLI_PAS"))
End With
End If
'Cierra los objetos Access
rstCli.Close
cnnCli.Close
Set rstCli = Nothing
Set cnnCli = Nothing
End Sub



Public Function AbreBase() As Boolean
'Abre la base Presupuesto.mdb
On Error GoTo Errores
Set cnnCli = New ADODB.Connection
With cnnCli
.Provider = "Microsoft.JET.OLEDB.4.0"
.Open strFolder & "Presupuesto.mdb"
End With
On Error GoTo 0
AbreBase = True
Exit Function

Errores:
On Error GoTo 0
AbreBase = False
MsgBox "Problema al abrir la base Presupuesto.mdb", vbExclamation
End Function



Function Ctrl_Fecha(zDate As Control) As Boolean
Dim m_sDate As String
Dim m_date As Date
Dim x As Integer
'Controla una fecha y reemplaza los "." por "/" si es necesario
If zDate <> "" Then
x = InStr(zDate, ".")
Do While x > 0
zDate = Left(zDate, x - 1) & "/" & Right(zDate, Len(zDate) - x)
x = InStr(zDate, ".")
Loop
228 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

If IsDate(zDate) Then
zDate = Format(DateValue(zDate), "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


229 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

1
111
11.
.. A
AAN
NNE
EEX
XXO
OOS
SS
11.1 Lista de instrucciones
Instruccin Descripcin
Fecha Hora/Matemticas
Date Devuelve la fecha del sistema en curso
Randomize Inicializa el generador de nmeros aleatorios
Time Devuelve la hora del sistema
Declaracin
Const Declara las constantes que hay que utilizar en lugar de valores fijos
Declare
Se utiliza a nivel de mdulo para declarar las referencias a procedimientos externos
en una biblioteca DLL o un recurso de cdigo Macintosh
DefType
Define los tipos de datos por defecto de las variables y valores devueltos por
procedimientos Function cuyos nombres comienzan con los caracteres
especificados (DefBool, DefInt, ..., DefStr)
Dim Declara variables y les reserva espacio de almacenamiento en la memoria
Enum Declara un tipo para una enumeracin
Event Declara un evento definido por el usuario
Function
Declara el nombre, los argumentos y el cdigo que forma el cuerpo de un
procedimiento Function
Let
Asigna el valor de una expresin a una variable o a una propiedad (equivale al signo
=)
Option Base Define el menor valor del ndice para las matrices: 0 o 1
Option Compare Define el modo de comparacin de cadenas: Binary o Text
Option Explicit Obliga la declaracin explcita de todas las variables del mdulo
Option Private Module Declara el mdulo completo como Privado
Private
Declara las variables privadas y reserva su espacio de almacenamiento en la
memoria
Property Get
Declara el nombre, los argumentos y el cdigo de un procedimiento Property que
permite leer el valor de una propiedad
Property Let
Declara el nombre, los argumentos y el cdigo de un procedimiento Property que
le asigna un valor a una propiedad
Property Set
Declara el nombre, los argumentos y el cdigo de un procedimiento Property que
asigna una referencia a un objeto
Public
Declara las variables pblicas y les reserva espacio de almacenamiento en la
memoria
ReDim
Dimensiona variables de tipo tabla dinmica y les reserva espacio de
almacenamiento en la memoria
Set Asigna una referencia a un objeto
Static
Define las variables estticas y les reserva espacio de almacenamiento en la
memoria
Sub Declara el nombre, los argumentos y el cdigo de un procedimiento Sub
Type Define un tipo de datos definido por el usuario
Error
Error Simula la ocurrencia de un error
230 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

On Error
Activa una rutina de tratamiento de errores y especifica su ubicacin dentro de un
procedimiento. Tambin permite desactivar una rutina de tratamiento de errores
Resume
Restablece la ejecucin del cdigo cuando termina una rutina de tratamiento de
errores
Archivo
Close
Finaliza las operaciones de entrada y salida en un archivo abierto con la instruccin
Open
FileCopy Copia un archivo
Get Lee los datos de un archivo abierto y los guarda en una variable
Input # Lee los datos a partir de un archivo secuencial abierto y los asigna a variables
Kill Elimina los archivos del disco
Line Input #
Lee una lnea de datos a partir de un archivo secuencial abierto y la asigna a una
variable de tipo cadena
Lock...Unlock
Controla el acceso por parte de otros procesos a todo o parte de un archivo abierto
mediante la instruccin Open
Open Permite ejecutar una operacin de entrada y salida en un archivo
Print # Escribe los datos con formato en un archivo secuencial
Put Escribe el contenido de una variable en un archivo de disco
Reset Cierra todos los archivos de discos abiertos con la instruccin Open
Seek
Define la posicin de la prxima lectura y escritura en un archivo abierto con la
instruccin Open
SetAttr Define los atributos de un archivo
Width # Asigna la longitud de la lnea de salida a un archivo abierto con la instruccin Open
Write # Escribe datos en un archivo secuencial
Estructuracin
Call
Transfiere el control a un procedimiento Sub, Function, DLL o a un procedimiento
de recursos de cdigo Macintosh
Do...Loop
Repite un bloque de instrucciones mientras se cumple una condicin o hasta que la
condicin se hace verdadera
End Termina un procedimiento o un bloque
Exit Sale de un bloque de cdigoDo...Loop, For...Next, Function, Sub o Property
For Each...Next
Repite un grupo de instrucciones para cada elemento de una matriz o de una
coleccin
For...Next Repite un bloque de instrucciones una cierta cantidad de veces
Goto
Realiza una bifurcacin incondicional hacia una lnea determinada de un
procedimiento
GoSub...Return
Realiza una bifurcacin hacia una subrutina dentro de un procedimiento y luego
retorna a la instruccin inmediatamente posterior a la bifurcacin
On GoSub y On Go To
Realiza una bifurcacin hacia una de las lneas especificadas, segn el valor de una
expresin dada
Rem Permite la entrada de comentarios (equivale al apstrofo)
Select Case Ejecuta uno o ms grupos de instrucciones segn el valor de una expresin dada
Stop Interrumpe la ejecucin de un procedimiento
If...Then...
ElseIf...
Else...End If
Permite la ejecucin condicional de un grupo de instrucciones segn el resultado
de una expresin dada
While...Wend Ejecuta una serie de instrucciones mientras se cumpla una condicin dada
With
Ejecuta una serie de instrucciones sobre un nico objeto o un tipo definido por el
usuario

231 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Sistema
Beep Emite una seal sonora
ChDir Cambia el directorio o la carpeta actual
ChDrive Cambia la unidad de disco actual
MkDir Crea un nuevo directorio o nueva carpeta
Name Modifica el nombre de un archivo, de un directorio o de una carpeta
RmDir Elimina un directorio o una carpeta existente
Diversas
AppActivate Activa una ventana de aplicacin
DeleteSetting Elimina el valor de una seccin o de una clave en la base de registros de Windows
Erase
Reinicia los elementos de matrices de tamao fijo y libera el espacio de
almacenamiento asignado a matrices dinmicas
Implements
Especifica una interfaz o una clase que se implementar en el mdulo de clase
donde aparece
LSet
Alinea a la izquierda una cadena de caracteres dentro de una variable tipo cadena
Copia una variable de un tipo definido por el usuario a otra variable de otro tipo
definido por el usuario
Load Carga un objeto pero no lo muestra
Mid
Reemplaza una cantidad especificada de caracteres dentro de una variable cadena
por los caracteres extrados de otra cadena
RaiseEvent
Elimina un evento declarado en el nivel de mdulo dentro de una clase, formulario
o documento
RSet Alinea a la derecha una cadena de caracteres dentro de una variable tipo cadena
SaveSetting Guarda o crea una entrada para una aplicacin en la base de registros de Windows
SendKeys
Enva una o ms pulsaciones de teclas a la ventana activa, como si se hubieran
presionado desde el teclado. No disponible en Macintosh
Unload Elimina un objeto de la memoria

11.2 Lista de funciones

Las funciones cuyo nombre termina con el signo $ devuelven valores en variables de tipo
String y no de tipo Variant.

Funcin Descripcin
Conversiones
CBool Convierte una expresin a datos de tipo Boolean.
CByte Convierte una expresin a datos de tipo Byte.
CCur Convierte una expresin a datos de tipo Currency.
CDate Convierte una expresin a datos de tipo Date.
CDbl Convierte una expresin a datos de tipo Double (doble precisin).
CDec Convierte una expresin a datos de tipo Decimal.
232 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

CInt Convierte una expresin a datos de tipo Integer (nombre entero).
CLng Convierte una expresin a datos de tipo Long (entero largo).
CSng Convierte una expresin a datos de tipo Single (simple precisin).
CStr Convierte una expresin a datos de tipo String.
CVar Convierte una expresin a datos de tipo Variant.
CVErr
Devuelve un tipo Variant de un subtipo Error que contiene un nmero de error
especificado por el usuario.
Format, Format$
Aplica un formato a una expresin segn las instrucciones contenidas en una expresin
de tipo formato.
FormatCurrency
Devuelve una expresin con formato en forma de valor de tipo Currency usando el
smbolo monetario definido en el panel de control del sistema.
FormatDateTime Devuelve una expresin con formato de fecha u hora.
FormatNumber Devuelve una expresin con formato de nmero.
FormatPercent
Devuelve una expresin con formato de porcentaje (multiplicado por 100) con el
carcter % al final.
Hex, Hex$
Devuelve una cadena de caracteres que representa el valor de un nmero escrito en
forma hexadecimal.
Oct, Oct$ Devuelve una cadena que representa el valor octal de un nmero.
QBColor
Devuelve un valor que indica el cdigo de color RGB correspondiente al nmero de
color indicado.
RGB Devuelve un nmero entero que representa el valor de un color RGB.
Str, Str$ Devuelve una cadena de caracteres que representa el nmero especificado.
StrConv Devuelve un valor convertido al formato indicado.
Val Devuelve el valor numrico contenido en una cadena de caracteres.
Cadenas de caracteres
Asc Devuelve el cdigo ASCII correspondiente al primer carcter de una cadena.
Chr, Chr$ Devuelve el carcter correspondiente al cdigo ASCII especificado.
InStr Devuelve la posicin de la primera ocurrencia de una cadena dentro de otra cadena.
InStrRev
Devuelve la posicin de la ocurrencia de una cadena dentro de otra, a partir del fin de la
cadena.
LCase, LCase$ Devuelve una cadena con sus caracteres pasados a minsculas.
Left, Left$
Devuelve un nmero especificado de caracteres de una cadena, comenzando desde la
izquierda.
Len
Devuelve la cantidad de caracteres contenidos en una cadena o la cantidad de bytes
necesarios para almacenar una variable.
LTrim, LTrim$ Devuelve una copia de una cadena eliminando los espacios a la izquierda.
Mid, Mid$ Devuelve un nmero especificado de caracteres extrados de una cadena de caracteres.
Replace
Devuelve una cadena en la que una subcadena especificada se reemplaza por otra
subcadena.
Right, Right$
Devuelve un nmero especificado de caracteres de una cadena, comenzando desde la
derecha.
RTrim, RTrim$ Devuelve una copia de una cadena eliminando los espacios a la derecha.
Space, Space$ Devuelve una cadena formada por un nmero de espacios especificado.
StrComp Devuelve un valor que indica el resultado de la comparacin de cadenas.
String, String$ Crea una cadena constituida por una cadena de caracteres que se repite con la longitud
233 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

especificada.
StrReverse
Devuelve una cadena que contiene los mismos caracteres que la cadena dada, pero en
orden inverso.
Trim, Trim$ Devuelve una copia de una cadena eliminando los espacios a la izquierda y a la derecha.
UCase, UCase$ Devuelve una cadena con sus caracteres pasados a maysculas.
Matemticas
Abs Devuelve el valor absoluto de un nmero.
Atn Devuelve el arcotangente de un nmero.
Cos Devuelve el coseno de un ngulo.
Exp Devuelve e (la base de los logaritmos neperianos) elevado a una potencia dada.
Fix Devuelve la parte entera de un nmero.
Int
Devuelve la parte entera de un nmero. La diferencia con la funcin Fix consiste en
que, si el valor del argumento "nmero" es negativo, Int devuelve el primer entero
negativo menor o igual al argumento, mientras que Fix devuelve el primer entero
negativo mayor o igual al argumento.
Log Devuelve el logaritmo neperiano de un nmero.
Rnd Devuelve un nmero aleatorio.
Round Devuelve un nmero redondeado a una cantidad especificada de posiciones decimales.
Sgn Devuelve un nmero entero que indica el signo del argumento.
Sin Devuelve el seno de un ngulo.
Sqr Devuelve la raz cuadrada de un nmero.
Tan Devuelve la tangente de un ngulo.
Financieras
DDB
Devuelve un valor que indica la amortizacin de un bien a lo largo de un perodo
especificado (utiliza el mtodo de amortizacin decreciente a tasa doble u otro mtodo
precisado).
FV
Devuelve un valor que indica el importe futuro de una anualidad basada en pagos
constantes y peridicos, y con una tasa de inters fija.
IPmt
Devuelve un valor que indica el importe, para un perodo dado, de una anualidad
basada en pagos constantes y peridicos, y con una tasa de inters fija.
IRR
Devuelve un valor que indica la tasa interna de retorno de una serie de movimientos de
fondos peridicos (pagos y cobros).
MIRR
Devuelve un valor que indica la tasa interna de retorno modificada de una serie de
movimientos de fondos peridicos (pagos y cobros).
NPer
Devuelve un valor que indica la cantidad de perodos de una anualidad basada en
movimientos constantes y peridicos, y con una tasa de inters fija.
NPV
Devuelve un valor que indica el valor actual neto de una inversin, calculada en funcin
de una serie de movimientos de fondos peridicos (pagos y cobros) y segn una tasa de
descuento.
Pmt
Devuelve un valor que indica el importe de una anualidad basada en movimientos
constantes y peridicos, y con una tasa de inters fija.
PPmt
Devuelve un valor que indica el reembolso correspondiente a un perodo determinado
de una anualidad basada en pagos peridicos y constantes con una tasa de inters fija.
PV
Devuelve un valor que indica el importe actual de una anualidad basada en pagos
peridicos constantes que se van a realizar en el futuro, con una tasa de inters fija.
Rate Devuelve un valor que indica la tasa de inters por perodo para una anualidad.
234 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

SLN
Devuelve un valor que indica la amortizacin de un bien para un perodo dado segn el
mtodo lineal.
SYD Devuelve un valor que indica la amortizacin global de un bien para un perodo dado.
Fechas y horas
Date, Date$ Devuelve la fecha del sistema en curso.
DateAdd
Devuelve un valor que representa la fecha correspondiente a una fecha dada ms un
intervalo de tiempo especificado.
DateDiff
Devuelve un valor que indica la cantidad de intervalos de tiempo entre dos fechas
dadas.
DatePart Devuelve un valor que contiene el elemento especificado de una fecha dada.
DateSerial Devuelve la fecha correspondiente a un ao, un mes y un da especificados.
DateValue Devuelve una fecha.
Day Devuelve un nmero entero comprendido entre 1 y 31 que representa el da del mes.
Hour Devuelve un nmero entero comprendido entre 0 y 23 que representa la hora del da.
Minute Devuelve un nmero entero comprendido entre 0 y 59 que representa los minutos.
Month Devuelve un nmero entero comprendido entre 1 y 12 que representa el mes del ao.
MonthName Devuelve una cadena que indica el mes especificado.
Now Devuelve la fecha y la hora actuales tomadas del reloj del sistema.
Second Devuelve un nmero entero comprendido entre 0 y 59 que representa los segundos.
Time, Time$ Devuelve la hora actual.
Timer Devuelve la cantidad de segundos transcurridos desde la medianoche.
TimeSerial Devuelve una fecha que contiene la hora exacta (horas, minutos y segundos).
TimeValue Devuelve una hora.
WeekDay Devuelve un nmero entero que representa el da de la semana.
WeekdayName Devuelve una cadena que indica el da de la semana especificada.
Year Devuelve un nmero entero que representa el ao.
Archivos, Sistema
CurDir, CurDir$ Devuelve la ruta de acceso actual.
Dir, Dir$
Devuelve el nombre de un archivo, de un directorio o de una carpeta que coincide con
una plantilla o un atributo de archivo especificado, o devuelve la etiqueta de volumen
de una unidad de disco.
EOF Devuelve un valor que indica si se ha llegado al final de un archivo.
FileAttr
Devuelve un valor que representa el modo del archivo para los archivos abiertos
usando la instruccin Open.
FileDateTime Devuelve la fecha y la hora de creacin o de la ltima modificacin de un archivo.
FileLen Devuelve el tamao de un archivo en bytes.
FreeFile
Devuelve un nmero que indica el siguiente nmero de archivo disponible para su uso
en la instruccin Open.
GetAttr
Devuelve un nmero que representa los atributos de un archivo, directorio o carpeta o
la etiqueta de un volumen.
Input, Input$ Devuelve los caracteres (bytes) ledos a partir de un archivo secuencial abierto.
Loc Devuelve la posicin de lectura y escritura actuales en un archivo abierto.
LOF Devuelve la longitud en bytes de un archivo abierto con la instruccin Open.
235 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Seek, Seek$
Devuelve la posicin de lectura y escritura actuales en un archivo abierto con la
instruccin Open.
Verificacin de variables
IsArray Devuelve un valor que indica si una variable es o no una matriz.
IsDate Devuelve un valor que indica si una expresin puede convertirse a fecha.
IsEmpty Devuelve un valor que indica si una variable ha sido o no iniciada.
IsError Devuelve un valor que indica si una expresin es o no un valor de error.
IsMissing Devuelve un valor que indica si se le pas a un procedimiento un argumento opcional.
IsNull Devuelve un valor que indica si una expresin contiene o no un valor vlido.
IsNumeric Devuelve un valor que indica si una expresin puede interpretarse como un nmero.
IsObject Devuelve un valor que indica si un identificador representa una variable objeto.
TypeName Devuelve una cadena que proporciona informacin acerca de una variable.
VarType Devuelve un valor que indica el subtipo de una variable.
Interaccin
CreateObject Crea un objeto OLE Automation.
GetObject Recupera un objeto OLE Automation en un archivo.
InputBox
Muestra un cuadro de dilogo con una invitacin, espera que el usuario escriba un
texto o pulse un botn, y luego devuelve el contenido del cuadro de texto.
MsgBox
Muestra un mensaje en un cuadro de dilogo, espera que el usuario pulse un botn y
luego devuelve un valor que indica el botn pulsado por el usuario.
Shell Ejecuta un programa ejecutable.
Arreglos
Array Devuelve un dato de tipo Variant que contiene una matriz.
Filter
Devuelve una matriz de base cero que contiene un subconjunto de una matriz de
cadena basado en los criterios de filtrado especificados.
Join
Devuelve una cadena creada por la unin de varias subcadenas contenidas en una
matriz.
LBound Devuelve el menor valor del ndice disponible para la dimensin indicada en una matriz.
Split
Devuelve una matriz de una dimensin, basada en cero, que contiene la cantidad
especificada de subcadenas.
UBound Devuelve el mayor valor del ndice disponible para la dimensin indicada en una matriz.
Diversas
CallByName Ejecuta un mtodo de un objeto, o establece o devuelve una propiedad de un objeto.
Choose Selecciona y devuelve un valor a partir de una lista de argumentos.
DoEvents
Detiene momentneamente la ejecucin y cede el control al sistema operativo, para
que ste pueda procesar otros eventos.
Environ Devuelve el valor asociado a una variable de entorno del sistema operativo.
GetAllSettings
Devuelve una lista de claves y sus valores respectivos (originalmente creados con la
instruccin SaveSetting) a partir de la entrada de una aplicacin en la base de registros
de Windows.
GetSetting
Devuelve el valor de clave de una entrada de aplicacin en la base de registros de
Windows.
Iif Devuelve uno u otro de dos argumentos segn la evaluacin de una expresin.
Spc Funcin utilizada con la instruccin Print # o el mtodo Print para posicionar la
236 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

salida.
Switch
Evala una lista de expresiones y devuelve un valor o una expresin asociada a la
primera expresin de la lista que tiene el valor True.
Tab
Funcin utilizada con la instruccin Print # o el mtodo Print para posicionar la
salida.
Solver
SolverAdd Agrega una restriccin al problema actual.
SolverChange Modifica una restriccin al problema actual.
SolverDelete Elimina una restriccin al problema actual.
SolverFinish
Indica a Excel qu debe hacer con los resultados y qu clase de informe debe crear al
finalizar el proceso de resolucin.
SolverFinishDialog
Es igual a la funcin SolverFinish, pero tambin muestra el cuadro de dilogo
Resultados de Solver despus de resolver el problema.
SolverGet Devuelve la informacin relativa a la configuracin de Solver.
SolverLoad Carga la configuracin de un modelo existente.
SolverOK Define un modelo bsico de Solver.
SolverOKDialog Es igual a SolverOK pero tambin muestra el cuadro de dilogo Solver.
SolverOptions Especifica las opciones avanzadas de un modelo.
SolverReset Reinicia toda la configuracin.
SolverSave Guarda la configuracin de un modelo.
SolverSolve Procede con la resolucin de un modelo.

Ejemplos:
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

Diversos clculos con fechas y horas:
Sub CalcFechasyHoras()
'Muestra la fecha del da
MsgBox "Hoy es " & Date
'Muestra la cantidad de segundos transcurridos desde medianoche
MsgBox "Medianoche fue hace " & Timer & " segundos"
'Calcula y muestra el tiempo que resta trabajar,
'suponiendo que la jornada termina a las 17 h 30
237 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Resto = TimeSerial(17 - Hour(Time), 30 - Minute(Time), 0 - Second(Time))
MsgBox "Finalizando a las 17h30, falta " & Resto & _
" horas que hay que trabajar"
'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

Procedimiento para mostrar los nombres, las fechas de ltima modificacin y los tamaos de los
cinco primeros archivos encontrados en la carpeta actual.
Sub ListaArchivos()
Dim strPath As String, strFile As String
strPath = CurDir() & "\"
strFile = Dir(strPath)
For i = 1 To 5
If i = 1 Then strFile = Dir(strPath) Else strFile = Dir()
If strFile <> "" Then
MsgBox "Archivo: " & strFile & Chr(13) & _
"Fecha: " & FileDateTime(strFile) & Chr(13) & _
"Tamao: " & Format(FileLen(strFile), "# ##0")
End If
Next i
End Sub
Este procedimiento permite asignar un cdigo de identificacin segn el sexo, apellido y nombre
y el ao de nacimiento.

Sub CalculaIdentificador()
Dim Codigo As String, I As Integer
For I = 2 To 5
'Cdigo 1 o 2 segn el sexo
'seguido de las tres primeas letras del apellido en maysculas
'+ inicial del nombre + ao de nacimiento
238 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

If Cells(I, 2).Value = "F" Then
Codigo = "2-"
Else
Codigo = "1-"
End If
Codigo = Codigo & UCase(Left(Cells(I, 3).Value, 3)) _
& "-" & UCase(Left(Cells(I, 4).Value, 1)) & "-"
Codigo = Codigo & Right(Cells(I, 5).Value, 4)
Cells(I, 1).Value = Codigo
Next
End Sub

11.3 Constantes VBA
Visual Basic para Aplicaciones permite definir constantes para mejorar la legibilidad del cdigo y
facilitar su mantenimiento.
Tambin puede utilizar las siguientes constantes VBA (constantes intrnsecas) en todo su cdigo.
11.3.1 Constantes de color
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
11.3.2 Constantes de fecha
Constante Valor Descripcin
vbSunday 1 Domingo
vbMonday 2 Lunes
vbTuesday 3 Martes
vbWednesday 4 Mircoles
vbThursday 5 Jueves
vbFriday 6 Viernes
vbSaturday 7 Sbado
239 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

11.3.3 Constantes de teclas correspondientes a letras y
nmeros
Los valores de las teclas A a Z son los mismos que sus equivalentes ASCII.
Constante Valor Descripcin
vbKeyA 65 Tecla A
vbKeyB 66 Tecla B
vbKeyC 67 Tecla C
... ... ...
vbKeyZ 90 Tecla Z
Los valores de las teclas 0 a 9 son los mismos que sus equivalentes ASCII.
Constante Valor Descripcin
vbKey0 48 Tecla 1
vbKey1 49 Tecla 2
vbKey2 50 Tecla 3
... ... ...
vbKey0 57 Tecla 9
11.3.4 Constantes de teclas de funcin
Constante Valor Descripcin
vbKeyF0 0x70 Tecla F1
vbKeyF1 0x71 Tecla F2
... ... ...
vbKeyF16 0x7F Tecla F16
11.3.5 Constantes de teclas diversas
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 [Bloq Mays]
vbKeySpace 0x20 Barra espaciadora
vbKeyPageUp 0x21 Tecla [AvPg]
vbKeyPageDown 0x22 Tecla [RePg]
240 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

vbKeyEnd 0x23 Tecla [Fin]
vbKeyHome 0x24 Tecla [Inicio]
vbKeyLeft 0x25 Tecla [Flecha izquierda]
vbKeyUp 0x26 Tecla [Flecha arriba]
vbKeyRight 0x27 Tecla [Flecha derecha]
vbKeyDown 0x28 Tecla [Flecha abajo]
vbKeySelect 0x29 Tecla Seleccin
vbKeyPrint 0x2A Tecla [Impr Pant]
vbKeyExecute 0x2B Tecla [EJECUTAR]
vbKeySnapshot 0x2C Tecla SNAPSHOT
vbKeyInsert 0x2D Tecla [Insertar]
vbKeyDelete 0x2E Tecla [Suprimir]
vbKeyHelp 0x2F Tecla Ayuda
vbKeyNumlock 0x90 Tecla [Bloq Num]
vbKeyLButton 0x1 Botn izquierdo del ratn
vbKeyRButton 0x2 Bot

También podría gustarte