Está en la página 1de 236

VBA Excel 2007 Programar en Excel: Macros y Lenguaje VBA

Michel AMELOT Ediciones ENI Diciembre 2007 http://www.ediciones-eni.com

CONTENIDO
1.
1.1

INTRODUCCION A LAS MACROS .......................................................... 6


El Lenguaje VBA ........................................................................................................................... 6 1.1.1 Objetivos del lenguaje VBA ............................................................................................ 6 1.1.2 Algunas definiciones ....................................................................................................... 7 1.1.3 Escritura de cdigo VBA ................................................................................................. 7 Las macros de Excel ..................................................................................................................... 7 1.2.1 Mostrar la ficha Programador en la cinta de opciones .................................................. 7 1.2.2 Descripcin de la ficha Programador ............................................................................. 8 1.2.3 Grabacin de macros ...................................................................................................... 9 1.2.4 Las macros y la seguridad ............................................................................................ 13 1.2.5 Modificar el cdigo de una macro ................................................................................ 15 Asignacin de macros ................................................................................................................ 17 1.3.1 Asociar una macro a un botn de comando ................................................................ 17 1.3.2 Asignar una macro a una imagen ................................................................................. 17 1.3.3 Asociar una macro a una zona de un objeto grfico .................................................... 17 1.3.4 Asociar una macro a una imagen Control ActiveX ....................................................... 18 1.3.5 Asociar una macro a un icono de la barra de herramienta de acceso rpido ............ 19 El entorno de desarrollo VBE ..................................................................................................... 21 1.4.1 Acceso al entorno VBE .................................................................................................. 21 1.4.2 Cerrar el entorno VBE ................................................................................................... 21 1.4.3 Volver a Excel ............................................................................................................... 21 1.4.4 Descripcin del entorno VBE ........................................................................................ 22 Configuracin del Editor VBA .................................................................................................... 24 1.2.6 Configuracin de la tipografa ...................................................................................... 24 1.2.7 Configuracin de la introduccin de cdigo ................................................................. 25 1.2.8 Gestin de errores ........................................................................................................ 26 1.2.9 Acople de una ventana ................................................................................................. 27 1.2.10 Elegir las ventanas que hay que mostrar ..................................................................... 28 Novedades de la versin 2007 ................................................................................................... 28 1.6.1 Novedades de Excel 2007 ............................................................................................. 28 1.6.2 Las novedades de VBA Excel 2007................................................................................ 28

1.2

1.3

1.4

1.5

1.6

2.
2.1

EL LENGUAJE VBA ................................................................................30


Mdulos ..................................................................................................................................... 30 2.1.1 El Explorador de Proyectos........................................................................................... 30 2.1.2 Acceso a los mdulos ................................................................................................... 31

2.2

2.3

2.4

2.5

2.6

2.7 2.8

2.1.3 Importar y exportar cdigo VBA ................................................................................... 32 Procedimientos .......................................................................................................................... 32 2.2.1 Definiciones .................................................................................................................. 32 2.2.2 Acceso a los procedimientos ........................................................................................ 33 2.2.3 Procedimientos Sub ...................................................................................................... 33 2.2.4 Procedimientos Function.............................................................................................. 34 2.2.5 Declaracin de procedimientos.................................................................................... 35 2.2.6 Alcance de los procedimientos .................................................................................... 36 2.2.7 Argumentos de los procedimientos ............................................................................ 36 2.2.8 Argumentos con nombre.............................................................................................. 37 2.2.9 Llamar a un procedimiento .......................................................................................... 38 2.2.10 Llamar a una funcin VBA en una frmula Excel.......................................................... 39 2.2.11 Ejemplos de procedimientos y funciones..................................................................... 41 Variables .................................................................................................................................... 42 2.3.1 Tipos de variables ......................................................................................................... 42 2.3.2 Declaracin de variables............................................................................................... 47 2.3.3 Declaracin de los tipos de variables ........................................................................... 49 2.3.4 Arreglos (Arrays) ........................................................................................................... 51 2.3.5 Constantes ................................................................................................................... 54 Operadores ................................................................................................................................ 57 2.4.1 Operadores aritmticos................................................................................................ 57 2.4.2 Operadores de comparacin ........................................................................................ 57 2.4.3 Operadores lgicos ....................................................................................................... 58 2.4.4 Operador de concatenacin ......................................................................................... 59 2.4.5 Prioridad de los operadores ......................................................................................... 59 Estructuras de decisin .............................................................................................................. 60 2.5.1 Instruccin IF ................................................................................................................ 60 2.5.2 Instruccin Select Case ................................................................................................. 63 Estructuras en ciclo .................................................................................................................... 64 2.6.1 Instruccin Do...Loop.................................................................................................... 64 2.6.2 Instruccin While...Wend ............................................................................................ 66 2.6.3 Instruccin For...Next .................................................................................................. 66 2.6.4 Instruccin For Each...N ext .......................................................................................... 68 2.6.5 Salir de las estructuras de control ................................................................................ 68 Sentencia With... End With ........................................................................................................ 69 Reglas de escritura del cdigo ................................................................................................... 70 2.8.1 Comentarios ................................................................................................................. 70 2.8.2 Carcter de continuacin de lnea ................................................................................ 70 2.8.3 Sangras......................................................................................................................... 70 2.8.4 Nombres de procedimientos, variables y constantes ................................................. 71

3.
3.1 3.2 3.3

LA PROGRAMACIN DE OBJETOS EN EXCEL .........................................72


Presentacin .............................................................................................................................. 72 El modelo de objetos de Excel ................................................................................................... 72 3.2.1 Objetos y colecciones ................................................................................................... 74 Principios de uso de los objetos y las colecciones...................................................................... 75 3.3.1 Propiedades .................................................................................................................. 75 3.3.2 Propiedades que representan objetos ......................................................................... 76 3.3.3 Mtodos ....................................................................................................................... 77

3.4

3.5

3.3.4 Eventos ......................................................................................................................... 78 3.3.5 Colecciones .................................................................................................................. 79 3.3.6 Redaccin automtica de instrucciones ....................................................................... 80 Instrucciones usadas con los objetos......................................................................................... 82 3.4.1 La instruccin With ....................................................................................................... 82 3.4.2 La instruccin For Each...Next ...................................................................................... 83 3.4.3 La instruccin If TypeOf ................................................................................................ 84 3.4.4 La instruccin Set.......................................................................................................... 84 El Examinador de objetos .......................................................................................................... 85 3.5.1 Presentacin ................................................................................................................. 85 3.5.2 Bsqueda en el Examinador de objetos ...................................................................... 87

4.
4.1

OBJETOS DE EXCEL ...............................................................................88


El objeto Application.................................................................................................................. 88 4.1.1 Propiedades que representan las opciones de Excel .................................................. 88 4.1.2 Propiedades relativas a la presentacin de la aplicacin ............................................. 99 4.1.3 Propiedades diversas .................................................................................................. 100 4.1.4 Mtodos del objeto Application ................................................................................. 102 4.1.5 Ejemplos de cdigos que usan el objeto Application ................................................. 104 Objeto Workbook .................................................................................................................... 106 4.2.1 Objetos y colecciones ................................................................................................. 107 4.2.2 Propiedades ................................................................................................................ 108 4.2.3 Lista de mtodos ........................................................................................................ 111 4.2.4 Ejemplos de cdigos que usan el objeto Workbook .................................................. 113 El objeto Worksheet ................................................................................................................ 116 4.3.1 Objetos y colecciones ................................................................................................. 117 4.3.2 Propiedades ................................................................................................................ 118 4.3.3 Mtodos ..................................................................................................................... 119 4.3.4 Ejemplos de cdigos que usan el objeto Worksheet ................................................. 120 El objeto Range........................................................................................................................ 122 4.4.1 Propiedades y mtodos que devuelven un objeto Range .......................................... 122 4.4.2 Sintaxis de las propiedades que devuelven un objeto Range .................................... 123 4.4.3 Lista de objetos y colecciones .................................................................................... 126 4.4.4 Propiedades ................................................................................................................ 127 4.4.5 Mtodos ..................................................................................................................... 129 Ejemplos de uso de los objetos ................................................................................................ 132 4.5.1 Clculo del importe de un premio .............................................................................. 132 4.5.2 Asignacin de comentarios a las celdas ..................................................................... 134

4.2

4.3

4.4

4.5

5.
5.1 5.2

CUADROS DE DILOGO ......................................................................136


Presentacin ............................................................................................................................ 136 Cuadros de dilogo integrados ................................................................................................ 136 5.2.1 El objeto Dialog........................................................................................................... 136 5.2.2 Los mtodos GetOpenFileName y GetSaveAsFileName ............................................ 142 Cuadros de dilogo predefinidos ............................................................................................ 144 5.3.1 La funcin InputBox .................................................................................................... 144 5.3.2 El mtodo InputBox .................................................................................................... 144 5.3.3 La funcin MsgBox...................................................................................................... 145 5.3.4 Constantes usadas en los cuadros de dilogo ............................................................ 148

5.3

6.
6.1 6.2 6.3

FORMULARIOS ..................................................................................150
Presentacin ............................................................................................................................ 150 Crear un formulario ................................................................................................................. 150 Lista de controles ..................................................................................................................... 151 6.3.1 Crear un control.......................................................................................................... 152 6.3.2 Propiedades de los controles ..................................................................................... 152 Personalizar un formulario ...................................................................................................... 156 6.4.1 Escribir procedimientos .............................................................................................. 156 6.4.2 Lista de eventos .......................................................................................................... 157 6.4.3 Resumen de eventos por objeto ................................................................................ 158 6.4.4 Cancelar un evento ..................................................................................................... 159 6.4.5 Ejecucin y cierre de un formulario ........................................................................... 160 6.4.6 Eventos invocados ...................................................................................................... 161 Ejemplo de formulario personalizado...................................................................................... 161 6.5.1 Presentacin ............................................................................................................... 161 6.5.2 Cdigo asociado al botn macro de la ficha Empleados ............................................ 163 6.5.3 Cdigo VBA asociado al formulario ............................................................................ 164

6.4

6.5

7.
7.1 7.2

BARRAS DE COMANDOS Y MENS .....................................................168


Presentacin ............................................................................................................................ 168 Ejemplos de barras de comandos ............................................................................................ 169 7.2.1 Barras de herramientas personalizadas ..................................................................... 169 7.2.2 Grupo "Comandos de mens" en formato Office 2007 ............................................. 169 7.2.3 Agregar un comando a la barra de herramientas de acceso rpido .......................... 169 Barras de comandos ................................................................................................................ 170 7.3.1 Terminologa ............................................................................................................... 170 7.3.2 Crear una barra de comandos .................................................................................... 170 7.3.3 Eliminar una barra de comandos................................................................................ 171 7.3.4 Mostrar una barra de comandos ................................................................................ 172 Controles de las barras de comandos...................................................................................... 173 7.4.1 Agregar un control...................................................................................................... 173 7.4.2 Especificar el ttulo de un control ............................................................................... 173 7.4.3 Eliminar un control ..................................................................................................... 174 7.4.4 Asociar un procedimiento a un control ...................................................................... 174 7.4.5 Otras propiedades ...................................................................................................... 174 7.4.6 Lista de imgenes asociadas a los botones de comando ........................................... 175 Ejemplos de mens personalizados ......................................................................................... 177 7.5.1 Presentacin ............................................................................................................... 177 7.5.2 Cdigo de los ejemplos ............................................................................................... 179 7.5.3 Cdigo del mdulo de clase ThisWorkbook ............................................................... 179 7.5.4 Cdigo de la hoja "Nota de Gastos" .......................................................................... 180 7.5.5 Cdigo del mdulo ProcMenus .................................................................................. 180 7.5.6 Cdigo del mdulo ProcAction ................................................................................... 184

7.3

7.4

7.5

8.
8.1 8.2

ADMINISTRACIN DE EVENTOS .........................................................187


Presentacin ............................................................................................................................ 187 Escritura de eventos ................................................................................................................ 187 8.2.1 Eventos de libro, de hoja o de formulario ................................................................. 187 8.2.2 Eventos del objeto Application................................................................................... 189

8.3 8.4 8.5 8.6

8.2.3 Evento asociado a un grfico incrustado.................................................................... 191 Eventos del objeto Application ................................................................................................ 194 Eventos del objeto Workbook.................................................................................................. 195 Eventos del objeto Worksheet ................................................................................................. 196 Eventos del objeto Chart ......................................................................................................... 197

9.
9.1

DEPURACIN Y ADMINISTRACIN DE ERRORES .................................198


Diferentes tipos de error .......................................................................................................... 198 9.1.1 Errores de sintaxis ...................................................................................................... 198 9.1.2 Errores de compilacin ............................................................................................... 199 9.1.3 Errores de ejecucin ................................................................................................... 200 9.1.4 Errores de lgica ......................................................................................................... 201 Depuracin .............................................................................................................................. 201 9.2.1 Presentacin ............................................................................................................... 201 9.2.2 La barra de herramientas Depuracin........................................................................ 201 9.2.3 El objeto Debug .......................................................................................................... 202 Administracin de errores en VBA ........................................................................................... 203 9.3.1 On Error (Instruccin) ................................................................................................. 203 9.3.2 Error (Funcin)............................................................................................................ 205 9.3.3 Error (Instruccin)....................................................................................................... 205 9.3.4 Err (Objeto) ................................................................................................................. 205

9.2

9.3

10.

CODIGO DE UNA MINIAPLICACIN ....................................................208

10.1 Presentacin general ............................................................................................................... 208 10.2 Descripcin de la aplicacin GestPresupuesto ........................................................................ 209 10.3 Mdulo ThisWorbook .............................................................................................................. 210 10.3.1 Presentacin ............................................................................................................... 210 10.3.2 Cdigo VBA ................................................................................................................. 211 10.4 Formulario NuevoPresupuesto ................................................................................................ 213 10.4.1 Presentacin ............................................................................................................... 213 10.4.2 Lista de controles........................................................................................................ 213 10.4.3 Lista de celdas con nombre del modelo Presupuesto.xltx ......................................... 213 10.4.4 Cdigo VBA ................................................................................................................. 214 10.5 Formulario BuscarPresupues to............................................................................................... 216 10.5.1 Presentacin ............................................................................................................... 216 10.5.2 Lista de controles........................................................................................................ 217 10.5.3 Cdigo VBA ................................................................................................................. 217 10.6 Mdulos Pro cA ctions y ProcGene .......................................................................................... 220 10.6.1 Cdigo VBA del mdulo Pro cAct ions ........................................................................ 220 10.6.2 Cdigo VBA del mdulo ProcG ene ............................................................................ 222

11.
11.1 11.2 11.3

ANEXOS .............................................................................................225
Lista de instrucciones............................................................................................................... 225 Lista de funciones .................................................................................................................... 227 Constantes VBA ....................................................................................................................... 234 11.3.1 Constantes de color .................................................................................................... 234 11.3.2 Constantes de fecha ................................................................................................... 234 11.3.3 Constantes de teclas correspondientes a letras y nmeros....................................... 235 11.3.4 Constantes de teclas de funcin................................................................................. 235 11.3.5 Constantes de teclas diversas..................................................................................... 235

1. INTRODUCCION A LAS MACROS


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.

10

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

11

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:

, luego en el botn a. Haga clic en el botn Microsoft Office (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 Visual Basic Macros Grabar macro Usar referencias relativas Seguridad de macros Descripcin Abre el entorno de desarrollo. El mtodo abreviado de teclado es [Alt] [F11]. Muestra la lista de macros. El mtodo abreviado de teclado es [Alt] [F8]. Comienza la grabacin de una macro. Permite usar referencias relativas a la primera celda seleccionada. Personaliza la configuracin de seguridad de las macros.

1.2.2.2 Grupo Controles


Nombre del botn Insertar Modo Diseo Propiedades Ver cdigo Ejecutar cuadro de dilogo Descripcin Permite insertar controles (formularios o ActiveX) en Excel. Activa o desactiva el modo Diseo. En el modo Diseo los controles ActiveX pueden seleccionarse y modificarse pero no pueden ejecutarse. Muestra las propiedades del objeto Excel seleccionado (hoja o control). Permite acceder directamente al cdigo asociado al control seleccionado. Ejecuta un cuadro de dilogo personalizado.

El grupo XML permite administrar asignaciones XML.

12

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. de la ficha Programador o en el botn e. Haga clic en el botn la barra de estado para detener la grabacin de la macro. de

1.2.3.2 Ejecutar una macro


Para ejecutar una macro desde Excel:

a. Haga clic en el botn teclas [Alt] [F8].


13

de la ficha Programador o pulse el mtodo abreviado de

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 color naranja). de la ficha Programador: el botn quedar activo (se ver de , ste quedar desactivado y las macros se grabarn

b. Si vuelve a hacer clic en el botn 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:


14 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.

15

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.

16

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.

17

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: ubicado a la derecha de la advertencia de Haga clic en el botn 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,

18

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:

de la ficha Programador o pulse el mtodo abreviado a. Haga clic en el botn [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.

19

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 tecla [F5]. Aparecer el siguiente mensaje:

de la barra de herramientas Estndar o use la

20

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. (parte superior izquierda de la barra

b. Dibuje el botn con la ayuda de la herramienta 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.
21 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 ficha Programador.

de la

b. Haga clic en el botn

de la ficha Programador. (dentro de los controles ActiveX) y

c. Dibuje una imagen con la ayuda de la herramienta 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. .

22

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 h. Haga clic en la imagen: la macro Test se ejecuta.

de la ficha Programador.

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 y a la derecha del cuadro de dilogo).

, luego en el botn Opciones de Excel (abajo

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.

23

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.

24

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 o pulse la combinacin [Alt] [F11].

de la ficha Programador

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].


25 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 2 3 4 5 26 Ver Microsoft Excel Insertar una hoja Guardar libro Cortar Copiar 11 12 13 14 15 Interrumpir macro Detener macro Modo de diseo Explorador de proyectos Ventana de Propiedades

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

6 7 8 9 10

Pega Buscar Deshacer Repetir Ejecutar macro

16 17 18 19

Examinador de objetos Cuadro de herramientas Ayuda de Microsoft Visual Basic Posicin actual en la ventana de cdigo

(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.

27

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.

28

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.

29

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.

30

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.

31

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 Propiedades Proyectos Inmediato Inspeccin Ventana Locales Explorador de objetos Mdulo Men Ver - Ventana Propiedades Ver - Explorador de proyectos Ver - Ventana Inmediato Ver - Ventana Inspeccin Ver - Ventana Locales Ver - Examinador de objetos Ver - Cdigo Barra de herramientas Teclado [F4] [Ctrl] [R] [Ctrl] [G]

[F2] [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).
32 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.

33

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

2. EL LENGUAJE VBA
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].

34

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.

35

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,
36 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:
37 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.
38 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.
39 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.).

40

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.

41

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.

42

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:

43

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.
44 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 45 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
Byte Integer (entero) 46

Numricas
Tipo 0 a 255 -32 768 a 32767 Rango Tamao en bytes 1 2

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

Long (entero largo) Single (real simple de coma flotante) Double (real doble de coma flotante) Currency (moneda de punto fijo)

-2 147 483 648 a 2 147 483 647 -3.402823E38 a 1.401298E-45 (valores negativos) 1.401298E-45 a 3.402823E38 (valores positivos) -1.79769313486231E308 a 4.94065645841247E-324 (valores negativos) 4.94065645841247E-324 a 1.79769313486231E308 (valores positivos) -922 337 203 685 477.5808 a 922 337 203 685 477.5807 +/-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

4 4

Decimal

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.

47

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

48

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

49

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

2.3.1.7
Sintaxis:

Tipos definidos por el usuario (o TDU)

Los tipos de datos personalizados se crean con la instruccin Type usada a nivel de mdulo.

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.

50

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"

51

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.

52

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 53 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# 54 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 DefBool DefDbl DefInt DefDate DefLng DefStr DefCur DefObj DefSng DefVar DefByte Tipo de datos Boolean Double Integer Date Long String Currency Object Single Variant 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.
55 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 56 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 Factor(0) Factor(1) Factor(2) Factor(3) Factor(4) los factores por pas = FacFRF = FacBEF = FacDEM = FacESP = 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 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

57

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


58

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 Estndar o de la tecla [F1], de la barra de herramientas

b. Escriba la palabra "Constantes" en la zona de bsqueda y haga clic en el botn Buscar:

59

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:

60

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 + / Mod \ * ^ Clculo realizado Adicin Sustraccin y/o Negacin Divisin real Residuo de la divisin Divisin entera Multiplicacin Potenciacin

2.4.2 Operadores de comparacin


Comparan dos valores o dos cadenas de caracteres.
Operador < <= > >= = <> 61 Clculo realizado Menor que Menor o igual que Mayor que Mayor o igual que Igual a Distinto de

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 And Clculo realizado 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. Si por lo menos una de las expresiones tiene el valor True, el resultado es True (o inclusivo). Si una y slo una de las expresiones tiene el valor True, el resultado es True (o exclusivo). Devuelve el contrario de la expresin. Devuelve True si las dos expresiones tienen el mismo valor de verdad. Devuelve False cuando la primera expresin es True y la segunda False, en caso contrario devuelve True.

Or Xor Not Eqv

Imp

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.
62 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 ^ - (Negacin) *, / \ Mod +, Lgico Not And Or Xor 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.

63

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

64

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

65

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

66

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

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)

67

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.
68 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>

69

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.
70 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

71

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

72

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

73

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].
74 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.

75

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

3. LA PROGRAMACIN DE OBJETOS EN EXCEL


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

77

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 Application AnswerWizard Assistant AutoCorrect AutoRecover Descripcin Objeto que hace referencia a la aplicacin Microsoft Excel activa Objeto que representa la ayuda intuitiva de Excel Objeto que representa el Ayudante de Office. Usa la propiedad Visible para mostrar el Ayudante y la propiedad On para activarlo Objeto que contiene los atributos de Autocorreccin de Microsoft Excel 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 Objeto que representa los criterios de bsqueda en el formato de las celdas (se usa con las propiedades FindFormat y ReplaceFormat del objeto Application) Objeto que muestra los datos en la ventana Inmediato, durante la ejecucin del cdigo Objeto que contiene los atributos usados por Excel para la apertura o grabacin de una pgina Web Objeto que contiene las opciones de comprobacin de errores de la aplicacin Excel Objeto que contiene informacin sobre la configuracin de idioma de Excel Objeto que contiene los mtodos y propiedades que se relacionan con las funciones de sntesis de voz Objeto que representa las opciones de ortografa de la aplicacin Objeto que representa Visual Basic Editor Objeto que contiene todas las funciones disponibles en Excel. Este objeto permite obtener el resultado de una funcin aplicada a un rango de celdas

CellFormat

Debug DefaultWebOptions ErrorCheckingOptions LanguageSettings Speech SpellingOptions VBE WorkSheetFunction

Ejemplo:
Prom = Application.WorksheetFunction.Average(Selection)

78

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

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

79

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 ActiveCell Objeto Parent Application Window Application Window Workbook Frame PageUser Form CommandBars Window Application Window Workbook Application Application Chart Range Worksheet Objetos mltiples Application Windows Application Application Objeto devuelto Objeto Range que representa la primera celda activa de la ventana activa o especificada. Objeto Chart que representa el grfico activo.

ActiveChart

ActiveControl

Objeto Control que representa el control (ActiveX) activo. Objeto CommandBar que representa la barra de men activa en Excel. Objeto Pane que representa el panel activo de la ventana activa. Objeto Worksheet que representa la hoja activa del libro activo o del libro especificado. Objeto Window que representa la ventana activa. Objeto Workbook que representa el libro de la ventana activa. Devuelve respectivamente el prximo (Next) o el anterior (Previous) objeto de un mismo tipo (Chart, Range o Worksheet). Devuelve el objeto contenedor. Objeto Range que representa la o las celdas seleccionadas. Devuelve la celda por la que la funcin definida por el usuario es llamada como objeto Range. Objeto Workbook que representa el libro sobre el que se ejecuta el cdigo de la macro actual.

ActiveMenuBar ActivePane ActiveSheet ActiveWindow ActiveWorkbook NextPrevious Parent Selection ThisCell ThisWorkbook

80

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 81 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.

82

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 83 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.

representa los mtodos, el icono El icono colecciones.

representa las propiedades y las

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.

84

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.

85

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

86

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

87

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.

88

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.

89

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 Ver Examinador de objetos Icono barra de herramientas (barra de herramientas Estndar) Teclado [F2]

1. 2. 3.

4. 5. 6.

Lista de bibliotecas actualmente cargada. Texto buscado: objeto, propiedad, coleccin, evento, mtodo, etc. 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. Clases de objetos de la biblioteca: la clase de objeto seleccionada en la lista Resultado aparece remarcada. Propiedades (icono , mtodos, (icono , eventos (icono ) y constantes (icono relacionan con la clase de objeto seleccionada o remarcada en la lista de la izquierda. Detalle del elemento seleccionado. ) se

90

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. . Si la ventana Resultados muestra muchas lneas, desplcese b. Haga clic en el icono hasta la que le interese; la parte inferior de la ventana se actualizar.

91

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

4. OBJETOS DE EXCEL
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).

92

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

4.1.1.1

Opciones de la categora Ms frecuentes

# 1 2 3 4 5 6 7 8

Propiedades ShowSelectionFloaties EnableLivePreview ShowDevTools AlwaysUseClearType StandardFont. StandardFontSize SheetsInNewWorkbook UserName

Valores devueltos Boolean Boolean Boolean Boolean Entero largo Entero largo Entero largo Cadena de caracteres

93

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

4.1.1.2

Opciones de la categora Frmulas

# 1 2 3 4 5 6 7 94

Propiedades Calculation CalculateBeforeSave Iteration MaxIterations MaxChange ReferenceStyle DisplayFormulaAutoComplete

Valores devueltos Constantes: xlCalculationAutomatic, xlCalculationManual, xlCalculationSemiautomatic Boolean Boolean Entero largo Doble Constantes: xlA1, xlR1C1 Boolean

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

8 9

GenerateTableRefs GenerateGetPivotData

Constantes: xlGenerateTableRefStruct, xlGenerateTableRefA1 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.
# 10 11 12 13 14 15 16 17 18 19 20 Propiedades BackgroundChecking IndicatorColorIndex EvaluateToError InconsistentTableFormula TextDate NumberAsText InconsistentFormula OmittedCells UnlockedFormulaCells EmptyCellReferences ListDataValidation Valores devueltos Boolean Constante xlColorIndex Boolean Boolean Boolean Boolean Boolean Boolean Boolean Boolean Boolean

95

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.
# 1 2 3 4 5 6 7 Propiedades IgnoreCaps IgnoreMixedDigits IgnoreFileNames GermanPostReform SuggestMainOnly ArabicModes DictLang Valores devueltos Boolean Boolean Boolean Boolean Boolean Constante xlArabicModes Entero largo

96

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

4.1.1.5

Opciones de la categora Guardar

# 1 2 3 4 5

Propiedades DefaultSaveFormat AutoRecover.Time AutoRecover.Path DefaultFilePath EnableAutoRecover

Valores devueltos Constante xlFileFormat Entero largo Cadena de caracteres Cadena de caracteres Boolean

La opcin 5 se aplica al libro activo (Application.ActiveWorkbook).

97

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

4.1.1.6

Opciones de la categora Avanzadas

# 1 2 3 4 5 6 7 8 98

Propiedades MoveAfterReturn MoveAfterReturnDirection FixedDecimal FixedDecimalPlaces CellDragAndDrop AlertBeforeOverwriting EditDirectlyInCell ExtendList

Valores devueltos Boolean Constantes xlDown, xlUp, xltoRight, xltoLeft Boolean Entero largo Boolean Boolean Boolean Boolean

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

9 10 11 12 13 14 15 16 17 18 19 20

AutoPercentEntry EnableAutoComplete RollZoom EnableLargeOperationAlert LargeOperationCellThousandCount UseSystemSeparators DecimalSeparator ThousandsSeparator DisplayPasteOptions DisplayInsertOptions CopyObjectsWithCells HighQualityModeForGraphics

Boolean Boolean Boolean Boolean Entero largo Boolean Cadena de caracteres Cadena de caracteres Boolean Boolean Boolean Boolean

99

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

# 1 2 3 4 5 6 7

Propiedades RecentFiles.Maximum DisplayFormulaBar ShowWindowsInTaskbar DisplayFunctionToolTips ShowChartTipNames ShowChartTipValues DisplayCommentIndicator

Valores devueltos Entero largo Boolean Boolean Boolean Boolean Boolean Constantes xlNoIndicator, xlIndicatorOnly, xlCommentAndIndicator

100

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.
# 8 9 10 11 12 13 14 15 16 17 18 Propiedades DisplayHorizontalScrollBar DisplayVerticalScrollBar DisplayWorkbookTabs AutoFilterDateGrouping DisplayHeadings DisplayFormulas DisplayPageBreaks DisplayZeros DisplayOutline DisplayGridlines GridlineColorIndex Valores devueltos Boolean Boolean Boolean Boolean Boolean Boolean Boolean Boolean Boolean Boolean Constante xlColorIndex

101

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

# 1 2 3 4 5 6 7 8 9 102

Propiedades MultiThreadedCalculation.Enabled MultiThreadedCalculation.ThreadMode MultiThreadedCalculation.ThreadCount SaveLinkValues PrecisionAsDisplayed Date1904 UpdateRemoteReferences EnableSound EnableAnimations

Valores devueltos Boolean Constantes xlThreadModeAutomatic xlThreadModeManual Entero Boolean Boolean Boolean Boolean Boolean Boolean

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

10 11 12 13 14 15 16 17 18

IgnoreRemoteRequests AskToUpdateLinks WarnOnFunctionNameConflict MapPaperSize AltStartupPath TransitionMenuKey TransitionNavigKeys TransitionExpEval TransitionFormEntry

Boolean Boolean Boolean Boolean Cadena de caracteres Cadena de caracteres Boolean Boolean 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 Height Left Tipo Real doble Real doble Descripcin Altura de la ventana Distancia entre el borde izquierdo de la pantalla y el borde izquierdo de la ventana principal de Microsoft Excel Distancia entre el borde superior de la pantalla y el borde superior de la ventana principal de Microsoft Excel Distancia entre los bordes izquierdo y derecho de la ventana de la aplicacin Nombre mostrado en la barra de ttulos de la ventana Microsoft Excel

Top

Real doble

Width Caption

Real doble Cadena de caracteres Constantes: xlDefault: Puntero por defecto xlIBeam: Puntero en I xlNorthwestArrow: Flecha Noroeste xlWait: Reloj de arena Boolean Entero largo

Cursor

Aspecto del puntero del ratn en Excel

DisplayFullScreen FormulaBarHeight

ShowMenuFloaties StatusBar Visible 103

Boolean Cadena de caracteres Boolean

Indica si Excel funciona en modo de pantalla completa Altura, en nmero de lneas, de la barra de frmulas Indica si las minibarras de herramientas deben aparecer cuando el usuario hace un clic derecho en la ventana del libro Texto de la barra de estado Indica si la ventana principal de la aplicacin est visible

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

4.1.3 Propiedades diversas


Propiedad Tipo Descripcin Indica si Excel convierte en hipervnculos las rutas de Internet de forma automtica a medida que se las escribe Modo de seguridad que emplea Microsoft Excel al abrir archivos con macros Nombre de la impresora activa Indica la tecla que puede interrumpir el reclculo en Microsoft Excel Indica el estado de clculo de la aplicacin, para el reclculo en curso en Microsoft Excel Devuelve una matriz que contiene los formatos que se encuentran en el portapapeles Devuelve o define el estado del modo Cortar o Copiar

AutoFormatAsYouTypeReplaceHyperlinks

Boolean

Constantes: AutomationSecurity
msoAutomationSecurityByUI msoAutomationSecurityForceDisable msoAutomationSecurityLow

ActivePrinter

Cadena de caracteres Constantes: xlAnyKey, xlEscKey, xlNoKey Constantes: xlCalculating, xlDone, xlPending

CalculationInterruptKey

CalculationState

ClipboardFormats

Variant

CutCopyMode

DataEntryMode

Constantes: False: No est en modo Cortar ni Copiar xlCopy: Est en modo Copiar xlCut: Est en modo Pegar 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 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]

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

104

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 Devuelve o define los criterios de bsqueda para el tipo de formato de celda que hay que encontrar Indica si Excel puede obtener datos de un informe de tabla dinmica Devuelve el controlador de instancia de la instancia que llama a Microsoft Excel Devuelve un objeto que designa el identificador de ventana superior de la ventana Microsoft Excel Indica si los documentos se ajustan automticamente cuando cambia el tamao de papel Indica si hay un ratn disponible Nombre de la empresa Devuelve una matriz de objetos Range que contiene los ltimos cuatro rangos seleccionados True si las macros se graban usando referencias relativas Establece los criterios de reemplazo que se emplean para sustituir formatos de celda (se usa con la propiedad FindFormat) Ruta de acceso local de la carpeta donde estn guardadas las plantillas Nmero de versin de la aplicacin Excel activa

FindFormat

GenerateGetPivotData

Boolean

Hinstance

Entero largo

Hwnd

Entero largo

MapPaperSize

Boolean

MouseAvailable OrganizationName

Boolean Cadena de caracteres

PreviousSelections

Variant

RecordRelative

Boolean

ReplaceFormat

Boolean

TemplatesPath

Cadena de caracteres

Version

Cadena de caracteres

105

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
Descripcin Fuerza un clculo de los datos para todos los libros abiertos Fuerza un reclculo completo de los datos en todos los libros abiertos Para todos los libros abiertos, fuerza un reclculo completo de los datos y vuelve a establecer las dependencias Detiene el reclculo Convierte las referencias de celda en una frmula pasando del estilo de referencia A1 al estilo R1C1 Calcula la expresin pasada como argumento y devuelve el resultado. La expresin debe corresponder a una frmula en ingls

Mtodo Calculate CalculateFull CalculateFullRebuild CheckAbort ConvertFormula Evaluate

4.1.4.2
Mtodo DoubleClick GoTo Intersect Union

Mtodos que actan sobre las celdas


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

4.1.4.3

Mtodos que actan sobre las listas personalizadas


Descripcin Agrega una lista personalizada Elimina una lista personalizada Devuelve una lista personalizada (matriz de cadena de caracteres) Devuelve el nmero de la lista personalizada correspondiente a una matriz de cadena de caracteres

Mtodo AddCustomList DeleteCustomList GetCustomListContents GetCustomListNum

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".

106

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


Descripcin Ejecuta una funcin macro Microsoft Excel 4.0, y devuelve su resultado Ejecuta un procedimiento especificado cuando el usuario pulsa una tecla o una combinacin de teclas 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 Programa la ejecucin de un procedimiento en un momento determinado 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 Sale de Microsoft Excel Repite la ltima operacin ejecutada desde la interfaz de usuario Guarda el rea de trabajo en curso Simula la pulsacin de teclas en la aplicacin activa Deshace la ltima operacin realizada desde la interfaz de usuario Graba el cdigo si se activa el grabador de macros Ejecuta un procedimiento o llama a una funcin Hace una pausa en la ejecucin de la macro hasta un momento especificado. Devuelve el valor True cuando llega la hora especificada

Mtodo ExecuteExcel4Macro OnKey

OnRepeat OnTime OnUndo Quit Repeat SaveWorkspace SendKeys Undo RecordMacro Run Wait

4.1.4.6
Mtodo

Mtodos relativos al correo


Descripcin 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 Cierra una sesin de correo MAPI abierta por Microsoft Excel

MailLogon

MailLogoff

4.1.4.7

Mtodos relativos al protocolo DDE

Estos mtodos (DDEExecute, DDEInitiate, etc.) se explican en el captulo 10 - Vnculos entre aplicaciones.

107

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

4.1.4.8
Mtodo

Otros mtodos
Descripcin 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 Convierte centmetros en puntos (un punto equivale a 0,035 centmetros) Comprueba la ortografa de una palabra y devuelve True si la palabra se encontr en uno de los diccionarios Abre el panel de tareas Office XML Source y muestra la asignacin XML especificada por el argumento XmlMap Muestra un tema de ayuda Convierte pulgadas en puntos Opciones del cuadro de dilogo Opciones de macro Carga un recurso de cdigo XLL y registra automticamente las funciones y comandos que contiene 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

ActivateMicrosoftApp CentimetersToPoints CheckingSpelling DisplayXMLSourcePane Help InchesToPoints MacroOptions RegisterXLL Volatile

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

108

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 109 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

110

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
Descripcin Objeto que representa las opciones relativas a las etiquetas inteligentes Objeto que representa el tema aplicado al libro Objeto que representa el proyecto Visual Basic asociado a un libro Opciones relativas a la grabacin y apertura de una pgina Web Objeto SmartTagOptions Theme VBProject WebOptions 111

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

4.2.1.2
Coleccin

Colecciones
Descripcin Coleccin de las propiedades (autor, ttulo, objeto, palabras clave, etc.) del libro Coleccin de los grficos de un libro Coleccin de las conexiones a orgenes de datos para el libro Coleccin de las propiedades de un libro (ttulo, autor, comentarios, etc.) Coleccin de las vistas personalizadas de un libro Coleccin de los rangos con nombre de un libro Coleccin de los elementos de un libro grabado como pgina Web y que pueden ser actualizados Coleccin de los estilos de un libro Coleccin de los distintos estilos aplicables a una tabla Coleccin de las ventanas de la aplicacin Excel Coleccin de las hojas de clculo de un libro 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 Coleccin de los espacios de nombres XML contenidos en el libro especificado

BuiltinDocumentProperties Charts Connections CustomDocumentProperties CustomViews Names PublishObjects Styles TableStyles Windows Worksheets XmlMaps

XmlNamespaces

4.2.2 Propiedades
4.2.2.1
Propiedad CreateBackup EnableAutoRecover Saved SaveLinkValues UpdateLinks UpdateRemoteReferences

Propiedades relativas a la actualizacin y grabado de libros


Tipo Boolean Boolean Boolean Boolean Constantes Boolean Descripcin Indica si se crea una copia de seguridad cuando se graba el archivo Activa o desactiva la opcin Autorrecuperacin Indica si el libro especificado no ha sido modificado despus de la ltima grabacin Indica si Microsoft Excel guarda los valores de los vnculos externos con el libro Parmetro del libro para la actualizacin de los vnculos OLE incorporados Indica si Microsoft Excel actualiza las referencias remotas del libro

112

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

4.2.2.2
Propiedad

Propiedades relativas a libros compartidos


Tipo Descripcin 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 Indica si las modificaciones realizadas al libro compartido se transmiten a los otros usuarios cuando el libro es actualizado automticamente Devuelve o establece el nmero de das que se muestran en el historial de cambios del libro compartido Devuelve o define la forma en que se resuelven los conflictos cuando se actualiza un libro compartido Indica si las modificaciones en el libro compartido se resaltan en la pantalla Indica si est habilitado el seguimiento de cambios en el libro compartido Indica si las modificaciones del libro compartido se muestran en una nueva hoja de clculo Indica si el libro est abierto como una lista compartida Devuelve la cantidad de veces que el libro fue grabado mientras estaba abierto como lista compartida Indica si la hoja de clculo Historial de conflictos est visible en el libro abierto como lista compartida 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 Indica si el libro est protegido con contrasea Devuelve o define la contrasea necesaria para abrir el libro Devuelve el algoritmo que usa Microsoft Excel para encriptar las contraseas del libro Devuelve el nombre del proveedor del algoritmo de cifrado que utiliza Microsoft Excel para encriptar las contraseas del libro especificado

AutoUpDateFrequency

Entero largo

AutoUpDateSaveChanges

Boolean

ChangeHistoryDuration

Entero largo

ConflictResolution

Constantes

HighlightChangesOnScreen KeepChangeHistory ListChangesOnNewsheet MultiUserEditing

Boolean Boolean Boolean Boolean

RevisionNumber

Entero largo

ShowConflictHistory

Boolean

UserStatus

Variant

HasPassword Password PasswordEncryptionAlgorithm

Boolean Cadena de caracteres Cadena de caracteres

PasswordEncryptionProvider

Cadena de caracteres

113

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

PasswordEncryptionKeyLength

Entero largo

PasswordEncryptionFileProperties ProtectStructure ProtectWindows ReadOnly ReadOnlyRecommanded RemovePersonalInformation VBASigned WritePassword WriteReserved WriteReservedBy

Boolean Boolean Boolean Boolean Boolean Boolean Boolean Cadena de caracteres Boolean Cadena de caracteres

Indica la longitud de la clave del algoritmo que utiliza Microsoft Excel para encriptar las contraseas del libro especificado Indica si Microsoft Excel encripta las propiedades de archivo del libro Indica si el orden de las hojas de clculo del libro est protegido Indica si las ventanas del libro estn protegidas Indica si el libro fue abierto en modo de slo lectura Indica si el libro fue grabado como recomendado slo lectura Indica si la informacin personal del libro puede ser eliminada Indica si el proyecto VBA del libro tiene firma digital Devuelve o define la contrasea de escritura para el libro Indica si el libro est protegido contra escritura Indica el nombre del usuario que est autorizado a sobreescribir el libro

4.2.2.3
Propiedad Colors Date1904

Otras propiedades
Tipo Variant Boolean Variant Descripcin Devuelve o define los colores de la paleta del libro. La paleta tiene 56 entradas, cada una representa un valor RGB Indica si el libro usa el sistema de fechas 1904 Especifica el estilo de tabla de la coleccin TableStyles que se usa como estilo por defecto para las tablas dinmicas Especifica el estilo de tabla de la coleccin TableStyles que se usa por defecto Devuelve o define la manera en que se muestran las formas Indica si son visibles el encabezado de composicin de los mensajes de correo y la barra de herramientas de sobre Nombre del libro, incluye su ruta en el disco 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

DefaultPivotTableStyle

DefaultTableStyle DisplayDrawingObjects

Variant Constantes

EnvelopeVisible FullNameURLEncoded HasVBProject

Boolean Cadena de caracteres Boolean

114

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

IsAddin PrecisionAsDisplayed ShowPivotChartActiveFields ShowPivotTableFieldList TemplateRemoveExtData

Boolean Boolean Boolean Boolean Boolean

Indica si el libro se ejecuta como complemento Indica si los clculos en el libro se realizan usando solamente los decimales visibles en las celdas Indica o define si el panel de tareas filtro de grfico dinmico es visible Indica si la lista de campos de una tabla dinmica puede mostrarse 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
Descripcin Agrega el libro especificado a la lista de favoritos de la barra de herramientas Web Aplica el tema especificado al libro Cierra el libro especificado Elimina del libro un formato numrico personalizado Publica un libro en formato PDF o XPS Fusiona, en un libro abierto, los cambios realizados en otro libro Crea una copia de la ventana especificada Abre una base de datos y muestra la informacin en un nuevo libro. Devuelve un objeto Workbook Enva el libro especificado a una carpeta pblica. Este mtodo solamente funciona con un cliente Microsoft Exchange conectado a un servidor Microsoft Exchange Imprime el libro especificado Muestra la vista preliminar del libro especificado Elimina las entradas del registro de cambios del libro especificado Actualiza los rangos de datos externos y los informes de tablas dinmicas del libro especificado Distribuye el libro usando la lista de distribucin activa Guarda las modificaciones del libro especificado Guarda el libro especificado en otro archivo (equivale a la opcin Guardar como del men Archivo) Guarda una copia del libro activo en un nuevo archivo sin modificar el libro abierto en la memoria 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 Mtodo AddToFavorites ApplyTheme Close DeleteNumberFormat ExportAsFixedFormat MergeWorkbook NewWindows OpenDatabase Post PrintOut PrintPreview PurgeChangeHistoryNow RefreshAll Route Save SaveAs SaveAsCopy

UpdateFromFile

115

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

4.2.3.2
Mtodo

Mtodos relativos a la seguridad


Descripcin Modifica los permisos de acceso al libro que puede implicar la necesidad de cargar, desde el disco, una versin actualizada Bloquea el libro en el servidor para evitar su modificacin Protege el libro especificado para que no pueda modificarse Graba el libro e impide que sea compartido Quita la proteccin del libro especificado Desactiva la proteccin que impide compartir el libro y lo graba

ChangeFileAccess LockServerFile Protect ProtectSharing UnProtect UnprotectSharing

4.2.3.3

Mtodos relativos a libros compartidos


Descripcin Acepta todas las modificaciones hechas al libro compartido especificado Devuelve una variable Boolean que indica si Excel puede extraer un libro especificado desde un servidor Atribuye al usuario actual un acceso exclusivo al libro abierto como lista compartida Controla cmo se muestran los cambios en un libro compartido Impide los cambios sobre el libro compartido especificado Desconecta el usuario especificado del libro compartido

Mtodo AcceptAllChanges CanCheckIn ExclusiveAccess HighlightChangesOptions RejectAllChanges RemoveUser

4.2.3.4
Mtodo BreakLink

Mtodos relacionados con datos vinculados


Descripcin Convierte las frmulas vinculadas a otros orgenes Microsoft Excel u orgenes OLE en valores Modifica un vnculo entre dos documentos Activa las conexiones de datos en un libro 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 Devuelve informacin acerca de la fecha y el estado de actualizacin del vnculo 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 Abre los documentos origen de uno o ms vnculos Abre un archivo XML en un nuevo libro. Devuelve un objeto Workbook Vuelve a cargar un libro basado en un documento HTML usando la codificacin de documentos especificada Define el nombre de un procedimiento ejecutado a cada actualizacin de un vnculo DDE

ChangeLink EnableConnections FollowHyperlink LinkInfo LinkSources OpenLinks OpenXml ReloadAs SetLinkOnDate 116

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

UpdateLink WebPagePreview

Actualiza uno o ms vnculos Microsoft Excel, DDE o OLE 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


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

Mtodo SendFaxOverInternet SendMail SendForReview EndReview ReplyWithChanges

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:
Private Dim Dim Dim

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.
Sub NuevoLibro() Libro As Workbook i As Integer 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 117 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.
118 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

119

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

120

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

4.3.1 Objetos y colecciones


4.3.1.1
Objeto AutoFilter Cells OutLine PageSetup

Objetos
Descripcin Objeto que representa el autofiltro de la hoja de clculo especificada Objeto Range que representa todas las celdas de la hoja de clculo especificada Objeto que representa el esquema de la hoja de clculo especificada Objeto que representa las opciones de configuracin de pgina de la hoja de clculo especificada 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 Objeto que representa una celda o un rango de celdas (una fila, una columna, etc.) Objeto que representa el ordenamiento de un rango de datos Objeto que representa la ficha de la hoja de clculo especificada

Protection Range Sort Tab

4.3.1.2
Coleccin ChartObjects Comments

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

CustomProperties HPageBreaks Hyperlinks ListObjects Names OLEObjects PivotTables QueryTables Scenarios SmartTags VPageBreaks

121

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

4.3.2 Propiedades
Propiedad AutoFilterMode ConsolidationFunction Tipo Boolean Constante (xlMax, xlMin, xlSum, etc.). Descripcin Indica si las flechas del men desplegable de los autofiltros aparecen en la hoja de clculo especificada Devuelve la funcin usada para la consolidacin actual 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) Matriz de cadenas de caracteres que contiene los nombres de las hojas origen para la consolidacin actual de la hoja de clculo especificada Indica si se muestran los saltos de pgina (automticos y manuales) de la hoja especificada Corresponde a la opcin Ver la hoja actual de derecha a izquierda del cuadro de dilogo Herramientas - Opciones ficha Internacional Indica si las flechas del Autofiltro estn activas solamente cuando est activa la proteccin de slo interfaz de usuario Indica si Excel recalcula automticamente la hoja de clculo cuando es necesario Devuelve o define si los formatos condicionales se aplican automticamente si es necesario Indica si los smbolos del esquema estn activos cuando est activa la proteccin de slo interfaz de usuario Indica si los controles y las acciones de la tabla dinmica estn activos cuando est activa la proteccin de slo interfaz de usuario Devuelve o define los elementos que pueden seleccionarse en la hoja (xlNoRestrictions, xlNoSelection, xlUnlockedCells) Indica si hay aplicado un filtro a la hoja especificada Representa el encabezado de mensajes de correo electrnico para la hoja especificada Cadena de caracteres que contiene el nombre de la hoja de clculo Indica si el contenido de la hoja especificada est protegido Indica si las formas grficas estn protegidas Indica si est activa la proteccin de slo interfaz de usuario Indica si estn protegidos los escenarios de hoja de clculo Devuelve o establece el rango en que est permitido el

ConsolidationOptions

ConsolidationSources

DisplayPageBreaks

Boolean

DisplayRightToLeft

Boolean

EnabledAutofilter EnableCalculation
EnableFormatConditionsCalculation

Boolean Boolean Boolean Boolean

EnableOutLining

EnablePivotTable

Boolean

EnableSelection FilterMode MailEnvelope Name ProtectContents ProtectDrawingObjects ProtectionMode ProtectScenarios ScrollArea 122

Constante Boolean

Cadena de caracteres Boolean Boolean Boolean Boolean Cadena de caracteres

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

StandardHeight StandardWidth Type Visible

Real doble Real doble Constantes Boolean

desplazamiento de la hoja de clculo especificada Devuelve el alto estndar (valor por defecto) de las filas de la hoja de clculo especificada Devuelve el ancho estndar (valor por defecto) de las columnas de la hoja de clculo especificada Devuelve o define el tipo de la hoja de clculo especificada (xlChart, xlDialogSheet, etc.) Indica si la hoja de clculo especificada est visible

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

123

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.
124 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

125

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
Propiedad ActiveCell Areas Cells

Propiedades que devuelven un objeto Range


Objeto contenedor Application Window Range Application Range WorkSheet Application Range WorkSheet Range Objeto devuelto Objeto Range que representa la primera celda activa de la ventana activa o especificada Coleccin que agrupa todos los rangos de una seleccin mltiple 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 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 Objeto Range que representa el objeto Range especificado, limitado por toda combinacin de filas y columnas vacas Representa una o ms columnas enteras del rango especificado Objeto Range que representa una o ms filas enteras del rango especificado. 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] Objeto Range especificado desplazado una o ms filas o columnas 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 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

Columns

CurrentRegion EntireColumn EntireRow End Offset Range

Range Range Application Worksheet Range Application Range WorkSheet

Rows

126

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
Mtodo Intersect Union

Mtodos que devuelven un objeto Range


Objeto contenedor Application Application Objeto devuelto Objeto Range que representa la interseccin rectangular de varios rangos. 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:


127 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 128 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")) 129 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

130

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

4.4.3.1
Objeto Characters Comment Errors Font Interior PivotCell Validation XPath

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

4.4.3.2
Coleccin

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

Areas Borders FormatConditions HyperLinks Phonetics QueryTables SmartTags

4.4.4 Propiedades
4.4.4.1
Propiedad AllowEdit AddressLocal Address Column 131

Propiedades relacionadas con la posicin y el formato de las celdas


Tipo Boolean Cadena de caracteres Cadena de caracteres Entero Descripcin True si el rango puede ser modificado en una hoja de clculo protegida Devuelve la referencia del rango especificado en el idioma del usuario Devuelve la referencia del rango en el lenguaje de la macro Devuelve el nmero de la primera columna de la primera zona del rango especificado

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

ColumnWidth

Variant Constantes: xlCenter, xlDistributed, xlJustify, xlLeft, xlRight Entero Entero Variant Boolean Boolean Constantes: xlBottom, xlCenter, xlDistributed, xlJustify, xlTop

Devuelve o define el ancho de todas las columnas del rango especificado

HorizontalAlignment

Define o devuelve el tipo de alineacin horizontal

IndentLevel Row RowHeight UseStandardHeight UseStandardWidth

Devuelve o define el nivel de sangra efectivo Devuelve el nmero de la primera fila de la primera zona del rango Devuelve el alto, medido en puntos, de las filas del rango especificado True si el alto de fila del objeto Range es igual al alto estndar de la hoja True si el ancho de columna del objeto Range es igual al ancho estndar de la hoja

VerticalAlignment

Define o devuelve el tipo de alineacin vertical

4.4.4.2
Propiedad CountLarge Formula FormulaLocal FormulaR1C1

Propiedades que se relacionan con el contenido de celdas y con las frmulas


Tipo Variant Cadena de caracteres Cadena de caracteres Cadena de caracteres Cadena de caracteres Variant Cadena de caracteres Descripcin Determina el valor mximo en el rango Devuelve o define la frmula en el estilo de referencia A1 Devuelve o define la frmula del objeto usando las referencias de estilo A1 en el idioma del usuario Devuelve o define la frmula del objeto usando las notaciones de estilo R1C1 Devuelve o define la frmula usando las notaciones de estilo R1C1 en el idioma del usuario Devuelve el prefijo de alineacin de la celda Valor de la celda especificada con el formato especificado (contenido visible de la celda) 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) True si Microsoft Excel inserta automticamente retornos de carro en el texto del objeto

FormulaR1C1Local PrefixCharacter Text

Value

Variant

WrapText

Boolean

132

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

4.4.4.3
Propiedad MergeCells

Otras propiedades
Tipo Boolean Entero largo Descripcin True si el rango o el estilo contiene celdas combinadas Devuelve la cantidad de filas de encabezado en el rango especificado

ListHeaderRows

4.4.5 Mtodos
4.4.5.1
Mtodo ColumnDifferences Find FindNext FindPrevious RowDifferences SpecialCells SetPhonetic

Mtodos que devuelven un objeto


Descripcin Devuelve un objeto Range que representa las celdas donde el contenido es diferente al de la celda de comparacin de cada columna Busca una informacin especfica en un rango y devuelve un objeto Range que representa la primera celda donde aparece esa informacin Contina una bsqueda (siguiente celda) iniciada con el mtodo Find Contina una bsqueda (celda anterior) iniciada con el mtodo Find Devuelve un objeto Range que representa las celdas en las que el contenido es diferente del de la celda de comparacin de cada fila Devuelve un objeto Range que representa las celdas que corresponden al tipo y al valor especificados Crea un objeto Phonetic para las celdas del objeto Range especificado

4.4.5.2
Mtodo AddComment AutoFit BorderAround

Mtodos que se relacionan con la presentacin de las celdas


Descripcin Agrega un comentario al rango Modifica el ancho de las columnas del rango o el alto de las filas para ajustar sus datos Agrega un borde a un rango y define las propiedades Color, LineStyle y Weight del nuevo borde Quita todos los comentarios de celda del rango especificado Elimina los formatos de las celdas Borra las notas escritas y sonoras de todas las celdas del rango especificado Inserta una sangra en las celdas del rango especificado Reorganiza el texto en un rango de forma que lo llene de manera uniforme Combina las celdas Devuelve o define las notas de celdas asociadas a la celda ubicada en la esquina superior izquierda del rango

ClearComments ClearFormats ClearNotes InsertIndent Justify Merge NoteText 133

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

Sort TextToColumns UnMerge

Ordena un rango de valores Redistribuye en varias columnas una columna de celdas que contiene texto Separa un celda combinada en celdas individuales

4.4.5.3
Mtodo

Mtodos que se relacionan con el contenido de las celdas


Descripcin Ejecuta un llenado incremental en las celdas del rango especificado Devuelve una coincidencia de la funcionalidad Autocompletar de la lista Borra el contenido de las celdas Consolida datos que provienen de varios rangos situados en diferentes hojas de clculo en un nico rango situado en una nica hoja de clculo Copia al portapapeles el objeto Range del rango especificado Copia el contenido de un objeto Recordset ADO o DAO en una hoja de clculo, comenzando en la esquina superior izquierda del rango especificado Copia el objeto seleccionado en el portapapeles en forma de imagen Corta el objeto y lo guarda en el portapapeles o lo pega en un destino especificado Elimina las celdas e indica cmo reemplazar las celdas eliminadas Rellena un rango hacia abajo Rellena un rango hacia la izquierda Rellena un rango hacia la derecha Rellena un rango hacia arriba Inicia el Asistente para funciones en la celda situada en la esquina superior izquierda del rango Inserta celdas e indica cmo desplazar las celdas 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 Efecta el pegado especial de un objeto Range proveniente del portapapeles en el rango especificado Elimina los datos repetidos en un rango de valores Busca y reemplaza caracteres en las celdas del rango especificado. El uso de este mtodo no cambia la seleccin ni la celda activa

AutoFill AutoComplete ClearContents Consolidate Copy CopyFromRecordSet CopyPicture Cut Delete FillDown FillLeft FillRight FillUp FunctionWizard Insert Parse

PasteSpecial RemoveDuplicates Replace

4.4.5.4
Mtodo ApplyNames CreateNames ListNames

Mtodos que se relacionan con los nombres de celdas


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

134

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

4.4.5.5
Mtodo

Mtodos que se relacionan con los filtros


Descripcin Filtra o copia los datos de una lista en funcin de una zona de criterios Filtra una lista

AdvancedFilter AutoFilter

4.4.5.6
Mtodo

Mtodos que se relacionan con el modo esquema


Descripcin Aplica los estilos del esquema al rango especificado Crea automticamente un esquema para el rango especificado. Si el rango tiene una sola celda, Microsoft Excel crea un esquema para toda la hoja 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 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

ApplyOutlineStyles AutoOutline

Group

Ungroup

4.4.5.7
Mtodo

Mtodos que se relacionan con la herramienta de Auditora


Descripcin Desplaza una flecha de rastreo del rango especificado hacia la o las celdas precedentes, dependientes o que provocan un error Muestra las flechas de rastreo que sealan las celdas dependientes directas del rango Muestra las flechas de rastreo que sealan las celdas precedentes directas del rango 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

NavigateArrow ShowDependents ShowPrecedents ShowErrors

4.4.5.8
Mtodo Calculate

Otros mtodos
Descripcin Calcula las frmulas de todos los libros abiertos Calcula el rango de celdas indicado a partir de su esquina superior izquierda y hasta la esquina inferior derecha en el orden fila-campo Indica que el rango especificado se recalcular en la prxima actualizacin de la hoja Publica los datos de un rango de valores en formato PDF o XPS Imprime el rango de celdas

CalculateRowMajorOrder Dirty ExportAsFixedFormat PrintOut 135

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

Run Table

Ejecuta una macro 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)") 136 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

137

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 138 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

139

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

5. CUADROS DE DILOGO
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 xlDialogActivate xlDialogActiveCellFont xlDialogAddChartAutoformat xlDialogAddinManager 140 Valor 103 476 390 321 Cuadro de dilogo Activar Fuente de celda activa Agregar autoformato de grfico Administrador de complementos

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

xlDialogAlignment xlDialogApplyNames xlDialogApplyStyle xlDialogAppMove xlDialogAppSize xlDialogArrangeAll xlDialogAssignToObject xlDialogAssignToTool xlDialogAttachText xlDialogAttachToolbars xlDialogAutoCorrect xlDialogAxes xlDialogBorder xlDialogCalculation xlDialogCellProtection xlDialogChangeLink xlDialogChartAddData xlDialogChartLocation xlDialogChartOptionsDataLabelMultiple xlDialogChartOptionsDataLabels xlDialogChartOptionsDataTable xlDialogChartSourceData xlDialogChartTrend xlDialogChartType xlDialogChartWizard xlDialogCheckboxProperties xlDialogClear xlDialogColorPalette xlDialogColumnWidth xlDialogCombination xlDialogConditionalFormatting xlDialogConsolidate xlDialogCopyChart xlDialogCopyPicture xlDialogCreateList xlDialogCreateNames xlDialogCreatePublisher xlDialogCustomizeToolbar xlDialogCustomViews xlDialogDataDelete xlDialogDataLabel xlDialogDataLabelMultiple xlDialogDataSeries xlDialogDataValidation xlDialogDefineName xlDialogDefineStyle xlDialogDeleteFormat xlDialogDeleteName xlDialogDemote 141

43 133 212 170 171 12 213 293 80 323 485 78 45 32 46 166 392 527 724 505 506 540 350 526 288 435 52 161 47 73 583 191 147 108 796 62 217 276 493 36 379 723 40 525 61 229 111 110 203

Alineacin Aplicar nombres Aplicar estilo AppMove AppSize Organizar todo Asignar a un objeto Asignar a herramienta Adjuntar texto Adjuntar barras de herramientas Autocorreccin Ejes Borde Clculo Proteger celda Cambiar vnculo Agregar datos de grfico Ubicacin del grfico Datalabel mltiple de opciones de grfico Datalabels de opciones de grfico Datatable de opciones de grfico Datos de origen de grfico Tendencia de grfico Tipo de grfico Asistente para grficos Propiedades de la casilla de verificacin Borrar Paleta de colores Ancho de columna Combinado Formato condicional Consolidar Copiar grfico Copiar imagen Crear lista Crear nombres Crear publicacin Personalizar barra de herramientas Vistas personalizadas Eliminar datos Rtulo de datos Rtulo de datos mltiple Serie de datos Validacin de datos Definir nombre Definir estilo Eliminar formato Eliminar nombre Disminuir nivel

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

xlDialogDisplay xlDialogDocumentInspector xlDialogEditboxProperties xlDialogEditColor xlDialogEditDelete xlDialogEditionOptions xlDialogEditSeries xlDialogErrorbarX xlDialogErrorbarY xlDialogErrorChecking xlDialogEvaluateFormula xlDialogExternalDataProperties xlDialogExtract xlDialogFileDelete xlDialogFileSharing xlDialogFillGroup xlDialogFillWorkgroup xlDialogFilter xlDialogFilterAdvanced xlDialogFindFile xlDialogFont xlDialogFontProperties xlDialogFormatAuto xlDialogFormatChart xlDialogFormatCharttype xlDialogFormatFont xlDialogFormatLegend xlDialogFormatMain xlDialogFormatMove xlDialogFormatNumber xlDialogFormatOverlay xlDialogFormatSize xlDialogFormatText xlDialogFormulaFind xlDialogFormulaGoto xlDialogFormulaReplace xlDialogFunctionWizard xlDialogGallery3dArea xlDialogGallery3dBar xlDialogGallery3dColumn xlDialogGallery3dLine xlDialogGallery3dPie xlDialogGallery3dSurface xlDialogGalleryArea xlDialogGalleryBar xlDialogGalleryColumn xlDialogGalleryCustom xlDialogGalleryDoughnut xlDialogGalleryLine 142

27 862 438 223 54 251 228 463 464 732 709 530 35 6 481 200 301 447 370 475 26 381 269 465 423 150 88 225 128 42 226 129 89 64 63 130 450 193 272 194 195 196 273 67 68 69 388 344 70

Mostrar Inspector de documento Propiedades de cuadro de edicin Editar color Editar eliminacin Opciones de edicin Editar serie Barra de error X Barra de error Y Comprobacin de errores Evaluar frmula Propiedades de los datos externos Extraer Eliminar archivo Uso compartido de archivos Rellenar grupo Rellenar grupo de trabajo Filtro de cuadro de dilogo Filtro avanzado Buscar archivo Fuente Propiedades de fuente Autoformato Formato del grfico Formato de tipo de grfico Formato de fuente Formato de leyenda Formato de principal Mover formato Formato de nmero Formato del grfico superpuesto Formato de tamao Aplicar formato al texto Buscar frmula Ir a frmula Reemplazar frmula Asistente para funciones Galera de rea 3D Galera de Barra 3D Galera de Columna 3D Galera de Lnea 3D Galera de Circular 3D Galera de Superficie 3D Galera de rea Galera de Barra Galera de Columna Galera Personalizado Galera de Anillos Galera de Lnea

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

xlDialogGalleryPie xlDialogGalleryRadar xlDialogGalleryScatter xlDialogGoalSeek xlDialogGridlines xlDialogImportTextFile xlDialogInsert xlDialogInsertHyperlink xlDialogInsertNameLabel xlDialogInsertObject xlDialogInsertPicture xlDialogInsertTitle xlDialogLabelProperties xlDialogListboxProperties xlDialogMacroOptions xlDialogMailEditMailer xlDialogMailLogon xlDialogMailNextLetter xlDialogMainChart xlDialogMainChartType xlDialogMenuEditor xlDialogMove xlDialogMyPermission xlDialogNew xlDialogNewWebQuery xlDialogNote xlDialogObjectProperties xlDialogObjectProtection xlDialogOpen xlDialogOpenLinks xlDialogOpenMail xlDialogOpenText xlDialogOptionsCalculation xlDialogOptionsChart xlDialogOptionsEdit xlDialogOptionsGeneral xlDialogOptionsListsAdd xlDialogOptionsME xlDialogOptionsTransition xlDialogOptionsView xlDialogOutline xlDialogOverlay xlDialogOverlayChartType xlDialogPageSetup xlDialogParse xlDialogPasteNames xlDialogPasteSpecial xlDialogPatterns xlDialogPermission 143

71 249 72 198 76 666 55 596 496 259 342 380 436 437 382 470 339 378 85 185 322 262 834 119 667 154 207 214 1 2 188 441 318 325 319 356 458 647 355 320 142 86 186 7 91 58 53 84 832

Galera de Circular Galera de Radial Galera de Dispersin Buscar objetivo Lneas de divisin Importar archivo de texto Insertar Insertar hipervnculo Insertar etiqueta para nombre Insertar objeto Insertar imagen Insertar ttulo Propiedades de etiqueta Propiedades de cuadro de lista Opciones de la macro Editar formulario de correo Inicio de sesin de correo Siguiente carta de correo Grfico principal Tipo de grfico principal Editor de mens Mover Mi permiso Nuevo Nueva consulta Web Nota Propiedades de objeto Proteger objeto Abrir Abrir vnculo Abrir correo Abrir texto Opciones Clculo Opciones de grfico Opciones Edicin Opciones General Opciones Agregar listas Opciones ME Opciones Transicin Opciones Ver Esquema Superpuesto Tipo de grfico superpuesto Configurar pgina Analizar Pegar nombres Pegado especial Tramas Permiso

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

xlDialogPhonetic xlDialogPivotCalculatedField xlDialogPivotCalculatedItem xlDialogPivotClientServerSet xlDialogPivotFieldGroup xlDialogPivotFieldProperties xlDialogPivotFieldUngroup xlDialogPivotShowPages xlDialogPivotSolveOrder xlDialogPivotTableOptions xlDialogPivotTableWizard xlDialogPlacement xlDialogPrint xlDialogPrinterSetup xlDialogPrintPreview xlDialogPromote xlDialogProperties xlDialogPropertyFields xlDialogProtectDocument xlDialogProtectSharing xlDialogPublishAsWebPage xlDialogPushbuttonProperties xlDialogReplaceFont xlDialogRoutingSlip xlDialogRowHeight xlDialogRun xlDialogSaveAs xlDialogSaveCopyAs xlDialogSaveNewObject xlDialogSaveWorkbook xlDialogSaveWorkspace xlDialogScale xlDialogScenarioAdd xlDialogScenarioCells xlDialogScenarioEdit xlDialogScenarioMerge xlDialogScenarioSummary xlDialogScrollbarProperties xlDialogSearch xlDialogSelectSpecial xlDialogSendMail xlDialogSeriesAxes xlDialogSeriesOptions xlDialogSeriesOrder xlDialogSeriesShape xlDialogSeriesX xlDialogSeriesY xlDialogSetBackgroundPicture xlDialogSetPrintTitles 144

656 570 572 689 433 313 434 421 568 567 312 300 8 9 222 202 474 754 28 620 653 445 134 336 127 17 5 456 208 145 285 87 307 305 308 473 311 420 731 132 189 460 557 466 504 461 462 509 23

Fontico Campo dinmico calculado Elemento dinmico calculado Conjunto dinmico cliente servidor Agrupar campos dinmicos Propiedades de campo dinmico Desagrupar campos dinmicos Mostrar pginas dinmicas Orden de resolucin dinmico Opciones de tabla dinmica Asistente para tablas dinmicas Ubicacin Imprimir Configurar impresora Vista preliminar Aumentar nivel Propiedades Campos de propiedad Proteger documento Proteger uso compartido Publicar como pgina Web Propiedades de botn Reemplazar fuente Lista de distribucin Alto de fila Ejecutar Guardar como Guardar copia como Guardar nuevo objeto Guardar libro Guardar rea de trabajo Escala Agregar escenario Celdas de escenario Modificar escenario Combinar escenarios Resumen del escenario Propiedades de barra de desplazamiento Buscar Seleccin especial Enviar correo Ejes de series Opciones de serie Orden de las series Forma de las series Serie X Serie Y Establecer imagen de fondo Imprimir ttulos

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

xlDialogSetUpdateStatus xlDialogShowDetail xlDialogShowToolbar xlDialogSize xlDialogSort xlDialogSortSpecial xlDialogSplit xlDialogStandardFont xlDialogStandardWidth xlDialogStyle xlDialogSubscribeTo xlDialogSubtotalCreate xlDialogSummaryInfo xlDialogTable xlDialogTabOrder xlDialogTextToColumns xlDialogUnhide xlDialogUpdateLink xlDialogVbaInsertFile xlDialogVbaMakeAddin xlDialogVbaProcedureDefinition xlDialogView3d xlDialogWebOptionsBrowsers xlDialogWebOptionsEncoding xlDialogWebOptionsFiles xlDialogWebOptionsFonts xlDialogWebOptionsGeneral xlDialogWebOptionsPictures xlDialogWindowMove xlDialogWindowSize xlDialogWorkbookAdd xlDialogWorkbookCopy xlDialogWorkbookInsert xlDialogWorkbookMove xlDialogWorkbookName xlDialogWorkbookNew xlDialogWorkbookOptions xlDialogWorkbookProtect xlDialogWorkbookTabSplit xlDialogWorkbookUnhide xlDialogWorkgroup xlDialogWorkspace xlDialogZoom

159 204 220 261 39 192 137 190 472 44 218 398 474 41 394 422 94 201 328 478 330 197 773 686 684 687 683 685 14 13 281 283 354 282 386 302 284 417 415 384 199 95 256

Establecer estado de actualizacin Mostrar detalle Mostrar barra de herramientas Tamao Ordenar Ordenar especial Dividir Fuente estndar Ancho estndar Estilo Suscripcin a Crear subtotal Resumen Tabla Orden de tabulacin Texto en columnas Mostrar Actualizar vnculo Insertar archivo VBA Crear complemento VBA Definicin de procedimiento VBA Vista 3D Opciones Web Exploradores Opciones Web Codificacin Opciones Web Archivos Opciones Web Fuentes Opciones Web General Opciones Web Imgenes Mover ventana Ajustar tamao de la ventana Agregar libro Copiar libro Insertar libro Mover libro Nombre del libro Nuevo libro Opciones del libro Proteger libro Dividir libro en fichas Mostrar libro Grupo de trabajo rea de trabajo Zoom

145

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,
146 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

147

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)

148

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 1 2 4 8 16 64 Frmula Nmero Cadena Valor Boolean Referencia de celda Valor de error 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.

149

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 Nmero y tipo de botn vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel vbMsgBoxHelpButton Tipo de icono vbCritical vbQuestion vbExclamation vbInformation Botn por defecto vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 150 Valor 0 1 2 3 4 5 16384 Significado Muestra solamente el botn Aceptar. Muestra los botones Aceptar y Cancelar. Muestra los botones Anular, Reintentar e Ignorar. Muestra los botones S, No y Cancelar. Muestra los botones S y No. Muestra los botones Reintentar y Cancelar. Muestra un botn de ayuda.

16 32 48 64 0 256 512

Muestra el icono Muestra el icono Muestra el icono Muestra el icono Primer botn. Segundo botn. Tercer botn.

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

vbDefaultButton4 Modalidad vbApplicationModal vbSystemModal Presentacin vbMsgBoxSetForeground vbMsgBoxRight vbMsgBoxRtlReading

768

Cuarto botn. Aplicacin modal. El usuario debe responder al mensaje que aparece en el cuadro de mensajes antes de seguir trabajando en la aplicacin actual. Sistema modal. Se suspenden todas las aplicaciones hasta que el usuario responda al mensaje que aparece en el cuadro de mensajes. Muestra la ventana del cuadro de mensaje en primer plano. Alinea el texto a la derecha. Especifica el orden de lectura de derecha a izquierda para los sistemas hebreo y rabe.

0 4096 65536 524288 1048576

Los valores devueltos tambin se definen mediante constantes:


Constante vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo Valor devuelto 1 2 3 4 5 6 7 Botn elegido Aceptar Cancelar Anular Reintentar Ignorar S 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"

151

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 Retorno de carro y salto de lnea Salto de prrafo Salto de lnea Caracter nulo Cadena de longitud nula Tabulacin Retroceso Constante vbCrLf vbCr vbLf vbNullChar vbNullString vbTab vbBack Equivalente Chr(13) + Chr(10) Chr(13) Chr(10) Chr(0) "" Chr(9) Chr(8)

Estas constantes pueden usarse en otras instrucciones adems de los cuadros de dilogo.

Ejemplo: Para mostrar este cuadro de dilogo:


152 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

153

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

6. FORMULARIOS
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 Ver Ventana Propiedades Icono (barra de herramientas Estndar) Teclado [F4]

154

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 Etiqueta Cuadro de texto Cuadro combinado Cuadro de lista Casilla de verificacin Botn de opcin Objeto Label TextBox ComboBox ListBox CheckBox OptionButton

155

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

Botn de alternar Marco Botn de comando Barra de tabulaciones Pgina mltiple (seleccin de pginas) Barra de desplazamiento Botn de nmero (seleccin de valores) Imagen RefEdit (seleccin de rangos)

ToggleButton Frame CommandButton TabStrip Multipage ScrollBar SpinButton Image 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 ( a ser la herramienta activa. ) pasar

Para dibujar varios controles del mismo tipo, haga doble clic en la herramienta correspondiente.

6.3.2 Propiedades de los controles


Propiedad (Name) Caption ControlTipText Visible Enabled Value ControlSource Descripcin Especifica el nombre del control o formulario Indica el texto de una etiqueta (control) o barra de titulo (formularios) Crea una etiqueta informativa Especifica si un control est oculto o visible Determina si el foco puede estar sobre el control, es decir, si el control se encuentra habilitado o deshabilitado Define el estado o el contenido de un control 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.
156 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 Font BackColor ForeColor BorderColor BorderStyle 157 Descripcin Define la tipografa Especifica el color de fondo Especifica el color de primer plano Especifica el color del borde Especifica el tipo de borde

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 PasswordChar MaxLength AutoTab AutoSize AutoWordSelect DragBehavior EnterKeyBehavior HideSelection IntegralHeight Locked MultiLine SelectionMargin TabKeyBehavior TextAlign WordWrap Descripcin Indica el caracter que hay que mostrar en lugar de los caracteres reales introducidos por el usuario Especifica el largo mximo de una entrada Fuerza una tabulacin automtica cuando una entrada alcanza el mximo largo de caracteres permitido Redimensiona automticamente un control para mostrar todo su contenido Especifica si una palabra o un caracter es la unidad bsica utilizada para extender la seleccin Indica si el sistema acepta la funcin arrastrar y soltar Define el efecto de la tecla [Intro] Indica si el texto seleccionado permanece resaltado cuando un control pierde el foco Indica si el control muestra las lneas completas de texto en una lista o lneas parciales en el sentido vertical Indica si un control puede modificarse Define si un control puede aceptar y mostrar varias lneas de texto Especifica si el usuario puede seleccionar una lnea de texto al hacer clic a la izquierda del texto Determina si se permiten las tabulaciones en la zona de edicin Indica el tipo de alineacin del texto en un control 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 (Name) Accelerator AutoSize AutoTab AutoWordSelect BackColor BorderColor BorderStyle Caption 158 X X X ComboBox X X X X X X X Command Button X X X Frame X Image X X Label X X X ListBox X MultiPage X

X X X X

X X X

X X X X

X X X

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

ControlSource ControlTipText DragBehavior Enabled EnterKeyBehavior Font ForeColor Height HideSelection IntegralHeight Left Locked MaxLength MultiLine PassWordChar SelectionMargin SpecialEffect TabKeyBehavior TabStop TextAlign Top Value Visible Width WordWrap

X X X X X X

X X X X X X X X X X X

X X X X X X X X

X X

X X X X X

X X X X X X X X X

X X X X X

X X

X X

X X X X X X X

X X X X X X X X X X X X X X

X X

X X X X X X X X X X X X

X X X X

X X X X

(Name) Accelerator AutoSize AutoTab AutoWordSelect BackColor BorderColor BorderStyle Caption ControlSource ControlTipText DragBehavior Enabled EnterKeyBehavior Font ForeColor Height HideSelection IntegralHeight 159

OptionButton X X X

ScrollBar X

SpinButton X

TabStrip X

TextBox X X X X X X X X X X X X X X X X X X

ToggleButton X X X

RefEdit X X X X X X X

X X X X X X X

X X X

X X X

X X X X X

X X X X X X

X X

X X

X X X X X X X X X

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

Left Locked MaxLength MultiLine PassWordChar SelectionMargin SpecialEffect TabKeyBehavior TabStop TextAlign Top Value Visible Width WordWrap

X X

X X X X X X X X X X X X X X X X X X X X X X

X X X X X X X X X X X X X X X

X X

X X X X X X X

X X X X X X X X X X X 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 Ver Cdigo Icono (Ventana Explorador de Proyectos) Teclado [F7]

b. Para insertar un nuevo evento, abra la lista de la derecha y seleccione el evento deseado.

160

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 Ver Objeto Icono (Ventana Explorador de Proyectos) Teclado [Mayus][F7]

6.4.2 Lista de eventos


Evento Activate AddControl AfterUpDate BeforeDragOver BeforeDropOrPaste BeforeUpDate Change Click DblClick Deactivate DropButtonClick Enter Error Exit Initialize KeyDown KeyPress KeyUp Layout MouseDown MouseMove MouseUp QueryClose RemoveControl Resize Scroll SpinDown 161 Descripcin Ocurre cuando se activa la hoja Ocurre cuando se inserta un control en una hoja Ocurre tras modificar datos Ocurre cuando se est ejecutando una operacin de arrastrar y soltar Ocurre cuando el usuario est a punto de colocar o pegar datos en un objeto Ocurre antes de la modificacin de datos Ocurre cuando se modifica la propiedad Value Ocurre cuando el usuario hace clic en un control o cuando selecciona definitivamente un valor para un control con ms de un valor posible Ocurre cuando el usuario hace doble clic Ocurre cuando la hoja deja de ser la ventana activa Ocurre cada vez que se muestra o se oculta una lista desplegable Ocurre antes de que un control reciba realmente el foco desde un control de la misma hoja Ocurre cuando un control detecta un error y no puede devolver informacin del error al programa que lo ha llamado Ocurre inmediatamente antes de que un control pierda el foco en favor de otro control de la misma hoja Ocurre despus de que se carga un objeto, pero antes de que se muestre Ocurre cuando el usuario pulsa una tecla Ocurre cuando el usuario pulsa una tecla ANSI Ocurre cuando el usuario suelta una tecla Ocurre cuando cambia el tamao de un control Ocurre cuando el usuario pulsa el botn del ratn Ocurre cuando el usuario mueve el ratn Ocurre cuando el usuario suelta el botn del ratn Se produce antes de cerrar la hoja Ocurre cuando se elimina el control del contenedor Se produce cuando cambia el tamao de la hoja Ocurre cuando se vuelve a posicionar un cuadro de desplazamiento Ocurre cuando el usuario hace clic en la flecha inferior o izquierda del contador

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

SpinUp Terminate Zoom

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

6.4.3 Resumen de eventos por objeto


CheckBox Activate AddControl AfterUpDate BeforeDragOver BeforeDropOrPaste BeforeUpDate Change Click DblClick DeActivate DropButtonClick Enter Error Exit Initialize KeyDown KeyPress KeyUp Layout MouseDown MouseMove MouseUp RemoveControl Terminate Scroll SpinDown SpinUp Zoom QueryCLose Resize ComboBox Command Button Frame Image Label ListBox Multipage

X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X

X X X X X X

X X

X X

X X

X X

X X X X X X X X X

X X X X X X X X X

X X X X X X X X X X X X

X X X X X X

X X X X X X X X X X X X

X X X

X X X

X X X

162

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

OptionButton Activate AddControl AfterUpDate BeforeDragOver BeforeDropOrPaste BeforeUpDate Change Click DblClick DeActivate DropButtonClick Enter Error Exit Initialize KeyDown KeyPress KeyUp Layout MouseDown MouseMove MouseUp RemoveControl Terminate Scroll SpinDown SpinUp Zoom QueryCLose Resize

ScrollBar

SpinButton

TabStrip

TextBox

ToggleButton

X X X X X X X

X X X X X

X X X X X

X X X X X

X X X X X X X X X X X X X X X X

X X X X X X X

UserForm X X X X X

RefEdit

X X X X X X X X X X X X X X X X X

X X X

X X X X X X X X X

X X X X X X

X X X X X X

X X X X X X X X X

X X X X X X X X X

X X X X X X X X X X X X

X X X

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

163

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 Ejecutar Ejecutar Sub/UserForm Icono (barra de herramientas Estndar) Teclado [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
164 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 Show Load Hide Unload Eventos Initialize Activate Initialize Sin evento 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:

165

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.

166

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

Lista de controles del formulario Empleados:


# 1 2 3 4 5 6 7 8 9 10 Tipo de control Cuadro de lista Botn de comando Botn de opcin Botn de opcin Botn de opcin Cuadro de texto Cuadro de texto Cuadro de lista Botn de comando Botn de comando Nombre lstEmpleados cmdNuevo optSra optSrta optSr txtApellido txtNombre lstServicios cmdAceptar 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 167 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 168 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 169 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 170 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

171

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

7. BARRAS DE COMANDOS Y MENS


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.

172

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. b.

Ubique el cursor bajo la barra de comandos y haga clic con el botn derecho del ratn Seleccione la opcin Agregar a la barra de herramientas de acceso rpido.

173

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)

174

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 msoBarTop msoBarRight msoBarBottom msoBarFloating msoBarPopup a la izquierda arriba a la derecha abajo no anclada 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.

175

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

176

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 msoControlEdit msoControlDropDown msoControlComboBox msoControlPopUp herramienta u opcin de men cuadro de entrada cuadro de lista cuadro de lista 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.
177 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 178 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 179 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:

180

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:

181

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).

182

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 183 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

184

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) 185 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 " 186 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" 187 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" 188 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 189 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

190

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

8. ADMINISTRACIN DE EVENTOS
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.
191 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:

192

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
y haga

a. Inserte un mdulo de clase: Men Insertar - Mdulo de clase o abra la lista 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.


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

Diferencia + 1 Loop 'Reactivar eventos y alertas Application.EnableEvents = True Application.DisplayAlerts = True End Sub

Sheets.Add Diferencia =

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.
195 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
y haga

a. Inserte un mdulo de clase: Men Insertar - Mdulo de clase o abra la lista 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 196 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).

197

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

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

WorkbookBeforeXMLExport WorkbookBeforeXMLImport WorkBookDeactivate WorkBookNewSheet WorkBookOpen WorkbookPivotTableOpenConnection WorkbookPivotTableCloseConnection WorkbookRowsetComplete WorkbookSync

Ocurre antes de exportar un archivo XML Ocurre antes de importar un archivo XML Ocurre cuando se desactiva un libro abierto Ocurre cuando se crea una nueva hoja en un libro abierto Ocurre cuando se abre un libro Ocurre al abrir la conexin de un informe de tabla dinmica con su fuente de datos Ocurre al cerrar la conexin de un informe de tabla dinmica con su fuente de datos Ocurre cuando el usuario extrae el juego de grabacin de una tabla dinmica OLAP 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 Activate AddinInstall AddinUninstall AfterXMLExport AfterXMLImport BeforeClose BeforePrint BeforeSave BeforeXMLExport BeforeXMLImport Deactivate NewSheet Open PivotTableOpenConnection PivotTableCloseConnection RowsetComplete SheetActivate SheetBeforeDoubleClick Descripcin Ocurre cuando se activa el libro Ocurre cuando el libro se instala bajo la forma de una macro complementaria Ocurre cuando el libro se desinstala bajo la forma de una macro complementaria Ocurre despus de exportar un archivo XML Ocurre despus de importar un archivo XML Ocurre antes de cerrar el libro; si el libro fue modificado, este evento se produce antes de invitar al usuario a guardar los cambios Ocurre antes de imprimir el libro (o cualquiera de sus partes) Ocurre antes de grabar el libro Ocurre antes de exportar un archivo XML Ocurre antes de importar un archivo XML Ocurre al desactivar un grfico, una hoja de clculo o un libro Ocurre cuando se crea una nueva hoja en el libro Ocurre cuando se abre el libro Ocurre al abrir la conexin de un informe de tabla dinmica con su fuente de datos Ocurre al cerrar la conexin de un informe de tabla dinmica con su fuente de datos Este evento se desencadena cuando el usuario extrae el juego de grabacin de una tabla dinmica OLAP Ocurre cuando se activa una hoja Ocurre al hacer doble clic en una hoja de clculo, antes de la accin predeterminada para el doble clic

199

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

SheetBeforeRightClick SheetCalculate SheetChange SheetDeactivate SheetFollowHyperlink SheetPivotTableUpdate SheetSelectionChange Sync WindowActivate WindowDeActivate WindowResize

Ocurre al hacer clic con el botn secundario del ratn en una hoja de clculo, antes de la accin predeterminada Ocurre cuando se recalcula toda la hoja de clculo o despus de que se recalcula un grfico al modificar sus datos Ocurre cuando las celdas de una hoja de clculo se modifican por el usuario o por un vnculo externo Ocurre cuando se desactiva una hoja de clculo Se produce al hacer clic en cualquier hipervnculo en Microsoft Excel Ocurre al actualizar la hoja del informe de tabla dinmica 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) 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 Ocurre al activar un libro Ocurre al desactivar un libro Ocurre cuando cambia el tamao de la ventana

8.5 Eventos del objeto Worksheet


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

200

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

8.6 Eventos del objeto Chart


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

201

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

9. DEPURACIN Y ADMINISTRACIN DE ERRORES


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:

202

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:

203

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.

204

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.

205

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

1. 2. 3. 4. 5.

6.

7.

8. 9. 10. 11. 12. 13.

Modo de diseo: activa o desactiva el modo de diseo. Ejecutar (mtodo abreviado de teclado [F5]): ejecuta el cdigo del procedimiento en curso, de la hoja UserForm activa o de una macro. Interrumpir (mtodo abreviado de teclado [Ctrl][Pausa]): interrumpe la ejecucin del programa en curso y pasa al modo Interrupcin. Restablecer: borra el contenido de las variables y reinicializa el proyecto. 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. 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. 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). Paso a paso para salir (mtodo abreviado de teclado [Ctrl][Mays][F8]): ejecuta en forma continua las restantes lneas del procedimiento en curso. Ventana Locales: muestra los valores de las variables locales del procedimiento. Ventana Inmediato (mtodo abreviado de teclado [Ctrl][G]): muestra la ventana Inmediato, que permite ejecutar una instruccin de forma interactiva. Ventana Inspeccin: muestra la lista de las variables de una inspeccin. Inspeccin rpida (mtodo abreviado de teclado [Mays][F9]): muestra el valor de la expresin seleccionada. 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 Print Assert Descripcin Muestra texto en la ventana Inmediato 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 ... 206 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
207 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 208 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
Propiedad Description HelpContext HelpFile 209

Propiedades del objeto Err


Descripcin Devuelve una cadena de caracteres que contiene una breve descripcin del error Devuelve el identificador de contexto asociado a un tema de un archivo de ayuda Devuelve una cadena de caracteres que contiene la ruta de acceso completa del archivo de ayuda

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

LastDLLError Number Source

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

9.3.4.2
Mtodo Clear Raise

Mtodos del objeto Err


Descripcin Borra todas las propiedades establecidas del objeto Err 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:
210 Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

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

211

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

10.CODIGO DE UNA MINIAPLICACIN


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:

212

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 GestPresupuesto

la

aplicacin

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

214

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 215 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

216

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


Descripcin Nombre del control 1) cboClient 2) txtFecha 3) cboTema 4) cmdCrear Cuadro de lista desplegable Cuadro de texto Cuadro de lista desplegable Botn de comando

10.4.3 Lista de celdas Presupuesto.xltx

con

nombre

del

modelo

217

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

1. Presupuesto 2. CodCli 3. Fecha 4. Empresa

5. Direccion 6. CPostal 7. Ciudad 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 218 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:

219

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.

220

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

10.5.2 Lista de controles

Nombre del control 1. cboClient 2. cboOpe 3. txtFecha 4. cmdBuscar 5. cmdSupr 6. cmdAbrir 7. lstPresup

Descripcin Cuadro de lista desplegable modificable. Cuadro de lista desplegable modificable que contiene los operadores de comparacin (>= o <=). Cuadro de texto. Botn de comando. Botn de comando. Botn de comando. Cuadro de lista desplegable.

10.5.3 Cdigo VBA


Option Explicit

Private Sub UserForm_Initialize() 'Operador para el campo Fecha cboOpe.AddItem ">=" 221 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) 222 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 223 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 224 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

225

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 226 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 227 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

228

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

11. A N E X O S
11.1
Date Randomize Time Declaracin Const Declare

Lista de instrucciones
Descripcin Devuelve la fecha del sistema en curso Inicializa el generador de nmeros aleatorios Devuelve la hora del sistema Declara las constantes que hay que utilizar en lugar de valores fijos Se utiliza a nivel de mdulo para declarar las referencias a procedimientos externos en una biblioteca DLL o un recurso de cdigo Macintosh 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) Declara variables y les reserva espacio de almacenamiento en la memoria Declara un tipo para una enumeracin Declara un evento definido por el usuario Declara el nombre, los argumentos y el cdigo que forma el cuerpo de un procedimiento Function Asigna el valor de una expresin a una variable o a una propiedad (equivale al signo =) Define el menor valor del ndice para las matrices: 0 o 1 Define el modo de comparacin de cadenas: Binary o Text Obliga la declaracin explcita de todas las variables del mdulo Declara el mdulo completo como Privado Declara las variables privadas y reserva su espacio de almacenamiento en la memoria Declara el nombre, los argumentos y el cdigo de un procedimiento Property que permite leer el valor de una propiedad Declara el nombre, los argumentos y el cdigo de un procedimiento Property que le asigna un valor a una propiedad Declara el nombre, los argumentos y el cdigo de un procedimiento Property que asigna una referencia a un objeto Declara las variables pblicas y les reserva espacio de almacenamiento en la memoria Dimensiona variables de tipo tabla dinmica y les reserva espacio de almacenamiento en la memoria Asigna una referencia a un objeto Define las variables estticas y les reserva espacio de almacenamiento en la memoria Declara el nombre, los argumentos y el cdigo de un procedimiento Sub Define un tipo de datos definido por el usuario Simula la ocurrencia de un error Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Instruccin Fecha Hora/Matemticas

DefType Dim Enum Event Function Let Option Option Option Option Base Compare Explicit Private Module

Private Property Get Property Let Property Set Public ReDim Set Static Sub Type Error Error 229

On Error Resume Archivo Close FileCopy Get Input # Kill Line Input # Lock...Unlock Open Print # Put Reset Seek SetAttr Width # Write # Estructuracin Call Do...Loop End Exit For Each...Next For...Next Goto GoSub...Return On GoSub y On Go To Rem Select Case Stop If...Then... ElseIf... Else...End If While...Wend With 230

Activa una rutina de tratamiento de errores y especifica su ubicacin dentro de un procedimiento. Tambin permite desactivar una rutina de tratamiento de errores Restablece la ejecucin del cdigo cuando termina una rutina de tratamiento de errores Finaliza las operaciones de entrada y salida en un archivo abierto con la instruccin Open Copia un archivo Lee los datos de un archivo abierto y los guarda en una variable Lee los datos a partir de un archivo secuencial abierto y los asigna a variables Elimina los archivos del disco Lee una lnea de datos a partir de un archivo secuencial abierto y la asigna a una variable de tipo cadena Controla el acceso por parte de otros procesos a todo o parte de un archivo abierto mediante la instruccin Open Permite ejecutar una operacin de entrada y salida en un archivo Escribe los datos con formato en un archivo secuencial Escribe el contenido de una variable en un archivo de disco Cierra todos los archivos de discos abiertos con la instruccin Open Define la posicin de la prxima lectura y escritura en un archivo abierto con la instruccin Open Define los atributos de un archivo Asigna la longitud de la lnea de salida a un archivo abierto con la instruccin Open Escribe datos en un archivo secuencial Transfiere el control a un procedimiento Sub, Function, DLL o a un procedimiento de recursos de cdigo Macintosh Repite un bloque de instrucciones mientras se cumple una condicin o hasta que la condicin se hace verdadera Termina un procedimiento o un bloque Sale de un bloque de cdigoDo...Loop, For...Next, Function, Sub o Property Repite un grupo de instrucciones para cada elemento de una matriz o de una coleccin Repite un bloque de instrucciones una cierta cantidad de veces Realiza una bifurcacin incondicional hacia una lnea determinada de un procedimiento Realiza una bifurcacin hacia una subrutina dentro de un procedimiento y luego retorna a la instruccin inmediatamente posterior a la bifurcacin Realiza una bifurcacin hacia una de las lneas especificadas, segn el valor de una expresin dada Permite la entrada de comentarios (equivale al apstrofo) Ejecuta uno o ms grupos de instrucciones segn el valor de una expresin dada Interrumpe la ejecucin de un procedimiento Permite la ejecucin condicional de un grupo de instrucciones segn el resultado de una expresin dada Ejecuta una serie de instrucciones mientras se cumpla una condicin dada Ejecuta una serie de instrucciones sobre un nico objeto o un tipo definido por el usuario

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

Sistema Beep ChDir ChDrive MkDir Name RmDir Diversas AppActivate DeleteSetting Erase Implements

Emite una seal sonora Cambia el directorio o la carpeta actual Cambia la unidad de disco actual Crea un nuevo directorio o nueva carpeta Modifica el nombre de un archivo, de un directorio o de una carpeta Elimina un directorio o una carpeta existente Activa una ventana de aplicacin Elimina el valor de una seccin o de una clave en la base de registros de Windows Reinicia los elementos de matrices de tamao fijo y libera el espacio de almacenamiento asignado a matrices dinmicas Especifica una interfaz o una clase que se implementar en el mdulo de clase donde aparece 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 Carga un objeto pero no lo muestra Reemplaza una cantidad especificada de caracteres dentro de una variable cadena por los caracteres extrados de otra cadena Elimina un evento declarado en el nivel de mdulo dentro de una clase, formulario o documento Alinea a la derecha una cadena de caracteres dentro de una variable tipo cadena Guarda o crea una entrada para una aplicacin en la base de registros de Windows Enva una o ms pulsaciones de teclas a la ventana activa, como si se hubieran presionado desde el teclado. No disponible en Macintosh Elimina un objeto de la memoria

LSet Load Mid RaiseEvent RSet SaveSetting SendKeys Unload

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 Conversiones CBool CByte CCur CDate CDbl CDec 231

Descripcin Convierte una expresin a datos de tipo Boolean. Convierte una expresin a datos de tipo Byte. Convierte una expresin a datos de tipo Currency. Convierte una expresin a datos de tipo Date. Convierte una expresin a datos de tipo Double (doble precisin). Convierte una expresin a datos de tipo Decimal. Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

CInt CLng CSng CStr CVar CVErr Format, Format$ FormatCurrency FormatDateTime FormatNumber FormatPercent Hex, Hex$ Oct, Oct$ QBColor RGB Str, Str$ StrConv Val Cadenas de caracteres Asc Chr, Chr$ InStr InStrRev LCase, LCase$ Left, Left$ Len LTrim, LTrim$ Mid, Mid$ Replace Right, Right$ RTrim, RTrim$ Space, Space$ StrComp String, String$ 232

Convierte una expresin a datos de tipo Integer (nombre entero). Convierte una expresin a datos de tipo Long (entero largo). Convierte una expresin a datos de tipo Single (simple precisin). Convierte una expresin a datos de tipo String. Convierte una expresin a datos de tipo Variant. Devuelve un tipo Variant de un subtipo Error que contiene un nmero de error especificado por el usuario. Aplica un formato a una expresin segn las instrucciones contenidas en una expresin de tipo formato. Devuelve una expresin con formato en forma de valor de tipo Currency usando el smbolo monetario definido en el panel de control del sistema. Devuelve una expresin con formato de fecha u hora. Devuelve una expresin con formato de nmero. Devuelve una expresin con formato de porcentaje (multiplicado por 100) con el carcter % al final. Devuelve una cadena de caracteres que representa el valor de un nmero escrito en forma hexadecimal. Devuelve una cadena que representa el valor octal de un nmero. Devuelve un valor que indica el cdigo de color RGB correspondiente al nmero de color indicado. Devuelve un nmero entero que representa el valor de un color RGB. Devuelve una cadena de caracteres que representa el nmero especificado. Devuelve un valor convertido al formato indicado. Devuelve el valor numrico contenido en una cadena de caracteres. Devuelve el cdigo ASCII correspondiente al primer carcter de una cadena. Devuelve el carcter correspondiente al cdigo ASCII especificado. Devuelve la posicin de la primera ocurrencia de una cadena dentro de otra cadena. Devuelve la posicin de la ocurrencia de una cadena dentro de otra, a partir del fin de la cadena. Devuelve una cadena con sus caracteres pasados a minsculas. Devuelve un nmero especificado de caracteres de una cadena, comenzando desde la izquierda. Devuelve la cantidad de caracteres contenidos en una cadena o la cantidad de bytes necesarios para almacenar una variable. Devuelve una copia de una cadena eliminando los espacios a la izquierda. Devuelve un nmero especificado de caracteres extrados de una cadena de caracteres. Devuelve una cadena en la que una subcadena especificada se reemplaza por otra subcadena. Devuelve un nmero especificado de caracteres de una cadena, comenzando desde la derecha. Devuelve una copia de una cadena eliminando los espacios a la derecha. Devuelve una cadena formada por un nmero de espacios especificado. Devuelve un valor que indica el resultado de la comparacin de cadenas. Crea una cadena constituida por una cadena de caracteres que se repite con la longitud

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

especificada. StrReverse Trim, Trim$ UCase, UCase$ Matemticas Abs Atn Cos Exp Fix Devuelve el valor absoluto de un nmero. Devuelve el arcotangente de un nmero. Devuelve el coseno de un ngulo. Devuelve e (la base de los logaritmos neperianos) elevado a una potencia dada. Devuelve la parte entera de un nmero. 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. Devuelve el logaritmo neperiano de un nmero. Devuelve un nmero aleatorio. Devuelve un nmero redondeado a una cantidad especificada de posiciones decimales. Devuelve un nmero entero que indica el signo del argumento. Devuelve el seno de un ngulo. Devuelve la raz cuadrada de un nmero. Devuelve la tangente de un ngulo. 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). Devuelve un valor que indica el importe futuro de una anualidad basada en pagos constantes y peridicos, y con una tasa de inters fija. 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. Devuelve un valor que indica la tasa interna de retorno de una serie de movimientos de fondos peridicos (pagos y cobros). Devuelve un valor que indica la tasa interna de retorno modificada de una serie de movimientos de fondos peridicos (pagos y cobros). 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. 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. Devuelve un valor que indica el importe de una anualidad basada en movimientos constantes y peridicos, y con una tasa de inters fija. 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. 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. Devuelve un valor que indica la tasa de inters por perodo para una anualidad. Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C. Devuelve una cadena que contiene los mismos caracteres que la cadena dada, pero en orden inverso. Devuelve una copia de una cadena eliminando los espacios a la izquierda y a la derecha. Devuelve una cadena con sus caracteres pasados a maysculas.

Int

Log Rnd Round Sgn Sin Sqr Tan Financieras DDB FV IPmt IRR MIRR NPer NPV Pmt PPmt PV Rate 233

SLN SYD Fechas y horas Date, Date$ DateAdd DateDiff DatePart DateSerial DateValue Day Hour Minute Month MonthName Now Second Time, Time$ Timer TimeSerial TimeValue WeekDay WeekdayName Year Archivos, Sistema CurDir, CurDir$ Dir, Dir$ EOF FileAttr FileDateTime FileLen FreeFile GetAttr Input, Input$ Loc LOF 234

Devuelve un valor que indica la amortizacin de un bien para un perodo dado segn el mtodo lineal. Devuelve un valor que indica la amortizacin global de un bien para un perodo dado. Devuelve la fecha del sistema en curso. Devuelve un valor que representa la fecha correspondiente a una fecha dada ms un intervalo de tiempo especificado. Devuelve un valor que indica la cantidad de intervalos de tiempo entre dos fechas dadas. Devuelve un valor que contiene el elemento especificado de una fecha dada. Devuelve la fecha correspondiente a un ao, un mes y un da especificados. Devuelve una fecha. Devuelve un nmero entero comprendido entre 1 y 31 que representa el da del mes. Devuelve un nmero entero comprendido entre 0 y 23 que representa la hora del da. Devuelve un nmero entero comprendido entre 0 y 59 que representa los minutos. Devuelve un nmero entero comprendido entre 1 y 12 que representa el mes del ao. Devuelve una cadena que indica el mes especificado. Devuelve la fecha y la hora actuales tomadas del reloj del sistema. Devuelve un nmero entero comprendido entre 0 y 59 que representa los segundos. Devuelve la hora actual. Devuelve la cantidad de segundos transcurridos desde la medianoche. Devuelve una fecha que contiene la hora exacta (horas, minutos y segundos). Devuelve una hora. Devuelve un nmero entero que representa el da de la semana. Devuelve una cadena que indica el da de la semana especificada. Devuelve un nmero entero que representa el ao. Devuelve la ruta de acceso actual. 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. Devuelve un valor que indica si se ha llegado al final de un archivo. Devuelve un valor que representa el modo del archivo para los archivos abiertos usando la instruccin Open. Devuelve la fecha y la hora de creacin o de la ltima modificacin de un archivo. Devuelve el tamao de un archivo en bytes. Devuelve un nmero que indica el siguiente nmero de archivo disponible para su uso en la instruccin Open. Devuelve un nmero que representa los atributos de un archivo, directorio o carpeta o la etiqueta de un volumen. Devuelve los caracteres (bytes) ledos a partir de un archivo secuencial abierto. Devuelve la posicin de lectura y escritura actuales en un archivo abierto. Devuelve la longitud en bytes de un archivo abierto con la instruccin Open. Laboratorio de Sistemas Facultad de Minas - Curso Macros en Excel 2007 Carlos Alvarez C.

Seek, Seek$ Verificacin de variables IsArray IsDate IsEmpty IsError IsMissing IsNull IsNumeric IsObject TypeName VarType Interaccin CreateObject GetObject InputBox MsgBox Shell Arreglos Array Filter Join LBound Split UBound Diversas CallByName Choose DoEvents Environ GetAllSettings GetSetting Iif Spc 235

Devuelve la posicin de lectura y escritura actuales en un archivo abierto con la instruccin Open. Devuelve un valor que indica si una variable es o no una matriz. Devuelve un valor que indica si una expresin puede convertirse a fecha. Devuelve un valor que indica si una variable ha sido o no iniciada. Devuelve un valor que indica si una expresin es o no un valor de error. Devuelve un valor que indica si se le pas a un procedimiento un argumento opcional. Devuelve un valor que indica si una expresin contiene o no un valor vlido. Devuelve un valor que indica si una expresin puede interpretarse como un nmero. Devuelve un valor que indica si un identificador representa una variable objeto. Devuelve una cadena que proporciona informacin acerca de una variable. Devuelve un valor que indica el subtipo de una variable. Crea un objeto OLE Automation. Recupera un objeto OLE Automation en un archivo. 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. 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. Ejecuta un programa ejecutable. Devuelve un dato de tipo Variant que contiene una matriz. Devuelve una matriz de base cero que contiene un subconjunto de una matriz de cadena basado en los criterios de filtrado especificados. Devuelve una cadena creada por la unin de varias subcadenas contenidas en una matriz. Devuelve el menor valor del ndice disponible para la dimensin indicada en una matriz. Devuelve una matriz de una dimensin, basada en cero, que contiene la cantidad especificada de subcadenas. Devuelve el mayor valor del ndice disponible para la dimensin indicada en una matriz. Ejecuta un mtodo de un objeto, o establece o devuelve una propiedad de un objeto. Selecciona y devuelve un valor a partir de una lista de argumentos. Detiene momentneamente la ejecucin y cede el control al sistema operativo, para que ste pueda procesar otros eventos. Devuelve el valor asociado a una variable de entorno del sistema operativo. 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. Devuelve el valor de clave de una entrada de aplicacin en la base de registros de Windows. Devuelve uno u otro de dos argumentos segn la evaluacin de una expresin. Funcin utilizada con la instruccin Print # o el mtodo Print para posicionar la

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

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

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 236 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 237 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 vbBlack vbRed vbGreen vbYellow vbBlue vbMagenta vbCyan vbWhite Valor 0x0 0xFF 0xFF00 0xFFFF 0x0FF0000 0x0FF00FF 0x0FFFF00 0x0FFFFFF Descripcin Negro Rojo Verde Amarillo Azul Magenta Cian Blanco

11.3.2 Constantes de fecha


Constante vbSunday vbMonday vbTuesday vbWednesday vbThursday vbFriday vbSaturday Valor 1 2 3 4 5 6 7 Descripcin Domingo Lunes Martes Mircoles Jueves Viernes Sbado

238

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 vbKeyA vbKeyB vbKeyC ... vbKeyZ Valor 65 66 67 ... 90 Descripcin Tecla A Tecla B Tecla C ... Tecla Z

Los valores de las teclas 0 a 9 son los mismos que sus equivalentes ASCII.
Constante vbKey0 vbKey1 vbKey2 ... vbKey0 Valor 48 49 50 ... 57 Descripcin Tecla 1 Tecla 2 Tecla 3 ... Tecla 9

11.3.4 Constantes de teclas de funcin


Constante vbKeyF0 vbKeyF1 ... vbKeyF16 Valor 0x70 0x71 ... 0x7F Descripcin Tecla F1 Tecla F2 ... Tecla F16

11.3.5 Constantes de teclas diversas


Constante vbKeyCancel vbKeyBack vbKeyTab vbKeyClear vbKeyReturn vbKeyShift vbKeyControl vbKeyMenu vbKeyPause vbKeyCapital vbKeySpace vbKeyPageUp vbKeyPageDown 239 Valor 0x3 0x8 0x9 0xC 0xD 0x10 0x11 0x12 0x13 0x14 0x20 0x21 0x22 Descripcin Tecla [Cancelar] Tecla [Retroceso] Tecla [Tab] Tecla [Supr] Tecla [Intro] Tecla [Mays] Tecla [Ctrl] Tecla [MEN] Tecla [PAUSA] Tecla [Bloq Mays] Barra espaciadora Tecla [AvPg] Tecla [RePg]

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

vbKeyEnd vbKeyHome vbKeyLeft vbKeyUp vbKeyRight vbKeyDown vbKeySelect vbKeyPrint vbKeyExecute vbKeySnapshot vbKeyInsert vbKeyDelete vbKeyHelp vbKeyNumlock vbKeyLButton vbKeyRButton

0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x2A 0x2B 0x2C 0x2D 0x2E 0x2F 0x90 0x1 0x2

Tecla [Fin] Tecla [Inicio] Tecla [Flecha izquierda] Tecla [Flecha arriba] Tecla [Flecha derecha] Tecla [Flecha abajo] Tecla Seleccin Tecla [Impr Pant] Tecla [EJECUTAR] Tecla SNAPSHOT Tecla [Insertar] Tecla [Suprimir] Tecla Ayuda Tecla [Bloq Num] Botn izquierdo del ratn Bot

240

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