Manual Curso Excel Automatización

81
CURSO - TALLER: “AUTOMATIZACIÓN EN EXCEL” CONTENIDO 1 INTRODUCCIÓN ........................................................................................ 3 AUTOMATIZACIÓN ......................................................................................................................................................3 1 AUTOMATICE TAREAS REPETIDAS ........................................................ 4 1.1 USE MACROS PARA SIMPLIFICAR TAREAS ..........................................................................................................4 1.2 CÓMO GRABAR Y CÓMO EJECUTAR UNA MACRO ........................................................................................5 1.3 CÓMO FACILITAR EL USO DE UNA MACRO .......................................................................................................6 1.4 SUGERENCIAS PARA GRABAR MACROS ...........................................................................................................6 2 EDITE MACROS EN VISUAL BASIC PARA APLICACIONES (VBA) ............ 7 2.1 CÓMO MOSTRAR UNA MACRO .........................................................................................................................7 2.2 DÓNDE SE ALMACENAN LAS MACROS .............................................................................................................7 2.3 ESTRUCTURA BÁSICA DEL EDITOR DE VBA..........................................................................................................8 2.4 CÓMO MANIPULAR CÓDIGO VBA ....................................................................................................................8 3 CONTROLE OBJETOS DE EXCEL, USANDO VBA .................................. 10 3.1 INTRODUCCIÓN A LOS OBJETOS DE EXCEL .....................................................................................................10 3.2 PROPIEDADES: CONTROLE CARACTERÍSTICAS DE OBJETOS ........................................................................................10 3.3 MÉTODOS: HAGA QUE LOS OBJETOS REALICEN ACCIONES .........................................................................................10 3.4 GRUPOS DE PROPIEDADES Y MÉTODOS ..........................................................................................................11 3.5 JERARQUÍA 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 GRÁFICOS ...................................................................................................................25 4.3 EXPLORE LOS OBJETOS PARA INFORMES .........................................................................................................28 5 EDITOR DE VISUAL BASIC PARA APLICACIONES ................................ 30 5.1 ELEMENTOS DEL EDITOR DE VBA........................................................................................................................30 5.2 MANEJO Y ORGANIZACIÓN (PROYECTOS, MÓDULOS Y MACROS) ......................................................................30 5.3 PERSONALIZACIÓN DEL EDITOR DE VBA ..........................................................................................................31 6 PROCEDIMIENTOS DE VBA .................................................................. 32 6.1 DEFINICIÓN DE PROCEDIMIENTOS....................................................................................................................32 6.2 AUTOMATIZACIONES COMPLEJAS ...................................................................................................................32 6.3 ARGUMENTOS, DATOS DE ENTRADA ................................................................................................................33 7 FUNCIONES PERSONALIZADAS ........................................................... 34 7.1 DEFINICIÓN DE FUNCIONES PERSONALIZADAS ..............................................................................................34 7.2 CREACIÓN DE UNA FUNCIÓN PERSONALIZADA ............................................................................................34 7.3 USO DE FUNCIONES PERSONALIZADAS ............................................................................................................35 8 TRABAJO CON EL CÓDIGO EN VBA ..................................................... 36 8.1 COMPRENSIÓN DE CÓDIGO VBA ....................................................................................................................36 8.2 USO DE VARIABLES Y ARGUMENTOS.................................................................................................................37

Transcript of Manual Curso Excel Automatización

Page 1: Manual Curso Excel Automatización

C U R S O - T A L L E R : “ A U T O M A T I Z A C I Ó N E N E X C E L ”

C O N T E N I D O

1

INTRODUCCIÓN .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

AUTOMATIZACIÓN ...................................................................................................................................................... 3

1 AUTOMATICE TAREAS REPETIDAS .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

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

2 EDITE MACROS EN VISUAL BASIC PARA APLICACIONES (VBA) ... . . . . . . . . . 7

2.1 CÓMO MOSTRAR UNA MACRO ......................................................................................................................... 7 2.2 DÓNDE SE ALMACENAN LAS MACROS ............................................................................................................. 7 2.3 ESTRUCTURA BÁSICA DEL EDITOR DE VBA .......................................................................................................... 8 2.4 CÓMO MANIPULAR CÓDIGO VBA .................................................................................................................... 8

3 CONTROLE OBJETOS DE EXCEL, USANDO VBA .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.1 INTRODUCCIÓN A LOS OBJETOS DE EXCEL .....................................................................................................10 3.2 PROPIEDADES: CONTROLE CARACTERÍSTICAS DE OBJETOS ........................................................................................10 3.3 MÉTODOS: HAGA QUE LOS OBJETOS REALICEN ACCIONES .........................................................................................10 3.4 GRUPOS DE PROPIEDADES Y MÉTODOS ..........................................................................................................11 3.5 JERARQUÍA 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 GRÁFICOS ...................................................................................................................25 4.3 EXPLORE LOS OBJETOS PARA INFORMES .........................................................................................................28

5 EDITOR DE VISUAL BASIC PARA APLICACIONES .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

5.1 ELEMENTOS DEL EDITOR DE VBA ........................................................................................................................30 5.2 MANEJO Y ORGANIZACIÓN (PROYECTOS, MÓDULOS Y MACROS) ......................................................................30 5.3 PERSONALIZACIÓN DEL EDITOR DE VBA ..........................................................................................................31

6 PROCEDIMIENTOS DE VBA .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

6.1 DEFINICIÓN DE PROCEDIMIENTOS....................................................................................................................32 6.2 AUTOMATIZACIONES COMPLEJAS ...................................................................................................................32 6.3 ARGUMENTOS, DATOS DE ENTRADA ................................................................................................................33

7 FUNCIONES PERSONALIZADAS .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

7.1 DEFINICIÓN DE FUNCIONES PERSONALIZADAS ..............................................................................................34 7.2 CREACIÓN DE UNA FUNCIÓN PERSONALIZADA ............................................................................................34 7.3 USO DE FUNCIONES PERSONALIZADAS ............................................................................................................35

8 TRABAJO CON EL CÓDIGO EN VBA .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

8.1 COMPRENSIÓN DE CÓDIGO VBA ....................................................................................................................36 8.2 USO DE VARIABLES Y ARGUMENTOS.................................................................................................................37

Page 2: Manual Curso Excel Automatización

C U R S O - T A L L E R : “ A U T O M A T I Z A C I Ó N E N E X C E L ”

C O N T E N I D O

2

8.3 TIPOS DE DATOS PARA VARIABLES Y ARGUMENTOS ......................................................................................38 8.4 ALMACENAR OBJETOS EN VARIABLES .............................................................................................................39 8.5 CÁLCULOS EN CÓDIGO VBA ............................................................................................................................40 8.6 USO DE CONSTANTES ..........................................................................................................................................40

9 CONTROL DE LA EJECUCIÓN DEL CÓDIGO .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 DEPURACIÓN DE CÓDIGO .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

10.1 ERRORES DEPURABLES ......................................................................................................................................45 10.2 TÉCNICAS DE DEPURACIÓN ............................................................................................................................45 10.3 INSPECCIÓN DEL VALOR DE LAS EXPRESIONES O VARIABLES .....................................................................46

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

11.1 CONCEPTO Y SITUACIÓN DE ERRORES DE EJECUCIÓN...............................................................................47 11.2 CONTROLADORES DE ERROR ..........................................................................................................................47 11.3 USO DE NÚMEROS DE ERROR...........................................................................................................................48

12 FACILITE SUS MACROS, EVENTOS DE OBJETOS .... . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

12.1 EVENTOS POR EL USUARIO ...............................................................................................................................49 12.2 EVENTOS AUTOMÁTICOS .................................................................................................................................51

13 INTERACTÚE CON EL USUARIO .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

13.1 CUADROS DE DIÁLOGO PREDEFINIDOS ........................................................................................................52 13.2 CONTROLES ACTIVEX, SOBRE HOJA DE CÁLCULO ........................................................................................53 13.3 OTROS CONTROLES ACTIVEX ............................................................................................................................56

14 FORMULARIOS PERSONALIZADOS .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

14.1 INTERFAZ DE USUARIO .......................................................................................................................................57 14.2 FUNCIONALIDAD DEL FORMULARIO ..............................................................................................................59 14.3 IMPLEMENTACIÓN DEL FORMULARIO ............................................................................................................62

TIPS DE AUTOMATIZACIÓN EN VBA PARA EXCEL .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

1. RESUMEN DE TEORÍA BÁSICA ..........................................................................................................................63 2. REFERENCIA POR DESPLAZAMIENTO ENTRE CELDAS ..................................................................................64 3. REFERENCIA A CELDAS DENTRO DE CÁLCULOS ..........................................................................................65 4. TRABAJO CON ARCHIVOS DE OTROS SISTEMAS (.TXT Y .DBF) ......................................................................66 5. CÓMO LOCALIZAR PROPIEDADES (NO CODIFICABLE CON LA GRABADORA) ....................................................68 6. ORDENAR Y FILTRAR LISTA DE DATOS (POR FECHAS) .......................................................................................74 7. INFORMES DE SUBTOTALES Y AUTOFORMATO ..............................................................................................76 8. TABULAR VALORES DE MODELO DE CÁLCULO Y BUSCAR OBJETIVO .......................................................77

ÍNDICE ALFABÉTICO .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Page 3: Manual Curso Excel Automatización

3

INTRODUCCIÓN

La comparación más fácil de explicar y entender es que “Visual Basic para Aplica-

ciones” (VBA) es a Excel como el Control Remoto es a la Televisión.

Así como puede utilizar Excel sin VBA, puede manejar la Televisión sin control: cambiar

canales y volumen, configuraciones de brillo y contraste, entre otras funciones; Sin em-

bargo es más fácil y puede aprovechar mejor varias características utilizando su control

remoto que los controles normales, por ejemplo: la programación para grabar su pelícu-

la favorita o el encendido y apagado automático; además ¿Quién no reniega cuando se

le pierde el control de la tele?..., pues así, una vez que domine VBA no entenderá cómo

a podido trabajar sin él.

AUTOMATIZACIÓN

Aunque VBA está dentro de Excel, realmente no es una herramienta perteneciente a

esta aplicación, sino que Excel expone sus habilidades a VBA, para que éste las con-

trole, mediante un intermediario llamado "Librería de objetos", siendo la forma de co-

municación entre este lenguaje de alto nivel y esta aplicación de hoja de cálculo.

La mejor forma de descubrir como se comunica VBA con los objetos de Excel es gra-

bando algunas macros. VBA dispone de la herramienta "Grabadora de macros" siendo

ésta la forma más básica de aprender la lógica y sintaxis de VBA; y consiste en que las

acciones o tareas rutinarias que realiza manualmente las puede grabar (generando có-

digo), 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 cuestión.

A lo largo del manual se usará cualquiera de estos conceptos que significan lo mismo:

A U T O M A T I Z A C I Ó N = P R O C E D I M I E N T O = M A C R O

EXCEL

LIB

RE

RÍA

D

E

O

BJE

TO

S

VBA

Page 4: Manual Curso Excel Automatización

Cap. 1 4

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

más de eficiencia usando los botones de herramienta y las combinaciones de teclas (co-

mo <Ctrl + C> para copiar)… En estas circunstancias, necesita evaluar si tal serie de pa-

sos 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 día.

Ejemplos de Automatización

1. Abrir un grupo de libros y copiar información de ellos.

2. Identificar y proteger sus libros y hojas de trabajo.

3. Organizar hojas con títulos, ajuste de columnas y formatos condicionales.

4. Preparar los pedidos del mes y acumularlos en el archivo histórico.

5. Calcular los totales de varios grupos de cuentas.

6. Listar facturas faltantes, usando ciclos automatizados.

7. Buscar datos en tablas para utilizarlos en cálculos.

8. Interactuar con el usuario para pedirle o mostrarle información.

9. Generar funciones con cálculos adaptados, como comisiones, intereses, etc.

10. Ordenar, filtrar y acomodar información de sistemas de base de datos.

11. Generar informes con subtotales, tablas dinámicas y gráficas.

12. Controlar procesos, mediante controles de diálogo 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 DINÁMICO”… Esto es, generar informes automatizados

con los datos provenientes del mismo Excel o de SISTEMAS DE BASE DE DATOS RE-

LACIONALES, 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 características como acomodo, forma-

to, orden, e incluso, agregar nuevos cálculos personalizados. Así, —contrariamente a los

informes estáticos que se generan en tales sistemas— si lo requiere, puede dejarlos des-

protegidos para que el usuario los pueda adaptar a sus necesidades. De este modo, Ex-

cel complementa —y no compite— con sus Sistemas de Información 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 ratón y otros coman-

dos, que, cuando usted los requiera en Excel, puede ejecutarlos automáticamente. No es

Page 5: Manual Curso Excel Automatización

Cap. 1 5

necesario entender lenguajes de programación 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 más tarde, en otro caso (o con-

texto) similar, usted pueda ejecutarlas automáticamente.

1.2 CÓMO GRABAR Y CÓMO 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 macro…o 2° botón de barra “VBA” [1.4.3].

2. ¿Nombre de la macro? {Comience con Letra, sin espacios}.

3. ¿Método abreviado? (Opcional): Tip.- use <Shift> y la letra que guste.

4. ¿En qué libro guardar su macro? Haga clic derecho con el ratón en esta lista.

5. ¿Una Descripción? (Opcional)… y Aceptar o <Enter>. Aparece la barra de he-

rramienta “Grabar macro”, con los botones “Detener grabación“ y “Referencia relativa”.

6. Realice manualmente las acciones por grabar… al terminar use “Detener grabación”.

Al estar grabando, puede al mismo tiempo ver como se codifica cada acción manual.

Beneficios.- Asimile más fácilmente la codificación, ya que al instante hace y aprende.

Permite eliminar acciones innecesarias que, accidentalmente, realizó y codificó de más.

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 acción y revísela en VBA (<Alt +

Tab>).

Puede borrar, cambiar valores o agrupar sentencias (separe con renglón en blanco).

1.2.2 Ejecute su Macro

Una vez grabada la macro, puede ejecutarla en otro contexto similar, esto es, en condi-

ciones parecidas al momento de grabarla, pero en otra situación, 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° botón 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 combinación de teclas: <Ctrl+Letra> o <Shift+Ctrl+Letra>.

Tip.- Para interrumpir una macro en ejecución: <Esc>.

Page 6: Manual Curso Excel Automatización

Cap. 1 6

1.3 CÓMO FACILITAR EL USO DE UNA MACRO

Acceso a la automatización, con combinación de teclas y botones de herramientas.

1.3.1 Asignar a Combinación de Teclas

Si, al grabar macro, asignó un atajo de teclas, úselo [1.2.2.], para reasignarlo:

1. Use el 1° botón de barra “Visual Basic” [1.4].

2. Seleccione su macro y clic en Opciones… dé el atajo y su descripción [1.2.1].

1.3.2 Asignar a Botón de Herramientas [12.1.1]

1.3.3 Asignar a Botón 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 ac-

ciones manuales.

2. Establezca el rango seleccionado inicial —o la celda activa inicial—, antes de

grabar: esto hace que las macros sean portátiles (generalizadas), ya que la se-

lección inicial puede ser cualquiera al ejecutar la macro [1.4.2].

3. Así como el rango inicial, también 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° botón —de la barra de Visual Basic—, nos ayuda

a codificar los desplazamientos entre las celdas: por omisión, no está presionado,

esto es, la referencia es absoluta; al presionarlo, la referencia será relativa.

a) Ref. Absoluta: se codifica la posición exacta de cada celda (o rango) seleccionado.

Range(“A1”).Select o Range(“A1:C3”).Select [4.1.1]

b) Ref. Relativa: se codifica la posición de cada celda (o rango) seleccionado con res-

pecto a la celda anteriormente seleccionada.

ActiveCell.Offset(2,1).Select [4.2.3-1]

A partir de la celda activa, se desvía 2 abajo y 1 a la derecha y selecciona la nueva celda resultan-

te.

1.4.3 Barra de herramientas “Visual Basic”

Grabar macro: muestra el diálogo correspondiente [1.2.1]

Interrumpir/Reanudar la ejecución de una macro. Muestra el Editor de Visual Basic [5] o <Alt + F11>.

Muestra barra “Cuadros

de control” [12]

Activa/Desactiva el modo diseño [12] Ejecutar macro: muestra

el diálogo “Macro” [1.2.2]

Page 7: Manual Curso Excel Automatización

Cap. 2 7

2 EDITE MACROS en Visual Basic para Aplicaciones (VBA)

La Grabadora de macros no siempre genera el código más preciso ni eficiente, por lo

que la mayoría de las veces7 requerirá editar, esto es, ver y modificar el código graba-

do para mejorarlo y adaptarlo a necesidades más específicas.

2.1 CÓMO MOSTRAR UNA MACRO

Las macros están escritas en lenguaje Visual Basic y almacenadas en hojas especiales

llamadas “módulos”. La forma más directa de mostrar el código de una macro, es:

1. Menú Herramientas – Macro - Macros… o 1° botón 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 módulo está la macro [5.2]:

1. Vea Editor de Visual Basic: 4° botón de barra VBA [1.4.3] o <Alt + F11>.

2. Vea panel Explorador de proyectos: botón o <Ctrl + R>: Identifique Proyecto (libro).

3. Despliegue carpeta Módulos y abra el módulo deseado (con 2clic).

4. Despliegue la Lista Declaraciones (arriba a la derecha) y seleccionar la macro deseada.

2.2 DÓNDE SE ALMACENAN LAS MACROS

Todas las macros (procedimientos [6] o funciones [7]) se guardan en Módulos: hojas

especiales muy similares a un procesador de textos. Éstos a su vez están dentro de la

carpeta Módulos del Proyecto (Libro) en cuestión. Como lo muestra el panel Explorador de

proyectos (en Editor VBA): con su botón o <Ctrl + R>. [5.2]

La primera vez que graba una macro, se crea un nuevo módulo. Al grabar macros adi-

cionales, se guardarán al final del mismo módulo. Al cerrar y volver a abrir el libro de

trabajo, la grabadora trabajará en un nuevo módulo. Si requiere escribir una macros

(sin grabar) en un módulo aparte, insértelo: menú Insertar – Módulo [5.2.2-3].

2.2.1 Cómo Nombrar un Módulo

1. En el panel Explorador de proyectos seleccione el módulo.

2. Muestre la venta Propiedades: botón o <F4>: puede cambiar su tamaño.

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

Page 8: Manual Curso Excel Automatización

Cap. 2 8

2.3 ESTRUCTURA BÁSICA 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 jerárquica de proyectos (libros) y

—organizados en carpetas— sus elementos: como los Objetos de Excel [12.2] y

los Módulos [5]. Ábralo: botón o <Ctrl + R>… Ayuda: Active el panel y

<F1>.

2. Ventanas de Módulo.- 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 características del objeto o elemento se-

leccionado, éstas se pueden cambiar aquí. Ábrala: botón o <F4>.

Tip.- Cambie su tamaño: arrastre bordes. Pueden ser Flotantes o Anclables [5.1].

Lo básico para trabajar Panel de Explorador de Proyectos y Ventanas de Módulos.

2.4 CÓMO MANIPULAR CÓDIGO VBA

Cuando se graban las acciones manuales en Excel, se va generando código, 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 Básica de una Macro [6.1]

1. Inicio.- La palabra clave Sub, el nombre de la macro y paréntesis.

2. Cuerpo.- con comentarios: apóstrofe 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 están formadas

por: palabras clave, operadores, variables y llamadas a otros procedimientos:

1. Palabras clave.- son términos reservados para VBA. Aparecen de color azul.

2. Los operadores, variables y llamadas.- se analizarán a fondo en capítulo [8].

Page 9: Manual Curso Excel Automatización

Cap. 2 9

2.4.3. Modificación del Código

1. Navegación.- similar a un procesador de textos: Barras de desplazamiento, o con

Teclas: <flechas de dirección>, <Inicio>, <Fin>, <Re pág> y <Av pág>.

¿Qué pasa si mantiene <Ctrl> y usa estas teclas? Describa:

_____________

Divida la ventana del módulo en 2 secciones.- en la parte superior de la barra de

desplazamiento vertical, haga 2clic o arrastre el Cuadro de división.

2. División de Sentencias.- separe una sentencia larga en una o varias líneas: en

el punto donde desee: inserte un espacio en blanco y un guión bajo “_” y <Enter>.

Ventaja: ver toda la instrucción en el ancho de la pantalla.

3. Selección.- Puede seleccionar el código arrastrando el ratón sobre él. Una pala-

bra: 2clic. Una línea: clic en orilla izquierda del módulo (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 sangría a varias líneas: selecciónelas y <Tab>.

4. Eliminar.- Seleccione y <Supr>, pueden ser equivocaciones nuestras o código

innecesario, recuerde que la grabadora codifica por selección, 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, elimínelas y haga más ligero su código.

P.e. Al configurar página para imprimir: se codifica hasta lo que no cambiamos.

5. Copiar y Mover.- Seleccione el código, Copie: <Ctrl + C> o Corte: <Ctrl + X>,

ponga el cursor en la nueva posición y Pegue: <Ctrl + V>.

Método Alterno.- Seleccione, apunte a la selección y arrastre a la nueva posi-

ción —el puntero muestra el cursor fantasma—. Para copiar: mantenga <Ctrl>

(aparece el signo +) y suelte el ratón. Para mover: sólo suelte el ratón.

6. Buscar y Reemplazar.- use las herramientas del menú Edición – Buscar… o

menú Edición – Reemplazar… P.e. buscar un comentario —con una(s) pala-

bra(s)— o reemplazar el nombre de una variable.

7. Se recomienda cerrar los paneles de Explorador de proyectos y Propiedades y maxi-

mizar la ventana del Editor de VBA, para tener mayor área visible de trabajo.

Page 10: Manual Curso Excel Automatización

Cap. 3 10

3 CONTROLE OBJETOS DE EXCEL, USANDO VBA

3.1 INTRODUCCIÓN A LOS OBJETOS DE EXCEL

Los objetos se utilizan para realizar tareas, así como un radio es un objeto que se usa

para recibir información y entretenimiento; en Excel, una hoja de cálculo es un objeto

que se utiliza para calcular y presentar información.

Un objeto de Excel es cualquier elemento que el usuario puede manejar directamente

en esta aplicación —cuando se usa Excel manualmente— o se puede controlar indirec-

tamente —Cuando se aplica VBA para automatizarlo—.

3.2 PROPIEDADES: Controle características de objetos

Los objetos tienen características propias, llamadas propiedades: atributos que contro-

lan la apariencia o el comportamiento de un objeto; así como un radio tiene la propie-

dad frecuencia que determina la estación que escucha, una hoja de cálculo 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.

Para asignar el valor de una propiedad: objeto.propiedad = expresión

P.e: 1) ActiveCell.Value = "Importe" 2) Range("B2") = "Precio" & No

Para devolver el valor de una propiedad: variable = objeto.propiedad

P.e: 1) miImporte = ActiveCell.Value 2) miPrecio = Range("B2")

3.3 MÉTODOS: Haga que los objetos realicen acciones

Los objetos pueden efectuar acciones, llamadas métodos: movimientos que llevan aca-

bo modificaciones a las características o contenido de los objetos. Un radio tendría un

método CambiarBanda para FM o AM. Así mismo las hojas de cálculo cuentan con un

método Calcular que se utiliza para recalcular toda la hoja. Los métodos son usados pa-

ra hacer que los objetos realicen las operaciones que se desean. A veces, para ejecutar

una acción, es necesario más información, ésta se da con argumentos [6.3].

Para métodos sin argumentos: objeto.método

Para métodos con argumentos: objeto.método (argumentos)

P.e.: Selection.Copy

Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _

SkipBlanks:=False, Transpose:=False

Copy NO necesita más información; PasteSpecial SI, ¿Qué va a pegar? Aquí, Valores.

Contiene un valor

Los paréntesis son opcionales [8.1.2]

Page 11: Manual Curso Excel Automatización

Cap. 3 11

3.4 GRUPOS DE PROPIEDADES Y MÉTODOS

Existen dos: Los 1ros de OPERACIÓN (realizan acciones) y los 2dos de REFERENCIA

(a otros objetos). Los 1ros aparecen al final de una expresión. Los 2dos pueden aparecer

al principio (Globales) o en medio (Anidados) de una expresión [4.1.5-5]. Por ejemplo:

3.4.1 DE OPERACIÓN:

ActiveCell.FormulaR1C1 = "1000"

Selection.NumberFormat = "#,##0.00"

Selection.Copy

ActiveSheet.Paste

3.4.2 DE REFERENCIA:

ActiveCell.Value = "REPORTE SEMANAL"

Range("A3:Z3").Select

ActiveCell.Offset(2, 1).Select

Selection.Font.Bold = True

Sheets.Add.Name = "Presupuesto"

Cells.Find(What:="1000", After:=ActiveCell, LookIn:=xlFormulas, _

LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _

MatchCase:=False).Activate

3.5 JERARQUÍA DE OBJETOS

Los objetos están clasificados en orden jerárquico, los objetos de mayor jerarquía con-

tienen dentro de ellos a los objetos de menor jerarquía. El objeto de mayor clasificación

es Application (Excel), éste contiene Libros (objetos Workbooks), que a su vez contiene

Hojas (objetos Worksheets) y estás tienen celdas o rango de celdas (objeto Range).

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 COLECCIÓN y los objetos INDIVIDUALES.

Los primeros, las colecciones, son conjuntos de los segundos, y éstos son elementos

de la colección, tales elementos tiene relación entre sí.

Celda Rango de celdas

Hoja de cálculo

Hoja de gráfico

Libro

Aplicación

Propiedades

Métodos

Propiedades

Métodos Anidados

Globales

Anidadas

Page 12: Manual Curso Excel Automatización

Cap. 3 12

: 1 El objeto Libro (Workbook) es contenedor (o padre) de todas y cada una de

sus hojas (Worksheets), o sea, de toda la colección de hojas de cálculo y cada hoja de

cálculo en específico. Ahora, Libro tiene una propiedad (de referencia) WorkSheets que

devuelve una referencia a toda la colección —teniendo acceso a todas las propiedades

y métodos del objeto colección Worksheets—.

CantHojas = ActiveWorkbook.Worksheets.Count [8.2]

2 También, podemos hacer referencia a una hoja en especial (un elemento de la colec-

ción), usando su índice (número de elemento) o su nombre (entre comillas), con esto,

se accesa a las propiedades y métodos del objeto Worksheet específico.

ActiveWorkbook.Worksheets(3).Select

ActiveWorkbook.Worksheets(“Hoja 3”).Select

3 Podemos almacenar un objeto en una variable, para esto usamos la palabra Set: [8.4]

Set miHoja = ActiveWorkbook.Worksheets(“Hoja 3”)

MiHoja.Select

Variable donde se

almacena el número

de hojas. .

Propiedad que

devuelve un objeto

Libro (LibroActivo)

[es el Padre].

Propiedad que devuelve

(obtiene) la cantidad de

hojas (elementos de la

colección) del Libro.

Propiedad del objeto pa-

dre (LibroActivo) que

devuelve un objeto colec-

ción de todas sus hojas.

Propiedad que de-

vuelve un objeto

Libro (LibroActivo)

[es el Padre].

…y podemos utilizar

este método para

seleccionar tal hoja.

Usando el mismo

método para la

colección…

…especificando el nú-

mero o nombre hace-

mos referencia al ele-

mento requerido…

Variable donde se alma-

cena un objeto (precedida

de la palabra Set)

…por lo que podemos utilizar

el método para seleccionar

la hoja de cálculo “Hoja 3”.

La expresión completa devuelve la referencia al

objeto Hoja de cálculo “Hoja 3” del Libro Activo.

Utilizando la variable, podemos tener

acceso a todas las propiedades y méto-

dos del objeto almacenado en ésta…

Page 13: Manual Curso Excel Automatización

Cap. 3 13

3.7 EXPLORE OBJETOS CON LOS RECURSOS DE VBA

3.7.1 VENTANA INSPECCIÓN

Funciones: sirve para analizar las propiedades (no métodos) de un objeto: si son de ope-

ración o de referencia [3.4]; también explora objetos relacionados a él {arriba o abajo en la

jerarquía[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 sólo el código de la expresión que hace referencia al objeto —sin la

propiedad o el método— (puede ser una variable almacenando tal objeto [8.4]).

2. Menú Depuración – Inspección rápida… (<Shift + F9>) y verá el Valor de la expresión.

3. Clic en “Agregar”.- aparece la ventana “Inspecciones”: con 4 columnas.-

de la Expresión: 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 Operación (ejecución de acciones): con valor y sin signo +, y

Las de Referencia (a otros objetos): sin valor y con signo +.

: Grabe una macro introduciendo algún texto en la celda “B2”; ejecútela paso a

paso [10.2.2] y siga los Pasos para Inspeccionar Expresiones: {Puntos 1 y 2} seleccio-

nando Range(“B2”).

{Punto 3} Aquí, el Valor es el texto que introdujo, el Tipo es “Objeto” del Sub-tipo “Ran-

go” y el Contexto es en el módulo y procedimiento, del proyecto (o libro) activo.

{Punto 4}

En Propiedades de Operación (con valor):

La propiedad ColumWidth tiene un valor (su Tipo es Doble), y éste es modificable (clic en

él, cámbielo a 20 y <Enter>). Observe el resultado en Excel.

En Propiedades de Referencia (con signo +):

Jerarquía arriba.- La propiedad Parent, Tipo “Objeto/HojaDeCálculo” y refiere, precisa-

mente, a la hoja de cálculo de la Celda donde esta trabajando, despliegue y vaya a su

propiedad (de operación) Name y cámbiela por “Prueba”,… revise Excel.

Jerarquía 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.

[3.4]

Page 14: Manual Curso Excel Automatización

Cap. 3 14

3.7.2 AYUDA

La ventana Inspección, le ayuda a recorrer los objetos y comprender sus propiedades

(o características), sin embargo, no podrá ver sus métodos (o acciones), ni el Esquema

Completo de los Objetos de Excel controlables por VBA. Para complementar su explo-

ración, 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 ejecución,

sólo coloque el cursor sobre la palabra clave en su código y use la tecla <F1>. Puede

ser un método o una propiedad de operación (valor) o referencia (a otro objeto).

: En la jerarquía de objetos, el de mayor nivel es Application, escríbalo en una ma-

cro y presione <F1>, verá el título… la palabra clave Application es en realidad una

propiedad de referencia a este objeto.

Haga clic en el vínculo del tema objeto, verá un diagrama y su descripción; haga clic en

el cuadro “Application” y verá el título “Modelo Objetos de Microsoft Excel”. [3.5]

Los objetos solos están en azul, Los objetos colección —y en paréntesis el nombre de

sus elementos— están en amarillo. Así, Application es un solo objeto, que contiene (o

es padre) de la colección Libros —todos y cada Libro ¡abierto!—, a su vez, cada libro

contiene una colección de Hojas de Cálculo —todas y cada Hoja de Cálculo—. 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 mayoría de

los objetos mostrados en estos esquemas sólo los utilizaremos en situaciones muy es-

pecializadas.

MÉTODOS.- Para analizar los métodos (acciones) sobre el objeto Range, haga clic en

su cuadro, verá el Tema “Objeto Range”, su diagrama y su descripción, haga clic en su

vínculo a Métodos (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 vínculo ”Ejemplos”.- puede copiarlos

para adaptarlos en su trabajo.

Page 15: Manual Curso Excel Automatización

Cap. 3 15

3.7.3 LISTAS AUTOMÁTICAS

Una herramienta muy requerida para recordar, o incluso, descubrir métodos y propie-

dades. 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 sinta-

xis es correcta aparecerá una lista automática con los métodos y propiedades disponi-

bles 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 colección “Libros” teclee: work y use las teclas <Ctrl + Ba-

rra>, aparece la lista con la propiedad Workbooks —la requerida— dé <Tab> para com-

pletar; ponga un punto, y en la lista, identifique los iconos de propiedad y de método:

____________ —desplácese 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 in-

formación rápida con los posibles argumentos del método Close, —todos son opciona-

les, ya que están entre corchetes— como no queremos que nos pida guardar los cam-

bios, use el primero: teclee Fa y <Ctrl + Barra>. Ejecute la macro paso a paso [10.2.2].

b) EN VARIABLES QUE CONTIENEN OBJETOS DE EXCEL [8.4]

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 código posterior puede activar otro libro y, después usar la variable

para trabajar con el primero, sin necesidad de activarlo), Pregunte a su asesor ¿Cómo

aplicar esto a Rangos (o celdas)? Ver ejemplo en [4.3.1-5]… Finalmente, cierre el libro

usando la variable. [8.4].

Page 16: Manual Curso Excel Automatización

Cap. 3 16

El código de la macro quedará así:

Sub Prueba()

Dim miLibro as Workbook

Set miLibro = ActiveWorkbook [8.4]

'==> Instrucciones p/ más 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 (información para métodos 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 código: Activewindow.WindowState = y apa-

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

CONCLUSIÓN

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

método 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 tra-

bajo.

El primer intento es recomendable hacerlo con la grabadora de macros —como se ex-

plica en la introducción—, es decir, si usted tiene la idea de lo que necesita realizar en

Excel, codifíquelo, con la grabación de sus acciones manuales. Con esto, las herra-

mientas estudiadas en este subcapítulo, vienen a complementar lo hecho por usted con

la primera: “Grabadora de macros”.

Page 17: Manual Curso Excel Automatización

Cap. 4 17

4 OBJETOS COMUNES DE EXCEL

Entender y controlar —mediante VBA— los objetos más comunes de Excel es uno de

los principales objetivos de este curso – taller. Se dividen en 3 clasificaciones: 1) Los

objetos rango, más importantes; 2) Los objetos gráficos, flotando sobre las hojas y

3) Los objetos para informes, muy útiles, son una combinación de los 2 primeros.

4.1 EXPLORE LOS OBJETOS RANGO

Los objetos Rango son posiblemente los más importantes de Excel. Es en éstos donde

se introduce valores, textos y cálculos (fórmulas y funciones), se les aplica formato,

sobre éstos se ubican objetos de dibujo, en ellos se manipulan bases de datos y tablas

dinámicas, entre otras acciones. Así, los verá desde 2 puntos de vista: el código 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 argu-

mentos: Celda1 (requerido) y Celda2 (opcional). Range(Cell1, [Cell2])

y corresponden a los límites (esquinas) del rango: esq. sup. izq. esq. inf. der.

Cómo seleccionar: debe poner la representación de la dirección de un rango. P.e.,

Al grabar, se codifica: Range(“B2”).Select o Range(“C3:G6”).Select

Con selección dispersa: Range("C8:C11,E8:E11").Select

A mano: Range(“NombreRango”).Select o Range(“C3”, "G6”).Select

o Range(ActiveCell, "F10”).Select

Selección dispersa: Union(Rango1, Rango2, ...).Select

Cómo nombrar una rango (uso de propiedad Name):

Al grabar: la codificación es totalmente impráctica (pruebe…).

A mano: Range(“C3:G6”).Name = "NuevoNombre"

Selection.Name = "NuevoNombre"

4.1.2 RANGOS COMO COLECCIÓN

Puede considerarse a un Rango como una colección de Celdas. Sin embargo, un con-

junto de celdas es algo más complicado, ya que tienen 2 dimensiones: filas y columnas.

Se puede pensar en el Rango “A1:C2” como una colección de 6 celdas, o de 2 filas, o

de 3 columnas. Así, para tratar a un Rango como colección, existen 3 propiedades:

Page 18: Manual Curso Excel Automatización

Cap. 4 18

1. Cells(NoFila, [NoCol]) : Devuelve una Celda del Rango.

: Escriba estas sentencias en una macro, ejecútelas paso a paso —

observando lo que sucede en Excel— [10.2.2]… mejórela 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

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— pro-

cesar 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, ejecútelas paso a paso [10.2.2]:

Dim miRango As Range [8.4] Set miRango = Range("C10:E11")

miRango.Interior.Color = vbCyan

miRango.Select

ActiveCell.Offset(1, 0).Select

ActiveCell.Offset(0, 1).Select

miRango.Offset(1, 0).Select

miRango.Offset(0, miRango.Columns.Count).Select

2. Resize(FilasTamaño, ColumnasTamaño) : 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

(0,0)

+ Filas

+ Columnas

_

_

Celda Activa

Da la cantidad de celdas del Rango.

Page 19: Manual Curso Excel Automatización

Cap. 4 19

3. EntireRow: Devuelve la(s) Fila(s) Entera(s) de la hoja, a partir del Rango Ori-

gen. 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 “Región Actual”, a partir de la 1ra celda del

Rango Origen. La Región 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

rectángulo 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 selección de Rangos ayudan a entender cómo 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 CÁLCULOS (Fórmulas y Funciones)

Una vez seleccionado el Rango deseado, el verdadero trabajo es dar formato, colocar

en ellos cálculos, texto o valores, obtener su valor (con o sin formato), autollenar fórmu-

las, entre otras labores… Lo primero que se debe entender es cómo funcionan las refe-

rencias a otras celdas —como datos de entrada— en las fórmulas y/o funciones dentro

de una celda dada; o sea, la Referencia a Celdas dentro de Cálculos:

1. Referencia Relativa dentro de Cálculos

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 multiplicación para cada fila; p.e.

en D2 pondrá: =B2*D2, al autollenarla (copiarla) en las demás filas, las referen-

cias se ajusten automáticamente ya que, por omisión, las referencias son relati-

vas… relativas con respecto a la celda que contiene tal fórmula.

Así, la fórmula en la celda D2 en realidad significa: “la celda 1 a mi izquierda mul-

tiplícala por la celda 2 a mi izquierda”, y al copiarla a otras celdas sus fórmulas

dirán lo ajustado (lo que Ud. ve), pero significarán justo lo mismo [4.1.4-4].

2. Referencia Absoluta dentro de Cálculos

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

fórmula en D2 será =B2*D2*(1-G2) Las 3 referencias a celda son relativas. Ahora

Page 20: Manual Curso Excel Automatización

Cap. 4 20

¿Qué sucede al autollenarla en las otras celdas? Pruébelo… Para corregir, de-

be fijar (hacer absoluta) la referencia a la celda con el descuento (G2): Anote

cómo: ________________________________________________________

3. Referencia Combinada en Cálculos

Suponga que tiene una tabla donde en la 1ra Columna tiene “Cantidades”

—desde A3— y en el 1er Renglón “Precios” —desde B2—, así, los cálculos ini-

ciarán en B3 con =A3*B2, ¿Qué sucede si autollena hacia abajo? o ¿Hacia a la

derecha?… Recuerde que las referencias son relativas, y el cálculo significa: “La

celda a mi izquierda multiplícala por la celda arriba de mí”… ¿Qué sucede si fija

(hace absoluta) una de las referencias… y la otra… y si fija las dos?… Pruébe-

lo…

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 cálculo, la referencia a una celda

—formada por una columna y una fila—, puede ser combinada: teniendo su co-

lumna 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. Notación 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 res-

pecto a la celda que contiene la referencia). Si Ud. no sabe qué celda la contie-

ne, no sabrá su significado (en forma relativa).

Excel tiene una notación 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 Número de Renglón. Por su par-

te, R1C1: representa Renglón Número y Columna Número.

$G$2

Page 21: Manual Curso Excel Automatización

Cap. 4 21

1. En referencia Absoluta el número es de Renglón (o de Columna) de la hoja.

2. En referencia Relativa el número va entre paréntesis y

es la desviación relativa, con respecto a (o a partir de)

la celda que contiene la fórmula.

Si la celda referenciada está en la misma Fila o

Columna: no se pone número.

Actívela y observe sus ejercicios, en el 1°, la referencia relativa se ve así:

=RC[-2]*RC[-1] La celda (mismo renglón de la fórmula y col. 2 a la izq.) multiplica

por la celda (mismo renglón de la fórmula y col. 1 a la izq.).

La referencia absoluta:

= RC[-2]*RC[-1]*(1-R2C7) Al cálculo anterior multiplica por la diferencia de 1 me-

nos la celda (renglón 2 y columna 7 de la hoja —absoluta—).

En el 2°, las referencias combinadas:

=RC1*R2C La celda (mismo renglón de la fórmula y col. 1 de la hoja) multi-

plica por la celda (renglón 2 de hoja y misma col. de fórmula).

La Grabadora de macros usa esta notación (R1C1) para codificar las fórmulas

que se introducen en las celdas. Mientras más la comprenda, mejor automatiza-

rá (con VBA) la asignación, en celdas, de sus cálculos (fórmulas y funciones).

Con su fórmula en la celda: Inicie grabación, 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 fórmulas.

También, puede obtener su contenido para utilizarlo en algún proceso.

ASIGNAR:

En una macro, introduzca el siguiente código, ejecútelo 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 Va-

lue (por default: no se pone) asigna a cada una de sus celdas el valor 10.

II. La propiedad ActiveCell, refiere sólo 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.

(0,0)

+ Filas

+ Columnas

_

_

Page 22: Manual Curso Excel Automatización

Cap. 4 22

IV. A cada una de las celdas de la selección se le asigna la fórmula que significa

“= la celda de arriba (de cada fórmula) por 5”. Al definirla apropiadamente en

la 1ra celda de la selección, ésta se ajusta para cada celda ya que sus fórmu-

las contienen referencias relativas.

OBTENER:

Se pueden usar 4 propiedades: Value, Formula, FormulaR1C1 o Text.

En Excel, dé formato “moneda” a selección. En otra macro, teclee este código:

ActiveCell.Offset(0, 3) = ActiveCell.Value

MsgBox ActiveCell.Formula

ActiveCell.Offset(1, 3) = ActiveCell.FormulaR1C1

ActiveCell.Offset(2, 3) = ActiveCell.Text

1. Value ==> (por omisión) obtiene el valor resultado de un cálculo en una cel-

da.

2. Formula ==> obtiene lo que muestra la barra de fórmulas. En notación A1.

3. FormulaR1C1 ==> obtiene la fórmula con notación R1C1.

4. Text ==> obtiene el valor con formato de la celda.

Para Asignar, cualquier propiedad es igual (excepto Text). La grabadora sólo usa

FormulaR1C1. Ej: Activecell = Activecell (una celda). Selection = Selection.value (un rango).

4.1.5 TIPS DE RANGOS

1. Propiedades complementarias

1. Row ==> obtiene el número de fila (en la hoja) de la 1ra celda del rango.

2. Column ==> ídem para columna.

3. Address (FilaAbs, ColAbs, Notación) ==> obtiene la dirección del Rango.

4. End (Sentido) ==> obtiene la última celda con dato. Grabe su acción en Excel:

<Ctrl + una de las Flechas de dirección>.

2. Notación Abreviada de Range

Abrevie la propiedad Range, sin paréntesis y sin comillas. Sólo use la dirección

(o nombre) del Rango entre corchetes:

Worksheets("Hoja1").[B2:E20].Copy igual a

Worksheets("Hoja1").Range(“B2:E20”).Copy

[miRango] = 30 Nombre personalizado de Rango dado en Excel.

3. Pares Select - Selection

La grabadora de macros, trabaja por selección, es decir, si queremos colocar

una fórmula en la celda F10, debemos 1° seleccionarla y 2° asignarle la fórmula.

Page 23: Manual Curso Excel Automatización

Cap. 4 23

El resultado sería:

Range(“F10”).Select

ActiveCell.FormulaR1C1 = "=RC[-2]/RC[-1]"

Podemos simplificar este código haciendo una sola sentencia: eliminando las pa-

labras Select y ActiveCell (o Select y Selection):

Range(“F10”).FormulaR1C1 = "=RC[-2]/RC[-1]"

Pros y Contras:

La ventaja es que se agiliza el código, 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

Cómo funciona: se crea una variable oculta almacenando el objeto de “With”, pa-

ra 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 ante-

puesto a su izquierda: ni referencia a un objeto rango ni un punto. Entonces ha-

cen 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 referen-

cia 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

1 Como refuerzo, explique en croquis la actuación de estas 3 sentencias de código:

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

Page 24: Manual Curso Excel Automatización

Cap. 4 24

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

Range(ActiveCell.Offset(3,2), ActiveCell.Offset(5,6)).Select

[¿Cómo lo haría en 2 pasos (2 sentencias)?]

2 Analice este código, 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

3 Introduzca valores en las celdas del rango “B5:D8”, ejecute paso a paso este có-

digo, examinando las propiedades de los rangos y cómo se concatenan cadenas

constantes con variables para automatizar fórmulas versátiles y adaptables a la

cantidad de datos existentes, prueba agregando más 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)…

¿Cómo los seleccionaría (sin el encabezado —1ª fila—)?

Da la cantidad de Filas del Rango.

Da la cantidad de Columnas del Rango.

Page 25: Manual Curso Excel Automatización

Cap. 4 25

4.2 EXPLORE LOS OBJETOS GRÁFICOS

Los objetos gráficos incluyen no sólo los rectángulos, elipses y líneas, sino también cua-

dros de texto, imágenes, fotos, gráficas [4.3.1] y controles de botones y listas [13], éstos,

incorporan información interesante y funcionalidad a las hojas de cálculo.

A diferencia de los objetos Rango, que están fijos en la hoja, éstos están flotando en ella.

Pueden aparecer o desaparecer, y cambiar sus características como color, fondo y forma.

Para manejar los objetos gráficos, sería casi imposible aprenderse sus múltiples propie-

dades y métodos, ya que para consultarlos en la ayuda debe saber exactamente como se

escriben. Para solucionar esto, explórelos con la grabadora de macros, realizando accio-

nes con estos objetos. Algunas personas —puristas de la programación— creen que la

grabadora de macros es una herramienta para principiantes, y lo es. Pero es también una

potente herramienta de referencia para desarrolladores avanzados: se usa para crear la

estructura básica —grabando un caso específico [Constante]— para luego, personalizar

el código —generalizándolo para cualquier caso [Variable]—.

4.2.1 RECTÁNGULOS Y FORMAS BÁSICAS

Las formas básicas se manejan muy similar a un rectángulo, de hecho, al seleccionar

cualquiera, aparecen manijas —abarcando al objeto— en forma de rectángulo.

GRABE LA CREACIÓN DE UN RECTÁNGULO:

1. Muestre la barra de dibujo, con su botón

2. Inicie grabación [1.2.1 y Tip] … Revise ¿Cuántas sentencias crea cada acción?

3. Active el botón Rectángulo de la barra de dibujo.

4. Dimensione el rectángulo: mantenga <Alt> y desde la esq. sup. izq. arrastre el bo-

tón del ratón hasta la esq. inf. der., suéltelo y luego suelte <Alt>.

5. Dele nombre: en Cuadro de Nombres teclee (indícelo: número al final) y <Enter>.

6. Dele color al fondo: despliegue la paleta de Color de relleno . ¿Cuántas sentencias?

7. Cambie su borde: con botón Estilo de línea . ¿Cuántas sentencias?

8. Cambie color al borde: despliegue el botón Color de línea . ¿Cuántas sentencias?

9. Puede cambiar otras propiedades: así aprenderá mucho más de objetos.

10. Identifique (a prueba y error) y elimine sentencias innecesarias. Mejore con [4.1.5-4].

¿Cuál es la diferencia, en codificación, si usa el diálogo Formato de autoforma?

Page 26: Manual Curso Excel Automatización

Cap. 4 26

Edite su macro [2.1] y personalice (mejore) la creación del rectángulo (o forma básica):

1. Entre a la ayuda del método AddShape (Type, Left, Top, Width, Heigth):

1°.- Type Tipo de la forma básica (con prefijo msoShape…)

2°.- Left De orilla Izquierda de hoja a orilla de forma.

3°.- Top De orilla Superior de hoja a orilla de forma.

4°.- Width Ancho de forma.

5°.- Heigth Alto de forma.

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. Pruébelo… Identifique y explique cada argumento. Intente con otros valores.

4.2.2 LÍNEAS Y FLECHAS

Las líneas —y su subgrupo flechas— también son formas básicas, ya que tienen propie-

dades y métodos muy similares a los rectángulos, la diferencia son los argumentos del

método AddLine (BeginX, BeginY, EndX, EndY) {vea la Ayuda}.

1°.- BeginX De orilla Izquierda de hoja a Inicio de línea.

2°.- BeginY De orilla Superior de hoja a Inicio de línea.

3°.- EndX De orilla Izquierda de hoja a Fin de línea.

4°.- EndY De orilla Superior de hoja a Fin de línea.

GRABE LA CREACIÓN DE UNA LÍNEA:

1. Inicie grabación [1.2.1 y Tip] …¿Revise cuántas sentencias crea cada acción?

2. Active el botón Línea de la barra de dibujo.

3. Dimensione el rectángulo: mantenga <Alt> y desde la esq. sup. izq. arrastre el bo-

tón del ratón hasta la esq. inf. der., suéltelo y luego suelte <Alt>.

4. Dele nombre, color y grosor (igual que rectángulo [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. Pruébelo… Identifique y explique cada argumento. Intente con otros valores.

¿Cómo se codifica si arrastra desde la esq. inf. izq. hacia la esq. sup. der.?

¿Cuál es el código si usa el botón Flecha? o ¿Si le pone puntas a su línea?

“A1”

“A1”

1° Las distancias son en puntos. 1 punto = 1/72 pulg. = 3.53 mm

Page 27: Manual Curso Excel Automatización

Cap. 4 27

4.2.3 CUADROS DE TEXTO Y FOTOS

Los cuadros de texto son objetos gráficos 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 grabación [1.2.1 y Tip] … Revise ¿Cuántas sentencias crea cada acción?

2. Active el botón Cuadro de texto de la barra de dibujo.

3. Dimensione e introduzca algún 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 grabación.

Inserte texto en B2. Grabe otra macro e inserte un Cuadro de texto, en la barra de

fórmulas introduzca =B2 y <Enter>… ¿Que pasa si elimina la 2da sentencia?

FOTOGRAFÍE UN RANGO: {automatización de función manual con botón “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

… ¿Cómo la grabaría? … ¿Cómo la haría sub-rutina con argumentos? [6.3.1]…

4.2.4 IMÁGENES Y FOTOGRAFÍAS

Las Fotografías son imágenes digitalizadas almacenadas en archivos especiales:

Grabe una fotografía incrustada:

1. Inicie grabación de macro [1.2.1 y Tip].

2. Menú Insertar–Imagen–Desde archivo… : en carpeta “Asistente”, de 2clic a “ROBOT.JPG”.

3. Pare su grabación y compare su código con éste:

ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\Asistente\ROBOT.JPG").Select

Selection.Left = 120#

Selection.Top = 38.25

Se pueden crear cientos de objetos gráficos —formas, líneas, cuadros de texto, imágenes

y fotografías—, puede agregar, manipular o borrar sus dibujos e imágenes.

Los objetos gráficos pueden aparecer y desaparecer… ¿Qué propiedad usaría Ud.?

Busque en la Ayuda el tema: Solución de problemas de objetos de dibujo.

Page 28: Manual Curso Excel Automatización

Cap. 4 28

4.3 EXPLORE LOS OBJETOS PARA INFORMES

Los Objetos para Informes son muy útiles para resumir grandes volúmenes de informa-

ción. Presentándola en forma esquemática —visualmente agradable— con su análisis

para la correcta toma de decisiones. Su funcionamiento básico es similar a los objetos

Gráficos y Rangos, y tienen dos clasificaciones: Gráfica y Tabla dinámica.

Estos objetos tienen cientos de atributos —propiedades y métodos—. Muchos de ellos

son, por si mismos, objetos autónomos, cuyo funcionamiento es semejante al de otros

objetos de Excel. Aprender a manejarlos con sólo leer un manual de referencia es muy

complicado ya que deberá invertir bastante tiempo (recurso limitado).

Para solucionar esto, Excel usa la tecnología C.A.S.E. (Ingeniería de Software Asistida por

Computadora). Uno de sus más 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

aún, irá explorando los objetos (con sus propiedades y métodos) conforma los vaya utili-

zando, y así lo nuevo que aprenda —en automatización de objetos— lo entenderá y asi-

milará 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 GRÁFICA (Chart)

Las gráficas presentan rápidamente, en un diagrama visual, un resumen de datos.

GRABE LA GENERACIÓN DE UNA GRÁFICA:

1. En un libro nuevo: inicie grabación [1.2.1 y Tip] …¿Cuántas sentencias generará cada acción?

2. Abra el archivo “Datos por Graficar 4.3.1.xls” en carpeta “Asistente”.

3. Seleccione celda A3, use botón : deje los valores por omisión y clic a Terminar.

4. Identifique los argumentos constantes y generalice su macro [8.2]: _______________

5. Compare su macro generalizada con este código:

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

ActiveChart.SetSourceData Source:=RangoAGraficar

ActiveChart.Location Where:=xlLocationAsNewSheet

En la macro que grabó: Generalice Location a la hoja activa (donde están los datos).

En una hoja de cálculo, una gráfica es contenida dentro un objeto especial: "ChartObject";

que a su vez, es contenido en tal hoja. Para seleccionar el objeto ChartObject: pierda la se-

lección de la gráfica (active una celda), mantenga <Shift> y clic a la gráfica.

Las manijas blancas indican la selección del objeto ChartObject.

Las manijas negras indican la selección de la gráfica en sí (dentro de ChartObject).

Opción: en vez de Variable, use referencia con hoja: Range("Hoja1!A3").CurrentRegion

Page 29: Manual Curso Excel Automatización

Cap. 4 29

En código: nombre (indizando) al objeto contenedor [3.5] de la Gráfica 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:

P.e. ActiveSheet.Shapes("Gráfica1").Left = RangoAGraficar.Left

ActiveSheet.Shapes("Gráfica1").Width = RangoAGraficar.Width

Grabe otra macro y cambie los valores del Asistente para gráficas (Analice su código).

4.3.2 OBJETO TABLA DINÁMICA (PivotTable)

Es una hoja de cálculo interactiva que analiza y resume gran cantidad de datos.

GRABE LA GENERACIÓN DE UNA TABLA DINÁMICA:

1. En un libro nuevo: inicie grabación [1.2.1 y Tip] …¿Cuántas sentencias genera cada acción?

2. Abra “Datos para Tabla Dinámica 4.3.2.xls” en “Asistente”. Analice los datos y pregúntese:

¿Cuál es la Venta de cada Producto por Estado?… También, hágase otras preguntas.

3. Active A2, menú Datos – Asistente para tablas dinámicas…, use Siguiente> hasta paso 3.

4. Diseñe su tabla: arrastre Estado a FILA, Categoría 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 método o propiedad en cada senten-

cia. Sepárelas para mejor visualización. Divídala y si es necesario [2.4.3-2].

7. En A1, clic der. – Seleccionar – Datos y dé formato con el botón “Moneda”.

8. Seleccione la celda A1, y detenga su grabación.

9. Identifique los argumentos constantes y generalice su macro: __________________

10. Compare su macro generalizada con este código:

Workbooks.Open ThisWorkbook.Path & "\Asistente\Datos para Tabla Dinámica 3.4.2.xls"

Dim NomTablaDinám As String, RangoParaTD As Range [8.2 y 8.4] NomTablaDinám = InputBox("Nombre de tabla dinámica:", , "TablaDinámica?")

Set RangoParaTD = Range("A2").CurrentRegion

ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:= _

RangoParaTD, TableDestination:="", TableName:=NomTablaDinám

With ActiveSheet.PivotTables(NomTablaDinám)

.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, sólo para generalizar. No tuvo que aprenderse

propiedades ni métodos (ni argumentos); sólo tiene que identificarlos para reacomodarlos.

Grabe otra macro y en paso 3, y arrastre Canal a PÁGINA, y/o use el campo Fecha, y/o

cambie su cálculo 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

sólo para el archivo que se abre por la estructura de columnas de la lista de datos.

¿Cómo simplificar

este proceso?

Page 30: Manual Curso Excel Automatización

Cap. 5 30

5 EDITOR DE VISUAL BASIC PARA APLICACIONES

Es un programa aparte de Excel pero incluido en él. Es la versión adaptada a Excel del

lenguaje de programación Visual Basic. Pero Ud. tiene la ventaja de grabar sus acciones

manuales (con las que está familiarizado) en Excel, y simplemente, las identifica y modifi-

ca aquí, en el Editor de Visual Basic (versión para aplicaciones).

5.1 ELEMENTOS DEL EDITOR DE VBA

Sus principales secciones son:

1. Explorador de Proyectos.- Muestra una lista jerárquica de proyectos (libros) y sus

elementos —organizados en carpetas—: como los Objetos de Excel [12.2] y los Módu-

los. Ábralo: botón o <Ctrl + R>… Ayuda: Active el panel y <F1>.

2. Ventanas de Módulo.- Donde se almacenan las macros (procedimientos [6] o funcio-

nes [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 características del objeto o elemento selecciona-

do, éstas se pueden cambiar aquí. Ábrala: botón o <F4>.

4. Ventana Inspecciones.- Aparece cuando desee revisar una expresión: p.e. un objeto

y analizar sólo sus propiedades <Ctrl + Alt +G> [3.7.1].

5. Examinador de objetos.- Muestra los objetos de Excel y sus propiedades, métodos,

eventos y constantes, disponibles con las “bibliotecas de objetos”. Sirve para buscar y

utilizar tales objetos incluidos los creados por Ud. Use botón o <F2>.

Cámbielas de tamaño: arrastre bordes. Pueden ser Anclables/ Flotantes (excepto la de

módulos), ¿Cómo? … En su encabezado dé Clic der. – Flotante.

Al ejecutar paso a paso: oculte todas y maximice la del Módulo en cuestión [2.4.3-7].

5.2 MANEJO Y ORGANIZACIÓN (Proyectos, Módulos 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 jerárquica con sus objetos referenciados y organizados en carpetas, como:

OBJETOS DE EXCEL (El libro y sus hojas), FORMULARIOS [14] y MÓDULOS [5.2.2].

5.2.2 MÓDULOS

Los módulos son hojas especiales que se manejan muy similar a un procesador de pala-

bras, donde se almacena y manipula el código de las macros [5.2.3] (procedimientos [6] o

funciones [7]), un módulo puede contener una o varias macros.

Page 31: Manual Curso Excel Automatización

Cap. 5 31

1. Para ver código de un módulo, dele 2clic en el Explorador de proyectos [5.1.1].

2. ¿Cómo se almacenan las macros grabadas? …Consulte: [2.2].

3. Insertar módulo manualmente: menú Insertar – Módulo.

4. Cambiar el nombre de un módulo: consulte: [2.2.1].

5. Copiar módulo entre proyectos: arrástrelo de un proyecto a otro.

6. Eliminar módulo: en él, clic der. – Quitar módulo…, ¿Exportar? dé No.

7. Exportar módulo (archivos “.bas”): en él, clic der. – Exportar archivo…

8. Importar módulo (archivos “.bas”): en carpeta Módulos clic der. – Importar archivo…

5.2.3 MACROS

Codificadas en lenguaje Visual Basic, formadas por sentencias: instrucciones equivalen-

tes a las acciones manuales en Excel, grabadas o escritas directamente [2.4.1 y 2.4.2].

1. ¿Cómo mostrar una macro desde Excel? Consulte: [2.1].

2. Eliminar (desde Excel): (o <Alt + H + M + M> ), selecciónela y Eliminar.

3. ¿Cómo manejar y modificar el código? Consulte: [2.4.3].

4. Compilar código: para revisar errores de compilación antes de probar su macro:

menú Depuración - Compilar VBAProyect o <Alt + D + Enter>. [10.2.1]

5. Para probar macro desde VBA: coloque el cursor dentro del código de su macro:

para ejecutar todo: <F5>.

para ejecutar paso a paso: <F8>.

6. Para interrumpir la ejecución: <Esc>. mostrará mensaje para Finalizar o Depurar.

7. Para Finalizar, en ejecución paso a paso: botón o < Alt + T + R >.

5.3 PERSONALIZACIÓN DEL EDITOR DE VBA

Puede personalizar el ambiente de trabajo del Editor de Visual Basic para que se acomo-

de 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 según el tipo de código.

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 declaración de Variables del usuario.- menú Herramientas – Opciones… ficha

Editor y marque la opción: Declaración de variables requerida [8.2.2].

Page 32: Manual Curso Excel Automatización

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). También existen proce-

dimientos Function [7]. En otras palabras, las macros (grabadas o escritas) y las funciones

personalizadas, son las dos clasificaciones del término estándar en VBA: Procedimientos.

6.1 DEFINICIÓN DE PROCEDIMIENTOS

Procedimiento: es una secuencia de instrucciones codificadas en VBA, ejecutadas como

una unidad y que realizan una tarea específica. Está almacenado en un módulo VBA.

6.1.1 TIPOS DE PROCEDIMIENTOS

Son 2: procedimientos Sub (macros) y procedimientos Function (funciones personalizadas).

1. Procedimiento Sub: realiza una acción, 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 función no hace accio-

nes, puede utilizarla en una celda, tal como las funciones incorporadas de Excel.

6.1.2 PARTES DE UN PROCEDIMIENTO

Procedimiento Sub: Procedimiento Function:

Sub Nombre(Argumentos) Function Nombre(Argumentos)

Código VBA (acciones) Código VBA (cálculos)

End Sub Nombre = Resultado

End Function

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

6.2 AUTOMATIZACIONES COMPLEJAS

6.2.1 ESTRUCTURAR UNA AUTOMATIZACIÓN COMPLEJA EN TAREAS SENCILLAS

Cuando tenemos una automatización compleja, lo mejor es separarla en tareas más sen-

cillas, para después conjuntarlas desde una macro principal.

El objetivo consiste en crear procedimientos —macros o funciones— cortos, reutilizables,

fáciles de mantener y que trabajen en conjunto. El beneficio es que así, son más sencillos

de diseñar, poner en práctica, depurar y actualizar.

6.2.2 CÓMO LLAMAR UN PROCEDIMIENTO DESDE OTRO

Simplemente, en el código del principal, ponga el nombre del procedimiento llamado.

Si el procedimiento necesita argumentos (datos de entrada): consulte [6.3.1].

Page 33: Manual Curso Excel Automatización

Cap. 6 33

Al ejecutar el principal, y llegar al nombre del procedimiento (sub-rutina), éste se eje-

cuta; cuando termina, regresa al principal y continua con las demás 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 cuáles lo han llamado: menú Ver – Pila de llamadas… (<Ctrl + L>).

6.3 ARGUMENTOS, DATOS DE ENTRADA

Cómo se vio en [6.1], los argumentos son parte de un procedimiento (van entre paréntesis)

y representan los valores de entrada —o referencias a objetos de Excel [4.1]—. Su funcio-

namiento es similar a las variables (y se puede declarar su tipo) [8.2]. Así como los nom-

bres (de celdas) facilitan la lectura y comprensión de las fórmulas en Excel, los argumen-

tos (y variables) hacen lo mismo en el código 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 más infor-

mación 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 paréntesis 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 transmiti-

rá —para su uso— al procedimiento llamado [Ej. 14.2.2-11].

6.3.2 ARGUMENTOS OPCIONALES Y VALOR POR OMISIÓN

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 omisión (default):

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

Los argumentos opcionales, van siempre al final.

6.3.3 NÚMERO INDETERMINADO DE ARGUMENTOS

Para cualquier cantidad de argumentos. P.e. Función 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— más fácilmente el código.

Page 34: Manual Curso Excel Automatización

Cap. 7 34

7 FUNCIONES PERSONALIZADAS

Una función personalizada es como cualquier función para hoja de cálculo incorporada en

Excel, como SUMA o PROMEDIO. Si en una celda Ud. tiene una fórmula larga —con va-

rios cálculos y funciones anidados—, reemplácela por una función personalizada

—realizando todo el cálculo en código—. Esto hace al proceso más eficiente.

Así como Excel tiene sus funciones incorporadas, VBA tiene las suyas. Y en las de Ud.

—personalizada—, puede realizar operación matemáticas, usando valores, textos y/o fe-

chas (OJO con el manejo de fechas en ingles, formato: mes/día/año). También 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 algún módulo (en Clases) para mostrar sólo sus

miembros. Identifique las funciones, ¿Su icono? __________

7.1 DEFINICIÓN DE FUNCIONES PERSONALIZADAS

Una función (Function) es un tipo de procedimiento, similar a una macro (Sub). La dife-

rencia es que Function devuelve un valor. Así: Ud. le da datos de entrada (argumentos),

los procesa (realiza cálculos con ellos) y obtiene un resultado (devuelve un valor nuevo).

7.1.1 PARTES DE UNA FUNCIÓN [6.1.2]

Function Utilidad(PrecioVenta, CostoProducción, CantidadVenta)

Utilidad = (PrecioVenta – CostoProducción) * CantidadVenta

End Function

1. Function y End Function palabras claves de inicio y fin de la función.

2. Nombre en este caso se identifica como Utilidad.

3. Argumentos datos de entrada: en este caso 3.

4. Cálculos operaciones con los argumentos. A la der. del signo =.

5. Resultado éste se asigna (con signo =) al nombre de la función.

7.2 CREACIÓN DE UNA FUNCIÓN PERSONALIZADA

Diseñe una función personalizada que calcule la comisión 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 módulo [5.2.2-1] o Insértelo [5.2.2-3], si gusta, nómbrelo [2.2.1].

4. Teclee Function, el nombre y, entre paréntesis, sus argumentos, dé <Enter>.

Page 35: Manual Curso Excel Automatización

Cap. 7 35

5. Dé <Tab> para dar sangría: mejora la lectura del código. La función será:

Function Comisión(PrecioXAcción, AccionesVendidas)

VentaTotal = AccionesVendidas * PrecioXAcción

If VentaTotal > 150000 Then

Comisión = 2500 + 3 * (0.9 * AccionesVendidas)

Else

Comisión = 2500 + 3 * AccionesVendidas

End If

End Function

6. Haga más eficiente su código: declare el Tipo de Datos que almacenarán los Argu-

mentos y el que devolverá la Función [8.3]. La 1ra sentencia quedará:

Function Comisión(PrecioXAcción As Currency, _

AccionesVendidas As Integer) As Currency

7.3 USO DE FUNCIONES PERSONALIZADAS

Una función personalizada se puede usar desde una celda en Excel, o desde un procedi-

miento en VBA —macro u otra función—.

7.3.1 DESDE UNA CELDA EN EXCEL

1. En una hoja de cálculo, cree una tabla con 3 columnas con estos encabezados

(desde A1): “Precio por Acción”, “Acciones Vendidas” y “Comisión”.

2. Coloque valores en las 2 primeras columnas.

3. Seleccione C2 y active el asistente de funciones botón Pegar función “Fx”:

4. Seleccione la Categoría: Definidas por el usuario y 2clic a su función Comisión.

5. En el 1° argumento, introduzca: A2, en el 2°: B2, y Aceptar.

6. Autollene su cálculo a las demás celdas: en el Control de Llenado dé 2clic.

Revisar Paso a paso: coloque un punto de interrupción dentro de la función [10.2.4]

y en la celda con la función: dé <F2> y <Enter>.

7.3.2 DESDE EL CÓDIGO DE UN PROCEDIMIENTO

Al usar una función (incorporada o personalizada) su valor se debe almacenar o utilizar

directamente. Y puede ser desde una macro u otra función. P.e.:

Almacenar en una variable:

miComisión = Comisión(100, 1500)

Usar directamente, como hacer un cálculo y mostrar su resultado en un mensaje:

MsgBox Comisión(PrecioUnitario, CantidadAcciones) * 1.5

7.3.3 ¿CÓMO USAR FUNCIONES DE EXCEL EN VBA?

Use una función de Excel en código, con la propiedad WorksheetFunction —del objeto

Aplicación—. 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)

La función devolverá

sólo tipo “moneda”.

Page 36: Manual Curso Excel Automatización

Cap. 8 36

8 TRABAJO CON EL CÓDIGO EN VBA

En este capítulo aprenderá términos y conceptos de VBA, para hacer que el código fun-

cione y su uso para dirigir el flujo de las instrucciones de un procedimiento.

8.1 COMPRENSIÓN DE CÓDIGO VBA

Los procedimientos (macros y funciones), están formados por código VBA.

Código VBA: son las instrucciones que comunican al procedimiento lo que debe hacer.

La unidad fundamental del código es la Sentencia.

Sentencia: es una unidad de código sintácticamente completa, que expresa una ac-

ción, una declaración o una definición. Pueden estar organizadas en bloques de sen-

tencias para realizar un objetivo común, p.e. los bloques unitarios en ciclos [9.2].

8.1.1 TIPOS DE SENTENCIAS

La sintaxis de los tipo más comunes de sentencias (o instrucciones) son:

1. Asignación de valores a propiedades de objetos: [3.2]

objeto.Propiedad = expresión (que da un valor)

ActiveCell.Font.Bold = True

2. Ejecución de métodos de objetos: [3.3]

objeto.Método [lista de argumentos] (opcionales)

[D4].CurrentRegion.Copy destination:=Worksheets("Hoja2").Range("E5")

3. Asignación, de valores a variables: [8.2]

variable = expresión (que da un valor)

EdadUsuario = InputBox("¿Cuál es su edad?")

4. Ejecución de sentencias incorporadas (la sintaxis varía):

Sentencia [lista de argumentos] (opcionales)

ChDir "C:\Mis documentos\Taller de Automatización"

5. Control de ejecución del código (en condiciones dadas): [9]

Estructuras de control

Do

NúmeroX = InputBox("Teclee un número:")

Loop Until IsNumeric(NúmeroX)

8.1.2 CUÁNDO USAR PARÉNTESIS

1. Al llamar a un procedimiento Sub, una sentencia incorporada y la mayoría de los métodos, no

devuelven un valor, por lo que sus argumentos (si existen) no van entre paréntesis.

2. Al llamar procedimientos Function, funciones incorporadas [7.3] y algunos métodos sí devuelven

un valor resultado, así que sus argumentos (si existen) sí van entre paréntesis.

Page 37: Manual Curso Excel Automatización

Cap. 8 37

8.2 USO DE VARIABLES Y ARGUMENTOS

Cuando graba una macro, las acciones se codifican sólo para el caso en el que las grabó,

o sea, sólo trabajarán para las mismas condiciones del caso particular. Para que su auto-

matización funcione para cualquier caso que se presente, Ud. debe generalizar su código.

Mucho de la generalización se logra por medio de las variables y/o argumentos. Una guía

práctica, es identificar los valores fijos, p.e. un número, 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 AUTOMATIZACIÓN 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 automatización a principiantes. Pero es con-

veniente declararlas (con su tipo de dato [8.3]) ya que se acelera la ejecución del código,

se optimiza espacio y se evitan errores; en resumen, el código se hace más eficiente.

8.2.2 DECLARACIÓN EXPLICITA

Para evitar el problema de dar nombres erróneos a las variables, configure a VBA para

que muestre un mensaje —antes de ejecutar el código— si una variable no es declarada

(dimensionada) explícitamente [10.1.2]. Simplemente al inicio del módulo, coloque la ins-

trucción: Option Explicit. Para que aparezca en los nuevos módulos, siga: [5.3.Tip].

8.2.3 CÓMO GENERALIZAR UNA AUTOMATIZACIÓN

Grabe la inserción de una columna en una lista de datos: nómbrela como Fecha y

llene sus celda con Ene-00, (Tarea 3 en Práctica02). Su código 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

End Sub

Generalice y mejore su macro, declarando variables, su código quedará así:

Sub InsertarColumnaFecha()

Dim FechaMesAño As Date

FechaMesAño = InputBox("Dar fecha, con formato mmm-aa:")

Columns(1).Insert Shift:=xlToRight

[A1] = "Fecha"

[A1].CurrentRegion.SpecialCells(xlCellTypeBlanks).Select

Selection = FechaMesAño

[A1].Select

End Sub

El Valor Fijo del caso grabado…

…reemplácela por esta variable…

… que previamente se le asignó un valor

(de una expresión).

Page 38: Manual Curso Excel Automatización

Cap. 8 38

8.2.4 ¿ES NECESARIO USAR UNA VARIABLE?

Si el valor de una expresión lo piensa almacenar en una variable, pregúntese ¿Cuántas

veces usará tal valor? Si es sólo una, tal vez sea mejor colocar dicha expresión en la sen-

tencia donde se usará su valor. En otras palabras, Utilice una variable si el valor almace-

nado en ella se usará 2 o más veces. Revise ejercicios: [8.2.3], [4.3.1], [4.1.6-2] y [12.1.1-2].

Pero, las variables mejoran la comprensión —y revisión— del código, al resumir expresió-

nes 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 sólo 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]. Además, en una misma

línea puede declarar varias variables —separadas por comas—.

8.3.1 TIPOS PRINCIPALES: Numérico, Cadena (Texto), Fecha y Booleana (Verdadero/Falso)

Para revisar los tipo de datos que puede almacenar una variable, ejecute este código

paso a paso —El módulo no debe tener Option Explicit—. Inspeccione la variable

[3.7.1-1 pasos 1 al 3], observando cómo 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 vínculo Vea también, seleccione Resumen de tipos de datos.

Para verificar el tipo de datos que contiene una variable, puede usar funciones de revi-

sión, p.e.: use esta sentencia al final de su macro (Ayuda: en palabra, <F1>):

MsgBox IsNumeric(miValor)

O la función que da el tipo de dato (Ayuda: ponga el cursor en la palabra y <F1>):

MsgBox TypeName(miValor)

8.3.2 CONVERSIÓN DE UN TIPO DE DATOS EN OTRO

:Use las funciones de conversión de tipo de datos, p.e. para convertir un número con

decimales a Entero:

Function NúmeroEntero(NúmeroDado As Single) As Integer

NúmeroEntero = CInt(NúmeroDado)

End Sub

Para ver todas las funciones, busque en la Ayuda: funciones de conversión de tipos.

Page 39: Manual Curso Excel Automatización

Cap. 8 39

8.4 ALMACENAR OBJETOS EN VARIABLES

Además 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 VARIABLES

Para revisar cómo hace referencia una variable a un objeto, en A1 de la hoja de cálculo

activa, dé una fecha, ejecute este código paso a paso —El módulo 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 métodos del objeto

referido.

Para ver todos los Tipos (Capacidad e Intervalo), busque en la Ayuda: Utilizar los tipos

de datos eficientemente en vínculo Vea también, 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 cálculo:

Dim misFormas As Shapes

Set misFormas = ActiveSheet.Shapes

misFormas.SelectAll

¿Cómo haría referencia a los objetos para Informes?

Para una gráfica Dim miGráfica as Chart

Para una Tabla dinámica Dim miTablaDinámica as PivotTable

Trate de usarlas en los ejercicios de la sección [4.3].

Page 40: Manual Curso Excel Automatización

Cap. 8 40

8.5 CÁLCULOS EN CÓDIGO VBA

Una expresión es una combinación de números, variables [8.2], funciones [7] y/u operado-

res que producen un valor. Las funciones incluyen todas las incorporadas de VBA [7.3.2] y

las de Excel [7.3.3], además de las funciones personalizadas [7.1].

8.5.1 OPERADORES

Clasificados en 4 tipos: Busque en Ayuda: “Resumen de operadores”.

1. ARITMÉTICOS ………….. + , - , / , * , ^ , \ y Mod.

With ActiveCell 'Calcula IVA:

.Offset(0, 3) = (.Offset(0, 1) + .Offset(0, 2) - .Value) * [IVAptje]

End With

2. CONCATENACIÓN ……... & (u operador de texto).

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

3. LÓGICOS…………………. And, Or, Not, Eqv, Imp, y Xor.

ActiveWindow.DisplayFormulas = Not ActiveWindow.DisplayFormulas

4. COMPARACIÓN ………… = , > , < , >= , <= , <> , Is y Like.

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

8.5.2 EJEMPLOS DE CASOS

1.- Cálculo de Utilidad, comparando el Costo: en una hoja de cálculo, desde A1,(ponga

estas 3 columnas, “Venta”, “Costo” y “Utilidad”, ponga valores a las 2 primeras, selec-

cione B2, cree la macro “CálculoUtilidad”, con este código y ejecútelo: Do Until ActiveCell = "" [9.2 y 9.3] Revise los Ejercicios del Capítulo [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 “Cálculos en Código 8.5.2-2.xls” en “Asistente”, cree una macro con este código: If ActiveCell.Offset(, -2) Like "mx*" Then ActiveCell = ActiveCell * 1.1

Asígnele una combinación de teclas. En la hoja seleccione un Precio y ejecute.

8.6 USO DE CONSTANTES

Una Constante es la representación de un valor: mejora la legibilidad del código.

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 módulo, como regla van en mayúsculas:

Const PI = 3.1416, MÁXPLANETAS = 9

[4.1.5-2]

Page 41: Manual Curso Excel Automatización

Cap. 9 41

9 CONTROL DE LA EJECUCIÓN DEL CÓDIGO

Las sentencias que controlan la toma de decisiones —evaluando una condición, y basán-

dose en ésta, ejecutan ciertas instrucciones— y las que controlan ciclos —ejecución repe-

tida del bloque unitario de instrucciones—, son llamadas “Estructuras de Control”.

Sin ellas, la secuencia de ejecución de las instrucciones de un procedimiento son un sim-

ple flujo unidireccional. Aunque se pueden crear macros muy útiles con este sencillo pro-

ceso, gran parte de la versatilidad y utilidad de VBA - Excel proviene de la capacidad de

las Estructuras de Control para cambiar el orden de ejecución de las sentencias.

En este capítulo verá cómo la grabación de sus tareas repetitivas en macros de VBA, las

puede convertir en herramientas que le harán la vida mucho más 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 siguien-

tes (Introduzca el código en una macro y pruébelo):

9.1.1 If…Then

Evalúan una condición —con una expresión booleana (Verdadero o Falso)— y ejecu-

tan o no una(s) instrucción(es).

1.- Sentencia de Validación.- Si la celda nombrada esta en blanco Salir de la macro:

If Range("ImporteFactObjetivo") = "" Then Exit Sub

2.- Sentencia de Validación.- para desplazamiento correcto:

If ActiveCell.Row < 65536 Then

ActiveCell.Offset(1, 0).Select

MsgBox "El desplazamiento es válido."

End If

9.1.2 If…Then…Else

Evalúan una condición y ejecutan una(s) instrucción(es) u otras. If Edad >= 18 Then

MsgBox "Ya debe tramitar su Credencial de Elector."

Else

MsgBox "Todavía te falta: " & 18 – Edad & " año(s)."

End If

9.1.3 If…Then…ElseIf…Then

Evalúan varias condiciones y ejecutan las(s) instrucción(es) de la primera condición

que su resultado sea verdadero. If Centena = 100 Then

Centenas = "Ciento "

Else If Centena = 200 Then

Page 42: Manual Curso Excel Automatización

Cap. 9 42

Centenas = "Doscientos "

Else

Centenas = ""

End If

9.1.4 Select Case…

Compara una misma expresión con varios valores distintos: Select Case TipoTrabajo

Case 1

Bono = Salario * 0.1 * Jerarquía / 10

Case 2, 3

Bono = Salario * 0.09 * Jerarquía / 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 consúltelas en la Ayuda.

1. IIf Es idéntica a la función SI de Excel: Aprobar = IIf(Presupuesto <= 1000000, "Aprobado", "Rechazado")

2. Switch Los argumentos van en pares (expresión - valor), similar a [9.1.3]: Gentilicio = Switch(Cd="Culiacán", "Culichi", Cd="Mochis", "Mochiteco")

3. Choose Selecciona una opción dando el número de su posición, similar [9.1.4]: Function NúmRomano(Núm As Integer) As string

NúmRomano = Choose(Núm, "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 cuánto costará

fabricar un clavo comparado con fabricar 10,000; respuesta: casi lo mismo. Esta analogía

nos sirve para comprender que crear una macro para que se ejecute sólo 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 número 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 número de veces. Mejórela pidiendo al usuario la cantidad:

For contador = 1 To 5

Beep

Next contador

2.- Liste número de facturas faltantes, abra “FacturasFaltantes 9.2.1-2.xls” en “Asistente”.

Active la hoja “Facturas”, cree una macro con éste código y ejecútelo: Dim ColNoFacts As Range, EsConcecutivo As Boolean

Dim i As Integer, NúmEnRevisión As Integer

Set ColNoFacts = Range([A2], [A2].End(xlDown))

Worksheets("Faltantes").Select

Range("A1").Select

EsConcecutivo = True

Page 43: Manual Curso Excel Automatización

Cap. 9 43

For i = 1 To ColNoFacts.Cells.Count

If EsConcecutivo Then NúmEnRevisión = ColNoFacts.Cells(i)

If NúmEnRevisión - ColNoFacts.Cells(i + 1) = 1 Then

EsConcecutivo = True

Else

NúmEnRevisión = NúmEnRevisión - 1

ActiveCell = NúmEnRevisión

ActiveCell.Offset(1, 0).Select

If i < ColNoFacts.Cells.Count Then i = i - 1

EsConcecutivo = False

End If

Next i

3.- Invertir texto, use esta función 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 Colección [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 números, 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 número de ciclos que se ejecutará el “bloque unitario de instrucciones”.

Significa: Hacer estas instrucciones —bloque unitario— hasta que la condición de sali-

da sea verdadera. El bloque unitario lo puede grabar (con ref. relativa).

Sintaxis: Posición Inicial (con Ref. Absoluta) Opcional. Puede ubicarse manualmente.

Do Until Expresión booleana p.e. Fin de datos: ActiveCell = “”

… Instrucciones del bloque unitario (con Ref. Relativa)

Posición Siguiente (con Ref. Relativa)

Loop

1.- Dé formato condicional. Abra ”Formato Condicional 9.2.3-1.xls.xls”, en carpeta “Asistente”,

teclee este código en una macro y pruebe …¿Tiene duda? Pregunte a su asesor.

Page 44: Manual Curso Excel Automatización

Cap. 9 44

[C4].Select '<== Posición Inicial (Ref. Absoluta).

Do Until ActiveCell = "" '<== Hacer Hasta Fin de datos.

If ActiveCell > 20000 Then '<== Bloque unitario de instrucciones.

ActiveCell.Interior.ColorIndex = 3

ActiveCell.Font.ColorIndex = 2

ActiveCell.Font.Bold = True

End If

ActiveCell.Offset(1, 0).Select '<== Siguiente Posición (Ref. Relativa).

Loop

2.-Elimine las cuentas cuyo Acumulado sea cero. Abra ” Sólo Acumulado 9.2.3-2.xls”, ponga

este código en una macro y ejecútela (¿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 si-

guiente código en una macro y ejecútela (¿Qué puede mejorar? Son 2 detalles):

Dim FilaIni As Integer

[D2].Select '<== Posición 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 '<== Siguiente Posición (Ref. Relativa).

Loop

9.3 ESTRUCTURAS DE CONTROL ANIDADAS

Si una estructura de control está dentro de otra, se dice que está anidada. P.e. la estructu-

ra If… Then esta anidada dentro de For… Next, en la gran mayoría de los casos están

anidadas, dependiendo de sus necesidades.

Function CuentaValores(RangoBúsqueda As Range, ValorBuscado) As Integer

For Each Celda In RangoBúsqueda

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 condición inicial que va cambiando —y se

va evaluando— con cada ciclo, hasta que la condición sea la justa para salir de la estruc-

tura de control. Sin embargo, es posible que antes se llegue a otra condición y ya no haya

necesidad de hacer más ciclos, aquí es preciso salir de tal estructura de control.

1. En Do… Loop If Celda = ValorBuscado Then Exit Do

2. En For… Next If CaracterBuscado = "$" Then Exit For

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

Page 45: Manual Curso Excel Automatización

Cap. 10 45

10 DEPURACIÓN DE CÓDIGO

Una de las innovaciones más interesantes de VBA – Excel, es su capacidad de analizar

el funcionamiento del código, mientras se ejecuta. Estas herramientas para el análisis y

depuración del código tienen varios usos, principalmente para detectar el origen de los

errores o resultados inesperados. Además, también para experimentar —a prueba y

error— cambiando el código o para aprender (o recordar) como funciona un código escri-

to por otra persona —o usted mismo— tiempo atrás.

Estas herramientas no corrigen errores. Ayudan a analizar la secuencia de ejecución y

cómo cambian los valores de las variables, expresiones y propiedades de objetos. Auxi-

lian a determinar lo que ocurre y por qué. Existen 2 buenas formas de revisar código

VBA, la primera consiste en revisarlo al mismo momento de grabarlo [1.2.1-Tip], la segun-

da 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 código, más

rápido detectará —y corregirá— los errores; en otras palabras, planee su trabajo [1.4.1].

ERRORES DE CÓDIGO [11.1] En Índice de Ayuda: “Errores“.

1. De Sintaxis.- es detectado por VBA al terminar de escribir una sentencia.

2. De Compilación.- antes de ejecutar un procedimiento, VBA compila el código, y

detecta posibles errores de este tipo. Manualmente [10.2.1].

3. Lógicos.- son el producto de la lógica que utilizó y VBA no los detectará,

la ejecución no se detiene y produce resultados inesperados.

4. De Ejecución.- hay sentencias que sólo en ciertas circunstancias fallan, éstas

se pueden anticipar con un controlador de errores [11.2].

Los 2 primeros son fáciles de detectar, los 2 restantes se deben detectar mediante

“técnicas de depuración de código”; a continuación se explican.

10.2 TÉCNICAS DE DEPURACIÓN

Al entrar en ejecución paso a paso, la operación de código se interrumpe y muestra un

perfil de su estado en ese instante y Ud. puede controlar manualmente la ejecución ins-

trucción por instrucción del código. [5.2.3-Tips]. Ayuda: “Seguir la ejecución de código”.

10.2.1 COMPILE EL CÓDIGO

Cuando Ud. trata de ejecutar un código, VBA lo compila. Lo puede hacer Ud. manual-

mente.- con menú Depuración - Compilar VBAProyect o <Alt + D + Enter>.

Page 46: Manual Curso Excel Automatización

Cap. 10 46

10.2.2 EJECUTE PASO A PASO

Desde Excel [1.2.2]. Desde VBA coloque el cursor dentro de su macro y <F8>. Se mostrará el punto de ejecución (Franja Amarilla): es la instrucción por ejecutarse. Para avanzar: <F8>. Si desea ejecutar el código restante: <F5>.

10.2.3 CAMBIAR LA SENTENCIA POR EJECUTAR

Mueva la franja amarilla para cambiar la secuencia de ejecución: arrastre su flecha (de

la izq.) a la sentencia por ejecutar o en la sentencia por ejecutar clic der. – Establecer

instrucción siguiente o en la sentencia por ejecutar coloque el cursor y <Ctrl + F9>.

10.2.4 PUNTO DE INTERRUPCIÓN

Si requiere revisar una sentencia —sin revisar paso a paso el código 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 INTERRUPCIÓN TEMPORAL

Idem a [10.2.4] pero sólo 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 INTERRUPCIÓN

Para quitar uno sólo, haga lo mismo que para ponerlo [10.2.4].

Para todos: menú Depuración – Borrar todos los puntos de interrupción (<Alt +D + B>)

10.2.7 TERMINAR LA EJECUCIÓN PASO A PASO

Para finalizar la ejecución paso a paso: botón o < Alt + T + R >.

10.3 INSPECCIÓN DEL VALOR DE LAS EXPRESIONES O VARIABLES

10.3.1 INSPECCIÓN DE VALORES Apunte a la expresión o variable. Si no, con [3.7.1-1].

10.3.2 PUNTO DE INTERRUPCIÓN CONDICIONAL

Abra “PedHist.dbf” y depure este código. Inspeccione el Valor de FilaActual [3.7.1-1] y en

Inspecciones a la variable clic der. – Modificar inspección…, cámbiela por: FilaActual = 18,

marque Modo de Interrupción 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? … ¿Cómo haría el código más rápido? …

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 instrucción Beep.

Para facilitar una depuración futura.- Ponga varios comentarios [2.4.1-2].

Page 47: Manual Curso Excel Automatización

Cap. 11 47

11 CONTROL DE ERRORES

De los cuatro tipos de errores depurables [10.1], sólo los de Ejecución se pueden controlar.

Esto es, una vez localizada una sentencia susceptible a este tipo de error, es necesario

controlar la circunstancia para que la ejecución del código no se interrumpa y pueda con-

tinuar con una solución. Dicha solución puede ser omitir tal sentencia si es factible (lo más

sencillo), o en función del valor de error, modificar la circunstancia y tratar de ejecutar de

nuevo la sentencia que produjo el error.

11.1 CONCEPTO Y SITUACIÓN DE ERRORES DE EJECUCIÓN

En ocasiones, una misma sentencia puede funcionar correctamente bajo cierta condición

propicia (siempre presente al crear la macro). Pero al ejecutarla en otro caso u ocasión

—ya no con la condición propicia—, tal sentencia produce un error. P.e. al abrir un libro

(archivo), si éste existe (condición propicia) la sentencia se ejecutará sin problema; ahora,

si no existe (condición no propicia) la sentencia producirá un error… un error de ejecución

ya que sólo ejecutando el código, 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 produ-

cirlo. Así, si efectivamente se produce, se activa el controlador y éste decidirá que hacer

dependiendo de tal error. Después 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 solución es eliminar la hoja existente, pero ¿Qué sucede cuando no existe?,

A su vez producirá un error de ejecución… Pruebe esta solución varias veces:

On Error Resume Next

Sheets("Presupuesto").Delete

On Error Goto 0

Sheets.Add

ActiveSheet.Name = "Presupuesto"

2. Pruebe las siguientes sentencias varias veces, … Controle sus errores potenciales:

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"

Si la hoja no existe: NO SE EJECUTA. Es lo de menos, de todas maneras

quería eliminarla.

Page 48: Manual Curso Excel Automatización

Cap. 11 48

11.2.2 CONFIRMAR SI EFECTIVAMENTE HAY ERROR, CON OBJETO Err

Llendo un poco más allá que simplemente ignorar un error, puede utilizar Err, objeto

especial de depuración con propiedades que podemos revisar para confirmar si efecti-

vamente se ha producido un error, y si es así, cuál ha sido éste.

1.- Automatice la inserción 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 declararía 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é pasaría 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 gustaría mejorar?… Qué le parece que no

muestre el mensaje de alerta: coloque estas sentencias antes y después de la senten-

cia con posibilidad de activar el mensaje de alerta:

Application.DisplayAlerts = False

Sheets("Presupuesto").Delete

Application.DisplayAlerts = True

11.3 USO DE NÚMEROS DE ERROR

Este código pide una clave al usuario y la busca en la columna “A”, mostrando un

mensaje con la comisión del producto… ¿Qué pasa si no la encuentra?

Abra “Controlador Error 11.3.xls” y pruébelo …¿Encontró algún problema?:

On Error GoTo BuscaComisiónVenta_ControladorError

Columns(1).Find(What:=InputBox("Clave por buscar:"), After:=ActiveCell, _

LookIn:=xlFormulas, LookAt:= xlWhole, SearchOrder:=xlByRows, _

SearchDirection:=xlNext, MatchCase:=False).Activate

MsgBox "Comisión de " & ActiveCell.Offset(, 1) & " " & ActiveCell.Offset(, 2)

Exit Sub

BuscaComisiónVenta_ControladorError:

Select Case Err.Number

Case 91

If MsgBox("Error: " & Err & vbCrLf & Err.Description, vbYesNo, _

"¿DESEA REINTENTAR CON OTRO DATO?") = vbYes Then

Resume

Else

Resume Next

End If

Case Else

MsgBox "Error " & Err & vbCrLf & Err.Description, vbCritical, _

"Error imprevisto, favor avisar a ""[email protected]""."

End Select

Number es la propiedad por default del objeto Err.

¿Cómo funciona esta constante

de VBA en el mensaje [13.1]?

S

UB

-RU

TIN

A

M

AC

RO

Page 49: Manual Curso Excel Automatización

Cap. 12 49

12 FACILITE SUS MACROS, EVENTOS DE OBJETOS

Uno de los propósitos 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 sería difícil

llevar a cabos —debido a los recursos limitados—. Entonces, una vez que tenga lista su

macro, lo menos por hacer es facilitar su ejecución. Para esto se utilizan los eventos de

objetos. Un evento es una acción generada en o por el ambiente de Excel. Así, al ocurrir

un evento —ya sea por el usuario o por una acción automática— se ejecutará su proce-

dimiento asociado, que a su vez llamará a una macro que Usted creó.

12.1 EVENTOS POR EL USUARIO

Puede que para Ud. sea más fácil ejecutar sus macros seleccionándola de la lista de me-

nú Herramientas – Macro – Macros… [1.2.2], o estando en el código dar <F5> [5.2.3-5], o, si

la usa muchas veces al día, con combinación de teclas [1.2.1-3]. Pero para facilitar aún

más su ejecución, sobre todo si no se usa tan seguido —p.e. cada semana—,Integre su

automatización al entorno de Excel, y así, el usuario la usará lo más sencillo posible.

12.1.1 BOTONES DE HERRAMIENTA

Un botón en barra de herramienta es una técnica muy buena para ejecutar una automati-

zación. Mediante una representación gráfica (icono) se facilita su localización y la ayuda

en pantalla (al apuntar en él) recuerda el funcionamiento —o para qué sirve— al usuario.

1. Asignar Automatización a Botón de Herramienta

Decida si se agregará el botón a una barra existente o una nueva. Si es a una nueva:

1. En cualquier botón.- 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, muéstrela:

1. En cualquier botón.- clic der. – Personalizar… - ficha Barras de herramientas

2. Active la barra deseada: Clic en su cuadro de selección.

Una vez visible la barra (nueva o existente):

3. Ficha Comandos - Categoría Macros y el botón “carita” arrástrelo a la barra. 4. Al botón en la barra: 2clic (o clic der. – Asignar macro…) y 2clic a su macro.

5. Renombrar: clic der. – Nombre:. Imagen clic der. – Cambiar imagen botón 6. Clic en Cerrar. Apunte al botón, observe… y pruebe su macro.

2. Ejercicio de automatización por Asignar

Coloque esta macro en un módulo, ¿De qué tipo será la variable?, …Pruébela: 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 asignándoles éstas macros. Cambie sus imágenes a flecha arriba y flecha abajo.

Si copia el libro en otra computadora: que su barra de herramientas vaya adjunta: en cual-quier botón clic der. – Personalizar…, botón Adjuntar… y cópiela(s).

Page 50: Manual Curso Excel Automatización

Cap. 12 50

12.1.2 BOTONES DENTRO DE HOJA DE CÁLCULO

Los botones en barras de herramientas, responden a un sencillo evento: el clic del ra-

tón para ejecutar su macro asociada. Podemos colocar objetos (controles ActiveX) den-

tro de una hoja y asignarle un procedimiento de evento, que a su vez llamará a la ma-

cro que Ud. desee.

1. Asignar macro a Botón en Hoja

Para macros más específicas, que sólo se usan en determinada hoja de cálculo:

1. Muestre la barra “Cuadro de controles”: con 5° botón de barra “VBA” [1.4.3].

2. Clic en “Botón de comando” —verá el Modo diseño— y dimensione sobre la hoja.

3. Nombre y Etiqueta: use el botón Propiedades y cambie “(Name)” y “Caption”.

Consulte en Ayuda las propiedades “Accelerator” y “TakeFocusOnClick”.

¡OJO! Puede ocasionar problemas con su código, si el botón recibe el enfoque.

4. Estando en modo diseño, en su botón clic der. – Ver código.

5. Aparece el código de la hoja (carpeta: Microsoft Excel Objetos) donde colocó el bo-

tón. Y su procedimiento de evento “Al Click”: Sub NombreDelBotón_Click(), den-

tro, teclee el nombre de su macro [6.2.2]. Revise sintaxis [10.2.1].

6. En Excel Clic en botón Salir modo diseño, cierre Propiedades… y pruebe su macro.

Estando en modo Diseño, se ignoran los eventos de los objetos.

2. Ejercicio de Asignación a Control ActiveX

Cree un botón de comando sobre su hoja.- nombre: btnAmpliar, Caption: Ampliar, Accelera-

tor: A y TakeFocusOnClick: False. En su procedimiento de evento llame a la macro Ampliar.

Pruébelo. …Haga lo mismo para la macro “Reducir”.

12.1.3 OTROS EVENTOS

El evento AlClick es sólo uno de ellos —por lo general, el predeterminado—. Busque en

la Ayuda: “Click (Evento)” y en el vínculo “Vea también” 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 código de la hoja en cuestión (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 cuestión 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 código o llame a la macro por ejecutar —al ocurrir tal evento—.

2. Ejercicio de Asignación a Control ActiveX

Cree otro botón 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 código de evento de sus objetos se eliminará.

Page 51: Manual Curso Excel Automatización

Cap. 12 51

12.2 EVENTOS AUTOMÁTICOS

Los controles ActiveX —botones [12.1.2] y controles de diálogo [13]— tiene eventos que el

usuario conscientemente activa, para ejecutar su macro asociada. Pero no son los únicos

que pueden tener. Las hojas de cálculo y los libros de trabajo también, sólo que sus even-

tos se activan automáticamente y el usuario prácticamente no se da cuenta de ello.

12.2.1 EVENTOS DE HOJAS DE CÁLCULO

1. AL CAMBIAR SELECCIÓN

Al seleccionar ciertas celdas, que se copien sólo las fórmulas de la fila superior.

Abra “Avance Financiero.xls” en “Asistente”. Cree una macro “CopiarFórmulasDeArriba” 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 Selection-

Change, y ponga este código. Luego, vaya a Excel y seleccione desde A36 hacia abajo. If ActiveCell.Row < 20 Or ActiveCell.Column <> 1 Then Exit Sub

CopiarFórmulasDeArriba

2. AL ACTIVAR HOJA

Al activar hoja “Tabla” que se muestre la hoja “Datos”. Siga [12.1.3-1].- seleccione el obje-

to Worksheet, su procedimiento de evento Activate, y ponga este código: 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 código: Workbooks.Open FileName:=ThisWorkbook.Path & _

"\Avance Financiero macros.xls", UpdateLinks:=0

ThisWorkbook.Activate

Sheets("Gráfica").PrintPreview

Guarde (<Ctrl + S>), vaya a Excel y cierre todos los libros, abra Avance Financiero.xls.

Trate de que Al Cerrar este libro, también el de sus macros. Consulte a su asesor.

2° AL ACTIVAR CUALQUIER HOJA DEL LIBRO, imprima la identificación del archivo.

Siga [12.1.3-1].- en EsteLibro, con objeto Workbook, su procedimiento de evento SheetActiva-

te, e introduzca este código. Revise el Resultado en Presentación Preliminar. ActiveSheet.PageSetup.RightFooter = ActiveWorkbook.FullName

[A1].Select

Estas herramientas permiten crear aplicaciones que cualquiera puede usar fácilmente.

¿Cómo evitar que un procedimiento, al ejecutar cierta acción, 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 código debe volver a habilitarlos.

Page 52: Manual Curso Excel Automatización

Cap. 13 52

13 INTERACTÚE CON EL USUARIO

Un aspecto importante para mejorar sus macros es que pueden interactuar con el usuario.

Esto es, durante su ejecución, pueden pedir o dar información. La forma más sencilla es

mediante instrucciones que muestran cuadros de diálogo predefinidos, otra forma más

sofisticada es mediante controles ActiveX apoyados con procedimientos de eventos [12].

13.1 CUADROS DE DIÁLOGO PREDEFINIDOS

Usar este tipo de cuadros es la forma más sencilla de interactuar con el usuario.

13.1.1 CUADRO DE ENTRADA Sirve para pedir información al usuario.

Sintaxis: Expresión (o Variable) = InputBox(Mensaje, [Título], [ValorPorDefualt])

Si no pone un Título, se presenta uno predefinido.

El valor por default, será el más probable que el usuario escriba.

El uso de paréntesis es para almacenar el valor dado por el usuario. [8.1.2-2].

Ejemplos: Identifique los 3 argumentos y la concatenación de texto [8.5.1-2]:

1.- Nombre = InputBox("¿Cuál es su nombre?")

2.- División = InputBox("Dar escala de importes:", "DIVISIONES", 100)

3.- ActiveSheet.Name = InputBox("Dar Nombre de Hoja Gráfica:", , "Gráfica")

4.- Do

ValMáx = InputBox("Dar el Valor en Y máximo:" & vbCrLf & _

"Si el contrato es de: " & Range("ImporteContrato"), _

"VALOR MÁXIMO", Range("ImporteContrato"))

Loop Until IsNumeric(ValMax)

13.1.2 CUADRO DE MENSAJE Sirve para mostrar información o hacer una pregunta.

Sintaxis1: MsgBox Mensaje, [Botones], [Título]

Sintaxis2: Expresión (o Variable) = MsgBox ( Mensaje, [Botones], [Título] )

Botones: son constantes VBA (prefijo vb…) que representan botones en el diálogo.

Sin paréntesis en Sintáxis1, ya que no se almacenará ningún valor. [8.1.2-1].

Ejemplos: Identifique los 3 argumentos y la concatenación de texto [8.5.1-2]:

1.- MsgBox "Su nombre es: " & Nombre

2.- MsgBox "El pago de su hipoteca es de: " & Pago, vbExclamation, "PRÉSTAMO"

3.- Respuesta = MsgBox("¿Desea abrir el archivo?", vbYesNo)

4.- If MsgBox("¿Desea continuar?", vbOKCancel) = vbCancel Then Exit Sub

5.- Puede darle características especiales a su diálogo, p.e. reemplace el 2do argumen-

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

Esta constante muestra un símbolo de Interrogación

Esta constante pone el foco en el botón Cancelar

Opcionales

Page 53: Manual Curso Excel Automatización

Cap. 13 53

13.2 CONTROLES ActiveX, SOBRE HOJA DE CÁLCULO

En el capítulo 12, se trató a los botones ActiveX [12.1.2], para interacción 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 gráfica:

menús, botones de herramienta, barras de desplazamiento, cuadros de diálogo, listas

desplegables, botones en hoja y otras formas gráficas. Facilitando el trabajo al usuario

—o a Ud. mismo—: reduce errores limitando valores sólo a opciones válidas.

La mejor forma de entender estas herramientas es realizando una práctica.

DISEÑO DE MODELO DE CÁLCULO: CRÉDITO PARA VEHÍCULO

Sin interfaz gráfica.- Abra “Crédito Vehículo.xls” de “Asistente”. Coloque valores de entrada en

Datos: Precio = 350000, Enganche = 20%, Interés = 10% y Años = 3. Coloque los cálculos: Antici-

po = Precio * Enganche, Crédito = Precio - Anticipo y en Pago = -PAGO (Interés/12,

Años*12, Crédito). Pruebe con otros valores… Puede introducir cualquier valor, Precio e

Interés exagerados o valores de texto en los datos numéricos.

Este es el problema que presenta un modelo de cálculo, es muy flexible ya que el rango

de valores que permite es muy amplio y puede llegar a confundir al usuario. La solución,

mejorarlo con controles sobre la hoja de cálculo para eliminar posibles conflictos.

13.2. El Cuadro de Controles —con el 5° botón de barra VBA [1.4.3]— contiene una ga-

ma de controles ActiveX muy útiles sobre la hoja de cálculo. Verá cómo crear, cambiar

sus propiedades manualmente y automatizar con sus eventos. Los más comunes son:

13.2.1 CONTROL DE NÚMERO

Empezará con el Plazo, los préstamos para carros por lo general son válidos hasta 5

años, limitará hasta 6 —dando algo de margen—, además, son enteros, por lo que un

Control de Número es una forma segura y fácil de capturar tal valor.

1. Muestre Cuadro de Controles [13.2.], y clic en el control . Se activa Modo diseño.

2. Ajuste a Cuadrícula: Mantenga <Alt> y clic en esq. sup. izq. de D10, arrastre a esq. contra-

ria.

3. Muestre la ventana Propiedades, con . Los controles ActiveX tienen muchas propiedades.

Casi en todas, sus valores por omisión son aceptables. Cambie sólo 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 diseño: con y cierre la ventana de Propiedades.

6. Pruebe su control… ahora sólo podrá capturar valores de plazos válidos.

Page 54: Manual Curso Excel Automatización

Cap. 13 54

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 vínculo a ella) podrán trabajar.

Solución: protéjala, pero que sólo el control pueda modificar su correspondiente celda.

7. PROTECCIÓN CONTRA USUARIO: El Cuadro de Controles debe estar visible [13.2.].

1° Entre al Modo diseño , seleccione el control y muestre sus Propiedades .

2° Nombre al control (Tip: use prefijo ctrl). Modifique: (Name) = ctrlAños.

3° La propiedad celda de captura anúlela. Modifique: LinkedCell = bórrelo.

4° Entre al procedimiento de evento, con Aparecerá el evento ctrlAños_Change

—Change es el evento predeterminado— y, dentro, teclee esta sentencia (de asigna-

ción de valor a la celda vinculada con el valor del control):

Range("C10") = ctrlAños.Value {Value es la propiedad por default, puede omitirla}.

5° Regrese a Excel, Salga del Modo diseño: con y cierre la ventana de Propiedades.

Proteja la hoja (sin contraseña). Directamente la celda no cambiará. Pruebe el control:

producirá un error, Finalice. …Para que funcione, deberá ejecutarse otro evento

—que proteja sólo contra el usuario— cada vez que se active esta hoja. Continúe.

6° Vaya al Editor de VBA, muestre el Explorador de Proyectos [5.1.1], de 2clic a Hoja1 (Crédito).

En la lista superior izquierda “Objeto” seleccione Worksheet. En la lista derecha selec-

cione Activate [12.2] y coloque estas sentencias:

ActiveCell.Select '<== Si esta seleccionado un control, ¿Qué pasaría si no existe esta sentencia?

ActiveSheet.Protect UserInterfaceOnly:=True {debajo, borre el evento predeterminado SelectionChange}

7° Vaya a Excel, active otra hoja y vuelva a Crédito. 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 Con-

trol de Número sólo maneja enteros: usará D6 como auxiliar. En C6 dé esta fórmula

=D6/100. Siga pasos [13.2.1]: ajustando a cuadrícula en D6. El rango (Min y Max) es co-

rrecto —de 0 a 100%—. Los incrementos serán de 5 en 5%: SmallChange = 5. La celda

de captura (auxiliar) estará oculta por el mismo control: (Name) = ctrlEnganche. Linke-

dCell = bórrelo. 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 práctica anterior, El interés es similar al enganche —son porcenta-

jes—, la diferencia es que aquí hay mucho más 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 cuadrícula: mantenga <Alt> y arrastre desde D9 hasta E9.

Este argumento permite sólo a la macro realizar cambios (NO al usuario).

Page 55: Manual Curso Excel Automatización

Cap. 13 55

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 fórmula =D9/10000. Salga del Modo diseño 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 ubicación.

7. Proteja contra usuario… siga los mismos pasos de [13.2.1-7], con estos valores: (Name)

= ctrlInterés. LinkedCell = bórrelo. Al evento CtrlInterés_Change teclee esta sentencia:

Range("D9") = ctrlInterés Siga el 5° paso y proteja la hoja…Revise y Pruebe.

13.2.3 CONTROL LISTA DESPLEGABLE

Siguiendo con la práctica, el precio del vehículo 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 vehículo y automáticamente aparezca su precio.

Para esto, existe en la hoja Catálogo, una lista cuyo rango tiene el nombre: “ListaVehículos”.

Siga los pasos de [13.2.1] con estos valores:

1. Usando el control Cuadro combinado . {la hoja debe estar desprotegida}

2. Ajuste a cuadrícula: mantenga <Alt> y arrastre desde D5 hasta F5.

3. Muestre la ventana Propiedades, con .

4. Personalice propiedades:

1) El Estilo será Lista desplegable. Modifique: Style = 2 – fmStyleDropDownList

Ya que no permitirá la introducción —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 = ListaVehículos

Es el nombre del rango localizado en la hoja Catálogo.

Salga del Modo diseño y pruébelo seleccionado cualquier vehículo… Falla, ya que la lista

pasa el Nombre del vehículo a su celda vinculada, deberá ser capaz de pasar el Precio.

5. La 2da columna de ListaVehículos es la que contiene el Precio para indicárselo: Active

Modo diseño, 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 diseño y pruébelo de nuevo ¿Funciona? ¿Nota algo fuera de lo normal?

Los datos no se ven completos y, abajo, aparece una barra horizontal.

6. Active Modo diseño, 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]).

Page 56: Manual Curso Excel Automatización

Cap. 13 56

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 diseño, cierre la ventana Propiedades y pruébelo otra vez.

8. Proteja contra usuario… siga los mismos pasos de [13.2.1-7], con estos valores: Nom-

bre = ctrlListaPrecios. LinkedCell = bórrelo. 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 Crédito)…Revise y Pruebe.

Todo parece funcionar a la perfección, sin embargo, ¿Qué pasaría si Ud. desea agregar

más vehículos a la lista?… Por medio de la lista no se puede introducir nuevos valores, 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 Catálogo; la desventaja es que tiene que renombrar el nuevo rango ListaVehículos.

Automatice el renombre del rango ListaVehículos con el evento Change de la hoja Catálogo:

1. Active hoja Catálogo, vea su código con . (aparece el evento por omisión SelectionChange).

2. En lista superior derecha seleccione Change. (borre el procedimiento SelectionChange).

3. En el procedimiento Worksheet_Change , Introduzca este código:

'Renombra el Rango "ListaVehículos": [4.1.6+4]

With Range("ListaVehículos").CurrentRegion

.Offset(1, 0).Resize(.Rows.Count - 1).Name = "ListaVehículos"

End With

'Actualiza el origen de los valores que mostrará la lista (¿Es necesaria?):

Sheets("Crédito").ctrlListaPrecios.ListFillRange = "ListaVehículos"

Vaya a Excel, modifique la lista en Catálogo y Pruebe su Lista desplegable.

El “Modelo de Cálculo con crédito para vehículos” es ahora muy sólido. Quién 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 omisión—. De hecho, no es necesario

teclear, ya que todo el funcionamiento se controla con simples clics del ratón.

13.3 OTROS CONTROLES ActiveX

Existen otros controles ActiveX que se pueden colocar sobre la hoja de cálculo como

Cuadro de texto, Casilla de verificación y Botón de opción. Estos se analizarán en el

capítulo [14] ya que su manejo es muy similar al de los Formularios Personalizados.

Una de las mejores ventajas de este tipo de interacción gráfica con el usuario, es la limita-

ción de los datos de entrada —que da el usuario— sólo a un rango de valores válidos. De

esta forma se reduce —o se elimina incluso— la probabilidad de error de usuario, además

de que el modelo se hace mucho más fácil de utilizar.

Page 57: Manual Curso Excel Automatización

Cap. 14 57

14 FORMULARIOS PERSONALIZADOS

Usted puede realizar automatizaciones prácticas, convenientes y útiles, facilitando su utili-

zación con botones y eventos automáticos [12], e intractuando con el usuario pidiéndole infor-

mación con cuadros de diálogo 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 fábrica de textiles, organizado por meses en columnas y conceptos (y sub-

conceptos) en filas. Requiere imprimir diferentes vistas (versiones) del mismo. P.e. los

ejecutivos y administradores necesitan el informe sólo con resúmenes; 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

información por medio de un Formulario Personalizado. Esta es la estrategia:

1. Interfaz de Usuario.- Diseñe el formulario con controles, incluidos sus eventos.

2. Funcionalidad del Formulario.- Cree las macros que harán lo que Ud. hacía “a mano”.

3. Implemetación del Formulario.- Es la conexión entre la Interfaz y la Funcionalidad, in-

cluida la forma en que se mostrará el formulario.

14.1 INTERFAZ DE USUARIO

Diseñe el formulario. Pregúntese ¿Qué tipo de información le pediré al usuario?, … ¿La

puede seleccionar de entre un grupo de opciones o la debe teclear?, … ¿Los grupos de

opciones son de selección única o múltiple?. …Para el ejemplo: El contenido en cuanto a

conceptos (en filas) puede ser Resumido, Detallado o Completo, —según el puesto del usua-

rio—, entonces será de opción ú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 CREACIÓN 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 botón

a) Aparecerá el Cuadro de Herramientas con los Controles, muévalo donde no le estorbe.

Si no aparece: clic a botón . Son muy similares a los que utilizó para colocar

controles ActiveX sobre la hoja de cálculo [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 después

cierre su formulario (cruz en esq. sup. der.).

3. Muestre las Propiedades [5.1.3], cambie: el Nombre (Name) = formInformePresupuestos,

y el Título (Caption) = INFORME AUTOMATIZADO DE PRESUPUESTO DE EGRESOS.

14.1.2 BOTONES DE OPCIÓN

Page 58: Manual Curso Excel Automatización

Cap. 14 58

Éstos, son para que el usuario seleccione una sola opción 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 botón

2. Clic en botón Marco y clic cerca de la esq. sup. izq. del formulario.

3. 2clic en botón de opción , haga clic en 3 lugares (de arriba a abajo) dentro del

Marco. Luego, desactive el botón de opción, haciendo clic de nuevo en él.

4. Seleccione cada control y cambie sus propiedades:

a) Marco: Name = gpoConceptos Caption = Conceptos.

b) 1° Opción: Name = opcResumido Caption = Resumido Accelerator = R.

c) 2° Opción: Name = opcDetallado Caption = Detallado Accelerator = D.

d) 3° Opción: Name = opcCompleto Caption = Completo Accelerator = C Value = True.

Accelerator subraya una letra de Caption: para el atajo.- <Alt + tecla aceleradora>.

Value = True, convierte esta opción como la predeterminada.

5. Acomode los botones de opción:

a) Selecciónelos.- arrastrando un rectángulo que englobe a los tres.

b) Menú Formato – Espacio vertical – Quitar; y menú Formato – Alinear – Izquierda.

c) Menú Formato – Ajustar tamaño al contenido y arrástrelos a la esq. sup. izq. del marco.

d) Reajuste tamaño 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 VERIFICACIÓN CON CUADRO DE TEXTO

Para que el usuario pueda especificar si debe imprimir todos los meses o sólo los de una

fecha dada en adelante, colocará 2 controles: una casilla de verificación (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 botón Casilla de verificación , clic debajo del marco.

2. Cambie propiedades: Name= chkFecha, Caption= Empezar desde la fecha: y Accelerator= E.

3. Ajuste el tamaño.- 2clic a su manija derecha.

4. Coloque el Cuadro de Texto.- clic a botón , y clic a la derecha del título de la Casilla.

5. Cambie sus propiedades: Name = txtFecha, Value = 1/7/2000 y Enabled = False.

Value propone el valor por omisión. Enabled = False Inhabilita para captura.

6. Habilitar/Inhabilitar el Cuadro de texto, dependerá del valor (si/no) de Casilla de verificación.

Este trabajo corresponde al evento Al hacer click de la Casilla.

a) 2clic a la Casilla: aparecerá el evento Click (predeterminado).

b) Inserte este código: txtFecha.Enabled = chkFecha.Value

c) Guarde su libro, ejecute código (<F5>)… pruebe Casilla – Cuadro de texto y cierre.

7. Inicialice el Cuadro de texto. La fecha 1/7/2000 que introdujo como valor por omisión es un

caso fijo. Deberá generalizar para que proponga el 1° del mes actual —ya que en la fi-

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

Función de VBA que da

la fecha actual.

Page 59: Manual Curso Excel Automatización

Cap. 14 59

c) Introduzca este código: 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 módulo, cree esta función personalizada [7]: Function PrimerDíaDelMes(FechaDato)

PrimerDíaDelMes = DateSerial(Year(FechaDato), Month(FechaDato), 1)

End Function

Busque Ayuda de las funciones VBA: coloque el cursor sobre ellas y <F1>.

¿Qué sucedería si FechaDato no es fecha?… valídela con la Función VBA

IsDate; y si efectivamente no es, que PrimerDíaDelMes devuelva Empty (Vacío).

d) En UserForm_Initialize, llame a la función: txtFecha = PrimerDíaDelMes(Date)

e) Guarde su libro, ejecute código (<F5>)… compruebe la fecha y cierre.

Para casos fijos, el valor por omisión se puede definir manualmente en la ventana Propie-

dades. Para generalizar, con valores calculados, debe inicializarlo con un evento.

14.1.4 BOTÓN DE COMANDO

Una vez que el formulario permita al usuario especificar cómo quiere su informe, debe-

remos agregar por lo general dos botones: el primero, que realmente hagan el trabajo

—en este caso de Impresión, con la información dada—; y el segundo para Cancelar:

1. Con el formulario visible, clic a Botón de Comando , clic a la derecha del marco.

2. Copie el botón.- arrástrelo hacia abajo y —antes de soltar el ratón— 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 botón se ejecutará al dar <Enter>. Cancel ídem al dar <Esc>.

4. Para que funcionen debe asignarles su evento Al hacer Click:

a) Botón Imprimir.- 2clic en él. En el evento _Click, inserte estas sentencias:

Unload Me 'Cierra (descarga) el formulario actual (Me).

MsgBox "Imprimiendo" 'Mensaje temporal, aquí se llamará a sus macros [14.3].

b) Botón Cancelar.- 2clic en él. En el evento _Click, inserte esta sentencia:

Unload Me 'Cierra (descarga) el formulario actual (Me).

5. Guarde su libro, ejecute formulario varias veces (<F5>)… pruebe botones y teclas.

14.1.5 ORDEN DE TABULACIÓN DE CONTROLES

Hay usuarios que prefieren usar el teclado (es más rápido, una vez familiarizado con la

interfaz). Usan las teclas aceleradoras (con <Alt>) y el Orden de tabulación debe ser lógico.

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 tabulación …¿Qué pasa con los botones de gpoConceptos? Tienen Orden

independiente: en su marco clic der. – Orden de tabulación: mueva opcCompleto hasta abajo.

14.2 FUNCIONALIDAD DEL FORMULARIO

Page 60: Manual Curso Excel Automatización

Cap. 14 60

La interfaz del usuario parece estar correcta. Lo que sigue es crear las macros que

realicen el trabajo que Ud. venía elaborando manualmente para imprimir el informe. A

grandes rasgos lo que Ud. hacía era ocultar las filas o columnas no deseadas y mostrar

las que sí, dependiendo del puesto del usuario. Observación: Las macros funcionarán ex-

clusivamente con el diseño de la hoja Presupuestos.

14.2.1 VERSIONES EN CUANTO A CONCEPTOS

1. Versión Resumida:

a) Vaya a Excel e inicie la grabación 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 Do…Loop [9.2.3], ajuste su código a:

Range("A6").Select Pos. Inicial (Ref. Abs.)

Do Until ActiveCell = "TOTAL EGRESOS" Hacer hasta el final.

If Left(ActiveCell, 5) <> "Total" Then _ Si la celda no inicia con

ActiveCell.EntireRow.Hidden = True "Total", Oculta la fila.

ActiveCell.Offset(1, 0).Select Pos. Siguiente (Ref. Rel.)

Loop

e) Pruébela varias veces… ¿Qué hace falte antes de ejecutar este código?…

2. Versión Completa:

a) Vaya a Excel e inicie la grabación de macro, nombre: InformeCompleto [1.2.1].

b) Con Referencia Absoluta.- seleccione todas las celda (intersección encabezados).

c) En cualquier encabezado de fila clic der. – Mostrar. Detenga grabación.

d) Edite su macro [2.1]. Ajuste su código con [4.1.5-3]. Luego, pruébelo… Rows.Hidden = False

3. Versión Detallada:

a) Vaya a Excel e inicie la grabación 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 Versión Resumida; ajuste su código a:

Range("B6").Select Pos. Inicial (Ref. Abs.)

Do Until ActiveCell.Offset(0, -1) = "TOTAL EGRESOS" Hacer hasta el final.

If ActiveCell = "" Then _ Si la celda está vacía,

ActiveCell.EntireRow.Hidden = True Oculta la fila.

ActiveCell.Offset(1, 0).Select Pos. Siguiente (Ref. Rel.)

Loop

e) Pruébela varias veces… ¿Qué corregirá para no ver la fila Total Egresos?…

Observación: debe ejecutar la versión completa antes de cualquiera de las otras dos.

Las macros están generalizadas; esto es, si se inserta más conceptos, serán considera-

dos, siempre y cuando estén arriba de la celda con el texto “TOTAL EGRESOS”.

Page 61: Manual Curso Excel Automatización

Cap. 14 61

14.2.2 VERSIÓN EN CUANTO A MESES

Lo que Ud. hacía manualmente era pedir al analista financiero desde qué fecha quería el

informe, la localizaba visualmente y seleccionaba las columnas desde una antes hasta la

D, ocultándolas. Para después imprimir el informe personalizado. Automatice todo esto:

1. Vaya a Excel e inicie la grabación 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 fórmulas y sólo celdas completas, <En-

ter>.

4. Active Referencia Relativa, seleccione una celda a la izquierda.

5. Active Referencia Absoluta, y seleccione desde esa columna hasta la D y ocúltelas.

6. Detenga su macro y edítela [2.1]. Ajuste su código a éste: Sub VistaPorMeses()

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?… ¿Cómo toma las fecha VBA?… En inglés (formato mes/día/año). Solución:

Convierta a formato inglés: use la función 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 método Find, reemplace el caso fijo (con todo y comillas) por la

variable que contiene la fecha con formato inglés: 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 función 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 código.- Active un controlador de error, antes de la

sentencia de búsqueda (Find): On Error Goto Salir …después de ella, desactívelo:

On Error Goto 0 …Al producirse un error en la sentencia de búsqueda la ejecución va

a la línea Salir. Tecléela 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)

Columns.Hidden = False

Rows("1:1").Select

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

Al argumento tipo Fecha se le da formato.

Ya formateado se usa en la búsqueda.

Caso fijo (grabado).- valor buscado (con comillas).

Page 62: Manual Curso Excel Automatización

Cap. 14 62

14.3 IMPLEMENTACIÓN DEL FORMULARIO

Ya diseñó la Interfaz de Usuario, que es la forma de comunicación con el usuario, donde

éste define cómo quiere su informe. Con tal información de entrada las macros harán su

trabajo (Funcionalidad del Formulario). Resta conectar la Interfaz con las macros, contro-

lando la Funcionalidad. Para esto debe Implementar el formulario y sus controles.

14.3.1 IMPLEMENTACIÓN DE BOTONES DE OPCIÓN

Para implementar los botones de opción del marco Conceptos, necesita determinar cuál de

ellos es el seleccionado (como opción única), o sea, cuál de ellos tiene valor True.

1. Muestre el Formulario. Dé 2clic al botón btnImprimir; se mostrará su evento predetermina-

do 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 número 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 IMPLEMENTACIÓN DE CASILLA DE VERIFICACIÓN

Necesita determinar si la casilla Iniciar desde la fecha: está marcada, o sea, si tiene valor True.

1. En el Formulario, dé 2clic al botón 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 VALIDACIÓN DE CUADRO DE TEXTO (Caso: Fecha)

Si el usuario da una fecha que no sea el 1° día 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 PrimerDíaDelMes(Me.txtFecha)

2. Y antes de la sentencia Unload Me valide la fecha: If IsDate(Me.txtFecha) Then

MsgBox "Fecha no válida.", vbCritical, "INFORME AUTOMATIZADO"

txtFecha.SetFocus: txtFecha.SelStart = 0: txtFecha.SelLength = 100

Exit Sub

End If

14.3.4 AFINES: PRESENTACIÓN PRELIMINAR Y CÓMO 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 módulo y cree la macro MostrarFormulario, con: formInformePresupuestos.Show

3. En Excel, facilite acceso al usuario con un botón de herramienta [12.1.1], a esta macro.

Muestre el formulario, pero con un evento, p.e. Al abrir Libro [12.2.2-1]… Inténtelo.

La ventaja de un formulario personalizado, es que se puede pedir un conjunto de infor-

mación, en un solo lugar y al mismo momento; mejorando la interactividad con el usuario.

Argumento de la Sub-

rutina VistaPorMes

¿Qué sucede si quita estas 3 sentencias? Ayuda: ponga el cursor y <F1>.

Page 63: Manual Curso Excel Automatización

Tips 63

TIPS DE AUTOMATIZACIÓN EN VBA PARA EXCEL

1. RESUMEN DE TEORÍA BÁSICA

A) VARIABLES REEMPLAZAR VALORES CONSTANTES (dados por la Grabadora) POR VARIABLES (generalizar).

1.- DEFINICIÓN DE VARIABLES

(Tipo de Datos ==> consultar la Ayuda: "Resumen Tipo de Datos")

2.- ASIGNACIÓN DE VALOR A VARIABLES

Ej: Rango.- Celdas Nombradas. Range("NombreDeRango").Select

3.- USO DE VARIABLES

Texto (String): Concatenación (&) entre cadenas de texto.

Como argumentos en Subrutinas o Funciones.

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

C) BUCLES DO UNTIL… Sintaxis: Hacer estas instrucciones hasta que… Criterio de salida sea Verdadero. Posición Inicial (Ref. Abs.) 1.- CÓDIGO DE BLOQUE UNITARIO. Do Until Fin de datos

La Acción a Repetir.- Grabándola. ¡OJO! con la Ref. Relativa. ...Instrucciones 2.- CRITERIO DE SALIDA DE BUCLE. ...Bloque Unitario Condición booleana. Pos. Siguiente (Ref. Rel.) Loop

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.- SELECCIONE EN LA CELDA DONDE SE QUIERE EL RESULTADO.

2.- CLIC EN BOTÓN

3.- SELECCIONAR LA FUNCIÓN SEGÚN LA CATEGORÍA. 4.- DAR LOS ARGUMENTOS REQUERIDO. Para seleccionar una celda (como argumento).- Clic botón de la derecha.

OBSERVAR EL RESULTADO: debajo de los argumentos. 5.- FUNCIONES ANIDADAS.- Como Argumento dentro de la Función Contenedora. CLIC EN LISTA (SUP. IZQ.).

F) SI CONDICIONAL 1.- SI EL VALOR DE LA EXPRESIÓN ES VERDADERA, EJECUTAR ESTAS INSTRUCCIONES.

2.- SI NO, EJECUTAR ESTAS OTRAS INSTRUCCIONES.

Sintaxis: If Expresión Booleana Then INSTRUCCIONES SI LA EXPRESIÓN = VERDADERO.

Else INSTRUCCIONES SI LA EXPRESIÓN = FALSO.

End If

Page 64: Manual Curso Excel Automatización

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 se-lección anterior. Siempre irá (o hará referencia) a tal(es) celda(s).

Ej 1: Range("A1").Select

o Cells(1,1).Select

Ej 2: Range("A1:D3").Select

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

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

Ej 1: ActiveCell.Offset(1,0).Select A partir de la CeldaActiva, desvíate 1 celda abajo y 0 a la derecha y selecciona esa celda.

Ej 2: ActiveCell.Offset(1,0).Range("A1").Select Este ejemplo es similar al anterior, ya que, por omisión, Range("A1") es una sola celda

a partir de la desviación {Este ejemplo es tal como codifica la Grabadora de macros}.

Ej 3: ActiveCell.Offset(2,1).Range("A1:B2").Select Esta sentencia es tal como se codifica con la Grabadora de macros.

o Range(ActiveCell.Offset(2, 1), ActiveCell.Offset(3, 2)).Select Este código es más versátil, ya que al ser números de filas y columna (no letras): podemos usar variables en ellos.

Siempre la celda A1

Siempre desde A1 (esq. sup. izq.) hasta D3 (esq. inf. der.)

(0 ,0 )

+ Filas

+ Columnas

_

_

Page 65: Manual Curso Excel Automatización

Tips 65

3. REFERENCIA A CELDAS DENTRO DE CÁLCULOS

CÁLCULOS CON FÓRMULAS Y FUNCIONES Ejemplo: Caso de la Función SUMA.

A) REFERENCIA ABSOLUTA (con respecto a la Hoja de cálculo) Ej: Fórmula en Excel, celda J4: =SUMA($J$5:$K$19) Fórmula codificada en VBA: ActiveCell.FormulaR1C1 = "=Sum(R5C10:R19C11)"

o Range("J4").FormulaR1C1 = "=Sum(R5C10:R19C11)"

Descripción: Sumar desde la celda (Renglón 5 Columna 10) Absolutos hasta la celda (Renglón 19 Columna 11) Absolutos (con respecto a la hoja).

B) REFERENCIA RELATIVA (con respecto a la Celda con el cálculo) Ej: Fórmula en Excel, celda J4: =SUMA(J5:K19) Fórmula codificada en VBA: ActiveCell.FormulaR1C1 = "=Sum(R[1]C:R[15]C[1])"

o Range("J4").FormulaR1C1 = "=Sum(R[1]C:R[15]C[1])"

Descripción: Sumar desde la celda 1 Renglón Abajo (a partir de la celda con la fórmula) y la mis-ma Columna (de la celda con la fórmula) [o sea, 0 Columnas a la Derecha] hasta la celda 15 Renglones Abajo (a partir de la celda con la fórmula) y 1 Columna a la Dere-cha (A partir de la celda con la fórmula).

C) OBSERVACIONES:

1.- En Referencia Absoluta: a la derecha de la R (Renglón) y la C (Columna) van los números Absolutos

(sin corchetes), del No. de Renglón o No. de Columna de la Hoja de cálculo.

Es decir, la Columna A = 1, B = 2, C = 3, etc.

2.- En Referencia Relativa: a la derecha de la R (Renglón) y la C (Columna) van los números Relativos

(con corchetes), de la cantidad de Renglones y de Columnas por desviar a partir de la Celda Calcula-

da. Considerando la celda con el cálculo como Origen (0,0), si no hay desvío de Renglones o Colum-

nas sólo se pone la Letra R o C (sin números ni corchetes), es decir, en el ejemplo, las referencias a

las celdas por sumar, NO irán así: R[1]C[0]:R[15]C[1]

3.- Se pueden hacer combinaciones de Ref. Absolutas y Relativas dentro de una misma fórmula.

Cadena de caracteres Tipo Texto = String

Cadena de caracteres Tipo Texto = String

Page 66: Manual Curso Excel Automatización

Tips 66

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

A) ARCHIVOS DE TEXTO

Muchos sistemas exportan información mediante reportes en archivos de texto con cierta es-

tructura en el acomodo de tal información. Para manipular esta información en Excel, primero

se debe definir la forma en que se abrirá tal archivo para que se pueda acomodar en la cuadrí-

cula de la hoja de cálculo. Son dos formas: ancho fijo y delimitados.

1. Estando en Excel, muestre el diálogo Abrir (menú Archivo – Abrir).

2. En la lista Tipo de Archivo: seleccione Archivos de texto.

3. Active la carpeta donde está el archivo de texto, selecciónelo y ábralo.

4. Aparecerá el Asistente para importación de texto – paso 1 de 3.

5. 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 número de caracteres por cada columna.

b) DELIMITADOS

Los archivos de texto delimitados, son los que su estructura de datos esta organizada

(delimitada) por algún carácter 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 líneas verticales de separa-

ción. 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 demás opciones déjelas por omisión. Clic en Siguiente>.

9. En el paso 3 de 3, puede establecer el formato de los datos en cada columna: selecciónela y

marque un formato. También puede no importar columnas que no requiera. Normalmente,

el formato General funciona bien. Clic en Terminar.

10. Tiene la información del archivo texto acomodada en la hoja de cálculo, es probable que

deba cambiarle el diseño, p.e. eliminar la fila de separación entre encabezado y datos. Há-

galo con una automatización.

Page 67: Manual Curso Excel Automatización

Tips 67

11. Si grabó el proceso de importación, el código 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))

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 Número de fila de Inicio, a partir de la cual importará [paso 6].

4.- DataType Tipo de datos originales, en función de su estructura [paso 5].

5.- TextQualifier Define el calificador de texto (comillas) [paso 8b].

6.- ConsecutiveDelimiter Si hay delimitadores consecutivos, forma sólo uno [paso 8b].

7.- Tab, Semicolon, Comma, Space, Other Son los posibles delimitadores [paso 8b].

8.- FieldInfo Matriz con el diseño del ancho de columnas [paso 8].

Normalmente, sólo FileName se generaliza para cualquier otro archivo —los demás quedan

fijos—, ya que la macro funcionará sólo para archivos con misma estructura.

B) ARCHIVOS DE BASE DE DATOS (.dbf) Muchos otros sistemas exportan su información mediante archivos tipo dBase (.dbf) con la es-

tructura de columnas bien definida. Con este tipo de archivos, Excel no tiene problemas para

abrirlos y manipular tal información, ya que es compatible totalmente a la cuadrícula de la hoja

de cálculo. Sólo siga estos pasos:

1. Estando en Excel, muestre el diálogo Abrir (menú Archivo – Abrir).

2. En la lista Tipo de Archivo: seleccione Archivos dBase.

3. Active la carpeta donde está el archivo dbf, selecciónelo y ábralo.

C) PEDIR AL USUARIO ARCHIVO POR ABRIR 1. Archivos de texto: antes del método 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"

Sól

o pa

ra

Del

imita

dos

Page 68: Manual Curso Excel Automatización

Tips 68

5. CÓMO LOCALIZAR PROPIEDADES (no codificable con la grabadora)

PROPIEDADES DE OBJETOS QUE NO PUEDEN MANIPULAN DIRECTA-MENTE EN EXCEL.

A) SITUACIÓN:

Es sabido que los Botones —en las Barras de herramientas— que efectúan acciones alternan-

tes —como el botón de formato Negrita—, quedan presionados cuando aplican tal condición (o

sea, es verdadera) y quedan normales (no presionados) cuando tal condición no aplica (o sea,

es falsa).

B) RETO Y OBJETIVO:

El reto a salvar es, cómo utilizar la característica presionado/normal del Botón de herramienta

según la condición alternante. Por ejemplo, tomando el caso de la práctica 3 “Alternar valor de

una propiedad”, esta macro la asignaremos a un Botón de herramienta (cuyo nombre será:

“Alternar Ver Fórmulas”) en nuestra Barra de herramientas personalizada. El objetivo será lo-

grar que al mostrar las fórmulas, el botón 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 necesa-

riamente conocer cada objeto, su posición jerárquica, ni sus propiedades y métodos; sino más

bien, su lógica}; por lo menos, tener la idea de que las Barras de herramientas son objetos di-

rectos del objeto Aplicación Excel (así como los Libros de trabajo) y éstas son “contenedores”

de objetos Botones de Herramienta.

También, es necesario hacer referencia a los elementos específicos de cada Colección; aquí,

lo haremos para nuestra Barra de herramientas y para su Botón que ejecuta la macro “Mostra-

rOcultarFórmulas”. Lo menos fácil es localizar qué propiedad es la que modifica el estado pre-

sionado/normal del botón de herramienta, ya que ésta no podemos manejarla desde Excel, ni,

por lo tanto, codificarla con la grabadora de macros.

Page 69: Manual Curso Excel Automatización

Tips 69

Page 70: Manual Curso Excel Automatización

Tips 70

D) CÓMO CODIFICAR LA REFERENCIA A UN OBJETO:

Para hacer referencia a cualquier objeto —y mejor aún, para objetos no tan utilizados (contra-

riamente al más común, el objeto Rango)—, la forma más sencilla es grabar alguna acción que

implique a tal objeto y, con esto, tendremos la sintaxis del código que hará referencia a dicho

objeto.

Aquí, grabaremos una macro con el nombre “AlternarEstadoDelBotón”; cuya acción por codifi-

car es: agregar algún botón a nuestra Barra… Revisando el código, vemos esto:

Application.CommandBars(“Mi Barra”).Controls.Add .....

En esta macro, se codificó el método Agregar (Add, con sus argumentos) del objeto colección

Controles; agregar un botón fue el pretexto para obtener el código que refiere al objeto “Mi Ba-

rra” y a nuestro Botón “Alternar Ver Fórmulas” {que no se codificó como elemento específico},

por lo que reemplazaremos, desde .Add ..... [hasta el final de la sentencia] por el nombre

de nuestro Botón, para hacer referencia a él específicamente; la sintaxis queda así:

Application.CommandBars(“Mi Barra”).Controls(“Alternar Ver Fórmulas”)

Uso de la función MsgBox temporalmente para evitar error en código:

Sin embargo, como esta sintaxis no es una sentencia completa, ya que no estamos usando un

método ni devolviendo o asignando una propiedad, esto ocasionará un error al ejecutar la ma-

cro; para evitarlo usamos la función MsgBox al inicio del renglón, así:

MsgBox Application.CommandBars(“Mi Barra”).Controls(“Alternar Ver Fórmulas”)

Objeto Applicación Excel (en el máximo

nivel de jerarquía)

Objeto Colección Barra de herramientas…

Objeto Colección Controles del objeto

Padre “Mi Barra”.

…Al especificar el nombre de un elemento, se devuelve la referencia a nuestra barra de herramienta.

Page 71: Manual Curso Excel Automatización

Tips 71

E) CÓMO LOCALIZAR UNA PROPIEDAD NO CODIFICABLE (desde la re-ferencia a un objeto):

El control desde VBA sobre la Aplicación 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, sólo trabaja las acciones realizadas manualmente por

usted}. Un ejemplo de esto, es la propiedad que modifica el estado del botón de herramienta;

además, para complicar más el reto, ¡¡no conocemos su nombre!!…Pero, por lo menos, tene-

mos la sintaxis de referencia al botón.

Ejecutaremos la macro paso a paso, estando el cursor dentro de la macro, presionando una

vez la tecla <F8>, con esto, entramos en ejecución y es lo que necesitamos para revisar todas

las propiedades (con su valor actual) de nuestro botón.

Pasos para revisar las propiedades de un objeto (con código en ejecución):

5. Seleccione sólo la expresión que hace referencia al objeto (sin incluir la propiedad o méto-

do, si existe). Puede ser una variable almacenando tal objeto.

6. Haga una Inspección rápida de la expresión seleccionada con teclas <Shift + F9>.

7. Agregue la expresión a la ventana Inspecciones, con el botón Agregar.

Puede cambiar el tamaño de esta ventana, arrastrando su borde superior.

8. De clic en el signo + para desplegar todas sus propiedades {las de Operación: con valores

y sin signo +, y las de referencia a otros objetos: sin valor y con signo +}

9. Esta técnica es por intuición, inspeccionado cada propiedad (de acción) y su valor actual, al

encontrar alguna que posiblemente sea, aplíquela, si no es, cámbiela [método a prueba y

error].

Casi al final, aparece la propiedad State (Estado) con el valor = msoButtonDown.

Probaremos con ésta: cerramos la ventana Inspección y, al final de la expresión que devuelve

la referencia al objeto botón, tecleamos .state

F) CÓMO 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 pri-

mera y activamos la ventana de VBA; asignamos el valor a la propiedad completando la expre-

sión con un signo = y pegamos el valor.

Page 72: Manual Curso Excel Automatización

Tips 72

G) CÓMO USAR LA ESTRUCTURA “IF” PARA CONDICIONES ALTER-NANTES:

La expresión que asigna el valor Arriba a la propiedad Estado de nuestro botón, podremos

convertirla en la expresión booleana (o condición) que evaluará IF (Si condicional) y así, com-

parará el valor actual del Estado del botón con la constante BotónArriba, para hacerlo, reem-

plazamos MsgBox por If y al final de la expresión booleana colocamos Then, damos <Enter> y

<Tab> para dar sangría.

Si la condición es Verdadera, o sea, el botón esta Arriba (no presionado), debemos dejarlo

presionado: asignando a State el valor = msoButtonDown (cópielo de la ayuda).

Si la condición es Falsa, o sea, el botón no esta Arriba, por lo tanto, esta Abajo (presionado),

por lo que debemos dejarlo normal: asignando a State el valor = msoButtonUp

H) CÓMO USAR LA ESTRUCTURA “WITH” CON UN OBJETO:

Con la estructura If nos damos cuenta que utilizaremos 3 veces la referencia al objeto Botón;

por lo que es conveniente usar una estructura With que anide a la estructura If. Antes de ha-

cerlo debemos parar la ejecución. Todo esto quedará así:

With Application.CommandBars("Mi Barra") _

.Controls("Alternar Ver Fórmulas")

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) CÓMO LLAMAR UNA MACRO DESDE OTRA:

Para cambiar la condición del Botón al presionarlo, tenemos que ejecutar esta macros desde, y

al terminar, la macro “MostrarOcultarFórmulas”, para esto, copiamos el nombre de esta macro

secundaria y lo pegamos antes de End Sub de la macro principal (o macro de llamada) “Mos-

trarOcultarFórmulas”. El código quedará así:

Sub MostrarOcultarFórmulas()

BolVerFórmulas = ActiveWindow.DisplayFormulas

ActiveWindow.DisplayFormulas = Not BolVerFórmulas

AlternarEstadoDelBotón

End Sub

Page 73: Manual Curso Excel Automatización

Tips 73

Probamos el botón de herramienta varias veces…

Page 74: Manual Curso Excel Automatización

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

mente seleccione una celda (sólo una) de la columna criterio (o sea, la que indicará el orden) y

haga clic en el botón Orden ascendente o en el botón Orden descendente.

Al seleccionar sólo una celda, Excel considera la región actual (CurrentRegion) como la lista

completa. Si selecciona más de una celda (pero no toda la lista), tal selección 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 ac-

ciones manuales, le quedará algo así: Range("B2").Select

Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _

OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

¿Cómo se codificaría si utiliza menú Datos – Ordenar…? Identifique la información que puede

cambiar en este cuadro de diálogo con relación a los parámetros del código: los 3 últimos co-

rresponden al diálogo del botón Opciones…

Argumentos:

1.- Key1 Referencia a alguna celda de la columna criterio.

2.- Order1 Constante que indica el orden (Ascendente o Descendente).

3.- Header Constante que determina si la primera fila es de encabezado:

xlYes, xlNo o xlGuess (Excel lo determinará) .

4.- OrderCustom Número del Orden personalizado (1 = Normal).

5.- MatchCase Distingue las Mayúsculas y Minúsculas (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 sólo un grupo de registros que cumplan ciertos requisitos, lo mejor es usar la

herramienta de Autofiltro:

1. Seleccione cualquier y sólo una celda de la lista.

2. Menú Datos – Filtro – Autofiltro…, aparecerán botones con flecha para listas desplegables.

3. De una columna criterio, despliegue la lista y seleccione un elemento; p.e. en Localidad

seleccione Culiacán.

Page 75: Manual Curso Excel Automatización

Tips 75

4. O si requiere por fecha, el problema es que muestra sólo registros con el día seleccionado.

Para que muestre por un periodo, deberá indicárselo:

4.1. De la lista desplegable, seleccione la opción (Personalizar…).

4.2. En la primera lista seleccione es mayor o igual que

4.3. En la segunda lista teclee el 1° día del mes y año, 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° día del mes siguiente, p.e. 1/3/00 y Aceptar.

Si lo grabó en una macro (este caso fijo), el código 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 español, y al ejecutarlas las trata con formato inglés. Solución: Genera-

lizar el código, pidiéndole fecha al usuario, reemplazar casos fijos por variables (concatenan-

do) y darle formato inglés (m/d/aa):

Dim MesAño As String

MesAño = InputBox("Dar 1° día mes y año (con formato: d/mm/aa) por filtrar:")

If MesAño = "" Or Not IsDate(MesAño) Then Exit Sub

Selection.AutoFilter _

Field:=2, _

Criteria1:=">=" & Format( DateSerial(Year(MesAño), Month(MesAño), 1), "m/d/yy"), _

Operator:=xlAnd, _

Criteria2:="<" & Format( DateSerial(Year(MesAño), Month(MesAño) + 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 cálculo y nómbrela (2clic en su pestaña).

3. Pegue: <Ctrl + V> y quite el modo de copia <Esc>.

El código generado (quitando lo que no se requiere y generalizando) se parecerá a este:

Range("A1").CurrentRegion.Copy [paso 1: las 3 sentencias generadas, en una sola]

Sheets.Add [paso 2]

ActiveSheet.Name = "Aux" [paso 2]

ActiveSheet.Paste [paso 3]

Application.CutCopyMode = False [paso 3]

1° argumento de Format Ayuda: ponga Cursor y <F1>

¿Puede simplificar estás 2 sentencias en 1?

Page 76: Manual Curso Excel Automatización

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 fácil de inter-

pretar para otras personas. Use las herramientas para ordenar y subtotales de Excel. Después,

dé formato a su informe e imprímalo (o envíelo por correo electrónico).

Un informe de subtotales es una tabla donde —a partir de una lista con sus registros (filas) or-

denados 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 más de éstas. Puede ha-

ber varios subtotales con diferentes cálculos.

A) PASOS SEMI-ATOMÁTICOS: 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 función: seleccione el cálculo 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 pruébelas. P.e. déjelas por omi-

sión 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. Clásico 3.

5. Clic en el botón Opciones>> y desmarque los conceptos que no desee dar formato. P.e.

desmarque la Alineación. Dé Aceptar.

6. Autoajuste todas las columnas.

7. Para finalizar, si gusta, muestre sólo los Subtotales: haga clic en el cuadro pequeño 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 código 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]

Page 77: Manual Curso Excel Automatización

Tips 77

8. TABULAR VALORES DE MODELO DE CÁLCULO Y BUSCAR OBJETIVO

Un modelo de cálculo, como el caso de la práctica para el Crédito de un vehículo [13.2], sola-

mente da información para un solo caso analizado: introduciendo los datos correspondientes,

se visualizan los resultados —de tal caso único—. Así, cuando requerimos analizar varios ca-

sos, cambiando por ejemplo un solo dato con una serie de valores, debemos cambiar ma-

nualmente el valor de dicho dato cada vez. Una solución es generar una tabla donde una de

sus columnas tendrá la serie de valores para tal dato base; y en las demás columnas los resul-

tados obtenidos —o información relevante— del modelo de cálculo. Para entender mejor esto,

veamos un ejemplo práctico…

A) TABULACIÓN DIRECTA 1. Abra el libro Tip 08 Tabular Modelo.xls en su carpeta Asistente. Es similar al ejercicio [13.2].

2. En la hoja Crédito (donde esta el Modelo), identifique las celdas con los valores relevantes y

resultados, según las columnas de la tabla en la hoja Tabular Directo.

3. En el Modelo, nombre tales celdas con el prefijo “ResDir” (Resultado Directo) enumerando se-

gún el orden de columna de Tabular Directo. P.e. la celda I7 (Anticipo) como ResDir1; la celda

I8 (Crédito) como ResDir2 y la celda I11 (Pago mensual) como ResDir3. Es posible nom-

brar una celda con varios nombres.

4. Inicie grabación de una macro, nómbrela GenerarTabularDirecto:

4.1. Seleccione hoja Tabular Directo, y celda B5. Visualice código mientras graba [1.2.1-Tip].

A grabado la Posición Inicial de la estructura de ciclos Do…Loop [9.2.3].

4.2. Detenga la grabación. El código restante deberá escribirlo.

5. Explicando la lógica del proceso:

5.1. El Precio en la celda activa lo deberá asignar a la celda Precio del Modelo.

Con esto, Excel, automáticamente, 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 renglón de la celda activa. Use For…Next [9.2.1], donde la variable contador se-

rá 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 coloca-

rá 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 renglón.

5.3. Codifique la Posición 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

Do…Loop. Dele sangría [2.4.3-3.Tip] junto con la Posición Siguiente 5.3.

5.5. Cree la estructura Do…Loop: Hacer hasta que la celda activa este vacía (“”).

6. El código escrito debe ser éste:

Sub GenerarTabularDirecto()

Sheets("Tabular Directo").Select [paso 4.1] Range("B5").Select ”

Page 78: Manual Curso Excel Automatización

Tips 78

Do Until ActiveCell = "" [paso 5.5]

Range("Precio") = ActiveCell [paso 5.1]

For i = 1 To 3 [paso 5.2] ActiveCell.Offset(0, i) = Range("ResDir" & i) ”

Next i ”

ActiveCell.Offset(1, 0).Select [paso 5.3]

Loop [paso 5.5] End Sub

Pruebe la macro paso a paso… Revise la columna Mensualidad. Algunos valores tienen más de 2 decimales ¿Cómo redondear?… Use la función de hoja de cálculo Round [7.3.3].

B) TABULACIÓN INVERSA, BUSCANDO OBJETIVO Este proceso es muy similar a la tabulación directa, sólo que el cálculo es hacia atrás: teniendo

el dato de Mensualidad obténme el Precio.

1. Teniendo abierto el libro Tip 08 Tabular Modelo.xls, en la hoja del Modelo, identifique las celdas

con resultados, según las columnas de la tabla en la hoja Tabular Inverso.

2. En el Modelo, nombre tales celdas con el prefijo “ResInv” (Resultado Inverso) enumerando se-

gún el orden de columna de Tabular Indirecto.

3. Inicie grabación de una macro, nómbrela GenerarTabularInverso:

3.1. Seleccione hoja Tabular Inverso, y celda B5.

3.2. Detenga la grabación. El código restante deberá escribirlo.

4. En la hoja del Modelo, grabe una macro temporal con el proceso de Buscar Objetivo (este pa-

so 4 es en vez del 5.1 de Tabulación 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 búsqueda y <Enter>. Pare grabación.

4.3. Resultado: Range("I11").GoalSeek Goal:=2000, ChangingCell:=Range("C5")

4.4. Generalice el código con rangos nombrados y referencia a celdas: [PagoMensual].GoalSeek Goal:=ActiveCell, ChangingCell:=[Precio]

5. Los demás pasos son semejantes a Tabulación Directa, pero con prefijo ResInv.

6. El código 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

Pruébela… Compárela con la macro GenerarTabularDirecto …¿Cuáles son sus diferencias?… son

muy pocas. También, solucione el problema de redondeo Round [7.3.3].

Page 79: Manual Curso Excel Automatización

Índice 79

ÍNDICE ALFABÉTICO

& (concatenación) [8.5.1], 40

[], notación abreviada de rango [4.1.5-2], 22

=, >, >=, <, <=, <> (operadores de comparación)

[8.5.1], 40

A

Accelerator 50

Accelerator y Caption, propiedades [14.1.2-4], 58

Access 4

Acción automática [12], 49

ActiveCell [4.1.4-5], 22

ActiveX, control 50

ActiveX, controles [13.2], 53

Adam Smith, economista [9.2], 42

Address, propiedad [4.1.5], 22

Adjuntar barra [12.1.1-], 49

Ajustar a cuadrícula [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 selección, 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 lógico) [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

Aritméticos, 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

Automatización 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

Bloque unitario de instrucciones [9.2.3], 43

Booleano, tipo de dato [8.3.1], 38

Botón alternante; Ej. [Tip5], 68

Botón de herramienta [12.1.1], 49

Botón en hoja [12.1.2], 50

Botón sobre hoja [12.1.2], 50

Botones de comando [14.1.4], 59

Botones de opciones, ActiveX [14.1.2], 58

BoundColumn, propiedad [13.2.3-5], 55

Buscar código [2.4.3-6], 9

Buscar objetivo [Tip8-B.4], 76

Búsqueda generalizada; Ej. [14.2.2-11], 61

C

C.A.S.E. [4.3], 28

Cadena (Texto), tipo de dato [8.3.1], 38

Cálculos [4.1.4], 19

Cálculos 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 verificación [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, método; Ej. [3.7.3-b], 16

Código VBA [8.1], 36

Colección de objetos [3.6], 11

Colección 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

Combinación de teclas [1.3.1], 6

Comparación, operadores de [8.5.1], 40

Compilar código [10.2.1], 45; [5.2.3-4], 31

Comunicación Excel y VBA 3

Concatenación, 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 número [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 código [2.4.3-5], 9

Copiar lista filtrada [Tip6-C], 73

Copiar módulos [5.2.2-5], 31

Count, propiedad; Ej. 12

Crédito vehicular; Ej. [13.2], 53

Cuadro de diálogo 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 gráfico [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, función [9.1.5], 42

D

Date, función VBA [14.1.3-7], 59

DateSerial, función VBA [14.1.3-8], 59

dbf, archivos [Tip4-B], 67

Decimales a Enteros, Ej. [8.3.2], 38

Declaración de variables [5.3.Tip], 31

Declaración explícita [8.2.2], 37

Default, propiedad ActiveX [14.1.4-3], 59

Delphi 4

Depurar código [10], 45

Desplazamiento Absoluto [1.4.2], 6; [Tip2-A], 64

Desplazamiento en código [2.4.3-1], 9

Desplazamiento Relativo [1.4.2], 6; [Tip2-B], 64

Detener ejecución [5.2.3-7], 31

División de sentencias [2.4.3-2], 9

Do ... Loop [9.2.3], 43

E

Editar macros 7

Editor de Visual Basic [5], 30

Ejecutar código [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 módulos [5.2.2-6], 31

Enabled, propiedad de ActiveX [14.1.3-6], 58

Page 80: Manual Curso Excel Automatización

Índice 80

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, número 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 automáticos [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 módulos [5.2.2-7], 31

Expresión [8.5], 40

F

F4, referencia en cálculos [4.1.4-2], 20

F5, ejecutar [10.2.2], 46

F8, paso a paso [10.2.2], 46

Facilitar ejecución 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 inglés [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 ejecución [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

Fórmulas, automatizar [4.1.4], 19

Fórmulas, grabar [4.1.4-4Tip], 21

Fotografías [4.2.4], 27

Fotos [4.2.3], 27

Fox Pro 4

Función, crear [7.2], 34

Función, partes [7.1.1], 34

Funcionalidad de formulario [14.2], 60; [14.2.2], 61

Funcionalidad; Ej. [14.2.1], 60

Funciones de Excel en VBA [7.3.3], 35

Funciones Excel, automatizar [4.1.4], 19

Funciones Excel, con Asistente [Tip1-E], 63

Funciones personalizadas , usar [7.3], 35

Funciones personalizadas [7], 34

Funciones personalizadas en celdas [7.3.1], 35

Funciones personalizadas en código [7.3.2], 35

Funciones VBA de conversión [8.3.2], 38

Funciones VBA de texto [9.2.1-3], 43

Funciones VBA para decisiones [9.1.5], 42

Function, procedimiento [6.1.1-2], 32

G

Generalizar automatización [8.2.3], 37

Generalizar macro, Ej. [4.3.2], 29; [14.2.2], 61

GetOpenFileName, método [Tip4-C], 67

Grabadora de macros 3, 5

Grabar macro [1.2.1], 5

Grabar y ver código [1.2.1], 5

Gráfica, en variable [8.4.2], 39

Gráficas, objetos [4.3.1], 28

H

Habilitar controles ActiveX [14.1.3-6], 58

Habilitar evento [12.2.2-], 51

Height, propiedad [4.2.1], 26

Hoja indizada; Ej. [11.2.1-1], 48

I

If ... Then ... Else [9.1.2], 41

If ... Then ... ElseIf ... Then [9.1.3], 41

If ... Then [9.1.1], 41

Ignorar error [11.2.1], 47

IIF, función [9.1.5], 42

Imágenes [4.2.4], 27

Implementar Botones opción [14.3.1], 62

Implementar Casillas verificación [14.3.2], 62

Implementar Formulario [14.3], 62

Importar módulos [5.2.2-8], 31

Imprimir, código en excel al [2.4.3-4], 9

Inhabilitar controles ActiveX [14.1.3-6], 58

Inhabilitar evento [12.2.2-], 51

InputBox, instrucción [13.1.1], 52

Insertar módulo [5.2.2-3], 31

Inspección, ventana de [5.1.4], 30

Inspeccionar valores [10.3], 46

Interacción con usuario [13], 52

Interfaz de usuario [14.1], 57

Interior, objeto; Ej. [4.1.6-2], 24

Interrumpir macro [1.2.2], 5; [5.2.3-6], 31

Invertir texto; Ej. [9.2.1-3], 43

Is (operador de comparación) [8.5.1], 40

IsNumeric, función [8.3.1-Tip], 38

J

Jerarquía de objetos [3.5], 11

L

LargeChange, propiedad 55

Left, propiedad [4.2.1], 26

Librería de objetos 3

Like (operador de comparación) [8.5.1], 40

Líneas [4.2.2], 26

LinkedCell, propiedad [13.2.1-4], 53

Listas automáticas [3.7.3], 15

ListFillrange, propiedad [13.2.3-4], 55

ListWidth, propiedad [13.2.3-6], 56

Lógicos, operadores [8.5.1], 40

Llamada a procedimientos [6.2.2], 32

M

Macro 3

Macro, concepto [1.1], 5

Macros [5.2.3], 31

Manipular código VBA [2.4], 8

Marco, ActiveX [14.1.2], 58

Mensaje de alerta, evitar [11.2.3], 48

Mensaje, cuadro de [13.1.2], 52

Métodos de objetos [3.4], 10

Métodos, explorar [3.7.2], 14

Modelo de cálculo, Ej. [13.2], 53

Modificar código [2.4.3], 9

Modo diseño 50

Módulo, ventana de [5.1.2], 30

Módulos [5.2.2], 30

Mostrar Formulario [14.3.4], 62

Mostrar macros [2.1], 7

MouseMove, evento [12.1.3-2], 50

Mover código [2.4.3-5], 9

MsgBox, instrucción [13.1.2], 52

N

Name, propiedad 50

Navegación en código [2.4.3-1], 9

Nombrar módulo [2.2.1], 7

Nombrar un rango [4.1.1], 17

Not (operador lógico) [8.5.1], 40

Notación A1 [4.1.4-4], 20

Notación abreviada de Rango [4.1.5-2], 22

Notación R1C1 [4.1.4-4], 20

Numérico, tipo de dato [8.3.1], 38

O

Objeto Rango [4.1], 17

Objetos comunes 17

Objetos de Excel [3.1], 10

Objetos en variables [8.4], 39

Objetos gráficos [4.2], 25

Page 81: Manual Curso Excel Automatización

Índice 81

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 lógico) [8.5.1], 40

Orden de tabulación [14.1.5], 59

Ordenar lista de datos [Tip6-A], 72

P

Padre, objeto [3.5], 11

Paréntesis con argumentos [6.3.1], 33

Paréntesis, 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 código [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 métodos de operación [3.4], 11

Propiedades y métodos de referencia [3.3], 11

Propiedades, explorar [3.7.1], 13

Protección sólo contra usuarios [13.2.1-7], 54

Proyecto VBA [5.2.1], 30

Punto de interrupción [10.2.4], 46

Punto de interrupción condicional [10.3.2], 46

Punto de interrupción temporal [10.2.5], 46

Puntos, unidad de medida [4.2.1], 26

R

Range propiedad [4.1.1], 17

Range con ActiveCell [4.1.6-1], 24

Range con Cells [4.1.6-1], 23, 24

Rango de valores válidos [13.3], 56

Rangos con nombre [4.1.1], 17

Rangos procesados [4.1.3], 18

Rangos, en variable [8.4.1], 39

Rectángulos [4.2.1], 25

Reemplazar código [2.4.3-6], 9

Referencia a objeto, codificar [Tip5-D], 69

Referencia a objetos por índice; Ej. 12

Referencia a objetos por nombre; Ej. 12

Referencia Absoluta en Cálculos [4.1.4-2], 19;

[Tip3-A], 65

Referencia Absoluta en Desplazamiento [1.4.2], 6;

[Tip2-A], 64

Referencia Anidada, propiedades [4.1.5-5], 23

Referencia Combinada en Cálculos [4.1.4-3], 20

Referencia Global, propiedades [4.1.5-5], 23

Referencia Relativa en Cálculos [4.1.4-1], 19;

[Tip3-B], 65

Referencia Relativa en Desplazamiento [1.4.2], 6;

[Tip2-B], 64

Región Actual [4.1.3], 18

Renombrar Rango [13.2.3-Tip], 56

Reporteador dinámico 4

Resize, propiedad [4.1.3], 18

Row, propiedad [4.1.5], 22

Rows, propiedad [4.1.2], 18

S

Salir de estructuras de control [9.4], 44

Sangría a varias líneas [2.4.3-3], 9

Selección dispersa [4.1.1], 17

Seleccionar código [2.4.3-3], 9

Seleccionar sólo datos; Ej. [4.1.6-4], 24

Select - Selection, eliminar [4.1.5-3], 22

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, asignación de objetos [8.4], 39

Simplificar tareas [1.1], 4

Sistema de Información Empresarial 4

Situación 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, función [9.1.5], 42

T

Tabla dinámica, en variable [8.4.2], 39

Tabla dinámica, objeto [4.3.2], 29

Tabular Modelo de Cálculo [Tip8], 75

Tabular modelo directamente [Tip8-A], 75

Tabular modelo inversamente [Tip8-B], 76

TakeFocusOnClick, propiedad 50

Tareas repetidas 4

Teclas para moverse en código [2.4.3-1], 9

Text, propiedad [4.1.4-5], 22

Texto (Cadena), tipo de dato [8.3.1], 38

Tipo de datos de funciones [7.2.6], 35

Tipos de datos [8.3], 38

Tipos de procedimientos [6.1.1], 32

Toma de decisiones [9], 41

Top, propiedad [4.2.1], 26

txt, archivos [Tip4-A], 66

TypeName, función [8.3.1-Tip], 38

U

Unload, propiedad de formulario [14.1.4-4], 59

UserForm [14.1.1], 57

V

Validar cuadro de texto [14.3.3], 62

Valores de entrada [6.3], 33

Valores de expresiones [10.3], 46

Valores por omisión en argumentos [6.3.2], 33

Value, propiedad [4.1.4-5], 21-22

Value, propiedad de botón opción [14.1.2-4], 58

Variable de objeto Rango; Ej. 12, 28, 29

Variable, ¿Es necesaria? [8.2.4], 38

Variables [8.2], 37

Variables de objeto [8.4], 39

Variables, dimensionar [8.2.1], 37

Ventana Inspección [3.7.1], 13; [5.1.4], 30

W

Width, propiedad [4.2.1], 26

With, estructura [4.1.5-4], 23; [2.4.3-4], 9