You are on page 1of 81

CURSO - TALLER: AUT OMATIZACIN EN EXCEL CONTENIDO

INT RODUCCIN ........................................................................................ 3


AUTOMATIZACIN ......................................................................................................................................................3

1 AUT OMAT ICE T ARE AS REPET ID AS ........................................................ 4


1.1 USE MACROS PARA SIMPLIFICAR TAREAS ..........................................................................................................4 1.2 CMO GRABAR Y CMO EJECUTAR UNA MACRO ........................................................................................5 1.3 CMO FACILITAR EL USO DE UNA MACRO .......................................................................................................6 1.4 SUGERENCIAS PARA GRABAR MACROS ...........................................................................................................6

2 EDIT E MACROS EN VISU AL B ASIC P AR A APL IC AC IONES (VB A) ............ 7


2.1 CMO MOSTRAR UNA MACRO .........................................................................................................................7 2.2 DNDE SE ALMACENAN LAS MACROS .............................................................................................................7 2.3 ESTRUCTURA BSICA DEL EDITOR DE VBA ..........................................................................................................8 2.4 CMO MANIPULAR CDIGO VBA ....................................................................................................................8

3 CONTROLE OBJETOS DE EXCEL, US ANDO VB A .................................. 10


3.1 INTRODUCCIN A LOS OBJETOS DE EXCEL .....................................................................................................10 3.2 PROPIEDADES: CONTROLE CARACTERSTICAS DE OBJETOS ........................................................................................10 3.3 MTODOS: HAGA QUE LOS OBJETOS REALICEN ACCIONES .........................................................................................10 3.4 GRUPOS DE PROPIEDADES Y MTODOS ..........................................................................................................11 3.5 JERARQUA DE OBJETOS ....................................................................................................................................11 3.6 TIPOS DE OBJETOS ...............................................................................................................................................11 3.7 EXPLORE OBJETOS CON LOS RECURSOS DE VBA ...........................................................................................13

4 OBJETOS COMUNES DE EXCEL ........................................................... 17


4.1 EXPLORE LOS OBJETOS RANGO ........................................................................................................................17 4.2 EXPLORE LOS OBJETOS GRFICOS ...................................................................................................................25 4.3 EXPLORE LOS OBJETOS PARA INFORMES .........................................................................................................28

5 EDIT OR DE VISU AL B AS IC P AR A APL IC AC ION ES ................................ 30


5.1 ELEMENTOS DEL EDITOR DE VBA........................................................................................................................30 5.2 MANEJO Y ORGANIZACIN (PROYECTOS, M DULOS Y M ACROS) ......................................................................30 5.3 PERSONALIZACIN DEL EDITOR DE VBA ..........................................................................................................31

6 PROCEDIMIENT OS DE VB A .................................................................. 32
6.1 DEFINICIN DE PROCEDIMIENTOS....................................................................................................................32 6.2 AUTOMATIZACIONES COMPLEJAS ...................................................................................................................32 6.3 ARGUMENTOS, DATOS DE ENTRADA ................................................................................................................33

7 FUNCIONES PERSON AL IZ AD AS ........................................................... 34


7.1 DEFINICIN DE FUNCIONES PERSONALIZADAS ..............................................................................................34 7.2 CREACIN DE UNA FUNCIN PERSONALIZADA ............................................................................................34 7.3 USO DE FUNCIONES PERSONALIZADAS ............................................................................................................35

8 T R AB AJO CON EL CD IGO EN VB A ..................................................... 36


8.1 COMPRENSIN DE CDIGO VBA ....................................................................................................................36 8.2 USO DE VARIABLES Y ARGUMENTOS.................................................................................................................37

CURSO - TALLER: AUT OMATIZACIN EN EXCEL CONTENIDO


8.3 TIPOS DE DATOS PARA VARIABLES Y ARGUMENTOS ......................................................................................38 8.4 ALMACENAR OBJETOS EN VARIABLES .............................................................................................................39 8.5 CLCULOS EN CDIGO VBA ............................................................................................................................40 8.6 USO DE CONSTANTES ..........................................................................................................................................40

9 CONTROL DE L A EJEC UCIN DEL CDIGO ......................................... 41


9.1 ESTRUCTURAS DE CONTROL CONDICIONALES ...............................................................................................41 9.2 ESTRUCTURAS DE CONTROL DE CICLOS ..........................................................................................................42 9.3 ESTRUCTURAS DE CONTROL ANIDADAS ..........................................................................................................44 9.4 SALIR DE ESTRUCTURAS DE CONTROL ...............................................................................................................44

10 DEPUR AC IN DE CD IGO .................................................................. 45


10.1 ERRORES DEPURABLES ......................................................................................................................................45 10.2 TCNICAS DE DEPURACIN ............................................................................................................................45 10.3 INSPECCIN DEL VALOR DE LAS EXPRESIONES O VARIABLES .....................................................................46

11 CONTROL DE ERRORES ..................................................................... 47


11.1 CONCEPTO Y SITUACIN DE ERRORES DE EJECUCIN...............................................................................47 11.2 CONTROLADORES DE ERROR ..........................................................................................................................47 11.3 USO DE NMEROS DE ERROR...........................................................................................................................48

12 F AC IL IT E SUS MACR OS, EVENT OS DE OBJET OS ............................... 49


12.1 EVENTOS POR EL USUARIO ...............................................................................................................................49 12.2 EVENTOS AUTOMTICOS .................................................................................................................................51

13 INT ER ACT E CON EL USU AR IO ......................................................... 52


13.1 CUADROS DE DILOGO PREDEFINIDOS ........................................................................................................52 13.2 CONTROLES ACTIVEX, SOBRE HOJA DE CLCULO ........................................................................................53 13.3 OTROS CONTROLES ACTIVEX ............................................................................................................................56

14 FORMULAR IOS PERSO N AL IZ ADOS .................................................... 57


14.1 INTERFAZ DE USUARIO .......................................................................................................................................57 14.2 FUNCIONALIDAD DEL FORMULARIO ..............................................................................................................59 14.3 IMPLEMENTACIN DEL FORMULARIO ............................................................................................................62

T IPS DE AUT OMAT IZ AC I N EN VB A P AR A EXCEL .................................. 63


1. 2. 3. 4. 5. 6. 7. 8. RESUMEN DE TEORA BSICA ..........................................................................................................................63 REFERENCIA POR DESPLAZAMIENTO ENTRE CELDAS ..................................................................................64 REFERENCIA A CELDAS DENTRO DE CLCULOS ..........................................................................................65 TRABAJO CON ARCHIVOS DE OTROS SISTEMAS (.TXT Y .DBF) ......................................................................66 CMO LOCALIZAR PROPIEDADES (NO CODIFICABLE CON LA GRABADORA) ....................................................68 ORDENAR Y FILTRAR LISTA DE DATOS (POR FECHAS) .......................................................................................74 INFORMES DE SUBTOTALES Y AUTOFORMATO ..............................................................................................76 TABULAR VALORES DE MODELO DE CLCULO Y BUSCAR OBJETIVO .......................................................77

NDICE ALF ABT ICO .............................................................................. 79

INTRODUCCIN
La comparacin ms fcil de explicar y entender es que Visual Basic para Aplicaciones (VBA) es a Excel como el Control Remoto es a la Televisin. As como puede utilizar Excel sin VBA, puede manejar la Televisin sin control: cambiar canales y volumen, configuraciones de brillo y contraste, entre otras funciones; Sin embargo es ms fcil y puede aprovechar mejor varias caractersticas utilizando su control remoto que los controles normales, por ejemplo: la programacin para grabar su pelcula favorita o el encendido y apagado automtico; adems Quin no reniega cuando se le pierde el control de la tele?..., pues as, una vez que domine VBA no entender cmo a podido trabajar sin l.

AUTOMATIZACIN
Aunque VBA est dentro de Excel, realmente no es una herramienta perteneciente a esta aplicacin, sino que Excel expone sus habilidades a VBA, para que ste las controle, mediante un intermediario llamado "Librera de objetos", siendo la forma de comunicacin entre este lenguaje de alto nivel y esta aplicacin de hoja de clculo.
LIBRERA OBJETOS

VBA

DE

EXCEL

La mejor forma de descubrir como se comunica VBA con los objetos de Excel es grabando algunas macros. VBA dispone de la herramienta "Grabadora de macros" siendo sta la forma ms bsica de aprender la lgica y sintaxis de VBA; y consiste en que las acciones o tareas rutinarias que realiza manualmente las puede grabar (generando cdigo), para posteriormente reproducirlas cuando las requiera, por ejemplo: Informes semanales.- la estructura y pasos para elaborarlo son los mismos, siendo diferente, obviamente, los datos de la semana en cuestin. A lo largo del manual se usar cualquiera de estos conceptos que significan lo mismo: AUTOM ATIZACIN = PROCEDIMIENTO = MACRO

Cap. 1

1 AUTOMATICE TAREAS REPETIDAS


Usted, que ya utiliza Excel para sus trabajos rutinarios, seguramente se ha dado cuenta de que repite varias acciones (con teclas y comandos); aunque puede hacerlo con algo ms de eficiencia usando los botones de herramienta y las combinaciones de teclas (como <Ctrl + C> para copiar) En estas circunstancias, necesita evaluar si tal serie de p asos los realiza con cierta frecuencia, como: crear un informe semanal (que puede ser muy complejo), o actualizar datos de ventas, o incluso algo sencillo: Dar un formato especial que requiere de 3-4 pasos pero lo usa cientos de veces al da. Ejemplos de Automatizacin 1. Abrir un grupo de libros y copiar informacin de ellos. 2. Identificar y proteger sus libros y hojas de trabajo. 3. Organizar hojas con ttulos, ajuste de columnas y formatos condicionales. 4. Preparar los pedidos del mes y acumularlos en el archivo histrico. 5. Calcular los totales de varios grupos de cuentas. 6. Listar facturas faltantes, usando ciclos automatizados. 7. Buscar datos en tablas para utilizarlos en clculos. 8. Interactuar con el usuario para pedirle o mostrarle informacin. 9. Generar funciones con clculos adaptados, como comisiones, intereses, etc. 10. Ordenar, filtrar y acomodar informacin de sistemas de base de datos. 11. Generar informes con subtotales, tablas dinmicas y grficas. 12. Controlar procesos, mediante controles de dilogo y formularios de captura. Complemento para Otros Sistemas Una gran ventaja (de las mejores) con respecto a las automatizaciones o macros, es usar a Excel como REPORTEADOR DINMICO Esto es, generar informes automatizados con los datos provenientes del mismo Excel o de SISTEMAS DE BASE DE DATOS RELACIONALES, como Access, Clipper, Fox Pro, Visual Basic, Delphi, o cualquier otro que pueda manejar archivos DBF o TXT. Con una cualidad excelente, los informes generados son modificables (editables) pudiendo cambiar sus caractersticas como acomodo, formato, orden, e incluso, agregar nuevos clculos personalizados. As, contrariamente a los informes estticos que se generan en tales sistemas si lo requiere, puede dejarlos desprotegidos para que el usuario los pueda adaptar a sus necesidades. De este modo, Excel complementa y no compite con sus Sistemas de Informacin Empresarial.

1.1 USE MACROS PARA SIMPLIFICAR TAREAS


Usted puede automatizar de una u otra forma todas sus tareas manuales, aprovechando su tiempo, su esfuerzo y, as, abatir sus costos; en otras palabras: ahorrar recursos. Una macro es una secuencia de pasos, como: tecleos, acciones del ratn y otros comandos, que, cuando usted los requiera en Excel, puede ejecutarlos automticamente. No es

Cap. 1 necesario entender lenguajes de programacin para empezar a trabajar en Excel con Visual Basic para Aplicaciones (VBA). Ya que existe la Grabadora de Macros, principal herramienta para automatizar. Lo que hace es codificar (grabar) las acciones manuales realizadas por usted y las almacena en una macro, para ms tarde, en otro caso (o contexto) similar, usted pueda ejecutarlas automticamente.

1.2 CMO GRABAR Y CMO EJECUTAR UNA MACRO


1.2.1 Grabe su Macro

El primer paso para automatizar en Excel consiste en grabar una macro: 1. Men Herramientas Macro - Grabar nueva macroo 2 botn de barra VBA [1.4.3]. 2. Nombre de la macro? {Comience con Letra, sin espacios}. 3. Mtodo abreviado? (Opcional): Tip.- use <Shift> y la letra que guste. 4. En qu libro guardar su macro? Haga clic derecho con el ratn en esta lista. 5. Una Descripcin? (Opcional) y Aceptar o <Enter>. Aparece la barra de herramienta Grabar macro, con los botones Detener grabacin y Referencia relativa. 6. Realice manualmente las acciones por grabar al terminar use Detener grabacin. Al estar grabando, puede al mismo tiempo ver como se codifica cada accin manual. Beneficios.- Asimile ms fcilmente la codificacin, ya que al instante hace y aprende. Permite eliminar acciones innecesarias que, accidentalmente, realiz y codific de ms. 1. Antes del paso 6 [1.2.1], use men Herramientas Macro - Macros 2. Seleccione su macro y clic en Modificar.- aparece el Editor de Visual Basic [5]. Maximice sus ventanas y elimine la sentencia donde est el cursor. 3. Regrese a Excel con <Alt + Tab>, realice cada accin y revsela en VBA (<Alt + Tab>). Puede borrar, cambiar valores o agrupar sentencias (separe con rengln en blanco).
1.2.2 Ejecute su Macro

Una vez grabada la macro, puede ejecutarla en otro contexto similar, esto es, en condiciones parecidas al momento de grabarla, pero en otra situacin, como otro libro u otra hoja con diferentes datos, u otra celda, p.e. dar el texto y el formato de la macro pero en la nueva celda activa. 1. Men Herramientas Macro - Macros o 1 botn de barra Visual Basic [1.4.3]. 2. Seleccione su macro y clic en Ejecutar puede ejecutar Paso a paso [10.2.2]. Si tiene atajo con combinacin de teclas: <Ctrl+Letra> o <Shift+Ctrl+Letra>. Tip.- Para interrumpir una macro en ejecucin: <Esc>.

Cap. 1

1.3 CMO FACILITAR EL USO DE UNA MACRO


Acceso a la automatizacin, con combinacin de teclas y botones de herramientas.
1.3.1 Asignar a Combinacin de Teclas

Si, al grabar macro, asign un atajo de teclas, selo [1.2.2.], para reasignarlo: 1. Use el 1 botn de barra Visual Basic [1.4]. 2. Seleccione su macro y clic en Opciones d el atajo y su descripcin [1.2.1].
1.3.2 Asignar a Botn de Herramientas [12.1.1] 1.3.3 Asignar a Botn en Hoja [12.1.2]

1.4 SUGERENCIAS PARA GRABAR MACROS


1.4.1 Sugerencias Aveces, al ejecutar una macro, ocurren acciones inesperadas [10.1.1-3]:

1. Planee o, por lo menos, bosqueje lo que grabar, a partir de sus pasos o acciones manuales. 2. Establezca el rango seleccionado inicial o la celda activa inicial, antes de grabar: esto hace que las macros sean porttiles (generalizadas), ya que la seleccin inicial puede ser cualquiera al ejecutar la macro [1.4.2]. 3. As como el rango inicial, tambin seleccione el libro y la hoja iniciales. 4. Observe las macros mientras las graba, [1.2.1 Tip]. 5. Use la grabadora como herramienta de aprendizaje, [1.2.1 Tip].
1.4.2 Referencia Absoluta vs. Relativa en desplazamiento

Al estar grabando una macro, el 2 botn de la barra de Visual Basic, nos ayuda a codificar los desplazamientos entre las celdas: por omisin, no est presionado, esto es, la referencia es absoluta; al presionarlo, la referencia ser relativa. a) Ref. Absoluta: se codifica la posicin exacta de cada celda (o rango) seleccionado. Range(A1).Select o Range(A1:C3).Select [4.1.1] b) Ref. Relativa: se codifica la posicin de cada celda (o rango) seleccionado con respecto a la celda anteriormente seleccionada. ActiveCell.Offset(2,1).Select [4.2.3-1] A partir de la celda activa, se desva 2 abajo y 1 a la derecha y selecciona la nueva celda resultante.
1.4.3 Barra de herramientas Visual Basic
Ejecutar macro: muestra el dilogo Macro [1.2.2] Grabar macro: muestra el dilogo correspondiente [1.2.1] Interrumpir/Reanudar la ejecucin de una macro. Activa/Desactiva el modo diseo [12]

Muestra barra Cuadros de control [12] Muestra el Editor de Visual Basic [5] o <Alt + F11>.

Cap. 2

2 EDITE MACROS en Visual Basic para Aplicaciones (VBA)


La Grabadora de macros no siempre genera el cdigo ms preciso ni eficiente, por lo que la mayora de las veces7 requerir editar, esto es, ver y modificar el cdigo grabado para mejorarlo y adaptarlo a necesidades ms especficas.

2.1 CMO MOSTRAR UNA MACRO


Las macros estn escritas en lenguaje Visual Basic y almacenadas en hojas especiales llamadas mdulos. La forma ms directa de mostrar el cdigo de una macro, es: 1. Men Herramientas Macro - Macros o 1 botn de barra VBA [1.4.3]. 2. Seleccione su macro y clic en Modificar.- aparece el Editor de Visual Basic [5]. Otra forma: si sabe en que mdulo est la macro [5.2]: 1. Vea Editor de Visual Basic: 4 botn de barra VBA [1.4.3] o <Alt + F11>. 2. Vea panel Explorador de proyectos: botn o <Ctrl + R>: Identifique Proyecto (libro). 3. Despliegue carpeta Mdulos y abra el mdulo deseado (con 2clic). 4. Despliegue la Lista Declaraciones (arriba a la derecha) y seleccionar la macro deseada.

2.2 DNDE SE ALMACENAN LAS MACROS


Todas las macros (procedimientos [6] o funciones [7]) se guardan en Mdulos: hojas especiales muy similares a un procesador de textos. stos a su vez estn dentro de la carpeta Mdulos del Proyecto (Libro) en cuestin. Como lo muestra el panel Explorador de proyectos (en Editor VBA): con su botn o <Ctrl + R>. [5.2] La primera vez que graba una macro, se crea un nuevo mdulo. Al grabar macros adicionales, se guardarn al final del mismo mdulo. Al cerrar y volver a abrir el libro de trabajo, la grabadora trabajar en un nuevo mdulo. Si requiere escribir una macros (sin grabar) en un mdulo aparte, insrtelo: men Insertar Mdulo [5.2.2-3].
2.2.1 Cmo Nombrar un Mdulo

1. En el panel Explorador de proyectos seleccione el mdulo. 2. Muestre la venta Propiedades: botn o <F4>: puede cambiar su tamao.

3. En (Name): introduzca el nuevo nombre y <Enter>.

Cap. 2

2.3 ESTRUCTURA BSICA DEL EDITOR DE VBA


El Editor de Visual Basic es un programa aparte de Excel pero incluido en l. [5] Sus principales secciones son: 1. Explorador de Proyectos.- Muestra una lista jerrquica de proyectos (libros) y organizados en carpetas sus elementos: como los Objetos de Excel [12.2] y los Mdulos [5]. bralo: botn <F1>. 2. Ventanas de Mdulo.- Donde se almacenan las macros (procedimientos [6] o funciones [7]). bralo: 2clic a su nombre (en Explorador de proyectos). Contienen 2 listas: (General) Objetos y (Declaraciones) Procedimientos. 3. Ventana Propiedades.- Muestra, las caractersticas del objeto o elemento seleccionado, stas se pueden cambiar aqu. brala: botn o <F4>. o <Ctrl + R> Ayuda: Active el panel y

Tip.- Cambie su tamao: arrastre bordes. Pueden ser Flotantes o Anclables [5.1]. Lo bsico para trabajar Panel de Explorador de Proyectos y Ventanas de Mdulos.

2.4 CMO MANIPULAR CDIGO VBA


Cuando se graban las acciones manuales en Excel, se va generando cdigo, como una serie de sentencias (instrucciones) equivalentes a tales acciones manuales. Su manejo es muy similar a un procesador de palabras (como Word).
2.4.1. Estructura Bsica de una Macro [6.1]

1. Inicio.- La palabra clave Sub, el nombre de la macro y parntesis. 2. Cuerpo.- con comentarios: apstrofe al inicio y de color verde. (opcionales). Y con sentencias o instrucciones por ejecutar. 3. Fin.- Las palabras clave End Sub.
2.4.2. Sentencias

Son las instrucciones que equivalen a las acciones grabadas, y estn formadas por: palabras clave, operadores, variables y llamadas a otros procedimientos: 1. Palabras clave.- son trminos reservados para VBA. Aparecen de color azul. 2. Los operadores, variables y llamadas.- se analizarn a fondo en captulo [8].

Cap. 2
2.4.3. Modificacin del Cdigo

1. Navegacin.- similar a un procesador de textos: Barras de desplazamiento, o con Teclas: <flechas de direccin>, <Inicio>, <Fin>, <Re pg> y <Av pg>. Qu pasa si mantiene <Ctrl> y usa estas teclas? Describa: _____________ Divida la ventana del mdulo en 2 secciones.- en la parte superior de la barra de desplazamiento vertical, haga 2clic o arrastre el Cuadro de divisin. 2. Divisin de Sentencias.- separe una sentencia larga en una o varias lneas: en el punto donde desee: inserte un espacio en blanco y un guin bajo _ y <Enter>. Ventaja: ver toda la instruccin en el ancho de la pantalla. 3. Seleccin.- Puede seleccionar el cdigo arrastrando el ratn sobre l. Una palabra: 2clic. Una lnea: clic en orilla izquierda del mdulo (puntero hacia Noreste). Mantenga <Shift> y use las mismas teclas de [2.4.3-1]. Qu sucede? Qu pasa si mantiene <Ctrl+Shift> y usa las teclas de [2.4.3-1]? Para dar sangra a varias lneas: seleccinelas y <Tab>. 4. Eliminar.- Seleccione y <Supr>, pueden ser equivocaciones nuestras o cdigo innecesario, recuerde que la grabadora codifica por seleccin, y muchas veces no necesitamos seleccionar p.e. una celda para trabajar con ella; o el par Select Selection [4.1.5-3]. Al grabar, OJO con las estructuras With se codifican propiedades que realmente no necesitamos cambiar, elimnelas y haga ms ligero su cdigo. P.e. Al configurar pgina para imprimir: se codifica hasta lo que no cambiamos. 5. Copiar y Mover.- Seleccione el cdigo, Copie: <Ctrl + C> o Corte: <Ctrl + X>, ponga el cursor en la nueva posicin y Pegue: <Ctrl + V>. Mtodo Alterno.- Seleccione, apunte a la seleccin y arrastre a la nueva posicin el puntero muestra el cursor fantasma. Para copiar: mantenga <Ctrl> (aparece el signo +) y suelte el ratn. Para mover: slo suelte el ratn. 6. Buscar y Reemplazar.- use las herramientas del men Edicin Buscar o men Edicin Reemplazar P.e. buscar un comentario con una(s) palabra(s) o reemplazar el nombre de una variable. 7. Se recomienda cerrar los paneles de Explorador de proyectos y Propiedades y maximizar la ventana del Editor de VBA, para tener mayor rea visible de trabajo.

Cap. 3

10

3 CONTROLE OBJETOS DE EXCEL, USANDO VBA


3.1 INTRODUCCIN A LOS OBJETOS DE EXCEL
Los objetos se utilizan para realizar tareas, as como un radio es un objeto que se usa para recibir informacin y entretenimiento; en Excel, una hoja de clculo es un objeto que se utiliza para calcular y presentar informacin. Un objeto de Excel es cualquier elemento que el usuario puede manejar directamente en esta aplicacin cuando se usa Excel manualmente o se puede controlar indirectamente Cuando se aplica VBA para automatizarlo.

3.2 PROPIEDADES: Controle caractersticas de objetos


Los objetos tienen caractersticas propias, llamadas propiedades: atributos que controlan la apariencia o el comportamiento de un objeto; as como un radio tiene la propiedad frecuencia que determina la estacin que escucha, una hoja de clculo tiene una propiedad nombre que se utiliza para hacer referencia a dicha hoja. Es posible asignar y devolver (obtener) el valor de las propiedades pertenecientes a cada objeto.
Contiene un valor

Para asignar el valor de una propiedad: P.e: 1) ActiveCell.Value = "Importe" Para devolver el valor de una propiedad: P.e: 1) miImporte = ActiveCell.Value

objeto.propiedad = expresin 2) Range("B2") = "Precio" & No variable = objeto.propiedad 2) miPrecio = Range("B2")

3.3 MTODOS: Haga que los objetos realicen acciones


Los objetos pueden efectuar acciones, llamadas mtodos: movimientos que llevan acabo modificaciones a las caractersticas o contenido de los objetos. Un radio tendra un mtodo CambiarBanda para FM o AM. As mismo las hojas de clculo cuentan con un mtodo Calcular que se utiliza para recalcular toda la hoja. Los mtodos son usados para hacer que los objetos realicen las operaciones que se desean. A veces, para ejecutar una accin, es necesario ms informacin, sta se da con argumentos [6.3]. Para mtodos sin argumentos: Para mtodos con argumentos: P.e.: objeto.mtodo
Los parntesis son opcionales [8.1.2]

objeto.mtodo (argumentos)

Selection.Copy Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False

Copy NO necesita ms informacin; PasteSpecial SI, Qu va a pegar? Aqu, Valores.

Cap. 3

11

3.4 GRUPOS DE PROPIEDADES Y MTODOS


Existen dos: Los 1ros de OPERACIN (realizan acciones) y los 2dos de REFERENCIA (a otros objetos). Los 1ros aparecen al final de una expresin. Los 2dos pueden aparecer al principio (Globales) o en medio (Anidados) de una expresin [4.1.5-5]. Por ejemplo:
3.4.1 DE OPERACIN:
Propiedades Mtodos ActiveCell.FormulaR1C1 = "1000" Selection.NumberFormat = "#,##0.00" Selection.Copy ActiveSheet.Paste ActiveCell.Value = "REPORTE SEMANAL" Range("A3:Z3").Select ActiveCell.Offset(2, 1).Select Selection.Font.Bold = True Mtodos Anidados

3.4.2 DE REFERENCIA:
Propiedades Globales Anidadas

Sheets.Add.Name = "Presupuesto" Cells.Find(What:="1000", After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate

3.5 JERARQUA DE OBJETOS


Los objetos estn clasificados en orden jerrquico, los objetos de mayor jerarqua contienen dentro de ellos a los objetos de menor jerarqua. El objeto de mayor clasificacin es Application (Excel), ste contiene Libros (objetos Workbooks), que a su vez contiene Hojas (objetos Worksheets) y ests tienen celdas o rango de celdas (objeto Range).
Aplicacin Libro Hoja de clculo Celda

Rango de celdas

Hoja de grfico

Los objetos contenedores son llamados objeto Padre (Parent). P.e. ActiveCell.Parent.Name = "Nuevo_Nombre_Hoja

3.6 TIPOS DE OBJETOS


Existen dos tipos de objetos, los objetos COLECCIN y los objetos INDIVIDUALES. Los primeros, las colecciones, son conjuntos de los segundos, y stos son elementos de la coleccin, tales elementos tiene relacin entre s.

Cap. 3 : 1 El objeto Libro (Workbook) es contenedor (o padre) de todas y cada una de sus hojas (Worksheets), o sea, de toda la coleccin de hojas de clculo y cada hoja de clculo en especfico. Ahora, Libro tiene una propiedad (de referencia) WorkSheets que devuelve una referencia a toda la coleccin teniendo acceso a todas las propiedades y mtodos del objeto coleccin Worksheets. CantHojas = ActiveWorkbook.Worksheets.Count [8.2]
Propiedad que devuelve Propiedad del objeto padre (LibroActivo) que devuelve un objeto coleccin de todas sus hojas. (obtiene) la cantidad de hojas (elementos de la coleccin) del Libro.

12

Variable donde se almacena el nmero de hojas. .

Propiedad que devuelve un objeto Libro (LibroActivo) [es el Padre].

2 Tambin, podemos hacer referencia a una hoja en especial (un elemento de la coleccin), usando su ndice (nmero de elemento) o su nombre (entre comillas), con esto, se accesa a las propiedades y mtodos del objeto Worksheet especfico. ActiveWorkbook.Worksheets(3).Select ActiveWorkbook.Worksheets(Hoja 3).Select

Propiedad que devuelve un objeto Libro (LibroActivo) [es el Padre].

Usando el mismo especificando el nmtodo para la mero o nombre hacecoleccin mos referencia al elemento requerido

y podemos utilizar este mtodo para seleccionar tal hoja.

3 Podemos almacenar un objeto en una variable, para esto usamos la palabra Set: [8.4]
Variable donde se almacena un objeto (precedida de la palabra Set) La expresin completa devuelve la referencia al objeto Hoja de clculo Hoja 3 del Libro Activo.

Set miHoja = ActiveWorkbook.Worksheets(Hoja 3) MiHoja.Select


por lo que podemos utilizar el mtodo para seleccionar Utilizando la variable, podemos tener acceso a todas las propiedades y mtodos del objeto almacenado en sta la hoja de clculo Hoja 3.

Cap. 3

13

3.7 EXPLORE OBJETOS CON LOS RECURSOS DE VBA

3.7.1 VENTANA INSPECCIN

Funciones: sirve para analizar las propiedades (no mtodos) de un objeto: si son de operacin o de referencia [3.4]; tambin explora objetos relacionados a l {arriba o abajo en la jerarqua[3.5]} y sus colecciones o elementos de stas[3.6]. 1. Pasos para Inspeccionar Expresiones (la macro debe ejecutarse paso a paso [10.2.2]): 1. Seleccione slo el cdigo de la expresin que hace referencia al objeto sin la propiedad o el mtodo (puede ser una variable almacenando tal objeto [8.4]). 2. Men Depuracin Inspeccin rpida (<Shift + F9>) y ver el Valor de la expresin. 3. Clic en Agregar.- aparece la ventana Inspecciones: con 4 columnas.de la Expresin: su Valor actual, su Tipo de dato y su Contexto en el proyecto. [5.1.4] 4. De clic en el signo + para desplegar todas sus propiedades: Las de Operacin (ejecucin de acciones): Las de Referencia (a otros objetos): con valor y sin signo +, y sin valor y con signo +. [3.4]

: Grabe una macro introduciendo algn texto en la celda B2; ejectela paso a paso [10.2.2] y siga los Pasos para Inspeccionar Expresiones: {Puntos 1 y 2} seleccionando Range(B2). {Punto 3} Aqu, el Valor es el texto que introdujo, el Tipo es Objeto del Sub-tipo Rango y el Contexto es en el mdulo y procedimiento, del proyecto (o libro) activo. {Punto 4} En Propiedades de Operacin (con valor): La propiedad ColumWidth tiene un valor (su Tipo es Doble), y ste es modificable (clic en l, cmbielo a 20 y <Enter>). Observe el resultado en Excel. En Propiedades de Referencia (con signo +): Jerarqua arriba.- La propiedad Parent, Tipo Objeto/HojaDeClculo y refiere, precisamente, a la hoja de clculo de la Celda donde esta trabajando, despliegue y vaya a su propiedad (de operacin) Name y cmbiela por Prueba, revise Excel. Jerarqua abajo.- p.e. la propiedad Font, refiere al objeto Fuente de la celda B2, a su vez, despliegue y cambie el valor de su propiedad Bold a True pruebe con Color.

Cap. 3
3.7.2 AYUDA

14

La ventana Inspeccin, le ayuda a recorrer los objetos y comprender sus propiedades (o caractersticas), sin embargo, no podr ver sus mtodos (o acciones), ni el Esquema Completo de los Objetos de Excel controlables por VBA. Para complementar su exploracin, existe la Ayuda, que contiene diagramas visuales, de gran utilidad para analizar el Esquema General de Objetos. La forma de usarla es muy simple, no es necesario que la macro este en ejecucin, slo coloque el cursor sobre la palabra clave en su cdigo y use la tecla <F1>. Puede ser un mtodo o una propiedad de operacin (valor) o referencia (a otro objeto). : En la jerarqua de objetos, el de mayor nivel es Application, escrbalo en una macro y presione <F1>, ver el ttulo la palabra clave Application es en realidad una propiedad de referencia a este objeto. Haga clic en el vnculo del tema objeto, ver un diagrama y su descripcin; haga clic en el cuadro Application y ver el ttulo Modelo Objetos de Microsoft Excel. [3.5] Los objetos solos estn en azul, Los objetos coleccin y en parntesis el nombre de sus elementos estn en amarillo. As, Application es un solo objeto, que contiene (o es padre) de la coleccin Libros todos y cada Libro abierto! , a su vez, cada libro contiene una coleccin de Hojas de Clculo todas y cada Hoja de Clculo. Entre a su diagrama: clic en flecha roja. Ahora, cada Hoja tiene Rangos (de celdas) y cada una de stas puede contener varios objetos, como: Fuente, Interior, Caracteres o Comentario, entre otros. La mayora de los objetos mostrados en estos esquemas slo los utilizaremos en situaciones muy especializadas. MTODOS.- Para analizar los mtodos (acciones) sobre el objeto Range, haga clic en su cuadro, ver el Tema Objeto Range, su diagrama y su descripcin, haga clic en su vnculo a Mtodos (en la parte superior), observe que, literalmente, son verbos; p.e. Copiar (Copy), Eliminar (Delete), Buscar (Find), Insertar (Insert), Imprimir (PrintOut), PegarEspecial (PasteSpecial), Seleccionar (Select), entre otros. Entre a alguno, p.e. Copy, revise las 3 formas de aplicarlo y entre al vnculo Ejemplos. - puede copiarlos para adaptarlos en su trabajo.

Cap. 3
3.7.3 LISTAS AUTOMTICAS

15

Una herramienta muy requerida para recordar, o incluso, descubrir mtodos y propiedades. Facilita la escritura, no necesita aprenderse de memoria las palabras clave!

a) EN OBJETOS DE EXCEL Dentro de una macro, teclee la referencia a un objeto, seguido de un punto, si la sintaxis es correcta aparecer una lista automtica con los mtodos y propiedades disponibles para el objeto, en el contexto actual de su trabajo.

: Genere una macro, que agregue un libro y lo cierre sin que le pida que guarde los cambios. Use el objeto coleccin Libros teclee: work y use las teclas <Ctrl + Barra>, aparece la lista con la propiedad Workbooks la requerida d <Tab> para completar; ponga un punto, y en la lista, identifique los iconos de propiedad y de mtodo: ____________ desplcese con flechas arriba y abajo, seleccione Add y de <Tab>. En otra sentencia, teclee active, <Ctrl + Barra>, seleccione ActiveWorkbook y <Tab>, d un punto y teclee C para Close, use <Tab>; d un espacio y aparece un cuadro de informacin rpida con los posibles argumentos del mtodo Close, todos son opcionales, ya que estn entre corchetes como no queremos que nos pida guardar los cambios, use el primero: teclee Fa y <Ctrl + Barra>. Ejecute la macro paso a paso [10.2.2]. [8.4]

b) EN VARIABLES QUE CONTIENEN OBJETOS DE EXCEL

Una variable declarada como tipo Objeto y que contenga a uno, se usa similar a una referencia de tal objeto (como lo vio en el tema anterior [3.6.3]). : declare la variable miLibro como tipo Workbook, establezca en la variable el libro activo (con esto, el cdigo posterior puede activar otro libro y, despus usar la variable para trabajar con el primero, sin necesidad de activarlo), Pregunte a su asesor Cmo aplicar esto a Rangos (o celdas)? Ver ejemplo en [4.3.1-5] Finalmente, cierre el libro usando la variable. [8.4].

Cap. 3 El cdigo de la macro quedar as: Sub Prueba() Dim miLibro as Workbook Set miLibro = ActiveWorkbook [8.4] '==> Instrucciones p/ ms acciones (incluida la de activar otro libro). miLibro.Close False End Sub c) PARA VALORES CONSTANTES (de propiedades o de argumentos) Varias propiedades y argumentos (informacin para mtodos y funciones) permiten una cantidad limitada de valores, esta lista de constantes, se denomina Lista enumerada con las constantes de Excel (prefijo xl) o de Visual Basic (prefijo vb) [8.6.1]. : en una macro, teclee este cdigo: Activewindow.WindowState = y aparece la lista con las 3 nicas opciones para el Estado de una ventana (en este caso la ventana activa). Seleccione alguna y use <Tab>. Pruebe su macro. CONCLUSIN Los recursos de VBA para explorar los objetos de Excel, son la herramienta ideal para los que no tenemos tiempo de estudiar un manual de referencia, ni mucho menos, aprendernos de memoria la sintaxis de las instrucciones. Si tiene una vaga idea del mtodo o propiedad que desea utilizar, estas herramientas son especialmente tiles para localizar esa palabra clave, y si se puede utilizar en el contexto actual de su trabajo. El primer intento es recomendable hacerlo con la grabadora de macros como se explica en la introduccin, es decir, si usted tiene la idea de lo que necesita realizar en Excel, codifquelo, con la grabacin de sus acciones manuales. Con esto, las herramientas estudiadas en este subcaptulo, vienen a complementar lo hecho por usted con la primera: Grabadora de macros.

16

Cap. 4

17

4 OBJETOS COMUNES DE EXCEL


Entender y controlar mediante VBA los objetos ms comunes de Excel es uno de los principales objetivos de este curso taller. Se dividen en 3 clasificaciones: 1) Los objetos rango, ms importantes; 2) Los objetos grficos, flotando sobre las hojas y 3) Los objetos para informes, muy tiles, son una combinacin de los 2 primeros.

4.1 EXPLORE LOS OBJETOS RANGO


Los objetos Rango son posiblemente los ms importantes de Excel. Es en stos donde se introduce valores, textos y clculos (frmulas y funciones), se les aplica formato, sobre stos se ubican objetos de dibujo, en ellos se manipulan bases de datos y tablas dinmicas, entre otras acciones. As, los ver desde 2 puntos de vista: el cdigo que se genera al grabar y el que escribe a mano al adaptarlo a necesidades especiales.
4.1.1 RANGOS DIRECTOS (Propiedad Range)

La propiedad Range es de referencia, ya que refiere a un objeto Rango. Tiene 2 argumentos: Celda1 (requerido) y Celda2 (opcional). y corresponden a los lmites (esquinas) del rango: Range(Cell1, [Cell2]) esq. sup. izq. esq. inf. der.

Cmo seleccionar: debe poner la representacin de la direccin de un rango. P.e., Al grabar, se codifica: Range(B2).Select o Range(C3:G6).Select Con seleccin dispersa: Range("C8:C11,E8:E11").Select A mano: Range(NombreRango).Select o Range(C3, "G6).Select o Range(ActiveCell, "F10).Select Seleccin dispersa: Union(Rango1, Rango2, ...).Select Cmo nombrar una rango (uso de propiedad Name): Al grabar: la codificacin es totalmente imprctica (pruebe). A mano: Range(C3:G6).Name = "NuevoNombre" Selection.Name = "NuevoNombre"
4.1.2 RANGOS COMO COLECCIN

Puede considerarse a un Rango como una coleccin de Celdas. Sin embargo, un conjunto de celdas es algo ms complicado, ya que tienen 2 dimensiones: filas y columnas. Se puede pensar en el Rango A1:C2 como una coleccin de 6 celdas, o de 2 filas, o de 3 columnas. As, para tratar a un Rango como coleccin, existen 3 propiedades:

Cap. 4 1. Cells(NoFila, [NoCol]) : Devuelve una Celda del Rango. : Escriba estas sentencias en una macro, ejectelas paso a paso observando lo que sucede en Excel [10.2.2] mejrela con [4.1.5-4]: Range("B2:E4").Select Range("B2:E4").Interior.Color = vbYellow Range("B2:E4").Cells(3).Select Range("B2:E4").Cells(6).Select Range("B2:E4").Cells(4, 2).Select Range("B2:E4").Cells(1, 3).Select Range("B2:E4").Cells(Range("B2:E4").Cells.Count).Select Cells global (Absoluta) [4.1.5-5]: Cells(5).Select Cells(Cells.Count).Select
Da la cantidad de celdas del Rango.

18

2. Rows(NoFila) : Devuelve una(s) Fila(s) o todas del Rango. Inserte estas sentencias en su macro anterior: Range("B2:E4").Rows(2).Select Anidadas (Relativas) Range("B2:E4").Rows(Range("B2:E4").Rows.Count).Select Rows(10).Select Global (Absoluta) 3. Columns(NoCol) : Devuelve una(s) Columna(s) o todas del Rango. Range("B2:E4").Columns(3).Select Anidadas (Relativa) Range("B2:E4").Columns(Range("B2:E4").Columns.Count).Select Columns(3).Select Global (Absoluta)
4.1.3 RANGOS PROCESADOS (A partir del Rango Origen)

Los objetos Rango de Excel tienen propiedades, que pueden A partir de stos procesar un nuevo rango. As, para obtenerlo, a partir del existente, existen 5 propiedades: 1. Offset(FilasDesv, ColsDesv) : Devuelve una nueva Celda desviada (hacia abajo + y hacia la derecha +) a partir de la 1ra Celda del Rango Origen [1.4.2]. : Escriba estas sentencias en una macro, ejectelas paso a paso [10.2.2]: Dim miRango As Range [8.4] _ Set miRango = Range("C10:E11") Celda Activa miRango.Interior.Color = vbCyan _ (0,0)

Columnas miRango.Select ActiveCell.Offset(1, 0).Select + Filas ActiveCell.Offset(0, 1).Select miRango.Offset(1, 0).Select miRango.Offset(0, miRango.Columns.Count).Select

2. Resize(FilasTamao, ColumnasTamao) : Devuelve una Rango redimensionado, a partir de la 1ra celda del Rango Origen. {Ayuda: busque propiedad Resize}. Inserte estas sentencias en su macro: miRango.Resize(, 4).Select miRango.Resize(miRango.Rows.Count + 2, 5).Select

Cap. 4 3. EntireRow: Devuelve la(s) Fila(s) Entera(s) de la hoja, a partir del Rango Origen. Inserte esta sentencia en su macro: miRango.Cells(1).EntireRow.Select 4. EntireColumn: Devuelve la(s) Columnas(s) Entera(s) de la hoja, a partir del Rango Origen. Inserte esta sentencia: miRango.EntireColumn.Select 5. CurrentRegion: Devuelve el Rango Regin Actual, a partir de la 1ra celda del Rango Origen. La Regin Actual es un rango que se extiende a partir de la 1ra celda del rango Origen por todas las celdas con contenido hasta formar un rectngulo delimitado por filas y columnas perimetrales en blanco. Introduzca manualmente valores en las celdas C8, B9, B10 y C10. Inserte esta sentencia en su macro y Pruebe: miRango.CurrentRegion.Select La seleccin de Rangos ayudan a entender cmo se manipulan los objetos Range con herramientas flexibles que procesan y obtienen Rangos nuevos. El trabajo real, sobre estos rangos se trata en el siguiente tema [4.1.4].
4.1.4 CLCULOS (Frmulas y Funciones)

19

Una vez seleccionado el Rango deseado, el verdadero trabajo es dar formato, colocar en ellos clculos, texto o valores, obtener su valor (con o sin formato), autollenar frmulas, entre otras labores Lo primero que se debe entender es cmo funcionan las ref erencias a otras celdas como datos de entrada en las frmulas y/o funciones dentro de una celda dada; o sea, la Referencia a Celdas dentro de Clculos: 1. Referencia Relativa dentro de Clculos Suponga que tiene una lista de datos en la columna B y C de una hoja, y en la columna D requiere colocar su correspondiente multiplicacin para cada fila; p.e. en D2 pondr: =B2*D2, al autollenarla (copiarla) en las dems filas, las referencias se ajusten automticamente ya que, por omisin, las referencias son relativas relativas con respecto a la celda que contiene tal frmula. As, la frmula en la celda D2 en realidad significa: la celda 1 a mi izquierda multiplcala por la celda 2 a mi izquierda, y al copiarla a otras celdas sus frmulas dirn lo ajustado (lo que Ud. ve), pero significarn justo lo mismo [4.1.4-4]. 2. Referencia Absoluta dentro de Clculos Continuando con el ejemplo anterior, suponga que requiere aplicar un descuento a las multiplicaciones en la columna D, tal descuento esta en celda G2; as la frmula en D2 ser =B2*D2*(1-G2) Las 3 referencias a celda son relativas. Ahora

Cap. 4 Qu sucede al autollenarla en las otras celdas? Prubelo Para corregir, debe fijar (hacer absoluta) la referencia a la celda con el descuento ( G2): Anote
$G$2 cmo: ________________________________________________________

20

3. Referencia Combinada en Clculos Suponga que tiene una tabla donde en la 1ra Columna tiene Cantidades desde A3 y en el 1er Rengln Precios desde B2, as, los clculos iniciarn en B3 con =A3*B2, Qu sucede si autollena hacia abajo? o Hacia a la derecha? Recuerde que las referencias son relativas, y el clculo significa: La celda a mi izquierda multiplcala por la celda arriba de m Qu sucede si fija (hace absoluta) una de las referencias y la otra y si fija las dos? Prub elo Lo que requiere es que las Cantidades se obtengan siempre de la columna A y que se ajusten fila por fila; por otra parte, que los Precios se obtengan siempre de la fila 2 y que se ajusten columna por columna. Esta es la clave: siempre = Absoluto y ajusten = Relativo. Con esto, en un clculo, la referencia a una celda formada por una columna y una fila, puede ser combinada: teniendo su columna absoluta, o su fila. As, en cada celda deber multiplicar su correspondiente Cantidad (Columna A fija) por su correspondiente Precio (Fila 2 fija), en B3 ir =$A3*B$2. Pruebe que pasa al autollenar hacia abajo y hacia la izquierda. 4. Notacin R1C1 vs. A1 Si en D2 tiene la Referencia =B2, sta no dice lo que realmente significa. Dice Celda B2, pero significa Dos celda a mi izquierda en forma relativa (con respecto a la celda que contiene la referencia). Si Ud. no sabe qu celda la contiene, no sabr su significado (en forma relativa). Excel tiene una notacin que dice lo que realmente significa, sta es R1C1, para activarla: men Herramientas Opciones ficha General, marque la casilla Estilo de referencia R1C1. A1: es la Letra de Columna y el Nmero de Rengln. Por su parte, R1C1: representa Rengln Nmero y Columna Nmero.

Cap. 4 1. En referencia Absoluta el nmero es de Rengln (o de Columna) de la hoja. 2. En referencia Relativa el nmero va entre parntesis y es la desviacin relativa, con respecto a (o a partir de) la celda que contiene la frmula. Si la celda referenciada est en la misma Fila o Columna: no se pone nmero. Actvela y observe sus ejercicios, en el 1, la referencia relativa se ve as:
=RC[-2]*RC[-1]

21

_ _
(0,0) Columnas

+ Filas

La celda (mismo rengln de la frmula y col. 2 a la izq. ) multiplica por la celda (mismo rengln de la frmula y col. 1 a la izq. ).

La referencia absoluta:
= RC[-2]*RC[-1]*(1-R2C7) Al clculo anterior multiplica por la diferencia de 1 me-

nos la celda (rengln 2 y columna 7 de la hoja absoluta). En el 2, las referencias combinadas:


=RC1*R2C

La celda (mismo rengln de la frmula y col. 1 de la hoja) multiplica por la celda (rengln 2 de hoja y misma col. de frmula).

La Grabadora de macros usa esta notacin (R1C1) para codificar las frmulas que se introducen en las celdas. Mientras ms la comprenda, mejor automatizar (con VBA) la asignacin, en celdas, de sus clculos (frmulas y funciones). Con su frmula en la celda: Inicie grabacin, edite la celda (<F2>) y <Enter>. 5. Asigne y Obtenga el contenido en un Rango Todas las referencia a Rangos, no sirven de nada si no hacemos algo con tales rangos referenciados. Generalmente, se asignan: valores, textos o frmulas. Tambin, puede obtener su contenido para utilizarlo en algn proceso. ASIGNAR: En una macro, introduzca el siguiente cdigo, ejectelo paso a paso [10.2.2]: Worksheets.Add Range("C4:C8").Select I. Selection.Value = 10 II. ActiveCell.Value = 0 III. ActiveCell.Offset(-1, 0) = 1 IV. Selection = "=C3*5" I. La propiedad Selection, refiere al rango seleccionado y con la propiedad Value (por default: no se pone) asigna a cada una de sus celdas el valor 10. II. La propiedad ActiveCell, refiere slo a la celda activa y le asigna el valor 0. III. De la celda activa, a la de arriba se le asigna el valor 1.

Cap. 4 IV. A cada una de las celdas de la seleccin se le asigna la frmula que significa = la celda de arriba (de cada frmula) por 5. Al definirla apropiadamente en la 1ra celda de la seleccin, sta se ajusta para cada celda ya que sus frmulas contienen referencias relativas. OBTENER: Se pueden usar 4 propiedades: Value, Formula, FormulaR1C1 o Text. En Excel, d formato moneda a seleccin. En otra macro, teclee este cdigo: ActiveCell.Offset(0, 3) = ActiveCell.Value MsgBox ActiveCell.Formula ActiveCell.Offset(1, 3) = ActiveCell.FormulaR1C1 ActiveCell.Offset(2, 3) = ActiveCell.Text 1. Value ==> (por omisin) obtiene el valor resultado de un clculo en una celda. 2. Formula ==> obtiene lo que muestra la barra de frmulas. En notacin A1. 3. FormulaR1C1 ==> obtiene la frmula con notacin R1C1. 4. Text ==> obtiene el valor con formato de la celda. Para Asignar, cualquier propiedad es igual (excepto Text). La grabadora slo usa FormulaR1C1. Ej: Activecell = Activecell (una celda). Selection = Selection.value (un rango).
4.1.5 TIPS DE RANGOS

22

1. Propiedades complementarias 1. Row ==> obtiene el nmero de fila (en la hoja) de la 1ra celda del rango. 2. Column ==> dem para columna. 3. Address (FilaAbs, ColAbs, Notacin) ==> obtiene la direccin del Rango. 4. End (Sentido) ==> obtiene la ltima celda con dato. Grabe su accin en Excel: <Ctrl + una de las Flechas de direccin>. 2. Notacin Abreviada de Range Abrevie la propiedad Range, sin parntesis y sin comillas. Slo use la direccin (o nombre) del Rango entre corchetes: Worksheets("Hoja1").[B2:E20].Copy [miRango] = 30 3. Pares Select - Selection La grabadora de macros, trabaja por seleccin, es decir, si queremos colocar una frmula en la celda F10, debemos 1 seleccionarla y 2 asignarle la frmula. igual a Worksheets("Hoja1").Range(B2:E20).Copy Nombre personalizado de Rango dado en Excel.

Cap. 4 El resultado sera: Range(F10).Select ActiveCell.FormulaR1C1 = "=RC[-2]/RC[-1]" Podemos simplificar este cdigo haciendo una sola sentencia: eliminando las palabras Select y ActiveCell (o Select y Selection): Range(F10).FormulaR1C1 = "=RC[-2]/RC[-1]" Pros y Contras: La ventaja es que se agiliza el cdigo, evitando seleccionar tal rango. La ventaja de seleccionar y luego hacer algo con l es, precisamente, que Ud. puede revisar si efectivamente la macro esta trabajando donde Ud. quiere. 4. Estructuras With Simplifique varias referencias al mismo rango trabajado, con una estructura With: With Objeto Rango (en referencia o variable) .Value = 100 .Font.Bold = True ActiveCell = .Offset(1, 0).Address End With Cmo funciona: se crea una variable oculta almacenando el objeto de With, para colocar su referencia antes de cada punto. End With elimina la variable. 5. Propiedades de Referencia Globales vs. Anidadas Las propiedades Globales van al principio; esto es, no tienen un objeto antepuesto a su izquierda: ni referencia a un objeto rango ni un punto. Entonces hacen referencia de forma Absoluta. P.e. con respecto a la hoja activa: Cells(3,5).Select Es Global: de la hoja selecciona la celda E3. Las propiedades Anidadas van en medio; esto es, son precedidas por la referencia a otro rango (y no a la hoja). Entonces hacen referencia de forma relativa, p.e.: [tuRango].Cells(3).Copy Es Anidada: de tuRango, copia su celda 3.
4.1.6 EJERCICIOS FINALES

23

1 Como refuerzo, explique en croquis la actuacin de estas 3 sentencias de cdigo: Range(Cells(1,1),Cells(4,3)).Select

Cap. 4 Range(ActiveCell, ActiveCell.Offset(2,4)).Select

24

Range(ActiveCell.Offset(3,2), ActiveCell.Offset(5,6)).Select [Cmo lo hara en 2 pasos (2 sentencias)?]

2 Analice este cdigo, estudiando las propiedades de los rangos: Dim miRango As Range [8.4] Set miRango = Range("C10:F14") miRango.Interior.Color = vbBlue miRango.Offset(-1,-1).Resize(miRango.Rows.Count + 2, _ miRango.Columns.Count + 2).Select
Da la cantidad de Columnas del Rango.

Da la cantidad de Filas del Rango.

3 Introduzca valores en las celdas del rango B5:D8, ejecute paso a paso este c digo, examinando las propiedades de los rangos y cmo se concatenan cadenas constantes con variables para automatizar frmulas verstiles y adaptables a la cantidad de datos existentes, prueba agregando ms datos a su tabla: Range("B5").Select Do Until ActiveCell = "" ActiveCell.End(xlDown).Offset(1, 0) = _ "=SUM(R" & ActiveCell.Row & "C:R[-1]C)" ActiveCell.Offset(0, 1).Select Loop 4 Requiere borrar solamente los datos de una tabla (o lista) Cmo los seleccionara (sin el encabezado 1 fila)?

Cap. 4

25

4.2 EXPLORE LOS OBJETOS GRFICOS


Los objetos grficos incluyen no slo los rectngulos, elipses y lneas, sino tambin cuadros de texto, imgenes, fotos, grficas [4.3.1] y controles de botones y listas [13], stos, incorporan informacin interesante y funcionalidad a las hojas de clculo. A diferencia de los objetos Rango, que estn fijos en la hoja, stos estn flotando en ella. Pueden aparecer o desaparecer, y cambiar sus caractersticas como color, fondo y forma. Para manejar los objetos grficos, sera casi imposible aprenderse sus mltiples propiedades y mtodos, ya que para consultarlos en la ayuda debe saber exactamente como se escriben. Para solucionar esto, explrelos con la grabadora de macros, realizando acciones con estos objetos. Algunas personas puristas de la programacin creen que la grabadora de macros es una herramienta para principiantes, y lo es. Pero es tambin una potente herramienta de referencia para desarrolladores avanzados: se usa para crear la estructura bsica grabando un caso especfico [Constante] para luego, personalizar el cdigo generalizndolo para cualquier caso [Variable].
4.2.1 RECTNGULOS Y FORMAS BSICAS

Las formas bsicas se manejan muy similar a un rectngulo, de hecho, al seleccionar cualquiera, aparecen manijas abarcando al objeto en forma de rectngulo. GRABE LA CREACIN DE UN RECTNGULO: 1. Muestre la barra de dibujo, con su botn 2. Inicie grabacin [1.2.1 y Tip] Revise Cuntas sentencias crea cada accin? 3. Active el botn Rectngulo de la barra de dibujo.

4. Dimensione el rectngulo: mantenga <Alt> y desde la esq. sup. izq. arrastre el botn del ratn hasta la esq. inf. der., sultelo y luego suelte <Alt>. 5. Dele nombre: en Cuadro de Nombres teclee (indcelo: nmero al final) y <Enter>. 6. Dele color al fondo: despliegue la paleta de Color de relleno 7. Cambie su borde: con botn Estilo de lnea . Cuntas sentencias? . Cuntas sentencias? 8. Cambie color al borde: despliegue el botn Color de lnea . Cuntas sentencias?

9. Puede cambiar otras propiedades: as aprender mucho ms de objetos. 10. Identifique (a prueba y error) y elimine sentencias innecesarias. Mejore con [4.1.5-4]. Cul es la diferencia, en codificacin, si usa el dilogo Formato de autoforma?

Cap. 4 Edite su macro [2.1] y personalice (mejore) la creacin del rectngulo (o forma bsica): 1. Entre a la ayuda del mtodo AddShape (Type, Left, Top, Width, Heigth): 1.- Type 2.- Left 3.- Top 4.- Width 5.- Heigth Tipo de la forma bsica (con prefijo msoShape) De orilla Izquierda de hoja a orilla de forma. De orilla Superior de hoja a orilla de forma. Ancho de forma. Las distancias son en puntos. 1 punto = 1/72 pulg. = 3.53 mm Alto de forma.
A1

26

3 2

1
4

2. Modifique la 1ra sentencia por sta:

ActiveSheet.Shapes.AddShape(msoShapeCube, _ ActiveCell.Left, _ ActiveCell.Offset(-5, 0).Top, _ ActiveCell.Width, _ Range(ActiveCell.Offset(-5, 0), ActiveCell).Height).Select

3. Prubelo Identifique y explique cada argumento. Intente con otros v alores.


4.2.2 LNEAS Y FLECHAS

Las lneas y su subgrupo flechas tambin son formas bsicas, ya que tienen propiedades y mtodos muy similares a los rectngulos, la diferencia son los argumentos del mtodo AddLine (BeginX, BeginY, EndX, EndY) {vea la Ayuda}. 1.- BeginX 2.- BeginY 3.- EndX 4.- EndY De orilla Izquierda de hoja a Inicio de lnea. De orilla Superior de hoja a Inicio de lnea. De orilla Izquierda de hoja a Fin de lnea. De orilla Superior de hoja a Fin de lnea.
A1

2 1 4

GRABE LA CREACIN DE UNA LNEA: 1. Inicie grabacin [1.2.1 y Tip] Revise cuntas sentencias crea cada accin? 2. Active el botn Lnea de la barra de dibujo. 3. Dimensione el rectngulo: mantenga <Alt> y desde la esq. sup. izq. arrastre el botn del ratn hasta la esq. inf. der., sultelo y luego suelte <Alt>. 4. Dele nombre, color y grosor (igual que rectngulo [4.2.1-5 a 7]). Otras propiedades? 5. Identifique (a prueba y error) y elimine sentencias innecesarias. Mejore con [4.1.5-4]. 6. Modifique la 1ra sentencia por sta:
ActiveSheet.Shapes.AddLine( _ ActiveCell.Left, _ ActiveCell.Top, _ ActiveCell.Offset(5, 2).Left, _ ActiveCell.Offset(5, 2).Top).Select

7. Prubelo Identifique y explique cada argumento. Intente con otros val ores. Cmo se codifica si arrastra desde la esq. inf. izq. hacia la esq. sup. der.? Cul es el cdigo si usa el botn Flecha? o Si le pone puntas a su lnea?

Cap. 4
4.2.3 CUADROS DE TEXTO Y FOTOS

27

Los cuadros de texto son objetos grficos que contienen texto, o la referencia a una celda para mostrar su contenido. Las fotos muestran un rango, con la referencia a ste. GRABE UN CUADRO DE TEXTO: 1. Inicie grabacin [1.2.1 y Tip] Revise Cuntas sentencias crea cada accin? 2. Active el botn Cuadro de texto de la barra de dibujo. 3. Dimensione e introduzca algn texto. Dele nombre y otras propiedades (si gusta). 4. Analice el objeto Caracteres {vea la Ayuda} y elimine sentencias innecesarias. Qu sucede si elimina toda la estructura With End With? Termine grabacin. Inserte texto en B2. Grabe otra macro e inserte un Cuadro de texto, en la barra de frmulas introduzca =B2 y <Enter> Que pasa si elimina la 2da sentencia? FOTOGRAFE UN RANGO: {automatizacin de funcin manual con botn C mara}

Seleccione un rango (con contenido) y ejecute esta macro:


Sub FotoAutomatizada() Selection.Copy ActiveSheet.Pictures.Paste(Link:=True).Select Application.CutCopyMode = False Selection.Top = Selection.Top + Selection.Height Selection.Name = "Foto1" End Sub

Cmo la grabara? Cmo la hara sub-rutina con argumentos? [6.3.1]


4.2.4 IMGENES Y FOTOGRAFAS

Las Fotografas son imgenes digitalizadas almacenadas en archivos especiales: Grabe una fotografa incrustada: 1. Inicie grabacin de macro [1.2.1 y Tip]. 2. Men InsertarImagenDesde archivo : en carpeta Asistente, de 2clic a ROBOT.JPG. 3. Pare su grabacin y compare su cdigo con ste:
ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\Asistente\ROBOT.JPG").Select Selection.Left = 120# Selection.Top = 38.25

Se pueden crear cientos de objetos grficos formas, lneas, cuadros de texto, imgenes y fotografas, puede agregar, manipular o borrar sus dibujos e imgenes. Los objetos grficos pueden aparecer y desaparecer Qu propiedad usara Ud.? Busque en la Ayuda el tema: Solucin de problemas de objetos de dibujo.

Cap. 4

28

4.3 EXPLORE LOS OBJETOS PARA INFORMES


Los Objetos para Informes son muy tiles para resumir grandes volmenes de informacin. Presentndola en forma esquemtica visualmente agradable con su anlisis para la correcta toma de decisiones. Su funcionamiento bsico es similar a los objetos Grficos y Rangos, y tienen dos clasificaciones: Grfica y Tabla dinmica. Estos objetos tienen cientos de atributos propiedades y mtodos. Muchos de ellos son, por si mismos, objetos autnomos, cuyo funcionamiento es semejante al de otros objetos de Excel. Aprender a manejarlos con slo leer un manual de referencia es muy complicado ya que deber invertir bastante tiempo (recurso limitado). Para solucionar esto, Excel usa la tecnologa C.A.S.E. (Ingeniera de Software Asistida por Computadora). Uno de sus ms claros exponentes es la grabadora de macros; con sta, Ud. puede crear y manipular objetos de Excel, codificando sus acciones (en V.B.A.). Mejor an, ir explorando los objetos (con sus propiedades y mtodos) conforma los vaya utilizando, y as lo nuevo que aprenda en automatizacin de objetos lo entender y asimilar mucho mejor, por que lo asociar a las herramientas que Ud. emplea directa y manualmente en Excel con las que soluciona sus necesidades.
4.3.1 OBJETO GRFICA (Chart)

Las grficas presentan rpidamente, en un diagrama visual, un resumen de datos. GRABE LA GENERACIN DE UNA GRFICA: 1. En un libro nuevo: inicie grabacin [1.2.1 y Tip] Cuntas sentencias generar cada accin? 2. Abra el archivo Datos por Graficar 4.3.1.xls en carpeta Asistente. 3. Seleccione celda A3, use botn : deje los valores por omisin y clic a Terminar. 4. Identifique los argumentos constantes y generalice su macro [8.2]: _______________ 5. Compare su macro generalizada con este cdigo:
Workbooks.Open ThisWorkbook.Path & "\Asistente\Datos por Graficar 4.3.1.xls" Dim RangoAGraficar As Range [8.4] Set RangoAGraficar = Range("A3").CurrentRegion Charts.Add ActiveChart.ChartType = xlBarStacked100 Opcin: en vez de Variable, use referencia con hoja: Range("Hoja1!A3").CurrentRegion ActiveChart.SetSourceData Source:=RangoAGraficar ActiveChart.Location Where:=xlLocationAsNewSheet

En la macro que grab: Generalice Location a la hoja activa (donde estn los datos). En una hoja de clculo, una grfica es contenida dentro un objeto especial: " ChartObject"; que a su vez, es contenido en tal hoja. Para seleccionar el objeto ChartObject: pierda la seleccin de la grfica (active una celda), mantenga <Shift> y clic a la grfica. Las manijas blancas indican la seleccin del objeto ChartObject. Las manijas negras indican la seleccin de la grfica en s (dentro de ChartObject).

Cap. 4 En cdigo: nombre (indizando) al objeto contenedor [3.5] de la Grfica Activa. Use propiedad: _________. Tal objeto es una Forma (Shape) y se maneja igual [4.2.1]. Use las propiedades de ChartObject: Left, Top, Width y Height, para ubicarlo en la hoja: Cmo simplificar P.e. ActiveSheet.Shapes("Grfica1").Left = RangoAGraficar.Left
ActiveSheet.Shapes("Grfica1").Width = RangoAGraficar.Width este proceso?

29

Grabe otra macro y cambie los valores del Asistente para grficas (Analice su cdigo).
4.3.2 OBJETO TABLA DINMICA (PivotTable)

Es una hoja de clculo interactiva que analiza y resume gran cantidad de datos. GRABE LA GENERACIN DE UNA TABLA DINMICA: 1. En un libro nuevo: inicie grabacin [1.2.1 y Tip] Cuntas sentencias genera cada accin? 2. Abra Datos para Tabla Dinmica 4.3.2.xls en Asistente. Analice los datos y pregntese: Cul es la Venta de cada Producto por Estado? Tambin, hgase otras preguntas. 3. Active A2, men Datos Asistente para tablas dinmicas, use Siguiente> hasta paso 3. 4. Disee su tabla: arrastre Estado a FILA, Categora a COLUMNA e Importe a DATOS. 5. En paso 4, use Opciones: d nombre a su tabla (indizando) clic a Terminar. 6. Identifique (relacionando con lo hecho manualmente) el mtodo o propiedad en cada sentencia. Seprelas para mejor visualizacin. Divdala y si es necesario [2.4.3-2]. 7. En A1, clic der. Seleccionar Datos y d formato con el botn Moneda. 8. Seleccione la celda A1, y detenga su grabacin. 9. Identifique los argumentos constantes y generalice su macro: __________________ 10. Compare su macro generalizada con este cdigo:
Workbooks.Open ThisWorkbook.Path & "\Asistente\Datos para Tabla Dinmica 3.4.2.xls" Dim NomTablaDinm As String, RangoParaTD As Range [8.2 y 8.4] NomTablaDinm = InputBox("Nombre de tabla dinmica:", , "TablaDinmica?") Set RangoParaTD = Range("A2").CurrentRegion ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:= _ RangoParaTD, TableDestination:="", TableName:=NomTablaDinm With ActiveSheet.PivotTables(NomTablaDinm) .AddFields RowFields:="ESTADO", ColumnFields:="CATEGORIA" .PivotFields("IMPORTE").Orientation = xlDataField .PivotSelect "", xlDataOnly Selection.Style = "Currency" End With Range("A1").Select

Lo bueno: hizo mucho y escribi poco, slo para generalizar. No tuvo que aprenderse propiedades ni mtodos (ni argumentos); slo tiene que identificarlos para reacomodarlos. Grabe otra macro y en paso 3, y arrastre Canal a PGINA, y/o use el campo Fecha, y/o cambie su clculo a "Promedio" Qu otras acciones puede hacer? Generalice su macro: Reemplace el caso Constante (grabado) por Variable [8.2.3 y 8.4]. stas generalizaciones son para cualquier cantidad de datos (prop. CurrentRegion), pero slo para el archivo que se abre por la estructura de columnas de la lista de datos.

Cap. 5

30

5 EDITOR DE VISUAL BASIC PARA APLICACIONES


Es un programa aparte de Excel pero incluido en l. Es la versin adaptada a Excel del lenguaje de programacin Visual Basic. Pero Ud. tiene la ventaja de grabar sus acciones manuales (con las que est familiarizado) en Excel, y simplemente, las identifica y modifica aqu, en el Editor de Visual Basic (versin para aplicaciones).

5.1 ELEMENTOS DEL EDITOR DE VBA


Sus principales secciones son: 1. Explorador de Proyectos.- Muestra una lista jerrquica de proyectos (libros) y sus elementos organizados en carpetas: como los Objetos de Excel [12.2] y los Mdulos. bralo: botn o <Ctrl + R> Ayuda: Active el panel y <F1>. 2. Ventanas de Mdulo.- Donde se almacenan las macros (procedimientos [6] o funciones [7]). bralo: 2clic a su nombre (en Explorador de proyectos). En su parte superior, contienen 2 listas: (General) Objetos y (Declaraciones) Procedimientos. 3. Ventana Propiedades.- Muestra, las caractersticas del objeto o elemento seleccionado, stas se pueden cambiar aqu. brala: botn o <F4>. 4. Ventana Inspecciones.- Aparece cuando desee revisar una expresin: p.e. un objeto y analizar slo sus propiedades <Ctrl + Alt +G> [3.7.1]. 5. Examinador de objetos.- Muestra los objetos de Excel y sus propiedades, mtodos, eventos y constantes, disponibles con las bibliotecas de objetos. Sirve para buscar y utilizar tales objetos incluidos los creados por Ud. Use botn o <F2>. Cmbielas de tamao: arrastre bordes. Pueden ser Anclables/ Flotantes (excepto la de mdulos), Cmo? En su encabezado d Clic der. Flotante. Al ejecutar paso a paso: oculte todas y maximice la del Mdulo en cuestin [2.4.3-7].

5.2 MANEJO Y ORGANIZACIN (Proyectos, Mdulos y Macros)


5.2.1 PROYECTOS

Un Proyecto VBA es, en s, el Libro de Excel que lo contiene. El Explorador de proyectos [5.1.1] muestra lista jerrquica con sus objetos referenciados y organizados en carpetas, como: OBJETOS DE EXCEL (El libro y sus hojas), FORMULARIOS [14] y MDULOS [5.2.2].
5.2.2 MDULOS

Los mdulos son hojas especiales que se manejan muy similar a un procesador de palabras, donde se almacena y manipula el cdigo de las macros [5.2.3] (procedimientos [6] o funciones [7]), un mdulo puede contener una o varias macros.

Cap. 5 1. Para ver cdigo de un mdulo, dele 2clic en el Explorador de proyectos [5.1.1]. 2. Cmo se almacenan las macros grabadas? Consulte: [2.2]. 3. Insertar mdulo manualmente: men Insertar Mdulo. 4. Cambiar el nombre de un mdulo: consulte: [2.2.1]. 5. Copiar mdulo entre proyectos: arrstrelo de un proyecto a otro. 6. Eliminar mdulo: en l, clic der. Quitar mdulo, Exportar? d No. 7. Exportar mdulo (archivos .bas): en l, clic der. Exportar archivo 8. Importar mdulo (archivos .bas): en carpeta Mdulos clic der. Importar archivo
5.2.3 MACROS

31

Codificadas en lenguaje Visual Basic, formadas por sentencias: instrucciones equivalentes a las acciones manuales en Excel, grabadas o escritas directamente [2.4.1 y 2.4.2]. 1. Cmo mostrar una macro desde Excel? Consulte: [2.1]. 2. Eliminar (desde Excel): (o <Alt + H + M + M> ), seleccinela y Eliminar. 3. Cmo manejar y modificar el cdigo? Consulte: [2.4.3]. 4. Compilar cdigo: para revisar errores de compilacin antes de probar su macro: men Depuracin - Compilar VBAProyect o <Alt + D + Enter>. para ejecutar todo: <F5>. para ejecutar paso a paso: <F8>. 6. Para interrumpir la ejecucin: <Esc>. mostrar mensaje para Finalizar o Depurar. 7. Para Finalizar, en ejecucin paso a paso: botn o < Alt + T + R >. [10.2.1] 5. Para probar macro desde VBA: coloque el cursor dentro del cdigo de su macro:

5.3 PERSONALIZACIN DEL EDITOR DE VBA


Puede personalizar el ambiente de trabajo del Editor de Visual Basic para que se acomode a sus necesidades. 1. En men Herramientas Opciones 2. Ficha Editor.- Funciones especiales para trabajar en el Editor de VBA. 3. Ficha Formato del editor.- Para el formato del texto segn el tipo de cdigo. 4. Ficha General.- Funciones generales en VBA. 5. Ficha Acoplar.- Para anclar las distintas ventanas en VBA. En la Ayuda de VBA, busque Establecer opciones de Visual Basic. Para forzar la declaracin de Variables del usuario.- men Herramientas Opciones ficha Editor y marque la opcin: Declaracin de variables requerida [8.2.2].

Cap. 6

32

6 PROCEDIMIENTOS DE VBA
Las automatizaciones analizadas hasta ahora, son realizadas con macros. Una macro es un procedimiento Sub (palabra clave con la que inicia su macro). Tambin existen procedimientos Function [7]. En otras palabras, las macros (grabadas o escritas) y las funciones personalizadas, son las dos clasificaciones del trmino estndar en VBA: Procedimientos.

6.1 DEFINICIN DE PROCEDIMIENTOS


Procedimiento: es una secuencia de instrucciones codificadas en VBA, ejecutadas como una unidad y que realizan una tarea especfica. Est almacenado en un mdulo VBA.
6.1.1 TIPOS DE PROCEDIMIENTOS

Son 2: procedimientos Sub (macros) y procedimientos Function (funciones personalizadas). 1. Procedimiento Sub: realiza una accin, pero no devuelve un valor, esta contenido entre las sentencias Sub y End Sub. 2. Procedimiento Function: similar a Sub, y devuelve un valor; esto es, recibe datos de entrada (argumentos [6.3]), los procesa y devuelve su resultado. Esta contenido entre las sentencias Function y End Function. Si una funcin no hace acciones, puede utilizarla en una celda, tal como las funciones incorporadas de Excel.
6.1.2 PARTES DE UN PROCEDIMIENTO

Procedimiento Sub:
Sub Nombre(Argumentos) Cdigo VBA (acciones) End Sub

Procedimiento Function:
Function Nombre(Argumentos) Cdigo VBA (clculos) Nombre = Resultado End Function

Los argumentos pueden o no existir y van separados por comas.

6.2 AUTOMATIZACIONES COMPLEJAS


6.2.1 ESTRUCTURAR UNA AUTOMATIZACIN COMPLEJA EN TAREAS SENCILLAS

Cuando tenemos una automatizacin compleja, lo mejor es separarla en tareas ms sencillas, para despus conjuntarlas desde una macro principal. El objetivo consiste en crear procedimientos macros o funciones cortos, reutilizables, fciles de mantener y que trabajen en conjunto. El beneficio es que as, son ms sencillos de disear, poner en prctica, depurar y actualizar.
6.2.2 CMO LLAMAR UN PROCEDIMIENTO DESDE OTRO

Simplemente, en el cdigo del principal, ponga el nombre del procedimiento llamado. Si el procedimiento necesita argumentos (datos de entrada): consulte [6.3.1].

Cap. 6 Al ejecutar el principal, y llegar al nombre del procedimiento (sub-rutina), ste se ejecuta; cuando termina, regresa al principal y continua con las dems instrucciones. Un procedimiento llamado puede, a su vez, llamar a otro, y ste a otro; de tal forma que se forma una pila de llamadas: al ejecutar paso a paso, un procedimiento llamado, puede revisar cules lo han llamado: men Ver Pila de llamadas (<Ctrl + L>).

33

6.3 ARGUMENTOS, DATOS DE ENTRADA


Cmo se vio en [6.1], los argumentos son parte de un procedimiento (van entre parntesis) y representan los valores de entrada o referencias a objetos de Excel [4.1]. Su funcionamiento es similar a las variables (y se puede declarar su tipo) [8.2]. As como los nombres (de celdas) facilitan la lectura y comprensin de las frmulas en Excel, los argumentos (y variables) hacen lo mismo en el cdigo de los procedimientos.
6.3.1 COMO USAR ARGUMENTOS (al llamar procedimientos)

Al llamar a un procedimiento (Sub o Function), stos pueden o no requerir de ms informacin para trabajar, sta se da por medio de los argumentos y su sintaxis es: para procedimientos Sub: NombreSub Arg1, Arg2, Arg3 para procedimientos Function: Variable = NombreFunction(Arg1, Arg2, Arg3) Use parntesis si el procedimiento devuelve un resultado; si no, no los ponga. [8.1.2] Los argumentos pueden o no existir y van separados por comas. Puede usar variables: conteniendo un valor o una referencia a un objeto, que se transmitir para su uso al procedimiento llamado [Ej. 14.2.2-11].
6.3.2 ARGUMENTOS OPCIONALES Y VALOR POR OMISIN

Uno o varios argumentos pueden ser opcionales, esto es, al llamar su procedimiento se les puede o no dar valor (o referencia objeto), la sintaxis de su procedimiento es:
Sub (o Function) Nombre(Arg1, Arg2, Optional Arg3, Optional Arg4)

Un argumento opcional, si no es usado, puede contener un valor por omisin (default):


Function (o Sub) Nombre(Optional Arg1 = 10, Optional Arg2 = 5.5)

Los argumentos opcionales, van siempre al final.


6.3.3 NMERO INDETERMINADO DE ARGUMENTOS

Para cualquier cantidad de argumentos. P.e. Funcin Suma:


Function Suma(ParamArray DatosPorSumar)

6.3.4 ARGUMENTOS CON NOMBRE

la grabadora, codifica los argumentos con su nombre NombreArg:=Valor No son necesarios, pero si ayudan a leer y comprender ms fcilmente el cdigo.

Cap. 7

34

7 FUNCIONES PERSONALIZADAS
Una funcin personalizada es como cualquier funcin para hoja de clculo incorporada en Excel, como SUMA o PROMEDIO. Si en una celda Ud. tiene una frmula larga con varios clculos y funciones anidados, reemplcela por una funcin personalizada realizando todo el clculo en cdigo. Esto hace al proceso ms eficiente. As como Excel tiene sus funciones incorporadas, VBA tiene las suyas. Y en las de Ud. personalizada, puede realizar operacin matemticas, usando valores, textos y/o fechas (OJO con el manejo de fechas en ingles, formato: mes/da/ao). Tambin puede usar las funciones de Excel {En Editor VBA, Ayuda: funciones de Excel } y las de VBA. Para explorar las funciones de VBA: use el Examinador de Objetos <F2> [5.1.5]. En la 1ra lista seleccione la biblioteca VBA. En el rea Clases clic a <Globales>.- muestra todos los miembros (rea derecha), o clic a algn mdulo (en Clases) para mostrar slo sus miembros. Identifique las funciones, Su icono? __________

7.1 DEFINICIN DE FUNCIONES PERSONALIZADAS


Una funcin (Function) es un tipo de procedimiento, similar a una macro (Sub). La diferencia es que Function devuelve un valor. As: Ud. le da datos de entrada (argumentos), los procesa (realiza clculos con ellos) y obtiene un resultado (devuelve un valor nuevo).
7.1.1 PARTES DE UNA FUNCIN [6.1.2]
Function Utilidad(PrecioVenta, CostoProduccin, CantidadVenta) Utilidad = (PrecioVenta CostoProduccin) * CantidadVenta End Function

1. 2. 3. 4. 5.

Function y End Function Nombre Argumentos Clculos Resultado

palabras claves de inicio y fin de la funcin. en este caso se identifica como Utilidad. datos de entrada: en este caso 3. operaciones con los argumentos. A la der. del signo =. ste se asigna (con signo =) al nombre de la funcin.

7.2 CREACIN DE UNA FUNCIN PERSONALIZADA


Disee una funcin personalizada que calcule la comisin de acciones vendidas. 1. Si est en Excel, abra el Editor de VBA [2.1.1]. 2. Muestre el Explorador de Proyectos [5.1.1]. 3. Abra un mdulo [5.2.2-1] o Insrtelo [5.2.2-3], si gusta, nmbrelo [2.2.1]. 4. Teclee Function, el nombre y, entre parntesis, sus argumentos, d <Enter>.

Cap. 7 5. D <Tab> para dar sangra: mejora la lectura del cdigo. La funcin ser:
Function Comisin(PrecioXAccin, AccionesVendidas) VentaTotal = AccionesVendidas * PrecioXAccin If VentaTotal > 150000 Then Comisin = 2500 + 3 * (0.9 * AccionesVendidas) Else Comisin = 2500 + 3 * AccionesVendidas End If End Function

35

6. Haga ms eficiente su cdigo: declare el Tipo de Datos que almacenarn los Argumentos y el que devolver la Funcin [8.3]. La 1ra sentencia quedar:
Function Comisin(PrecioXAccin As Currency, _ AccionesVendidas As Integer) As Currency

7.3 USO DE FUNCIONES PERSONALIZADAS


miento en VBA macro u otra funcin.
7.3.1 DESDE UNA CELDA EN EXCEL

La funcin devolver slo tipo moneda.

Una funcin personalizada se puede usar desde una celda en Excel, o desde un procedi-

1. En una hoja de clculo, cree una tabla con 3 columnas con estos encabezados (desde A1): Precio por Accin, Acciones Vendidas y Comisin. 2. 3. 4. 5. 6. Coloque valores en las 2 primeras columnas. Seleccione C2 y active el asistente de funciones botn Pegar funcin Fx: Seleccione la Categora: Definidas por el usuario y 2clic a su funcin Comisin. En el 1 argumento, introduzca: A2, en el 2: B2, y Aceptar. Autollene su clculo a las dems celdas: en el Control de Llenado d 2clic.

Revisar Paso a paso: coloque un punto de interrupcin dentro de la funcin [10.2.4] y en la celda con la funcin: d <F2> y <Enter>.
7.3.2 DESDE EL CDIGO DE UN PROCEDIMIENTO

Al usar una funcin (incorporada o personalizada) su valor se debe almacenar o utilizar directamente. Y puede ser desde una macro u otra funcin. P.e.: Almacenar en una variable:
miComisin = Comisin(100, 1500)

Usar directamente, como hacer un clculo y mostrar su resultado en un mensaje:


MsgBox Comisin(PrecioUnitario, CantidadAcciones) * 1.5

7.3.3 CMO USAR FUNCIONES DE EXCEL EN VBA?

Use una funcin de Excel en cdigo, con la propiedad WorksheetFunction del objeto Aplicacin. Debe conocer previamente sus argumentos, p.e.: Conoce stas?
Cajas = WorksheetFunction.CountIf([A1].CurrentRegion.Columns(4), "Caja") rea = WorksheetFunction.VLookup("lote", [C3].CurrentRegion, 3, False)

Cap. 8

36

8 TRABAJO CON EL CDIGO EN VBA


En este captulo aprender trminos y conceptos de VBA, para hacer que el cdigo funcione y su uso para dirigir el flujo de las instrucciones de un procedimiento.

8.1 COMPRENSIN DE CDIGO VBA


Los procedimientos (macros y funciones), estn formados por cdigo VBA. Cdigo VBA: son las instrucciones que comunican al procedimiento lo que debe hacer. La unidad fundamental del cdigo es la Sentencia. Sentencia: es una unidad de cdigo sintcticamente completa, que expresa una accin, una declaracin o una definicin. Pueden estar organizadas en bloques de sentencias para realizar un objetivo comn, p.e. los bloques unitarios en ciclos [9.2].
8.1.1 TIPOS DE SENTENCIAS

La sintaxis de los tipo ms comunes de sentencias (o instrucciones) son: 1. Asignacin de valores a propiedades de objetos: objeto.Propiedad = expresin (que da un valor) ActiveCell.Font.Bold = True
2.

[3.2]

Ejecucin de mtodos de objetos: objeto.Mtodo [lista de argumentos] (opcionales)


[D4].CurrentRegion.Copy

[3.3]

destination:=Worksheets("Hoja2").Range("E5")

3.

Asignacin, de valores a variables: variable = expresin (que da un valor)


EdadUsuario = InputBox("Cul es su edad?")

[8.2]

4.

Ejecucin de sentencias incorporadas (la sintaxis vara): Sentencia [lista de argumentos] (opcionales)
ChDir "C:\Mis documentos\Taller de Automatizacin"

5.

Control de ejecucin del cdigo (en condiciones dadas): Estructuras de control


Do NmeroX = InputBox("Teclee un nmero:") Loop Until IsNumeric(NmeroX)

[9]

8.1.2 CUNDO USAR PARNTESIS

1. Al llamar a un procedimiento Sub, una sentencia incorporada y la mayora de los mtodos, no devuelven un valor, por lo que sus argumentos (si existen) no van entre parntesis. 2. Al llamar procedimientos Function, funciones incorporadas [7.3] y algunos mtodos s devuelven un valor resultado, as que sus argumentos (si existen) s van entre parntesis.

Cap. 8

37

8.2 USO DE VARIABLES Y ARGUMENTOS


Cuando graba una macro, las acciones se codifican slo para el caso en el que las grab, o sea, slo trabajarn para las mismas condiciones del caso particular. Para que su automatizacin funcione para cualquier caso que se presente, Ud. debe generalizar su cdigo. Mucho de la generalizacin se logra por medio de las variables y/o argumentos. Una gua prctica, es identificar los valores fijos, p.e. un nmero, una fecha (delimitada entre #) o un texto (entre comillas), y reemplazarlos por una variable que previamente se le asignar el valor del caso. As tendr la AUTOMATIZACIN GENERALIZADA. [8.2.3]
8.2.1 POR QU DIMENSIONAR VARIABLES (Y ARGUMENTOS)

No es necesario dimensionar (declarar) variables ni argumentos antes de utilizarlos. No dimensionar es una ventaja para facilitar la automatizacin a principiantes. Pero es conveniente declararlas (con su tipo de dato [8.3]) ya que se acelera la ejecucin del cdigo, se optimiza espacio y se evitan errores; en resumen, el cdigo se hace ms eficiente.
8.2.2 DECLARACIN EXPLICITA

Para evitar el problema de dar nombres errneos a las variables, configure a VBA para que muestre un mensaje antes de ejecutar el cdigo si una variable no es declarada (dimensionada) explcitamente [10.1.2]. Simplemente al inicio del mdulo, coloque la instruccin: Option Explicit. Para que aparezca en los nuevos mdulos, siga: [5.3.Tip].
8.2.3 CMO GENERALIZAR UNA AUTOMATIZACIN

Grabe la insercin de una columna en una lista de datos: nmbrela como Fecha y llene sus celda con Ene-00, (Tarea 3 en Prctica02). Su cdigo se parecer a ste:
Sub InsertarColumnaFecha() Columns("A:A").Insert Shift:=xlToRight Range("A1").FormulaR1C1 = "Fecha" Selection.CurrentRegion.SpecialCells(xlCellTypeBlanks).Select Selection.FormulaR1C1 = "Jan-00" Range("A1").Select El Valor Fijo del End Sub caso grabado

Generalice y mejore su macro, declarando variables, su cdigo quedar as:


Sub InsertarColumnaFecha() Dim FechaMesAo As Date FechaMesAo = InputBox("Dar fecha, con formato mmm-aa:") Columns(1).Insert Shift:=xlToRight [A1] = "Fecha" [A1].CurrentRegion.SpecialCells(xlCellTypeBlanks).Select Selection = FechaMesAo [A1].Select reemplcela que previamente se le End Sub por esta variable asign un valor

(de una expresin).

Cap. 8
8.2.4 ES NECESARIO USAR UNA VARIABLE?

38

Si el valor de una expresin lo piensa almacenar en una variable, pregntese Cuntas veces usar tal valor? Si es slo una, tal vez sea mejor colocar dicha expresin en la sentencia donde se usar su valor. En otras palabras, Utilice una variable si el valor almacenado en ella se usar 2 o ms veces. Revise ejercicios: [8.2.3], [4.3.1], [4.1.6-2] y [12.1.1-2]. Pero, las variables mejoran la comprensin y revisin del cdigo, al resumir expresines largas. P.e.: Valor de argumento; o referencia bandera, para regresar a ella [8.4.1].

8.3 TIPOS DE DATOS PARA VARIABLES Y ARGUMENTOS


El tipo de dato se refiere al tipo del valor que puede almacenar una variable. Esto es, cuando declaramos una variable, p.e. como tipo string (cadena de texto), sta slo podr almacenar texto, y el espacio utilizado por la variable se optimizar, contrariamente al no declararla (VBA la auto-dimensiona como tipo Variante) [8.2.1]. Adems, en una misma lnea puede declarar varias variables separadas por comas.
8.3.1 TIPOS PRINCIPALES: Numrico, Cadena (Texto), Fecha y Booleana (Verdadero/Falso)

Para revisar los tipo de datos que puede almacenar una variable, ejecute este cdigo paso a paso El mdulo no debe tener Option Explicit. Inspeccione la variable [3.7.1-1 pasos 1 al 3], observando cmo cambia su tipo (3ra columna [paso 3]):
Sub ExplorarTipoDatosDeVariables() miValor = 1000 miValor = 157.65 miValor = "Casa" miValor = #1/1/00# miValor = True End Sub

Para ver todos los Tipos (Capacidad e Intervalo), busque en la Ayuda: Utilizar los tipos de datos eficientemente en vnculo Vea tambin, seleccione Resumen de tipos de datos. Para verificar el tipo de datos que contiene una variable, puede usar funciones de revisin, p.e.: use esta sentencia al final de su macro (Ayuda: en palabra, <F1>): MsgBox IsNumeric(miValor) O la funcin que da el tipo de dato (Ayuda: ponga el cursor en la palabra y <F1>): MsgBox TypeName(miValor)
8.3.2 CONVERSIN DE UN TIPO DE DATOS EN OTRO

:Use las funciones de conversin de tipo de datos, p.e. para convertir un nmero con decimales a Entero:
Function NmeroEntero(NmeroDado As Single) As Integer NmeroEntero = CInt(NmeroDado) End Sub

Para ver todas las funciones, busque en la Ayuda: funciones de conversin de tipos.

Cap. 8

39

8.4 ALMACENAR OBJETOS EN VARIABLES


Adems de almacenar valores, una variable puede hacer referencia a un objeto de Excel. La sintaxis es: Set miObjeto = ReferenciaAlObjeto [3.7.3-b]

8.4.1 ASIGNAR OBJETOS RANGO DE CELDAS A V ARIABLES

Para revisar cmo hace referencia una variable a un objeto, en A1 de la hoja de clculo activa, d una fecha, ejecute este cdigo paso a paso El mdulo no debe tener Option Explicit. Inspeccione la variable [3.7.1-1], Vea su tipo (3a columna [paso 3]):
Sub ExplorarVariableConObjeto() miObjeto = Range("A1") Set miObjeto = Range("A1") End Sub

Elimine la 1ra sentencia y declare su variable como tipo objeto rango:


Sub ExplorarVariableConObjeto() Dim miObjeto As Range Set miObjeto = Range("A1") miObjeto.Select miObjeto.Offset(0, 1).Value = #12/31/99# miObjeto.Copy End Sub

Con la variable de objeto, puede usar todas las propiedades y mtodos del objeto referido. Para ver todos los Tipos (Capacidad e Intervalo), busque en la Ayuda: Utilizar los tipos de datos eficientemente en vnculo Vea tambin, seleccione Resumen de tipos de datos.
8.4.2 ASIGNAR OTROS OBJETOS A UNA VARIABLE

Puede hacer referencia a otros objetos de Excel. Esta sentencia hace referencia a 2 formas (objetos de dibujo) por su nombre:
Dim Formas As Shapes Set Formas = Activesheet.Shapes.Range(Array("Rectangle 1", "Line 2"))

Para hacer referencia a todos los objetos (formas) de una hoja de clculo: Dim misFormas As Shapes Set misFormas = ActiveSheet.Shapes misFormas.SelectAll Cmo hara referencia a los objetos para Informes? Para una grfica Para una Tabla dinmica Dim miGrfica as Chart Dim miTablaDinmica as PivotTable

Trate de usarlas en los ejercicios de la seccin [4.3].

Cap. 8

40

8.5 CLCULOS EN CDIGO VBA


Una expresin es una combinacin de nmeros, variables [8.2], funciones [7] y/u operadores que producen un valor. Las funciones incluyen todas las incorporadas de VBA [7.3.2] y las de Excel [7.3.3], adems de las funciones personalizadas [7.1].
8.5.1 OPERADORES

Clasificados en 4 tipos: Busque en Ayuda: Resumen de operadores. 1. ARITMTICOS .. + , - , / , * , ^ , \ y Mod.

[4.1.5-2]

With ActiveCell 'Calcula IVA: .Offset(0, 3) = (.Offset(0, 1) + .Offset(0, 2) - .Value) * [IVAptje] End With

2. CONCATENACIN ... & (u operador de texto).


ActiveCell = WorksheetFunction.Round(Range("Resultado" & i), 2) [7.3.3]

3. LGICOS. And, Or, Not, Eqv, Imp, y Xor.


ActiveWindow.DisplayFormulas = Not ActiveWindow.DisplayFormulas

4. COMPARACIN = , > , < , >= , <= , <> , Is y Like.


MiResultado = ActiveCell >= ActiveCell.Offset(0, -1)

8.5.2 EJEMPLOS DE CASOS

1.- Clculo de Utilidad, comparando el Costo: en una hoja de clculo, desde A1,(ponga estas 3 columnas, Venta, Costo y Utilidad, ponga valores a las 2 primeras, seleccione B2, cree la macro ClculoUtilidad, con este cdigo y ejectelo:
Do Until ActiveCell = "" [9.2 y 9.3] Revise los Ejercicios del Captulo [9] If ActiveCell >= 1000 And ActiveCell <= 1500 Then ActiveCell.Offset(0, 1) = ActiveCell.Offset(0, -1) - ActiveCell End If ActiveCell.Offset(1, 0).Select Loop

2.- Abra Clculos en Cdigo 8.5.2-2.xls en Asistente, cree una macro con este cdigo:
If ActiveCell.Offset(, -2) Like "mx*" Then ActiveCell = ActiveCell * 1.1

Asgnele una combinacin de teclas. En la hoja seleccione un Precio y ejecute.

8.6 USO DE CONSTANTES


Una Constante es la representacin de un valor: mejora la legibilidad del cdigo.
8.6.1 CONSTANTES INCORPORADAS

Existen 2 tipos: de Excel (con prefijo xl) y las de VBA (con prefijo vb) [3.7.3-c]:
Application.Calculation = xlCalculationAutomatic If MsgBox("Continuar?", vbYesNo) = vbNo Then Exit Sub [9.1 y 9.4]

8.6.2 CONSTANTES PERSONALIZADAS

Se declaran y asigna su valor, al inicio del mdulo, como regla van en maysculas:
Const PI = 3.1416, MXPLANETAS = 9

Cap. 9

41

9 CONTROL DE LA EJECUC IN DEL CDIGO


Las sentencias que controlan la toma de decisiones evaluando una condicin, y basndose en sta, ejecutan ciertas instrucciones y las que controlan ciclos ejecucin repetida del bloque unitario de instrucciones, son llamadas Estructuras de Control. Sin ellas, la secuencia de ejecucin de las instrucciones de un procedimiento son un simple flujo unidireccional. Aunque se pueden crear macros muy tiles con este sencillo proceso, gran parte de la versatilidad y utilidad de VBA - Excel proviene de la capacidad de las Estructuras de Control para cambiar el orden de ejecucin de las sentencias. En este captulo ver cmo la grabacin de sus tareas repetitivas en macros de VBA, las puede convertir en herramientas que le harn la vida mucho ms agradable.

9.1 ESTRUCTURAS DE CONTROL CONDICIONALES


Las macros grabadas son bastante simples, pueden repetir lo que Ud. hizo mientras las grababa, pero no son capaces de adaptarse a situaciones cambiantes. No saben tomar decisiones! Debe adecuarlas Ud. mismo, escribiendo alguna de las estructuras siguientes (Introduzca el cdigo en una macro y prubelo):
9.1.1 IfThen

Evalan una condicin con una expresin booleana (Verdadero o Falso) y ejecutan o no una(s) instruccin(es). 1.- Sentencia de Validacin.- Si la celda nombrada esta en blanco Salir de la macro:
If Range("ImporteFactObjetivo") = "" Then Exit Sub

2.- Sentencia de Validacin.- para desplazamiento correcto:


If ActiveCell.Row < 65536 Then ActiveCell.Offset(1, 0).Select MsgBox "El desplazamiento es vlido." End If

9.1.2 IfThenElse

Evalan una condicin y ejecutan una(s) instruccin(es) u otras.


If Edad >= 18 Then MsgBox "Ya debe tramitar su Credencial de Elector." Else MsgBox "Todava te falta: " & 18 Edad & " ao(s)." End If

9.1.3 IfThenElseIfThen

Evalan varias condiciones y ejecutan las(s) instruccin(es) de la primera condicin que su resultado sea verdadero.
If Centena = 100 Then Centenas = "Ciento " Else If Centena = 200 Then

Cap. 9
Centenas = "Doscientos " Else Centenas = "" End If

42

9.1.4 Select Case

Compara una misma expresin con varios valores distintos:


Select Case TipoTrabajo Case 1 Bono = Salario * 0.1 * Jerarqua / 10 Case 2, 3 Bono = Salario * 0.09 * Jerarqua / 10 Case 4 To 8 Bono = 150 Case Is > 8 Bono = 100 Case Else Bono = 0 End Select

9.1.5 Funciones VBA para Decisiones

consltelas en la Ayuda.

1. IIf 2. Switch 3. Choose

Es idntica a la funcin SI de Excel: Los argumentos van en pares (expresin - valor), similar a [9.1.3]: Selecciona una opcin dando el nmero de su posicin, similar [9.1.4]:

Aprobar = IIf(Presupuesto <= 1000000, "Aprobado", "Rechazado") Gentilicio = Switch(Cd="Culiacn", "Culichi", Cd="Mochis", "Mochiteco") Function NmRomano(Nm As Integer) As string NmRomano = Choose(Nm, "I", "II", "III", "IV", "V", "VI", "VII") End Function

9.2 ESTRUCTURAS DE CONTROL DE CICLOS


El economista Adam Smith en La Riqueza de las Naciones, se pregunta cunto costar fabricar un clavo comparado con fabricar 10,000; respuesta: casi lo mismo. Esta analoga nos sirve para comprender que crear una macro para que se ejecute slo una vez es un trabajo casi igual al requerido para que se ejecute miles de veces.
9.2.1 For Next

selo si conoce el nmero de ciclos que el bloque unitario de instrucciones se ejecutar. Para ciclos largos, revise el ejercicio de [10.3]. 1.- Emitir un bip, un dado nmero de veces. Mejrela pidiendo al usuario la cantidad:
For contador = 1 To 5 Beep Next contador

2.- Liste nmero de facturas faltantes, abra FacturasFaltantes 9.2.1-2.xls en Asistente. Active la hoja Facturas, cree una macro con ste cdigo y ejectelo:
Dim ColNoFacts As Range, EsConcecutivo As Boolean Dim i As Integer, NmEnRevisin As Integer Set ColNoFacts = Range([A2], [A2].End(xlDown)) Worksheets("Faltantes").Select Range("A1").Select EsConcecutivo = True

Cap. 9
For i = 1 To ColNoFacts.Cells.Count If EsConcecutivo Then NmEnRevisin = ColNoFacts.Cells(i) If NmEnRevisin - ColNoFacts.Cells(i + 1) = 1 Then EsConcecutivo = True Else NmEnRevisin = NmEnRevisin - 1 ActiveCell = NmEnRevisin ActiveCell.Offset(1, 0).Select If i < ColNoFacts.Cells.Count Then i = i - 1 EsConcecutivo = False End If Next i

43

3.- Invertir texto, use esta funcin en una celda. Ayuda: devolver cadenas desde funciones:
Function Invertir(TextoDado As String) As String Dim i As Integer, Aux As String For i = Len(TextoDado) To 1 Step 1 ' Step = Incremento Aux = Aux & Mid(TextoDado, i, 1) Next i Invertir = Aux End Function

9.2.2 For Each Next

Similar a For Next. Para trabajar con todos los elementos de una Coleccin [3.6]. 1.- Identifica al Libro activo (archivo) y protege todas sus hojas:
Dim Hoja As Worksheet For Each Hoja In Worksheets Hoja.PageSetup.LeftFooter = ActiveWorkbook.FullName Hoja.Protect "" Next Hoja

2.- Si las celdas de la columna 3 son nmeros, les suma 10, si no pone el texto azul:
Dim Celda As Range For Each Celda In ActiveCell.CurrentRegion.Columns(3).Cells If IsNumeric(Celda) then Celda = Celda + 10 Else Celda.Font.Color = vbBlue End If Next Celda

9.2.3 Do Loop

selo si no conoce el nmero de ciclos que se ejecutar el bloque unitario de instrucciones. Significa: Hacer estas instrucciones bloque unitario hasta que la condicin de salida sea verdadera. El bloque unitario lo puede grabar (con ref. relativa). Sintaxis: Posicin Inicial (con Ref. Absoluta) Opcional. Puede ubicarse manualmente. Do Until Expresin booleana p.e. Fin de datos: ActiveCell = Instrucciones del bloque unitario (con Ref. Relativa) Posicin Siguiente (con Ref. Relativa) Loop 1.- D formato condicional. Abra Formato Condicional 9.2.3-1.xls.xls, en carpeta Asistente, teclee este cdigo en una macro y pruebe Tiene duda? Pregunte a su asesor.

Cap. 9
[C4].Select Do Until ActiveCell = "" If ActiveCell > 20000 Then ActiveCell.Interior.ColorIndex ActiveCell.Font.ColorIndex = 2 ActiveCell.Font.Bold = True End If ActiveCell.Offset(1, 0).Select Loop '<== Posicin Inicial (Ref. Absoluta). '<== Hacer Hasta Fin de datos. '<== Bloque unitario de instrucciones. = 3

44

'<== Siguiente Posicin (Ref. Relativa).

2.-Elimine las cuentas cuyo Acumulado sea cero. Abra Slo Acumulado 9.2.3-2.xls, ponga este cdigo en una macro y ejectela (Qu puede mejorar?):
[E2].Select Do Until ActiveCell = "" If ActiveCell = 0 Then ActiveCell.EntireRow.Delete Loop

3.- Sume grupos de varias cuentas. Abra SumaGruposDeCuentas 9.2.3-1.xls, coloque el siguiente cdigo en una macro y ejectela (Qu puede mejorar? Son 2 detalles):
Dim FilaIni As Integer [D2].Select '<== Posicin Inicial (Ref. Absoluta).

Do Until ActiveCell = "" '<== Hacer Hasta Fin de datos. FilaIni = ActiveCell.Row '<== Bloque unitario de instrucciones. ActiveCell.End(xlDown).Offset(1, 1).Select ActiveCell.FormulaR1C1 = "=SUM(R" & FilaIni & "C[-1]:R[-1]C[-1])" ActiveCell.Offset(1, -1).Select Loop '<== Siguiente Posicin (Ref. Relativa).

9.3 ESTRUCTURAS DE CONTROL ANIDADAS


Si una estructura de control est dentro de otra, se dice que est anidada. P.e. la estructura If Then esta anidada dentro de For Next, en la gran mayora de los casos estn anidadas, dependiendo de sus necesidades.
Function CuentaValores(RangoBsqueda As Range, ValorBuscado) As Integer For Each Celda In RangoBsqueda If Celda.Value = ValorBuscado Then Contador = Contador + 1 Next Celda CuentaValores = Contador End Function

9.4 SALIR DE ESTRUCTURAS DE CONTROL


En una estructura de control, se presenta una condicin inicial que va cambiando y se va evaluando con cada ciclo, hasta que la condicin sea la justa para salir de la estructura de control. Sin embargo, es posible que antes se llegue a otra condicin y ya no haya necesidad de hacer ms ciclos, aqu es preciso salir de tal estructura de control. 1. En Do Loop 2. En For Next If Celda = ValorBuscado Then Exit Do If CaracterBuscado = "$" Then Exit For

3. En Procedimientos If MsgBox("Continuar?", vbYesNo) = vbNo Then Exit Sub

Cap. 10

45

10 DEPURACIN DE CDIGO
Una de las innovaciones ms interesantes de VBA Excel, es su capacidad de analizar el funcionamiento del cdigo, mientras se ejecuta. Estas herramientas para el anlisis y depuracin del cdigo tienen varios usos, principalmente para detectar el origen de los errores o resultados inesperados. Adems, tambin para experimentar a prueba y error cambiando el cdigo o para aprender (o recordar) como funciona un cdigo escrito por otra persona o usted mismo tiempo atrs. Estas herramientas no corrigen errores. Ayudan a analizar la secuencia de ejecucin y cmo cambian los valores de las variables, expresiones y propiedades de objetos. Auxilian a determinar lo que ocurre y por qu. Existen 2 buenas formas de revisar cdigo VBA, la primera consiste en revisarlo al mismo momento de grabarlo [1.2.1-Tip], la segunda es, una vez terminada la macro, ejecutarla y revisar lo que hace paso a paso [10.2].

10.1 ERRORES DEPURABLES


Debe partir de la premisa: Mientras mejor entienda el funcionamiento del cdigo, ms rpido detectar y corregir los errores; en otras palabras, planee su trabajo [1.4.1]. ERRORES DE CDIGO 1. De Sintaxis.[11.1] En ndice de Ayuda: Errores. es detectado por VBA al terminar de escribir una sentencia. detecta posibles errores de este tipo. Manualmente [10.2.1]. 3. Lgicos.4. De Ejecucin.son el producto de la lgica que utiliz y VBA no los detectar, la ejecucin no se detiene y produce resultados inesperados. hay sentencias que slo en ciertas circunstancias fallan, stas se pueden anticipar con un controlador de errores [11.2]. Los 2 primeros son fciles de detectar, los 2 restantes se deben detectar mediante tcnicas de depuracin de cdigo; a continuacin se explican.

2. De Compilacin.- antes de ejecutar un procedimiento, VBA compila el cdigo, y

10.2 TCNICAS DE DEPURACIN


Al entrar en ejecucin paso a paso, la operacin de cdigo se interrumpe y muestra un perfil de su estado en ese instante y Ud. puede controlar manualmente la ejecucin instruccin por instruccin del cdigo. [5.2.3-Tips]. Ayuda: Seguir la ejecucin de cdigo.
10.2.1 COMPILE EL CDIGO

Cuando Ud. trata de ejecutar un cdigo, VBA lo compila. Lo puede hacer Ud. manualmente.- con men Depuracin - Compilar VBAProyect o <Alt + D + Enter>.

Cap. 10
10.2.2 EJECUTE PASO A PASO

46

Desde Excel [1.2.2]. Desde VBA coloque el cursor dentro de su macro y <F8>. Se mostrar el punto de ejecucin (Franja Amarilla): es la instruccin por ejecutarse. Para avanzar: <F8>. Si desea ejecutar el cdigo restante: <F5>.
10.2.3 CAMBIAR LA SENTENCIA POR EJECUTAR

Mueva la franja amarilla para cambiar la secuencia de ejecucin: arrastre su flecha (de la izq.) a la sentencia por ejecutar o en la sentencia por ejecutar clic der. Establecer instruccin siguiente o en la sentencia por ejecutar coloque el cursor y <Ctrl + F9>.
10.2.4 PUNTO DE INTERRUPCIN

Si requiere revisar una sentencia sin revisar paso a paso el cdigo antes de sta haga clic a su izquierda (en la barra gris) o coloque el cursor en ella y <F9>: aparecer una franja guinda. Ejecute su macro con <F5>.
10.2.5 PUNTO DE INTERRUPCIN TEMPORAL

Idem a [10.2.4] pero slo una vez. En la sentencia por interrumpir clic der. Ejecutar hasta el cursor o coloque el cursor en tal sentencia y <Ctrl + F8>.
10.2.6 QUITAR PUNTOS DE INTERRUPCIN

Para quitar uno slo, haga lo mismo que para ponerlo [10.2.4]. Para todos: men Depuracin Borrar todos los puntos de interrupcin (<Alt +D + B>)
10.2.7 TERMINAR LA EJECUCIN PASO A PASO

Para finalizar la ejecucin paso a paso: botn

o < Alt + T + R >.

10.3 INSPECCIN DEL VALOR DE LAS EXPRESIONES O VARIABLES


10.3.1 INSPECCIN DE VALORES Apunte a la expresin o variable. Si no, con [3.7.1-1]. 10.3.2 PUNTO DE INTERRUPCIN CONDICIONAL

Abra PedHist.dbf y depure este cdigo. Inspeccione el Valor de FilaActual [3.7.1-1] y en Inspecciones a la variable clic der. Modificar inspeccin, cmbiela por: FilaActual = 18, marque Modo de Interrupcin cuando el valor sea verdadero, d Aceptar y <F5>.
TotalFilas = Range("A1").CurrentRegion.Rows.Count For FilaActual = 3 To TotalFilas Application.StatusBar = "Procesando fila " & FilaActual & "de" & TotalFilas Cells(FilaActual, 1).Select If ActiveCell <> ActiveCell.Offset(1) Then ActiveCell.PageBreak = xlPageBreakManual Next FilaActual Application.StatusBar = False Beep

Hay errores?, Si hay, de que tipo? Cmo hara el cdigo ms rpido?


10.3.3 PROGRESO DEL BUCLE Use Application.StatusBar = "Texto barra de estado"

Y al salir del bucle Application.StatusBar = False

Para qu sirve esta sentencia?

10.3.4 SONIDO AL FINAL DEL BUCLE En bucles largos, al final use la instruccin Beep.

Para facilitar una depuracin futura.- Ponga varios comentarios [2.4.1-2].

Cap. 11

47

11 CONTROL DE ERRORES
De los cuatro tipos de errores depurables [10.1], slo los de Ejecucin se pueden controlar. Esto es, una vez localizada una sentencia susceptible a este tipo de error, es necesario controlar la circunstancia para que la ejecucin del cdigo no se interrumpa y pueda continuar con una solucin. Dicha solucin puede ser omitir tal sentencia si es factible (lo ms sencillo), o en funcin del valor de error, modificar la circunstancia y tratar de ejecutar de nuevo la sentencia que produjo el error.

11.1 CONCEPTO Y SITUACIN DE ERRORES DE EJECUCIN


En ocasiones, una misma sentencia puede funcionar correctamente bajo cierta condicin propicia (siempre presente al crear la macro). Pero al ejecutarla en otro caso u ocasin ya no con la condicin propicia, tal sentencia produce un error. P.e. al abrir un libro (archivo), si ste existe (condicin propicia) la sentencia se ejecutar sin problema; ahora, si no existe (condicin no propicia) la sentencia producir un error un error de ejecucin ya que slo ejecutando el cdigo, VBA se dar cuenta de l.

11.2 CONTROLADORES DE ERROR


Todo Controlador de error comienza con una sentencia detector de error, sta inicia con las palabras clave On Error, se debe colocar antes de la sentencia susceptible a producirlo. As, si efectivamente se produce, se activa el controlador y ste decidir que hacer dependiendo de tal error. Despus de la sentencia a controlar, debe desactivar el detector de error, para que no cause resultados imprevistos en otras sentencias. Se desactiva con la sentencia: On Error Goto 0.
11.2.1 IGNORAR SENTENCIA QUE PRODUCE ERROR

1. Grabe una macro que Inserte una hoja nueva y la nombre como Presupuesto. En el mismo libro (donde la grab) vuelva a ejecutarla Qu sucede? Una solucin es eliminar la hoja existente, pero Qu sucede cuando no existe?, A su vez producir un error de ejecucin Pruebe esta solucin varias veces:
On Error Resume Next Sheets("Presupuesto").Delete On Error Goto 0 Sheets.Add ActiveSheet.Name = "Presupuesto" Si la hoja no existe: NO SE EJECUTA. Es lo de menos, de todas maneras quera eliminarla.

2. Pruebe las siguientes sentencias varias veces, Controle sus errores potenci ales: 1.- Inicie en A5, y suba una celda cada vez: ActiveWindow.ScrollRow = ActiveCell.Row 2 2.- Elimine un archivo: Kill "C:\Mis documentos\LibroPorEliminar.xls"

Cap. 11
11.2.2 CONFIRMAR SI EFECTIVAMENTE HAY ERROR, CON OBJETO Err

48

Llendo un poco ms all que simplemente ignorar un error, puede utilizar Err, objeto especial de depuracin con propiedades que podemos revisar para confirmar si efectivamente se ha producido un error, y si es as, cul ha sido ste. 1.- Automatice la insercin de una hoja Presupuesto indizada; o sea, si ya existe la hoja Presupuesto, la nombra como Presupuesto2 y si sta ya existe, como 3, etc. De qu tipo declarara las variables [8.3.1]?
Sheets.Add Indice = 1 On Error Resume Next ActiveSheet.Name = "Presupuesto" & Indice Do Until Err.Number <> 0 Err.Number = 0 ' Qu pasara si quita esta sentencia? Indice = Indice + 1 ActiveSheet.Name = "Presupuesto" & Indice Loop

11.2.3 EVITAR MENSAJES DE ALERTA

Vea el 1er ejercicio de [11.2.1], Qu le gustara mejorar? Qu le parece que no muestre el mensaje de alerta: coloque estas sentencias antes y despus de la sentencia con posibilidad de activar el mensaje de alerta:
Application.DisplayAlerts = False Sheets("Presupuesto").Delete Application.DisplayAlerts = True

11.3 USO DE NMEROS DE ERROR


Este cdigo pide una clave al usuario y la busca en la columna A, mostrando un mensaje con la comisin del producto Qu pasa si no la encuentra? Abra Controlador Error 11.3.xls y prubelo Encontr algn problema?:
On Error GoTo BuscaComisinVenta_ControladorError Columns(1).Find(What:=InputBox("Clave por buscar:"), After:=ActiveCell, _ LookIn:=xlFormulas, LookAt:= xlWhole, SearchOrder:=xlByRows, _ SearchDirection:=xlNext, MatchCase:=False).Activate MsgBox "Comisin de " & ActiveCell.Offset(, 1) & " " & ActiveCell.Offset(, 2) Exit Sub BuscaComisinVenta_ControladorError: Select Case Err.Number Number es la propiedad por default del objeto Err. Case 91 If MsgBox("Error: " & Err & vbCrLf & Err.Description, vbYesNo, _ "DESEA REINTENTAR CON OTRO DATO?") = vbYes Then Resume Else Cmo funciona esta constante Resume Next de VBA en el mensaje [13.1]? End If Case Else MsgBox "Error " & Err & vbCrLf & Err.Description, vbCritical, _ "Error imprevisto, favor avisar a ""opics@correoweb.com""." End Select

SUB-RUTINA

MACRO

Cap. 12

49

12 FACILITE SUS MACROS, EVENTOS DE OBJETOS


Uno de los propsitos de las macros es facilitarnos la vida. Para lograrlo, el objetivo es permitir que otra persona o usted mismo ejecute tareas que de otra forma sera difcil llevar a cabos debido a los recursos limitados. Entonces, una vez que tenga lista su macro, lo menos por hacer es facilitar su ejecucin. Para esto se utilizan los eventos de objetos. Un evento es una accin generada en o por el ambiente de Excel. As, al ocurrir un evento ya sea por el usuario o por una accin automtica se ejecutar su procedimiento asociado, que a su vez llamar a una macro que Usted cre.

12.1 EVENTOS POR EL USUARIO


Puede que para Ud. sea ms fcil ejecutar sus macros seleccionndola de la lista de men Herramientas Macro Macros [1.2.2], o estando en el cdigo dar <F5> [5.2.3-5], o, si la usa muchas veces al da, con combinacin de teclas [1.2.1-3]. Pero para facilitar an ms su ejecucin, sobre todo si no se usa tan seguido p.e. cada semana,Integre su automatizacin al entorno de Excel, y as, el usuario la usar lo ms sencillo posible.
12.1.1 BOTONES DE HERRAMIENTA

Un botn en barra de herramienta es una tcnica muy buena para ejecutar una automatizacin. Mediante una representacin grfica (icono) se facilita su localizacin y la ayuda en pantalla (al apuntar en l) recuerda el funcionamiento o para qu sirve al usuario.
1. Asignar Automatizacin a Botn de Herramienta

Decida si se agregar el botn a una barra existente o una nueva. Si es a una nueva: 1. En cualquier botn.- clic der. Personalizar - ficha Barras de herramientas 2. Clic a Nueva, teclee el nombre de la barra y <Enter>. O si ya existe la barra y no est visible, mustrela: 1. En cualquier botn.- clic der. Personalizar - ficha Barras de herramientas 2. Active la barra deseada: Clic en su cuadro de seleccin. Una vez visible la barra (nueva o existente): 3. Ficha Comandos - Categora Macros y el botn carita arrstrelo a la barra. 4. Al botn en la barra: 2clic (o clic der. Asignar macro) y 2clic a su macro. 5. Renombrar: clic der. Nombre:. Imagen clic der. Cambiar imagen botn 6. Clic en Cerrar. Apunte al botn, observe y pruebe su macro.
2. Ejercicio de automatizacin por Asignar

Coloque esta macro en un mdulo, De qu tipo ser la variable?, Prubela:


Sub Ampliar() Aumento = ActiveWindow.Zoom + 10 If Aumento <= 400 Then ActiveWindow.Zoom = Aumento End Sub

Genere otra para reducir de 10 en 10. En su barra o en otra nueva, coloque botones asignndoles stas macros. Cambie sus imgenes a flecha arriba y flecha abajo. Si copia el libro en otra computadora: que su barra de herramientas vaya adjunta: en cualquier botn clic der. Personalizar, botn Adjuntar y cpiela(s).

Cap. 12
12.1.2 BOTONES DENTRO DE HOJA DE CLCULO

50

Los botones en barras de herramientas, responden a un sencillo evento: el clic del ratn para ejecutar su macro asociada. Podemos colocar objetos (controles ActiveX) dentro de una hoja y asignarle un procedimiento de evento, que a su vez llamar a la macro que Ud. desee.
1. Asignar macro a Botn en Hoja

Para macros ms especficas, que slo se usan en determinada hoja de clculo: 1. Muestre la barra Cuadro de controles: con 5 botn de barra VBA [1.4.3]. 2. Clic en Botn de comando ver el Modo diseo y dimensione sobre la hoja.

3. Nombre y Etiqueta: use el botn Propiedades y cambie (Name) y Caption. Consulte en Ayuda las propiedades Accelerator y TakeFocusOnClick. OJO! Puede ocasionar problemas con su cdigo, si el botn recibe el enfoque. 4. Estando en modo diseo, en su botn clic der. Ver cdigo. 5. Aparece el cdigo de la hoja (carpeta: Microsoft Excel Objetos) donde coloc el botn. Y su procedimiento de evento Al Click: Sub NombreDelBotn_Click(), dentro, teclee el nombre de su macro [6.2.2]. Revise sintaxis [10.2.1]. 6. En Excel Clic en botn Salir modo diseo, cierre Propiedades y pruebe su macro. Estando en modo Diseo, se ignoran los eventos de los objetos.
2. Ejercicio de Asignacin a Control ActiveX

Cree un botn de comando sobre su hoja.- nombre: btnAmpliar, Caption: Ampliar, Accelerator: A y TakeFocusOnClick: False. En su procedimiento de evento llame a la macro Ampliar. Prubelo. Haga lo mismo para la macro Reducir.
12.1.3 OTROS EVENTOS

El evento AlClick es slo uno de ellos por lo general, el predeterminado. Busque en la Ayuda: Click (Evento) y en el vnculo Vea tambin seleccione el que desee.
1. Asignar otros eventos a Objetos en la Hoja

1. En Editor VBA, muestre el Explorador de proyectos [5.1.1]. 2. Abra el cdigo de la hoja en cuestin (Microsoft Excel Objetos) con 2clic [12.1.2-1.5]. 3. Despliegue la lista de Objetos (arriba a la izquierda) y seleccione el objeto que est sobre la hoja en cuestin aparecer su procedimiento de evento predeterminado. 4. Para otros eventos despliegue la lista de Procedimientos (arriba a la derecha) y seleccione el evento requerido. 5. Introduzca cdigo o llame a la macro por ejecutar al ocurrir tal evento.
2. Ejercicio de Asignacin a Control ActiveX

Cree otro botn de comando sobre su hoja (o con el mismo) siga los pasos [12.1.3-1].- con el evento MouseMove, llame a la macro Reducir [12.1.1-2]. Pruebe otros eventos. OJO! Si elimina una hoja de Excel, el cdigo de evento de sus objetos se eliminar.

Cap. 12

51

12.2 EVENTOS AUTOMTICOS


Los controles ActiveX botones [12.1.2] y controles de dilogo [13] tiene eventos que el usuario conscientemente activa, para ejecutar su macro asociada. Pero no son los nicos que pueden tener. Las hojas de clculo y los libros de trabajo tambin, slo que sus eventos se activan automticamente y el usuario prcticamente no se da cuenta de ello.
12.2.1 EVENTOS DE HOJAS DE CLCULO

1. AL CAMBIAR SELECCIN Al seleccionar ciertas celdas, que se copien slo las frmulas de la fila superior. Abra Avance Financiero.xls en Asistente. Cree una macro CopiarFrmulasDeArriba con:
Dim i As Byte For i = 0 To 9 If Left( ActiveCell.Offset(-1, i).FormulaR1C1 , 1) = "=" Then _ ActiveCell.Offset(0, i) = ActiveCell.Offset(-1, i).FormulaR1C1 Next i

Siga [12.1.3-1].- en Hoja1 (Tabla), con objeto Worksheet, procedimiento de evento SelectionChange, y ponga este cdigo. Luego, vaya a Excel y seleccione desde A36 hacia abajo.
If ActiveCell.Row < 20 Or ActiveCell.Column <> 1 Then Exit Sub CopiarFrmulasDeArriba

2. AL ACTIVAR HOJA Al activar hoja Tabla que se muestre la hoja Datos. Siga [12.1.3-1].- seleccione el objeto Worksheet, su procedimiento de evento Activate, y ponga este cdigo:
Sheets("Datos").Visible = True

Luego, vaya a Excel y seleccione la hoja Tabla. Trate Al Desactivar hoja Tabla que se oculte la hoja Datos Consulte a su asesor.
12.2.2 EVENTOS DE LIBROS DE TRABAJO

1 AL ABRIR UN LIBRO DE TRABAJO, que se abra otro u otros asociados. Siga [12.1.3-1].- en EsteLibro, con objeto Workbook, su procedimiento de evento Open, y ponga este cdigo:
Workbooks.Open FileName:=ThisWorkbook.Path & _ "\Avance Financiero macros.xls", UpdateLinks:=0 ThisWorkbook.Activate Sheets("Grfica").PrintPreview

Guarde (<Ctrl + S>), vaya a Excel y cierre todos los libros, abra Avance Financiero.xls. Trate de que Al Cerrar este libro, tambin el de sus macros. Consulte a su asesor. 2 AL ACTIVAR CUALQUIER HOJA DEL LIBRO, imprima la identificacin del archivo. Siga [12.1.3-1].- en EsteLibro, con objeto Workbook, su procedimiento de evento SheetActivate, e introduzca este cdigo. Revise el Resultado en Presentacin Preliminar.
ActiveSheet.PageSetup.RightFooter = ActiveWorkbook.FullName [A1].Select

Estas herramientas permiten crear aplicaciones que cualquiera puede usar fcilmente. Cmo evitar que un procedimiento, al ejecutar cierta accin, active ( ejecute) un evento? 1.- Al Inicio del procedimiento Application.EnabledEvents = False 2.- Al Final del procedimiento Application.EnabledEvents = True OJO! Al inhabilitar eventos, e interrumpir el cdigo debe volver a habilitarlos.

Cap. 13

52

13 INTERACTE CON EL USUARIO


Un aspecto importante para mejorar sus macros es que pueden interactuar con el usuario. Esto es, durante su ejecucin, pueden pedir o dar informacin. La forma ms sencilla es mediante instrucciones que muestran cuadros de dilogo predefinidos, otra forma ms sofisticada es mediante controles ActiveX apoyados con procedimientos de eventos [12].

13.1 CUADROS DE DILOGO PREDEFINIDOS


Usar este tipo de cuadros es la forma ms sencilla de interactuar con el usuario.
13.1.1 CUADRO DE ENTRADA Sirve para pedir informacin al usuario.

Sintaxis: Expresin (o Variable) = InputBox(Mensaje, [Ttulo], [ValorPorDefualt]) Si no pone un Ttulo, se presenta uno predefinido. Opcionales El valor por default, ser el ms probable que el usuario escriba. El uso de parntesis es para almacenar el valor dado por el usuario. [8.1.2-2]. Ejemplos: Identifique los 3 argumentos y la concatenacin de texto [8.5.1-2]:
1.- Nombre = InputBox("Cul es su nombre?") 2.- Divisin = InputBox("Dar escala de importes:", "DIVISIONES", 100) 3.- ActiveSheet.Name = InputBox("Dar Nombre de Hoja Grfica:", , "Grfica") 4.- Do ValMx = InputBox("Dar el Valor en Y mximo:" & vbCrLf & _ "Si el contrato es de: " & Range("ImporteContrato"), _ "VALOR MXIMO", Range("ImporteContrato")) Loop Until IsNumeric(ValMax)

13.1.2 CUADRO DE MENSAJE

Sirve para mostrar informacin o hacer una pregunta.

Sintaxis1: MsgBox Mensaje, [Botones], [Ttulo] Sintaxis2: Expresin (o Variable) = MsgBox ( Mensaje, [Botones], [Ttulo] ) Botones: son constantes VBA (prefijo vb) que representan botones en el dilogo. Sin parntesis en Sintxis1, ya que no se almacenar ningn valor. [8.1.2-1]. Ejemplos: Identifique los 3 argumentos y la concatenacin de texto [8.5.1-2]:
1.- MsgBox "Su nombre es: " & Nombre 2.- MsgBox "El pago de su hipoteca es de: " & Pago, vbExclamation, "PRSTAMO" 3.- Respuesta = MsgBox("Desea abrir el archivo?", vbYesNo) 4.- If MsgBox("Desea continuar?", vbOKCancel) = vbCancel Then Exit Sub 5.- Puede

darle caractersticas especiales a su dilogo, p.e. reemplace el 2do argumenEsta constante muestra un smbolo de Interrogacin Esta constante pone el foco en el botn Cancelar

to del Ejemplo 4, por: vbOKCancel + vbQuestion + vbDefaultButton2

Cap. 13

53

13.2 CONTROLES ActiveX, SOBRE HOJA DE CLCULO


En el captulo 12, se trat a los botones ActiveX [12.1.2], para interaccin con el usuario; por lo que, los controles ActiveX tratados aqu se manejan de un modo muy similar, tal como asignarles procedimientos que respondan a los eventos del usuario [12.1.3]. Cuando Ud. trabaja en Excel, lo hace en modo interactivo, por medio de la interfaz grfica: mens, botones de herramienta, barras de desplazamiento, cuadros de dilogo, listas desplegables, botones en hoja y otras formas grficas. Facilitando el trabajo al usuario o a Ud. mismo: reduce errores limitando valores slo a opciones vlidas. La mejor forma de entender estas herramientas es realizando una prctica. DISEO DE MODELO DE CLCULO: CRDITO PARA VEHCULO Sin interfaz grfica.- Abra Crdito Vehculo.xls de Asistente. Coloque valores de entrada en Datos: Precio = 350000, Enganche = 20%, Inters = 10% y Aos = 3. Coloque los clculos: Anticipo = Precio * Enganche, Crdito = Precio - Anticipo y en Pago = -PAGO (Inters/12, Aos*12, Crdito). Pruebe con otros valores Puede introducir cualquier valor, Precio e Inters exagerados o valores de texto en los datos numricos. Este es el problema que presenta un modelo de clculo, es muy flexible ya que el rango de valores que permite es muy amplio y puede llegar a confundir al usuario. La solucin, mejorarlo con controles sobre la hoja de clculo para eliminar posibles conflictos.
13.2. El Cuadro de Controles con el 5 botn de barra VBA [1.4.3] contiene una ga-

ma de controles ActiveX muy tiles sobre la hoja de clculo. Ver cmo crear, cambiar sus propiedades manualmente y automatizar con sus eventos. Los ms comunes son:
13.2.1 CONTROL DE NMERO

Empezar con el Plazo, los prstamos para carros por lo general son vlidos hasta 5 aos, limitar hasta 6 dando algo de margen, adems, son enteros, por lo que un Control de Nmero es una forma segura y fcil de capturar tal valor. 1. Muestre Cuadro de Controles [13.2.], y clic en el control ria.
3.

. Se activa Modo diseo.

2. Ajuste a Cuadrcula: Mantenga <Alt> y clic en esq. sup. izq. de D10, arrastre a esq. contraMuestre la ventana Propiedades, con . Los controles ActiveX tienen muchas propiedades.

Casi en todas, sus valores por omisin son aceptables. Cambie slo los que necesite personalizar.

4. Personalice propiedades: 1) El rango de datos del control ser de 1 a 6.

Modifique: Min = 1 y Max = 6.

2) La celda de captura es C10. Modifique: LinkedCell = C10. 5. Salga del Modo diseo: con y cierre la ventana de Propiedades. 6. Pruebe su control ahora slo podr capturar valores de plazos vlidos.

Cap. 13 Pero Qu pasa si Ud. hace caso omiso del control y captura directo en la celda? Si protege la hoja, ni Ud. (en la celda) ni el control (con vnculo a ella) podrn trabajar. Solucin: protjala, pero que slo el control pueda modificar su correspondiente celda. 7. PROTECCIN CONTRA USUARIO: 1 Entre al Modo diseo
El Cuadro de Controles debe estar visible [13.2.].

54

, seleccione el control y muestre sus Propiedades Modifique: (Name) = ctrlAos. Modifique: LinkedCell = brrelo.

2 Nombre al control (Tip: use prefijo ctrl). 3 La propiedad celda de captura anlela. 4 Entre al procedimiento de evento, con

Aparecer el evento ctrlAos_Change

Change es el evento predeterminado y, dentro, teclee esta sentencia (de asignacin de valor a la celda vinculada con el valor del control) :

Range("C10") = ctrlAos.Value

{Value es la propiedad por default, puede omitirla}.

5 Regrese a Excel, Salga del Modo diseo: con

y cierre la ventana de Propiedades.

Proteja la hoja (sin contrasea). Directamente la celda no cambiar. Pruebe el control: producir un error, Finalice. Para que funcione, deber ejecutarse otro evento que proteja slo contra el usuario cada vez que se active esta hoja. Contine. 6 Vaya al Editor de VBA, muestre el Explorador de Proyectos [5.1.1], de 2clic a Hoja1 (Crdito). En la lista superior izquierda Objeto seleccione Worksheet. En la lista derecha seleccione Activate [12.2] y coloque estas sentencias:
ActiveCell.Select '<== Si esta seleccionado un control, Qu pasara si no existe esta sentencia? ActiveSheet.Protect UserInterfaceOnly:=True Este argumento permite slo a la macro realizar cambios (NO al usuario). {debajo, borre el evento predeterminado SelectionChange}

7 Vaya a Excel, active otra hoja y vuelva a Crdito. Al activarla se ejecuta su evento: protegiendo las celdas contra el usuario, pero no contra el evento del control. Coloque un Control para el Enganche. OJO!, es porcentaje en decimales y Control de Nmero slo maneja enteros: usar D6 como auxiliar. En C6 d esta frmula =D6/100. Siga pasos [13.2.1]: ajustando a cuadrcula en D6. El rango (Min y Max) es correcto de 0 a 100%. Los incrementos sern de 5 en 5%: SmallChange = 5. La celda de captura (auxiliar) estar oculta por el mismo control: (Name) = ctrlEnganche. LinkedCell = brrelo. Al evento Change d la sentencia: Range("D6") = ctrlEnganche Siga el 5 paso y proteja la hoja. Son necesarios pasos 6 y 7? Revise y Pruebe.
13.2.2 CONTROL BARRA DE DESPLAZAMIENTO

Continuando con la prctica anterior, El inters es similar al enganche son porcentajes, la diferencia es que aqu hay mucho ms posibles valores, en incrementos de 0.25%, y un rango desde 0 hasta 30%. Siga los pasos de [13.2.1] con estos valores: 1. Usando el control . {la hoja debe estar desprotegida} 2. Ajuste a cuadrcula: mantenga <Alt> y arrastre desde D9 hasta E9.

Cap. 13 3. Muestre la ventana Propiedades, con . 4. Personalice propiedades: 1) El rango ser de 0 a 3000. Modifique: Min = 0 y Max = 3000. 2) Los incrementos cortos de 25 en 25. Modifique: SmallChange = 25. 3) Los incrementos largos de 100 en 100. Modifique: LargeChange = 100. 4) La celda de captura es D9. Modifique: LinkedCell = D9. {temporal} 5. En C9 d esta frmula =D9/10000. Salga del Modo diseo y cierre las Propiedades. 6. Pruebe su control clic en las flechas (incrementos cortos) o clic en el rea interna de la barra de desplazamiento (incrementos largos) o arrastre el Cuadro de ubicacin. 7. Proteja contra usuario siga los mismos pasos de [13.2.1-7], con estos valores: (Name) = ctrlInters. LinkedCell = brrelo. Al evento CtrlInters_Change teclee esta sentencia: Range("D9") = ctrlInters Siga el 5 paso y proteja la hojaRevise y Pruebe.
13.2.3 CONTROL LISTA DESPLEGABLE

55

Siguiendo con la prctica, el precio del vehculo se puede introducir directamente en la celda C5, pero para facilitar la captura al usuario y evitar confusiones puede mostrarle una lista donde escoja el nombre del vehculo y automticamente aparezca su precio. Para esto, existe en la hoja Catlogo, una lista cuyo rango tiene el nombre: ListaVehculos. Siga los pasos de [13.2.1] con estos valores: 1. 2. 3. 4. Usando el control Cuadro combinado . {la hoja debe estar desprotegida} Ajuste a cuadrcula: mantenga <Alt> y arrastre desde D5 hasta F5. Muestre la ventana Propiedades, con . Personalice propiedades: 1) El Estilo ser Lista desplegable. Modifique: Style = 2 fmStyleDropDownList Ya que no permitir la introduccin en ella de nuevos valores. 2) La celda de captura es C5. Modifique: LinkedCell = C5. {temporal} 3) El origen de los valores que mostrar: Modifique: ListFillRange = ListaVehculos Es el nombre del rango localizado en la hoja Catlogo. Salga del Modo diseo y prubelo seleccionado cualquier vehculo Falla, ya que la lista pasa el Nombre del vehculo a su celda vinculada, deber ser capaz de pasar el Precio. 5. La 2da columna de ListaVehculos es la que contiene el Precio para indicrselo: Active Modo diseo, seleccione el control de la lista y muestre las Propiedades: 1) Cantidad de columnas de la lista. Modifique: ColumnCount = 2 2) Establezca la columna base. Modifique: BoundColumn = 2 Es el No. de columna cuyo valor seleccionado se pasar a la celda vinculada. Salga del Modo diseo y prubelo de nuevo Funciona? Nota algo fuera de lo normal? Los datos no se ven completos y, abajo, aparece una barra horizontal. 6. Active Modo diseo, seleccione el control de la lista y muestre las Propiedades: 1) Ancho de las columnas de la lista. Modifique: ColumnWidths = 5cm; 3cm Lo da en cms., al aceptarlo, lo convierte a puntos (unidad para formas [4.2.1-10.1]).

Cap. 13 2) Ancho de toda la lista (en cm). Modifique: ListWidth = 8cm Es igual a la suma de los anchos de sus columnas. 7. Salga del Modo diseo, cierre la ventana Propiedades y prubelo otra vez. 8. Proteja contra usuario siga los mismos pasos de [13.2.1-7], con estos valores: Nombre = ctrlListaPrecios. LinkedCell = brrelo. Al evento ctrlListaPrecios_Change introduzca esta sentencia: Range("Precio") = ctrlListaPrecios Siga el 5 paso y proteja la hoja (cambiando a otra y volviendo a activar Crdito)Revise y Pruebe. Todo parece funcionar a la perfeccin, sin embargo, Qu pasara si Ud. desea agregar ms vehculos a la lista? Por medio de la lista no se puede introducir nuevos valore s, ya que el Estilo lo cambi de Cuadro Combinado a Lista Desplegable [13.2.3-4.1], para este caso es mejor as. Por lo que el nico modo de aumentarla, es la captura directa en la hoja Catlogo; la desventaja es que tiene que renombrar el nuevo rango ListaVehculos. Automatice el renombre del rango ListaVehculos con el evento Change de la hoja Catlogo: 1. Active hoja Catlogo, vea su cdigo con . (aparece el evento por omisin SelectionChange). 2. En lista superior derecha seleccione Change. (borre el procedimiento SelectionChange). 3. En el procedimiento Worksheet_Change , Introduzca este cdigo:
'Renombra el Rango "ListaVehculos": [4.1.6+4] With Range("ListaVehculos").CurrentRegion .Offset(1, 0).Resize(.Rows.Count - 1).Name = "ListaVehculos" End With 'Actualiza el origen de los valores que mostrar la lista (Es necesaria?): Sheets("Crdito").ctrlListaPrecios.ListFillRange = "ListaVehculos"

56

Vaya a Excel, modifique la lista en Catlogo y Pruebe su Lista desplegable. El Modelo de Clculo con crdito para vehculos es ahora muy slido. Quin sea que lo use podr probar distintos escenarios sin tener que preocuparse de cometer errores al momento de escribir ya sean de dedo o por omisin. De hecho, no es necesario teclear, ya que todo el funcionamiento se controla con simples clics del ratn.

13.3 OTROS CONTROLES ActiveX


Existen otros controles ActiveX que se pueden colocar sobre la hoja de clculo como Cuadro de texto, Casilla de verificacin y Botn de opcin. Estos se analizarn en el captulo [14] ya que su manejo es muy similar al de los Formularios Personalizados. Una de las mejores ventajas de este tipo de interaccin grfica con el usuario, es la limitacin de los datos de entrada que da el usuario slo a un rango de valores vlidos. De esta forma se reduce o se elimina incluso la probabilidad de error de usuario, adems de que el modelo se hace mucho ms fcil de utilizar.

Cap. 14

57

14 FORMULARIOS PERSONALIZADOS
Usted puede realizar automatizaciones prcticas, convenientes y tiles, facilitando su utilizacin con botones y eventos automticos [12], e intractuando con el usuario pidindole informacin con cuadros de dilogo predefinidos o con controles sobre la hoja [13]. Pero en algunas ocasiones es conveniente presentar en un solo lugar sus automatizaciones, enmarcando la interactividad con el usuario mediante un Formulario Personalizado. Abra el libro Presupuesto Egresos.xls en su carpeta Asistente. Este es un presupuesto para una fbrica de textiles, organizado por meses en columnas y conceptos (y subconceptos) en filas. Requiere imprimir diferentes vistas (versiones) del mismo. P.e. los ejecutivos y administradores necesitan el informe slo con resmenes; los encargados de capturar los datos piden las filas de detalle, sin totales; el analista financiero desea ver el informe completo pero sin los meses que ya haya revisado. Para manejar las vistas del informe de presupuesto, es necesario pedir al usuario cierta informacin por medio de un Formulario Personalizado. Esta es la estrategia: 1. Interfaz de Usuario.- Disee el formulario con controles, incluidos sus eventos. 2. Funcionalidad del Formulario.- Cree las macros que harn lo que Ud. haca a mano. 3. Implemetacin del Formulario.- Es la conexin entre la Interfaz y la Funcionalidad, incluida la forma en que se mostrar el formulario.

14.1 INTERFAZ DE USUARIO


Disee el formulario. Pregntese Qu tipo de informacin le pedir al usuario?, La puede seleccionar de entre un grupo de opciones o la debe teclear?, Los grupos de opciones son de seleccin nica o mltiple?. Para el ejemplo: El contenido en cuanto a conceptos (en filas) puede ser Resumido, Detallado o Completo, segn el puesto del usuario, entonces ser de opcin nica (1 de entre 3). El analista financiero dar a partir de qu fecha (en columnas) desea su informe, entonces lo teclear en un cuadro de texto.
14.1.1 CREACIN DE FORMULARIO

1. Con el libro donde trabajar el formulario activo, entre al Editor VBA [1.4.3-5]. 2. Muestre Explorador de Proyectos [5.1.1], e inserte un formulario UserForm con botn a) Aparecer el Cuadro de Herramientas con los Controles, muvalo donde no le estorbe. Si no aparece: clic a botn . Son muy similares a los que utiliz para colocar controles ActiveX sobre la hoja de clculo [13.2.]. b) Observe la estructura del proyecto: su nuevo UserForm esta en carpeta Formularios. c) Los formularios se ejecutan como las macros. P.e. d <F5> analice, y despus cierre su formulario (cruz en esq. sup. der.). 3. Muestre las Propiedades [5.1.3], cambie: el Nombre (Name) = formInformePresupuestos, y el Ttulo (Caption) = INFORME AUTOMATIZADO DE PRESUPUESTO DE EGRESOS.
14.1.2 BOTONES DE OPCIN

Cap. 14 stos, son para que el usuario seleccione una sola opcin de un grupo predefinido. Por lo general, van dentro de un marco: 1. Muestre los controles, haciendo clic en el formulario. Si no aparece: clic a botn 2. Clic en botn Marco y clic cerca de la esq. sup. izq. del formulario. 3. 2clic en botn de opcin , haga clic en 3 lugares (de arriba a abajo) dentro del Marco. Luego, desactive el botn de opcin, haciendo clic de nuevo en l. 4. Seleccione cada control y cambie sus propiedades: a) Marco: Name = gpoConceptos Caption = Conceptos. b) 1 Opcin: Name = opcResumido Caption = Resumido Accelerator = R. c) 2 Opcin: Name = opcDetallado Caption = Detallado Accelerator = D. d) 3 Opcin: Name = opcCompleto Caption = Completo Accelerator = C Value = True. Accelerator subraya una letra de Caption: para el atajo.- <Alt + tecla aceleradora>. Value = True, convierte esta opcin como la predeterminada. 5. Acomode los botones de opcin: a) Seleccinelos.- arrastrando un rectngulo que englobe a los tres. b) Men Formato Espacio vertical Quitar; y men Formato Alinear Izquierda. c) Men Formato Ajustar tamao al contenido y arrstrelos a la esq. sup. izq. del marco. d) Reajuste tamao del marco, arrastrando su esq. inf. der. encerrando sus botones. 6. Guarde su libro (<Ctrl + S>) y ejecute formulario (<F5>) pruebe opciones y cierre.
14.1.3 CASILLA DE VERIFICACIN CON CUADRO DE TEXTO

58

Para que el usuario pueda especificar si debe imprimir todos los meses o slo los de una fecha dada en adelante, colocar 2 controles: una casilla de verificacin (si/no) que si no est activada imprimir todos los meses; y cuando lo este, imprima a partir de la fecha dada en un cuadro de texto por el usuario: 1. Con el formulario visible, clic a botn Casilla de verificacin , clic debajo del marco. 2. Cambie propiedades: Name= chkFecha, Caption= Empezar desde la fecha: y Accelerator= E. 3. Ajuste el tamao.- 2clic a su manija derecha. 4. Coloque el Cuadro de Texto.- clic a botn , y clic a la derecha del ttulo de la Casilla. 5. Cambie sus propiedades: Name = txtFecha, Value = 1/7/2000 y Enabled = False. Value propone el valor por omisin. Enabled = False Inhabilita para captura. 6. Habilitar/Inhabilitar el Cuadro de texto, depender del valor (si/no) de Casilla de verificacin. Este trabajo corresponde al evento Al hacer click de la Casilla. a) 2clic a la Casilla: aparecer el evento Click (predeterminado). b) Inserte este cdigo: txtFecha.Enabled = chkFecha.Value c) Guarde su libro, ejecute cdigo (<F5>) pruebe Casilla Cuadro de texto y cierre. 7. Inicialice el Cuadro de texto. La fecha 1/7/2000 que introdujo como valor por omisin es un caso fijo. Deber generalizar para que proponga el 1 del mes actual ya que en la fila 1 de la hoja Presupuesto las fecha son el 1 de cada mes, y esto al momento de mostrar el formulario, entonces usar el evento Inicializar del formulario: a) 2clic al fondo del Formulario: aparecer evento UserForm_Click (predeterminado). b) En lista Procedimientos (arriba a la der.), seleccione Initialize. Borre UserForm_Click.
Funcin de VBA que da la fecha actual.

Cap. 14 c) Introduzca este cdigo: txtFecha.Value = Date d) Guarde el libro, pruebe (<F5>) revise y cierre. 8. Para que la fecha propuesta en el Cuadro de texto sea el 1 del mes actual: a) De nuevo 2clic al Formulario, al final del mdulo, cree esta funcin personalizada [7]:
Function PrimerDaDelMes(FechaDato) PrimerDaDelMes = DateSerial(Year(FechaDato), Month(FechaDato), 1) End Function

59

Busque Ayuda de las funciones VBA: coloque el cursor sobre ellas y <F1>. Qu sucedera si FechaDato no es fecha? valdela con la Funcin VBA IsDate; y si efectivamente no es, que PrimerDaDelMes devuelva Empty (Vaco). d) En UserForm_Initialize, llame a la funcin: txtFecha = PrimerDaDelMes(Date) e) Guarde su libro, ejecute cdigo (<F5>) compruebe la fecha y cierre. Para casos fijos, el valor por omisin se puede definir manualmente en la ventana Propiedades. Para generalizar, con valores calculados, debe inicializarlo con un evento.
14.1.4 BOTN DE COMANDO

Una vez que el formulario permita al usuario especificar cmo quiere su informe, deberemos agregar por lo general dos botones: el primero, que realmente hagan el trabajo en este caso de Impresin, con la informacin dada; y el segundo para Cancelar: 1. Con el formulario visible, clic a Botn de Comando , clic a la derecha del marco. 2. Copie el botn.- arrstrelo hacia abajo y antes de soltar el ratn mantenga <Ctrl>. 3. Cambie sus propiedades [5.1.3]: Al de Arriba: Name = btnImprimir, Caption = Imprimir, Default = True y Accelerator = I. Al de Abajo: Name = btnCancelar, Caption = Cancelar y Cancel = True. Default indica que tal botn se ejecutar al dar <Enter>. Cancel dem al dar <Esc>. 4. Para que funcionen debe asignarles su evento Al hacer Click: a) Botn Imprimir.- 2clic en l. En el evento _Click, inserte estas sentencias:
Unload Me MsgBox "Imprimiendo" Unload Me
'Cierra (descarga) el formulario actual (Me). 'Mensaje temporal, aqu se llamar a sus macros [14.3]. 'Cierra (descarga) el formulario actual (Me).

b) Botn Cancelar.- 2clic en l. En el evento _Click, inserte esta sentencia: 5. Guarde su libro, ejecute formulario varias veces (<F5>) pruebe botones y teclas.
14.1.5 ORDEN DE TABULACIN DE CONTROLES

Hay usuarios que prefieren usar el teclado (es ms rpido, una vez familiarizado con la interfaz). Usan las teclas aceleradoras (con <Alt>) y el Orden de tabulacin debe ser lgico. Para revisarlo, ejecute el formulario <F5>, y d <Tab> varias veces: el recuadro punteado da el enfoque, pasando por tal Orden; al final <Esc>. Si no es el correcto: en formulario clic der. Orden de tabulacin Qu pasa con los botones de gpoConceptos? Tienen Orden independiente: en su marco clic der. Orden de tabulacin: mueva opcCompleto hasta abajo.

14.2 FUNCIONALIDAD DEL FORMULARIO

Cap. 14 La interfaz del usuario parece estar correcta. Lo que sigue es crear las macros que realicen el trabajo que Ud. vena elaborando manualmente para imprimir el informe. A grandes rasgos lo que Ud. haca era ocultar las filas o columnas no deseadas y mostrar las que s, dependiendo del puesto del usuario. Observacin: Las macros funcionarn exclusivamente con el diseo de la hoja Presupuestos.
14.2.1 VERSIONES EN CUANTO A CONCEPTOS

60

1. Versin Resumida: a) Vaya a Excel e inicie la grabacin de macro, nombre: InformeResumido [1.2.1]. b) Con Referencia Absoluta activada.- seleccione la celda A6. c) Active Referencia Relativa, seleccione y oculte toda la fila. Active una celda abajo. d) Edite su macro [2.1]. Usar estructura de ciclos DoLoop [9.2.3], ajuste su cdigo a:
Range("A6").Select Do Until ActiveCell = "TOTAL EGRESOS" If Left(ActiveCell, 5) <> "Total" Then _ ActiveCell.EntireRow.Hidden = True ActiveCell.Offset(1, 0).Select Loop Pos. Inicial (Ref. Abs.) Hacer hasta el final. Si la celda no inicia con "Total", Oculta la fila. Pos. Siguiente (Ref. Rel.)

e) Prubela varias veces Qu hace falte antes de ejecutar este cdigo? 2. Versin Completa: a) Vaya a Excel e inicie la grabacin de macro, nombre: InformeCompleto [1.2.1]. b) Con Referencia Absoluta.- seleccione todas las celda (interseccin encabezados). c) En cualquier encabezado de fila clic der. Mostrar. Detenga grabacin. d) Edite su macro [2.1]. Ajuste su cdigo con [4.1.5-3]. Luego, prubelo
Rows.Hidden = False

3. Versin Detallada: a) Vaya a Excel e inicie la grabacin de macro, nombre: InformeDetallado [1.2.1]. b) Con Referencia Absoluta activada.- seleccione la celda B6. c) Active Referencia Relativa, seleccione y oculte toda la fila. Active una celda abajo. d) Edite su macro [2.1]. Ser muy similar a la Versin Resumida; ajuste su cdigo a:
Range("B6").Select Do Until ActiveCell.Offset(0, -1) = "TOTAL EGRESOS" If ActiveCell = "" Then _ ActiveCell.EntireRow.Hidden = True ActiveCell.Offset(1, 0).Select Loop Pos. Inicial (Ref. Abs.) Hacer hasta el final. Si la celda est vaca, Oculta la fila. Pos. Siguiente (Ref. Rel.)

e) Prubela varias veces Qu corregir para no ver la fila Total Egresos? Observacin: debe ejecutar la versin completa antes de cualquiera de las otras dos. Las macros estn generalizadas; esto es, si se inserta ms conceptos, sern considerados, siempre y cuando estn arriba de la celda con el texto TOTAL EGRESOS.

Cap. 14
14.2.2 VERSIN EN CUANTO A MESES

61

Lo que Ud. haca manualmente era pedir al analista financiero desde qu fecha quera el informe, la localizaba visualmente y seleccionaba las columnas desde una antes hasta la
D, ocultndolas. Para despus imprimir el informe personalizado. Automatice todo esto:

1. Vaya a Excel e inicie la grabacin de macro, nombre: VistaPorMeses [1.2.1]. 2. Con Referencia Absoluta activada.- seleccione toda la fila 1. 3. Busque (<Ctrl+B>) p.e. 01/07/2000, seleccione: por frmulas y slo celdas completas, <Enter>. 4. Active Referencia Relativa, seleccione una celda a la izquierda. 5. Active Referencia Absoluta, y seleccione desde esa columna hasta la D y ocltelas. 6. Detenga su macro y edtela [2.1]. Ajuste su cdigo a ste:
Sub VistaPorMeses() Caso fijo (grabado).- valor buscado (con comillas). Rows("1:1").Select Selection.Find(What:="01/07/2000" , After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate ActiveCell.Offset(0, -1).Select Range("D1", ActiveCell).EntireColumn.Hidden = True Por las 3 codificadas. End Sub

7. Cambie la fecha p.e. a 1 mayo 2000 Qu falta?, Mostrar antes todas las columnas. Inserte esta sentencia al inicio de la macro y pruebe: Columns.Hidden = False 8. Falla? Cmo toma las fecha VBA? En ingls (formato mes/da/ao). Solucin: Convierta a formato ingls: use la funcin de texto Format con una variable.- arriba de la sentencia buscar (Find) inserte: FechaInicial = Format("1/5/2000", "m/d/yyyy") 9. En el argumento What del mtodo Find, reemplace el caso fijo (con todo y comillas) por la variable que contiene la fecha con formato ingls: What:= FechaInicial, ... Pruebe su macro paso a paso, observando el valor de la variable Debe funcionar 10. Y si el usuario da una fecha que no existe? Cambie la fecha en la funcin Format por "1/3/2001" y Pruebe Se produce un error De todos modos no necesita que haga algo, por lo que debe salir del cdigo.- Active un controlador de error, antes de la sentencia de bsqueda (Find): On Error Goto Salir despus de ella, desactvelo: On Error Goto 0 Al producirse un error en la sentencia de bsqueda la ejecucin va a la lnea Salir. Teclela arriba de End Sub.- Salir: Pruebe paso a paso [Vea Ej. 11.3]. 11. Para generalizar, haga de la macro una subrutina con argumento FechaInicial [6.3.1]. Y cambie el caso fijo en Format por tal argumento (variable). La macro quedar as:
Sub VistaPorMeses(FechaInicial) Al argumento tipo Fecha se le da formato. Columns.Hidden = False Rows("1:1").Select Ya formateado se usa en la bsqueda. FechaInicial = Format(FechaInicial, "m/d/yyyy") On Error GoTo Salir Selection.Find(What:=FechaInicial, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate On Error GoTo 0 ActiveCell.Offset(0, -1).Select Range("D1", ActiveCell).EntireColumn.Hidden = True Salir: End Sub

Cap. 14

62

14.3 IMPLEMENTACIN DEL FORMULARIO


Ya dise la Interfaz de Usuario, que es la forma de comunicacin con el usuario, donde ste define cmo quiere su informe. Con tal informacin de entrada las macros harn su trabajo (Funcionalidad del Formulario). Resta conectar la Interfaz con las macros, controlando la Funcionalidad. Para esto debe Implementar el formulario y sus controles.
14.3.1 IMPLEMENTACIN DE BOTONES DE OPCIN

Para implementar los botones de opcin del marco Conceptos, necesita determinar cul de ellos es el seleccionado (como opcin nica), o sea, cul de ellos tiene valor True. 1. Muestre el Formulario. D 2clic al botn btnImprimir; se mostrar su evento predeterminado btnImprimir_Click, debajo de la sentencia Unload Me coloque stas:
If Me.gpoConceptos.Controls(0) = True Then InformeResumido If Me.gpoConceptos.Controls(1) = True Then InformeDetallado If Me.gpoConceptos.Controls(2) = True Then InformeCompleto

Qu puede mejorar o quitar? En vez del nmero de control qu puede usar? 2. Guarde su libro, ejecute paso a paso (<F8> varias veces), y pruebe con las diferentes opciones Funciona correctamente?
14.3.2 IMPLEMENTACIN DE CASILLA DE VERIFICACIN

Necesita determinar si la casilla Iniciar desde la fecha: est marcada, o sea, si tiene valor True. 1. En el Formulario, d 2clic al botn btnImprimir; en su evento btnImprimir_Click, abajo ponga:
If Me.chkFecha = True Then VistaPorMeses Me.txtFecha

2. Guarde, ejecute paso a paso y pruebe la casilla con la fecha 1/10 y si pone 20/8
14.3.3 VALIDACIN DE CUADRO DE TEXTO (Caso: Fecha)

Si el usuario da una fecha que no sea el 1 da del mes o si pone algo que no sea fecha. 1. En su evento btnImprimir_Click, mejore la ltima sentencia por:
If Me.chkFecha Then VistaPorMeses PrimerDaDelMes(Me.txtFecha)

2. Y antes de la sentencia Unload Me valide la fecha:

Argumento de la Subrutina VistaPorMes

If IsDate(Me.txtFecha) Then MsgBox "Fecha no vlida.", vbCritical, "INFORME AUTOMATIZADO" txtFecha.SetFocus: txtFecha.SelStart = 0: txtFecha.SelLength = 100 Exit Sub End If Qu sucede si quita estas 3 sentencias? Ayuda: ponga el cursor y <F1>.

14.3.4 AFINES: PRESENTACIN PRELIMINAR Y CMO MOSTRAR EL FORMULARIO

1. Para imprimir, al final de btnImprimir_Click coloque: ActiveSheet.PrintPreview Abajo, estas 2 sentencias.- Rows.Hidden = False: Columns.Hidden = False 2. Inserte un mdulo y cree la macro MostrarFormulario, con: formInformePresupuestos.Show 3. En Excel, facilite acceso al usuario con un botn de herramienta [12.1.1], a esta macro. Muestre el formulario, pero con un evento, p.e. Al abrir Libro [12.2.2-1] Intntelo. La ventaja de un formulario personalizado, es que se puede pedir un conjunto de informacin, en un solo lugar y al mismo momento; mejorando la interactividad con el usuario.

Tips

63

TIPS DE AUT OMATIZACIN EN VBA PARA EXCEL


1. RESUMEN DE TEORA BSICA
A) VARIABLES
REEMPLAZAR VALORES CONSTANTES (dados por la Grabadora) POR VARIABLES (generalizar). 1.- DEFINICIN DE VARIABLES (Tipo de Datos ==> consultar la Ayuda: "Resumen Tipo de Datos") 2.- ASIGNACIN DE VALOR A VARIABLES Ej: Rango.- Celdas Nombradas. Range("NombreDeRango").Select 3.- USO DE VARIABLES Texto (String): Concatenacin (&) entre cadenas de texto. Como argumentos en Subrutinas o Funciones.

B) CONTROL DE ERRORES
1.- ACTIVAR DETECTOR DE ERRORES 2.- DESACTIVAR DETECTOR DE ERRORES On Error Resume Next On Error Goto 0

C) BUCLES DO UNTIL
Hacer estas instrucciones hasta que Criterio de salida sea Verdadero.

Sintaxis:
Posicin Inicial (Ref. Abs.) Do Until Fin de datos ...Instrucciones ...Bloque Unitario Pos. Siguiente (Ref. Rel.) Loop

1.- CDIGO DE BLOQUE UNITARIO. La Accin a Repetir.- Grabndola. OJO! con la Ref. Relativa. 2.- CRITERIO DE SALIDA DE BUCLE. Condicin booleana.

D) DESVIAR CELDAS (con Referencia Relativa) 1.- A PARTIR DE LA CELDA ACTIVA.- Fila:(+) = Abajo; Columna:(+) = Derecha. 2.- ActiveCell.Offset(Fila,Columna).Select E) FUNCIONES, CON ASISTENTE
1.2.3.4.SELECCIONE EN LA CELDA DONDE SE QUIERE EL RESULTADO. CLIC EN BOTN SELECCIONAR LA FUNCIN SEGN LA CATEGORA. DAR LOS ARGUMENTOS REQUERIDO. Para seleccionar una celda (como argumento).- Clic botn de la derecha. OBSERVAR EL RESULTADO: debajo de los argumentos. 5.- FUNCIONES ANIDADAS.- Como Argumento dentro de la Funcin Contenedora. CLIC EN LISTA (SUP. IZQ.).

F) SI CONDICIONAL
1.- SI EL VALOR DE LA EXPRESIN ES VERDADERA, EJECUTAR ESTAS INSTRUCCIONES. 2.- SI NO, EJECUTAR ESTAS OTRAS INSTRUCCIONES. Sintaxis: If Expresin Booleana Then
INSTRUCCIONES SI LA EXPRESIN = VERDADERO.

Else
INSTRUCCIONES SI LA EXPRESIN = FALSO.

End If

Tips

64

2. REFERENCIA POR DESPLAZAMIENTO ENTRE CELDAS


A) REFERENCIA ABSOLUTA La Ref. Absoluta es con respecto a la hoja; independientemente de la celda activa o la seleccin anterior. Siempre ir (o har referencia) a tal(es) celda(s). Ej 1: o Ej 2: o
Range("A1").Select Cells(1,1).Select Range("A1:D3").Select
Siempre desde A1 (esq. sup. izq.) hasta D3 (esq. inf. der.) Siempre la celda A1

Range(Cells(1,1),Cells(4,3)).Select

B) REFERENCIA RELATIVA La Ref. Relativa es con respecto a la celda activa, considerndose sta como el origen (0,0); siendo el desplazamiento por (Filas, Columnas). _ _
( 0 ,0 )

+ Columnas

+ Filas Ej 1:
ActiveCell.Offset(1,0).Select A partir de la CeldaActiva, desvate 1 celda abajo y 0 a la derecha y selecciona esa celda. ActiveCell.Offset(1,0).Range("A1").Select Este ejemplo es similar al anterior, ya que, por omisin, Range("A1") es una sola celda a partir de la desviacin {Este ejemplo es tal como codifica la Grabadora de macros}. ActiveCell.Offset(2,1).Range("A1:B2").Select Esta sentencia es tal como se codifica con la Grabadora de macros.

Ej 2:

Ej 3:

Range(ActiveCell.Offset(2, 1), ActiveCell.Offset(3, 2)).Select


Este cdigo es ms verstil, ya que al ser nmeros de filas y columna (no letras): podemos usar variables en ellos.

Tips

65

3. REFERENCIA A CELDAS DENTRO DE CLCULOS


CLCULOS CON FRMULAS Y FUNCIONES Ejemplo: Caso de la Funcin SUMA. A) REFERENCIA ABSOLUTA (con respecto a la Hoja de clculo) Ej: Frmula en Excel, celda J4: Frmula codificada en VBA: o
ActiveCell.FormulaR1C1 = "=Sum(R5C10:R19C11)" Range("J4").FormulaR1C1 = "=Sum(R5C10:R19C11)"
Cadena de caracteres Tipo Texto = String

=SUMA($J$5:$K$19)

Descripcin:

Sumar desde la celda (Rengln 5 Columna 10) Absolutos hasta la celda (Rengln 19 Columna 11) Absolutos (con respecto a la hoja).

B) REFERENCIA RELATIVA (con respecto a la Celda con el clculo) Ej: Frmula en Excel, celda J4: Frmula codificada en VBA: o
ActiveCell.FormulaR1C1 = "=Sum(R[1]C:R[15]C[1])" Range("J4").FormulaR1C1 = "=Sum(R[1]C:R[15]C[1])"
Cadena de caracteres Tipo Texto = String

=SUMA(J5:K19)

Descripcin:

Sumar desde la celda 1 Rengln Abajo (a partir de la celda con la frmula) y la misma Columna (de la celda con la frmula) [o sea, 0 Columnas a la Derecha] hasta la celda 15 Renglones Abajo (a partir de la celda con la frmula) y 1 Columna a la Derecha (A partir de la celda con la frmula).

C) OBSERVACIONES:
1.- En Referencia Absoluta: a la derecha de la R (Rengln) y la C (Columna) van los nmeros Absolutos (sin corchetes), del No. de Rengln o No. de Columna de la Hoja de clculo. Es decir, la Columna A = 1, B = 2, C = 3, etc. 2.- En Referencia Relativa: a la derecha de la R (Rengln) y la C (Columna) van los nmeros Relativos (con corchetes), de la cantidad de Renglones y de Columnas por desviar a partir de la Celda Calculada. Considerando la celda con el clculo como Origen (0,0), si no hay desvo de Renglones o Columnas slo se pone la Letra R o C (sin nmeros ni corchetes), es decir, en el ejemplo, las referencias a las celdas por sumar, NO irn as: R[1]C[0]:R[15]C[1] 3.- Se pueden hacer combinaciones de Ref. Absolutas y Relativas dentro de una misma frmula.

Tips

66

4. TRABAJO CON ARCHIVOS DE OTROS SISTEMAS (.txt y .dbf)


A) ARCHIVOS DE TEXTO Muchos sistemas exportan informacin mediante reportes en archivos de texto con cierta estructura en el acomodo de tal informacin. Para manipular esta informacin en Excel, primero se debe definir la forma en que se abrir tal archivo para que se pueda acomodar en la cuadrcula de la hoja de clculo. Son dos formas: ancho fijo y delimitados. Estando en Excel, muestre el dilogo Abrir (men Archivo Abrir). En la lista Tipo de Archivo: seleccione Archivos de texto. Active la carpeta donde est el archivo de texto, seleccinelo y bralo. Aparecer el Asistente para importacin de texto paso 1 de 3. Seleccione el Tipo de datos originales: a) DE ANCHO FIJO Los archivos de texto de ancho fijo, son los que tiene una Estructura de Columnas con un ancho de determinado nmero de caracteres por cada columna. b) DELIMITADOS Los archivos de texto delimitados, son los que su estructura de datos esta organizada (delimitada) por algn carcter especial: como una coma, tabulador u otro. 6. Si no desea importar los encabezados del informe, defina Comenzar a importar en la fila: 7. El Origen de archivo: por lo general ser Windows (ANSI). Clic en Siguiente>. 8. En el paso 2 de 3: a) DE ANCHO FIJO Puede redefinir el ancho de las columnas: arrastrando sus lneas verticales de separacin. Por lo general, no se necesita cambiarlos. Clic en Siguiente>. b) DELIMITADOS Si el archivo es un informe con estructuras en columnas, seleccione el separador que las delimitar. Si es un solo texto sin columnas (p.e. una factura o cualquier otro documento que no sea una lista) desmarque todos los separadores. Las dems opciones djelas por omisin. Clic en Siguiente>. 9. En el paso 3 de 3, puede establecer el formato de los datos en cada columna: seleccinela y marque un formato. Tambin puede no importar columnas que no requiera. Normalmente, el formato General funciona bien. Clic en Terminar. 10. Tiene la informacin del archivo texto acomodada en la hoja de clculo, es probable que deba cambiarle el diseo, p.e. eliminar la fila de separacin entre encabezado y datos. Hgalo con una automatizacin. 1. 2. 3. 4. 5.

Tips 11. Si grab el proceso de importacin, el cdigo qued algo parecido a esto: a) DE ANCHO FIJO
ChDir "C:\Mis documentos\Asistente" Workbooks.OpenText FileName:="C:\Mis documentos\Asistente\Ped9911.txt" , _ Origin:=xlWindows, StartRow:=4, DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, 1), Array(8, 1), Array(20, 1), Array(26, 1), Array(41, 1), Array(49, 1))

67

b) DELIMITADOS
ChDir "C:\Mis documentos" Workbooks.OpenText FileName:="C:\Mis documentos\FACT08", Origin:=xlWindows , _ StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _ Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1)

Argumentos: 1.- FileName Nombre completo del archivo [paso 3]. 2.- Origin Origen del archivo [paso 7]. 3.- StartRows Nmero de fila de Inicio, a partir de la cual importar [paso 6]. 4.- DataType Tipo de datos originales, en funcin de su estructura [paso 5]. 5.- TextQualifier Define el calificador de texto (comillas) [paso 8b]. 6.- ConsecutiveDelimiter Si hay delimitadores consecutivos, forma slo uno [paso 8b]. 7.- Tab, Semicolon, Comma, Space, Other Son los posibles delimitadores [paso 8b]. 8.- FieldInfo Matriz con el diseo del ancho de columnas [paso 8]. Normalmente, slo FileName se generaliza para cualquier otro archivo los dems quedan fijos, ya que la macro funcionar slo para archivos con misma estructura.

Slo para Delimitados

B) ARCHIVOS DE BASE DE DATOS (.dbf) Muchos otros sistemas exportan su informacin mediante archivos tipo dBase (.dbf) con la estructura de columnas bien definida. Con este tipo de archivos, Excel no tiene problemas para abrirlos y manipular tal informacin, ya que es compatible totalmente a la cuadrcula de la hoja de clculo. Slo siga estos pasos: 1. Estando en Excel, muestre el dilogo Abrir (men Archivo Abrir). 2. En la lista Tipo de Archivo: seleccione Archivos dBase. 3. Active la carpeta donde est el archivo dbf, seleccinelo y bralo. C) PEDIR AL USUARIO ARCHIVO POR ABRIR 1. Archivos de texto: antes del mtodo OpenText, coloque esta sentencias:
Dim NombreDeArchivo As String NombreDeArchivo = Application.GetOpenFilename("Archivos de texto,*.txt") If NombreDeArchivo = False Then Exit Sub

Y reemplace el valor fijo (con todo y comillas) del argumento FileName por:
Workbooks.OpenText FileName:=NombreDeArchivo, ...

2. Archivos dbf: dem, pero el argumento de GetOpenFilename es: "Archivos dBase,*.dbf"

Tips

68

5. CMO LOCALIZAR PROPIEDADES (no codificable con la grabadora)


PROPIEDADES DE OBJETOS QUE NO PUEDEN MANIPULAN DIRECTAMENTE EN EXCEL. A) SITUACIN: Es sabido que los Botones en las Barras de herramientas que efectan acciones alternantes como el botn de formato Negrita, quedan presionados cuando aplican tal condicin (o sea, es verdadera) y quedan normales (no presionados) cuando tal condicin no aplica (o sea, es falsa). B) RETO Y OBJETIVO: El reto a salvar es, cmo utilizar la caracterstica presionado/normal del Botn de herramienta segn la condicin alternante. Por ejemplo, tomando el caso de la prctica 3 Alternar valor de una propiedad, esta macro la asignaremos a un Botn de herramienta (cuyo nombre ser: Alternar Ver Frmulas) en nuestra Barra de herramientas personalizada. El objetivo ser lograr que al mostrar las frmulas, el botn aparezca presionado y, al ocultarlas, regrese a su estado normal. C) CONOCIMIENTO PREVIO: Para lograr nuestro objetivo, debemos conocer la Estructura de Objetos de Excel {No neces ariamente conocer cada objeto, su posicin jerrquica, ni sus propiedades y mtodos; sino ms bien, su lgica}; por lo menos, tener la idea de que las Barras de herramientas son objetos directos del objeto Aplicacin Excel (as como los Libros de trabajo) y stas son contenedores de objetos Botones de Herramienta.

Tambin, es necesario hacer referencia a los elementos especficos de cada Coleccin; aqu, lo haremos para nuestra Barra de herramientas y para su Botn que ejecuta la macro MostrarOcultarFrmulas. Lo menos fcil es localizar qu propiedad es la que modifica el estado presionado/normal del botn de herramienta, ya que sta no podemos manejarla desde Excel, ni, por lo tanto, codificarla con la grabadora de macros.

Tips

69

Tips D) CMO CODIFICAR LA REFERENCIA A UN OBJ ETO:

70

Para hacer referencia a cualquier objeto y mejor an, para objetos no tan utilizados (contrariamente al ms comn, el objeto Rango), la forma ms sencilla es grabar alguna accin que implique a tal objeto y, con esto, tendremos la sintaxis del cdigo que har referencia a dicho objeto. Aqu, grabaremos una macro con el nombre AlternarEstadoDelBotn; cuya accin por codif icar es: agregar algn botn a nuestra Barra Revisando el cdigo, vemos esto: Application.CommandBars(Mi Barra).Controls.Add .....
Al especificar el nombre de un elemento, se devuelve la referencia a nuestra barra de herramienta.

Objeto Applicacin Excel (en el mximo nivel de jerarqua)

Objeto Coleccin Barra de herramientas

Objeto Coleccin Controles del objeto Padre Mi Barra.

En esta macro, se codific el mtodo Agregar (Add, con sus argumentos) del objeto coleccin Controles; agregar un botn fue el pretexto para obtener el cdigo que refiere al objeto Mi B arra y a nuestro Botn Alternar Ver Frmulas {que no se codific como elemento especfico}, por lo que reemplazaremos, desde .Add ..... [hasta el final de la sentencia] por el nombre de nuestro Botn, para hacer referencia a l especficamente; la sintaxis queda as:
Application.CommandBars(Mi Barra).Controls(Alternar Ver Frmulas)

Uso de la funcin MsgBox temporalmente para evitar error en cdigo: Sin embargo, como esta sintaxis no es una sentencia completa, ya que no estamos usando un mtodo ni devolviendo o asignando una propiedad, esto ocasionar un error al ejecutar la macro; para evitarlo usamos la funcin MsgBox al inicio del rengln, as:
MsgBox Application.CommandBars(Mi Barra).Controls(Alternar Ver Frmulas)

Tips

71

E) CMO LOCALIZAR UNA PROPIEDAD NO CODIFICABLE (desde la r eferencia a un objeto): El control desde VBA sobre la Aplicacin Excel, es significativamente mayor comparado con el que, manualmente, el usuario tiene sobre sta; ya que hay varias propiedades de objetos que no se pueden manipular directamente en Excel; por consecuencia, no pueden codificarse con la grabadora de macros {ya que sta, slo trabaja las acciones realizadas manualmente por usted}. Un ejemplo de esto, es la propiedad que modifica el estado del botn de herramienta; adems, para complicar ms el reto, no conocemos su nombre!!Pero, por lo menos, ten emos la sintaxis de referencia al botn. Ejecutaremos la macro paso a paso, estando el cursor dentro de la macro, presionando una vez la tecla <F8>, con esto, entramos en ejecucin y es lo que necesitamos para revisar todas las propiedades (con su valor actual) de nuestro botn. Pasos para revisar las propiedades de un objeto (con cdigo en ejec ucin): 5. Seleccione slo la expresin que hace referencia al objeto (sin incluir la propiedad o mtodo, si existe). Puede ser una variable almacenando tal objeto. 6. Haga una Inspeccin rpida de la expresin seleccionada con teclas <Shift + F9>. 7. Agregue la expresin a la ventana Inspecciones, con el botn Agregar. Puede cambiar el tamao de esta ventana, arrastrando su borde superior. 8. De clic en el signo + para desplegar todas sus propiedades {las de Operacin: con valores y sin signo +, y las de referencia a otros objetos: sin valor y con signo +} 9. Esta tcnica es por intuicin, inspeccionado cada propiedad (de accin) y su valor actual, al encontrar alguna que posiblemente sea, aplquela, si no es, cmbiela [mtodo a prueba y error]. Casi al final, aparece la propiedad State (Estado) con el valor = msoButtonDown. Probaremos con sta: cerramos la ventana Inspeccin y, al final de la expresin que devuelve la referencia al objeto botn, tecleamos .state F) CMO USAR LA AYUDA PARA LA PROPIEDAD: Colocamos el cursor en medio de la propiedad y vemos la ayuda con tecla <F1>. Vemos que los valores que puede tomar esta propiedad son: msoButtonUp o msoButtonDown: copiamos la primera y activamos la ventana de VBA; asignamos el valor a la propiedad completando la expresin con un signo = y pegamos el valor.

Tips

72

G) CMO USAR LA ESTRUCTURA IF PARA CONDICIONES ALTE RNANTES: La expresin que asigna el valor Arriba a la propiedad Estado de nuestro botn, podremos convertirla en la expresin booleana (o condicin) que evaluar IF (Si condicional) y as, comparar el valor actual del Estado del botn con la constante BotnArriba, para hacerlo, reemplazamos MsgBox por If y al final de la expresin booleana colocamos Then, damos <Enter> y <Tab> para dar sangra. Si la condicin es Verdadera, o sea, el botn esta Arriba (no presionado), debemos dejarlo presionado: asignando a State el valor = msoButtonDown (cpielo de la ayuda). Si la condicin es Falsa, o sea, el botn no esta Arriba, por lo tanto, esta Abajo (presionado), por lo que debemos dejarlo normal: asignando a State el valor = msoButtonUp H) CMO USAR LA ESTRUCTURA WITH CON UN OB JETO: Con la estructura If nos damos cuenta que utilizaremos 3 veces la referencia al objeto Botn; por lo que es conveniente usar una estructura With que anide a la estructura If. Antes de hacerlo debemos parar la ejecucin. Todo esto quedar as:
With Application.CommandBars("Mi Barra") _ .Controls("Alternar Ver Frmulas") If .State = msoButtonUp Then .State = msoButtonDown Else .State = msoButtonUp End If End With

Probemos la macro, toda con <F5> o Paso a paso con <F8>. I) CMO LLAMAR UNA MACRO DESDE OTRA: Para cambiar la condicin del Botn al presionarlo, tenemos que ejecutar esta macros desde, y al terminar, la macro MostrarOcultarFrmulas, para esto, copiamos el nombre de esta macro secundaria y lo pegamos antes de End Sub de la macro principal (o macro de llamada) Mo strarOcultarFrmulas. El cdigo quedar as:
Sub MostrarOcultarFrmulas() BolVerFrmulas = ActiveWindow.DisplayFormulas ActiveWindow.DisplayFormulas = Not BolVerFrmulas AlternarEstadoDelBotn End Sub

Tips Probamos el botn de herramienta varias veces

73

Tips

74

6. ORDENAR Y FILTRAR LISTA DE DATOS (por fechas)


A) ORDENAR LISTA Ordenar una lista en manualmente es muy sencillo, teniendo la lista en la hoja activa, simplemente seleccione una celda (slo una) de la columna criterio (o sea, la que indicar el orden) y haga clic en el botn Orden ascendente o en el botn Orden descendente. Al seleccionar slo una celda, Excel considera la regin actual (CurrentRegion) como la lista completa. Si selecciona ms de una celda (pero no toda la lista), tal seleccin se toma como una lista y ordenar sin considerar los datos no seleccionados. Por ejemplo, en una lista los datos inician en A1 y la columna criterio es la B. Si graba sus acciones manuales, le quedar algo as:
Range("B2").Select Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Cmo se codificara si utiliza men Datos Ordenar? Identifique la informacin que puede cambiar en este cuadro de dilogo con relacin a los parmetros del cdigo: los 3 ltimos corresponden al dilogo del botn Opciones Argumentos: 1.- Key1 2.- Order1 3.- Header Referencia a alguna celda de la columna criterio. Constante que indica el orden (Ascendente o Descendente). Constante que determina si la primera fila es de encabezado: xlYes, xlNo o xlGuess (Excel lo determinar) . 4.- OrderCustom Nmero del Orden personalizado (1 = Normal). 5.- MatchCase Distingue las Maysculas y Minsculas (True) o No (False). 6.- Orientation De arriba a abajo (xlTopToBottom) o de izq. a der. (xlLeftToRight). Los 2 primeros pueden ser hasta 3 columnas criterio y tipo de orden. B) FILTRAR LISTA DE DATOS Cuando requiera slo un grupo de registros que cumplan ciertos requisitos, lo mejor es usar la herramienta de Autofiltro: 1. Seleccione cualquier y slo una celda de la lista. 2. Men Datos Filtro Autofiltro, aparecern botones con flecha para listas desplegables. 3. De una columna criterio, despliegue la lista y seleccione un elemento; p.e. en Localidad seleccione Culiacn.

Tips

75

4. O si requiere por fecha, el problema es que muestra slo registros con el da seleccionado. Para que muestre por un periodo, deber indicrselo: 4.1. De la lista desplegable, seleccione la opcin (Personalizar). 4.2. En la primera lista seleccione es mayor o igual que 4.3. En la segunda lista teclee el 1 da del mes y ao, p.e. 1/2/00 4.4. Combine el criterio anterior con el siguiente: seleccione Y 4.5. En la tercera lista seleccione es menor que 4.6. En la cuarta lista teclee el 1 da del mes siguiente, p.e. 1/3/00 y Aceptar. Si lo grab en una macro (este caso fijo), el cdigo ser similar a ste:
Range("B2").Select Selection.AutoFilter 'Sentencia no indispensable, puede eliminarla. Selection.AutoFilter Field:=2, Criteria1:=">=1/12/99" , Operator:=xlAnd, _ Criteria2:="<1/1/00"

Quite el filtro manualmente en Excel y ejecute la macro Qu sucede? Las fechas la codifica con formato en espaol, y al ejecutarlas las trata con formato ingls. Solucin: Generalizar el cdigo, pidindole fecha al usuario, reemplazar casos fijos por variables (concatenando) y darle formato ingls (m/d/aa):
Dim MesAo As String MesAo = InputBox("Dar 1 da mes y ao (con formato: d/mm/aa) por filtrar:") If MesAo = "" Or Not IsDate(MesAo) Then Exit Sub 1 argumento de Format Selection.AutoFilter _ Ayuda: ponga Cursor y <F1> Field:=2, _ Criteria1:=">=" & Format( DateSerial(Year(MesAo), Month(MesAo), 1), "m/d/yy"), _ Operator:=xlAnd, _ Criteria2:="<" & Format( DateSerial(Year(MesAo), Month(MesAo) + 1, 1), "m/d/yy")

C) COPIE LA LISTA FILTRADA A OTRA HOJA (NUEVA): 1. Seleccione la celda con el 1 encabezado de la lista, d <Ctrl + *> y copie: <Ctrl + C> . 2. Inserte una hoja: men Insertar Hoja de clculo y nmbrela (2clic en su pestaa). 3. Pegue: <Ctrl + V> y quite el modo de copia <Esc>. El cdigo generado (quitando lo que no se requiere y generalizando) se parecer a este:
Range("A1").CurrentRegion.Copy Sheets.Add ActiveSheet.Name = "Aux" ActiveSheet.Paste Application.CutCopyMode = False [paso 1: las 3 sentencias generadas, en una sola] [paso 2] Puede simplificar ests 2 sentencias en 1? [paso 2] [paso 3] [paso 3]

Tips

76

7. INFORMES DE SUBTOTALES Y AUTOFORMATO


Si necesita realizar un informe de los datos de su lista (base de datos) en Excel, imprimir la lista sola no es suficiente. Debe crear un informe con el nivel de detalle que sea fcil de interpretar para otras personas. Use las herramientas para ordenar y subtotales de Excel. Despus, d formato a su informe e imprmalo (o envelo por correo electrnico). Un informe de subtotales es una tabla donde a partir de una lista con sus registros (filas) ordenados por grupos, se insertan filas con subtotales al final de cada uno de dichos grupos, calculando totales de los datos por campos (columnas) en una o ms de stas. Puede haber varios subtotales con diferentes clculos. A) PASOS SEMI-ATOMTICOS: 1. Muestre su lista. P.e. Abra el libro Tip 07 SubTotales.xls en su carpeta Asistente. 2. Ordene por grupos, con la columna criterio [Tip 06]. P.e. por Comisionista. 3. Active una celda de su lista, use men Datos Subtotales y d los datos pertinentes: 3.1. Para cada cambio en: seleccione su columna criterio. P.e. Comisionista. 3.2. Usar funcin: seleccione el clculo que desee. P.e. Suma. 3.3. Agregar subtotales a: marque las columnas que requiere calcular sus datos con subtotales. P.e. Cantidad y Total. 3.4. Las 3 opciones de abajo, haga clic der. para ayuda, y prubelas. P.e. djelas por omisin y D Aceptar. 4. Dele formato a su informe: men Formato Autoformato y seleccione el que guste de la lista de la derecha. P.e. Clsico 3. 5. Clic en el botn Opciones>> y desmarque los conceptos que no desee dar formato. P.e. desmarque la Alineacin. D Aceptar. 6. Autoajuste todas las columnas. 7. Para finalizar, si gusta, muestre slo los Subtotales: haga clic en el cuadro pequeo con el No. 2 (en la parte superior del esquema, a la izquierda de la hoja). B) PROCESO AUTOMATIZADO: Si grab sus acciones, la macro debi quedar algo as (sin cdigo innecesario):
Range("C2").Select [paso 2] Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Selection.Subtotal GroupBy:=3, Function:=xlSum, TotalList:=Array(6, 8), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True [paso 3] Selection.AutoFormat Format:=xlRangeAutoFormatClassic3, Number:=True, Font _ :=True, Alignment:=False, Border:=True, Pattern:=True, Width:=True [paso 4 y 5] Columns.AutoFit [paso 6] ActiveSheet.Outline.ShowLevels RowLevels:=2 [paso 7]

Tips

77

8. TABULAR VALORES DE MODELO DE CLCULO Y BUSCAR OBJETIVO


Un modelo de clculo, como el caso de la prctica para el Crdito de un vehculo [13.2], solamente da informacin para un solo caso analizado: introduciendo los datos correspondientes, se visualizan los resultados de tal caso nico. As, cuando requerimos analizar varios casos, cambiando por ejemplo un solo dato con una serie de valores, debemos cambiar manualmente el valor de dicho dato cada vez. Una solucin es generar una tabla donde una de sus columnas tendr la serie de valores para tal dato base; y en las dems columnas los resultados obtenidos o informacin relevante del modelo de clculo. Para entender mejor esto, veamos un ejemplo prctico A) TABULACIN DIRECTA 1. Abra el libro Tip 08 Tabular Modelo.xls en su carpeta Asistente. Es similar al ejercicio [13.2]. 2. En la hoja Crdito (donde esta el Modelo), identifique las celdas con los valores relevantes y resultados, segn las columnas de la tabla en la hoja Tabular Directo. 3. En el Modelo, nombre tales celdas con el prefijo ResDir (Resultado Directo) enumerando segn el orden de columna de Tabular Directo. P.e. la celda I7 (Anticipo) como ResDir1; la celda I8 (Crdito) como ResDir2 y la celda I11 (Pago mensual) como ResDir3. Es posible nombrar una celda con varios nombres. 4. Inicie grabacin de una macro, nmbrela GenerarTabularDirecto: 4.1. Seleccione hoja Tabular Directo, y celda B5. Visualice cdigo mientras graba [1.2.1-Tip]. A grabado la Posicin Inicial de la estructura de ciclos DoLoop [9.2.3]. 4.2. Detenga la grabacin. El cdigo restante deber escribirlo. 5. Explicando la lgica del proceso: 5.1. El Precio en la celda activa lo deber asignar a la celda Precio del Modelo. Con esto, Excel, automticamente, calcula el Modelo y obtiene sus resultados. No necesita ir a la hoja del modelo, ya que los nombres son globales en el libro. 5.2. Llene el rengln de la celda activa. Use ForNext [9.2.1], donde la variable contador ser desde 1 hasta la cantidad de columnas con resultados. A partir de la celda activa se desviar 1 celda a la derecha (sin seleccionarla) y colocar el valor de la celda ResDir1. Luego, a partir de la misma celda activa se desviar 2 y colocar ResDir2. Y, as sucesivamente, hasta llenar el rengln. 5.3. Codifique la Posicin Siguiente (en forma relativa) 1 celda abajo desde la activa. 5.4. El proceso de 5.1 y 5.2 corresponde al bloque unitario de instrucciones del ciclo DoLoop. Dele sangra [2.4.3-3.Tip] junto con la Posicin Siguiente 5.3. 5.5. Cree la estructura DoLoop: Hacer hasta que la celda activa este vaca (). 6. El cdigo escrito debe ser ste:
Sub GenerarTabularDirecto() Sheets("Tabular Directo").Select Range("B5").Select [paso 4.1]

Tips
Do Until ActiveCell = "" Range("Precio") = ActiveCell For i = 1 To 3 ActiveCell.Offset(0, i) = Range("ResDir" & i) Next i ActiveCell.Offset(1, 0).Select Loop End Sub [paso 5.5] [paso 5.1] [paso 5.2] [paso 5.3] [paso 5.5]

78

Pruebe la macro paso a paso Revise la columna Mensualidad. Algunos valores tienen ms de 2 decimales Cmo redondear? Use la funcin de hoja de clculo Round [7.3.3]. B) TABULACIN INVERSA, BUSCANDO OBJETIVO Este proceso es muy similar a la tabulacin directa, slo que el clculo es hacia atrs: teniendo el dato de Mensualidad obtnme el Precio. 1. Teniendo abierto el libro Tip 08 Tabular Modelo.xls, en la hoja del Modelo, identifique las celdas con resultados, segn las columnas de la tabla en la hoja Tabular Inverso. 2. En el Modelo, nombre tales celdas con el prefijo ResInv (Resultado Inverso) enumerando segn el orden de columna de Tabular Indirecto. 3. Inicie grabacin de una macro, nmbrela GenerarTabularInverso: 3.1. Seleccione hoja Tabular Inverso, y celda B5. 3.2. Detenga la grabacin. El cdigo restante deber escribirlo. 4. En la hoja del Modelo, grabe una macro temporal con el proceso de Buscar Objetivo (este paso 4 es en vez del 5.1 de Tabulacin Directa): 4.1. Seleccione la celda PagoMensual y use men Herramientas Buscar objetivo 4.2. D los siguientes valores: Definir la celda: I11, con el valor: 2000, para cambiar la celda: clic en Precio (C5) y Aceptar Analice Estado de bsqueda y <Enter>. Pare grabacin. 4.3. Resultado: Range("I11").GoalSeek Goal:=2000, ChangingCell:=Range("C5") 4.4. Generalice el cdigo con rangos nombrados y referencia a celdas:
[PagoMensual].GoalSeek Goal:=ActiveCell, ChangingCell:=[Precio]

5. Los dems pasos son semejantes a Tabulacin Directa, pero con prefijo ResInv. 6. El cdigo terminado debe ser ste:
Sub GenerarTabularInverso() Sheets("Tabular Inverso").Select Range("B5").Select Do Until ActiveCell = "" [PagoMensual].GoalSeek Goal:=ActiveCell, ChangingCell:=[Precio] For i = 1 To 3 ActiveCell.Offset(0, i) = Range("ResInv" & i) Next i ActiveCell.Offset(1, 0).Select Loop End Sub

Prubela Comprela con la macro GenerarTabularDirecto Cules son sus diferencias? son muy pocas. Tambin, solucione el problema de redondeo Round [7.3.3].

ndice

79

NDICE ALFABTICO
& (concatenacin) [8.5.1], 40 [], notacin abreviada de rango [4.1.5-2], 22 =, >, >=, <, <=, <> (operadores de comparacin) [8.5.1], 40 A Bloque unitario de instrucciones [9.2.3], 43 Booleano, tipo de dato [8.3.1], 38 Botn alternante; Ej. [Tip5], 68 Botn de herramienta [12.1.1], 49 Botn en hoja [12.1.2], 50 Botn sobre hoja [12.1.2], 50 Accelerator 50 Accelerator y Caption, propiedades [14.1.2-4], 58 Botones de comando [14.1.4], 59 Botones de opciones, ActiveX [14.1.2], 58 Access 4 BoundColumn, propiedad [13.2.3-5], 55 Accin automtica [12], 49 Buscar cdigo [2.4.3-6], 9 ActiveCell [4.1.4-5], 22 Buscar objetivo [Tip8-B.4], 76 ActiveX, control 50 Bsqueda generalizada; Ej. [14.2.2-11], 61 ActiveX, controles [13.2], 53 C Adam Smith, economista [9.2], 42 Address, propiedad [4.1.5], 22 Adjuntar barra [12.1.1-], 49 Ajustar a cuadrcula [13.2.1-2], 53 Al abrir libro, evento [12.2.2-1], 51 Al activar cualquier hoja, evento [12.2.2-2], 51 Al activar hoja, evento [12.2.1-2], 51 Al cambiar seleccin, evento [12.2.1-1], 51 Al cambiar, evento [12.2.1-1], 51 Al desactivar hoja, evento [12.2.1-2], 51 Alinear controles ActiveX [14.1.2-5], 58 Almacenamiento de macros [2.2], 7 And (operador lgico) [8.5.1], 40 Anidadas, estructuras de control [9.3], 44 Archivos de base de datos [Tip4-B], 67 Archivos de otros sistemas [Tip4], 66 Archivos de texto [Tip4-A], 66 Area de trabajo [2.4.3-7], 9 Argumentos [6.3], 33 Argumentos con nombre [6.3.4], 33 Argumentos indeterminados [6.3.3], 33 Argumentos Opcionales [6.3.2], 33 Argumentos, uso de [6.3.1], 33 Aritmticos, operadores [8.5.1], 40 Asignar contenido de rango [4.1.4-5], 21 Asignar macro [12.1.1], 49 Autoformato de Tablas [Tip7], 74 Automatizacin 3 Automatizaciones complejas [6.2], 32 Ayuda, explorar objetos con [3.7.2], 14 B Barra de herramienta [12.1.1], 49 Barra de herramientas Visual Basic [1.4.3], 6 Barra herramientas, adjuntar [12.1.1-], 49 Base de datos relacionales 4 Bip [9.2.1], 42 C.A.S.E. [4.3], 28 Cadena (Texto), tipo de dato [8.3.1], 38 Clculos [4.1.4], 19 Clculos en VBA [8.5], 40 Cambiar sentencia por ejecutar [10.2.3], 46 Cancel, propiedad ActiveX [14.1.4-3], 59 Caption, propiedad 50 Casilla de verificacin [14.1.3], 58 Cells, propiedad [4.1.2], 18 Cerrar formulario [14.1.4-4], 59 Cerrar libro sin guardar, Ej. [3.7.3-b], 15 Ciclos automatizados [9], 41 Ciclos, estructuras de control [9.2], 42 Click, evento predeterminado [14.1.3-6], 58 Clipper 4 Close, mtodo; Ej. [3.7.3-b], 16 Cdigo VBA [8.1], 36 Coleccin de objetos [3.6], 11 Coleccin de rangos [4.1.2], 17 Colecciones, trabajar con [9.2.2], 43 Column, propiedad [4.1.5], 22 ColumnCount, propiedad [13.2.3-5], 55 Columns, propiedad [4.1.2], 18 ColumnWidths, propiedad [13.2.3-6], 55 Combinacin de teclas [1.3.1], 6 Comparacin, operadores de [8.5.1], 40 Compilar cdigo [10.2.1], 45; [5.2.3-4], 31 Comunicacin Excel y VBA 3 Concatenacin, operador de [8.5.1], 40 Condiciones alternantes; Ej. [Tip5-G], 71 Constantes incorporadas [8.6.1], 40 Constantes personalizadas [8.6.2], 40 Constantes, uso de [8.6], 40 Control Barra de desplazamiento [13.2.2], 55 Control Cuadro combinado [13.2.3], 55 Control de nmero [13.2.1], 53 Control Lista desplegable [13.2.3], 55 Controlador de error [11.2], 47 Convertir tipo de dato [8.3.2], 38 Copiar cdigo [2.4.3-5], 9 Copiar lista filtrada [Tip6-C], 73 Copiar mdulos [5.2.2-5], 31 Count, propiedad; Ej. 12 Crdito vehicular; Ej. [13.2], 53 Cuadro de dilogo predefinidos [13.1], 52 Cuadro de entrada [13.1.1], 52 Cuadro de mensaje [13.1.2], 52 Cuadro de texto, control [14.1.3], 58 Cuadro de texto, control validar [14.3.3], 62 Cuadro de texto, objeto grfico [4.2.3], 27 CurrentRegion, propiedad [4.1.3], 18 Change, evento de hoja [12.2.1-1], 51 Change, evento predeterm. [13.2.1-7.4], 54 Chart, objeto [4.3.1], 28 ChartObject, contenedor [4.3.1], 28 CHOOSE, funcin [9.1.5], 42 D Date, funcin VBA [14.1.3-7], 59 DateSerial, funcin VBA [14.1.3-8], 59 dbf, archivos [Tip4-B], 67 Decimales a Enteros, Ej. [8.3.2], 38 Declaracin de variables [5.3.Tip], 31 Declaracin explcita [8.2.2], 37 Default, propiedad ActiveX [14.1.4-3], 59 Delphi 4 Depurar cdigo [10], 45 Desplazamiento Absoluto [1.4.2], 6; [Tip2-A], 64 Desplazamiento en cdigo [2.4.3-1], 9 Desplazamiento Relativo [1.4.2], 6; [Tip2-B], 64 Detener ejecucin [5.2.3-7], 31 Divisin de sentencias [2.4.3-2], 9 Do ... Loop [9.2.3], 43 E Editar macros 7 Editor de Visual Basic [5], 30 Ejecutar cdigo [5.2.3-5], 31 Ejecutar macro [1.2.2], 5 Ejecutar paso a paso [5.2.3-5], 31 Ejemplos de Automatizaciones 4 Eliminar cuentas; Ej. [9.2.3-2], 44 Eliminar macro [5.2.3-2], 31 Eliminar mdulos [5.2.2-6], 31 Enabled, propiedad de ActiveX [14.1.3-6], 58

ndice
End, propiedad [4.1.5], 22 EntireColumn, propiedad [4.1.3], 18 EntireRow, propiedad [4.1.3], 18 Entrada, cuadro de [13.1.1], 52 Err, objeto [11.2.2], 48 Error, nmero de; Ej. [11.3], 48 Errores depurables [10.1], 45 Errores, control de [11], 47 Estrategia de formularios [14], 57 Estructura de macro [2.4.1], 8 Estructuras condicionales [9.1], 41 Estructuras de control [9], 41 Evento, predeterminado [12.1.3], 50 Eventos automticos [12.2], 51 Eventos de formulario [14.1.3-7], 59 Eventos de hoja [12.2.1], 51 Eventos de libro [12.2.2], 51 Eventos de objetos [12], 49 Eventos por el usuario [12.1], 49 Eventos, asignar otros [12.1.3], 50 Examinador de objetos [5.1.5], 30 Explorador de proyectos [5.1.1], 30 Explorar objetos [3.7], 13 Exportar mdulos [5.2.2-7], 31 Expresin [8.5], 40 F F4, referencia en clculos [4.1.4-2], 20 F5, ejecutar [10.2.2], 46 F8, paso a paso [10.2.2], 46 Facilitar ejecucin de macros [12], 49 Facilitar uso de macro [13], 6 Facturas faltantes; Ej. [9.2.1-2], 42 Fecha, tipo de dato [8.3.1], 38 Fechas, filtrar lista con criterio [Tip6-B.4], 73 Fechas, formato ingls [7], 34; [14.2.2-8], 61, [Tip6-B.4], 73 Filtrada, copiar lista [Tip6-C], 73 Filtrar lista de datos (por fechas) [Tip6-B], 72 Finalizar ejecucin [5.2.3-7], 31 Flechas [4.2.2], 26 Flotante, ventana [5.1.], 30 For ... Next [9.2.1], 42 For Each ... Next [9.2.2], 43 Formas [4.2.1], 25 Formas, en variable [8.4.2], 39 Formato condicional; Ej. [9.2.3-1], 43 Formato de Tablas [Tip7], 74 Formula, propiedad [4.1.4-5], 22 FormulaR1C1, propiedad [4.1.4-5], 22 Formularios personalizados [14], 57 Formularios, crear [14.1.1], 57 Frmulas, automatizar [4.1.4], 19 Frmulas, grabar [4.1.4-4Tip], 21 Fotografas [4.2.4], 27 Fotos [4.2.3], 27 Invertir texto; Ej. [9.2.1-3], 43 Fox Pro 4 Is (operador de comparacin) [8.5.1], 40 Funcin, crear [7.2], 34 IsNumeric, funcin [8.3.1-Tip], 38 Funcin, partes [7.1.1], 34 J Funcionalidad de formulario [14.2], 60; [14.2.2], 61Jerarqua de objetos [3.5], 11 Funcionalidad; Ej. [14.2.1], 60 L Funciones de Excel en VBA [7.3.3], 35 LargeChange, propiedad 55 Funciones Excel, automatizar [4.1.4], 19 Left, propiedad [4.2.1], 26 Funciones Excel, con Asistente [Tip1-E], 63 Librera de objetos 3 Funciones personalizadas , usar [7.3], 35 Like (operador de comparacin) [8.5.1], 40 Funciones personalizadas [7], 34 Lneas [4.2.2], 26 Funciones personalizadas en celdas [7.3.1], 35 LinkedCell, propiedad [13.2.1-4], 53 Funciones personalizadas en cdigo [7.3.2], 35 Listas automticas [3.7.3], 15 Funciones VBA de conversin [8.3.2], 38 ListFillrange, propiedad [13.2.3-4], 55 Funciones VBA de texto [9.2.1-3], 43 ListWidth, propiedad [13.2.3-6], 56 Funciones VBA para decisiones [9.1.5], 42 Lgicos, operadores [8.5.1], 40 Function, procedimiento [6.1.1-2], 32 Llamada a procedimientos [6.2.2], 32 G M Generalizar automatizacin [8.2.3], 37 Macro 3 Generalizar macro, Ej. [4.3.2], 29; [14.2.2], 61 Macro, concepto [1.1], 5 GetOpenFileName, mtodo [Tip4-C], 67 Macros [5.2.3], 31 Grabadora de macros 3, 5 Manipular cdigo VBA [2.4], 8 Grabar macro [1.2.1], 5 Marco, ActiveX [14.1.2], 58 Grabar y ver cdigo [1.2.1], 5 Mensaje de alerta, evitar [11.2.3], 48 Grfica, en variable [8.4.2], 39 Mensaje, cuadro de [13.1.2], 52 Grficas, objetos [4.3.1], 28 Mtodos de objetos [3.4], 10 H Mtodos, explorar [3.7.2], 14 Habilitar controles ActiveX [14.1.3-6], 58 Modelo de clculo, Ej. [13.2], 53 Habilitar evento [12.2.2-], 51 Modificar cdigo [2.4.3], 9 Height, propiedad [4.2.1], 26 Modo diseo 50 Hoja indizada; Ej. [11.2.1-1], 48 Mdulo, ventana de [5.1.2], 30 I Mdulos [5.2.2], 30 If ... Then ... Else [9.1.2], 41 Mostrar Formulario [14.3.4], 62 If ... Then ... ElseIf ... Then [9.1.3], 41 Mostrar macros [2.1], 7 If ... Then [9.1.1], 41 MouseMove, evento [12.1.3-2], 50 Ignorar error [11.2.1], 47 Mover cdigo [2.4.3-5], 9 IIF, funcin [9.1.5], 42 MsgBox, instruccin [13.1.2], 52 Imgenes [4.2.4], 27 N Implementar Botones opcin [14.3.1], 62 Name, propiedad 50 Implementar Casillas verificacin [14.3.2], 62 Navegacin en cdigo [2.4.3-1], 9 Implementar Formulario [14.3], 62 Nombrar mdulo [2.2.1], 7 Importar mdulos [5.2.2-8], 31 Nombrar un rango [4.1.1], 17 Imprimir, cdigo en excel al [2.4.3-4], 9 Not (operador lgico) [8.5.1], 40 Inhabilitar controles ActiveX [14.1.3-6], 58 Notacin A1 [4.1.4-4], 20 Inhabilitar evento [12.2.2-], 51 Notacin abreviada de Rango [4.1.5-2], 22 InputBox, instruccin [13.1.1], 52 Notacin R1C1 [4.1.4-4], 20 Insertar mdulo [5.2.2-3], 31 Numrico, tipo de dato [8.3.1], 38 Inspeccin, ventana de [5.1.4], 30 O Inspeccionar valores [10.3], 46 Objeto Rango [4.1], 17 Interaccin con usuario [13], 52 Objetos comunes 17 Interfaz de usuario [14.1], 57 Objetos de Excel [3.1], 10 Interior, objeto; Ej. [4.1.6-2], 24 Objetos en variables [8.4], 39 Interrumpir macro [1.2.2], 5; [5.2.3-6], 31 Objetos grficos [4.2], 25

80

ndice
Objetos para Informes [4.3], 28 Obtener contenido de rango [4.1.4-5], 21-22 Offset, propiedad [4.1.3], 18 On Error Goto 0 [11.2], 47 On Error Resume Next [11.2], 47 Operadores [8.5.1], 40 Option Explicit [5.3.Tip], 31; [8.2.2], 37 Or (operador lgico) [8.5.1], 40 Orden de tabulacin [14.1.5], 59 Ordenar lista de datos [Tip6-A], 72 P Padre, objeto [3.5], 11 Parntesis con argumentos [6.3.1], 33 Parntesis, cuando usar [8.1.2], 36 Partes de procedimientos [6.1.2], 32 Paso a paso ejecutar [10.2.2], 46; [5.2.3-5], 31 Pedir al usuario archivo por abrir [Tip4-C], 67 Pegar cdigo [2.4.3-5], 9 Personalizar Editor VBA [5.3], 31 Pila de llamadas [6.2.2-Tip], 33 PivotTable, objeto [4.3.2], 29 Procedimiento 3 Procedimiento asociado [12], 49 Procedimientos VBA [6], 32 Progreso de bucle (ciclo) [10.3.3], 46 Propiedad, localizar [Tip5], 68; [Tip5-E], 70 Propiedad, ventana de [5.1.3], 30 Propiedades de objetos [3.3], 10 Propiedades y mtodos de operacin [3.4], 11 Propiedades y mtodos de referencia [3.3], 11 Propiedades, explorar [3.7.1], 13 Proteccin slo contra usuarios [13.2.1-7], 54 Proyecto VBA [5.2.1], 30 Punto de interrupcin [10.2.4], 46 Punto de interrupcin condicional [10.3.2], 46 Punto de interrupcin temporal [10.2.5], 46 Puntos, unidad de medida [4.2.1], 26 R [Tip2-A], 64 txt, archivos [Tip4-A], 66 Referencia Anidada, propiedades [4.1.5-5], 23 TypeName, funcin [8.3.1-Tip], 38 Referencia Combinada en Clculos [4.1.4-3], 20 U Referencia Global, propiedades [4.1.5-5], 23 Unload, propiedad de formulario [14.1.4-4], 59 Referencia Relativa en Clculos [4.1.4-1], 19; UserForm [14.1.1], 57 [Tip3-B], 65 V Referencia Relativa en Desplazamiento [1.4.2], 6; Validar cuadro de texto [14.3.3], 62 [Tip2-B], 64 Valores de entrada [6.3], 33 Regin Actual [4.1.3], 18 Valores de expresiones [10.3], 46 Renombrar Rango [13.2.3-Tip], 56 Valores por omisin en argumentos [6.3.2], 33 Reporteador dinmico 4 Value, propiedad [4.1.4-5], 21-22 Resize, propiedad [4.1.3], 18 Value, propiedad de botn opcin [14.1.2-4], 58 Row, propiedad [4.1.5], 22 Variable de objeto Rango; Ej. 12, 28, 29 Rows, propiedad [4.1.2], 18 Variable, Es necesaria? [8.2.4], 38 S Variables [8.2], 37 Salir de estructuras de control [9.4], 44 Variables de objeto [8.4], 39 Sangra a varias lneas [2.4.3-3], 9 Variables, dimensionar [8.2.1], 37 Seleccin dispersa [4.1.1], 17 Ventana Inspeccin [3.7.1], 13; [5.1.4], 30 Seleccionar cdigo [2.4.3-3], 9 W Seleccionar slo datos; Ej. [4.1.6-4], 24 Width, propiedad [4.2.1], 26 Select - Selection, eliminar [4.1.5-3], 22 With, estructura [4.1.5-4], 23; [2.4.3-4], 9 Select case [9.1.4], 42 SelectionChange, evento [12.2.1-1], 51 Sentencia, concepto [8.1], 36; [2.4.2], 8 Sentencias, tipos de [8.1.1], 36 Set, asignacin de objetos [8.4], 39 Simplificar tareas [1.1], 4 Sistema de Informacin Empresarial 4 Situacin de error [11.1], 47 SmallChange, propiedad 54, 55 Sonido al final del bucle (ciclo) [10.3.4], 46 String (Cadena), tipo de dato [8.3.1], 38 Sub, procedimientos [6.1.1-1], 32 SubTotales, informe de [Tip7], 74 Sugerencias para grabar [1.4], 6 Sumar grupos de cuentas; Ej. [9.2.3-3], 44 SWITCH, funcin [9.1.5], 42 T

81

Tabla dinmica, en variable [8.4.2], 39 Range propiedad [4.1.1], 17 Tabla dinmica, objeto [4.3.2], 29 Range con ActiveCell [4.1.6-1], 24 Tabular Modelo de Clculo [Tip8], 75 Range con Cells [4.1.6-1], 23, 24 Tabular modelo directamente [Tip8-A], 75 Rango de valores vlidos [13.3], 56 Tabular modelo inversamente [Tip8-B], 76 Rangos con nombre [4.1.1], 17 TakeFocusOnClick, propiedad 50 Rangos procesados [4.1.3], 18 Tareas repetidas 4 Rangos, en variable [8.4.1], 39 Teclas para moverse en cdigo [2.4.3-1], 9 Rectngulos [4.2.1], 25 Text, propiedad [4.1.4-5], 22 Reemplazar cdigo [2.4.3-6], 9 Texto (Cadena), tipo de dato [8.3.1], 38 Referencia a objeto, codificar [Tip5-D], 69 Tipo de datos de funciones [7.2.6], 35 Referencia a objetos por ndice; Ej. 12 Tipos de datos [8.3], 38 Referencia a objetos por nombre; Ej. 12 Referencia Absoluta en Clculos [4.1.4-2], 19; Tipos de procedimientos [6.1.1], 32 Toma de decisiones [9], 41 [Tip3-A], 65 Referencia Absoluta en Desplazamiento [1.4.2], 6;Top, propiedad [4.2.1], 26

You might also like