Está en la página 1de 322

Microsoft Excel con

Visual Basic for Applications

Manual del Participante

TABLA DE CONTENIDO

Gestin de Macros......................................................................................................... 2
Crear una nueva macro............................................................................................. 2

Formas de ejecutar una nueva macro..................................................................3


Eliminar macros....................................................................................................4
Grabarmacros........................................................5
Grabacin absoluta y relativa....................................................................................5

Grabacin con referencia a celda absoluta.......................................................5

Grabacin con la referencia de celda relativa....................................................7


Enlazar macro a un botn de comando................................................12
Seguridad de macros. .

Uso de macros en formularios. .


Ejecutar la macro: Abrealumnos............................................................................18
Asignar macros a botones en formularios...............................................................18
Asigna r macros a otros controles en form ularios........................................................20

Plantillas con formularios y macros. .


Usar plantillas predefinidas......................................................................................... 22

Crear plantillas personalizadas. .


Utilizar plantillas personalizadas. .

24

Ejercicios prcticos con macros............................................................................26

LA FICHA PROGRAMADOR................................................................................................ 30
UNA RPTDA VISTA DE LOS GRUPOS DE OPCIONES DE LA FICHA

PROGRAMADOR. .
GRUPO CDIGO.

GRUPO COMPLEMENTOS...................................................................3 1

GRUPO CONTROLES...........................................................................31
GRUPOXML..........................................................................31

GRUPO MODIFICAR............................................................................31

a) Editor de Visual Basic. .

32

b) Entrar y salir del editor de VBA.....................................................32


VENTANA DE PROYECTOS....................................................53
VENTANA DE PROPIEDADES..................................................33
MODUL

OBJETOS DE EXCE

LAS COLECCIONES.

36

LOS OBJETOS WORKBOOK Y WORKSH EET (LIBRO Y HO3A).........37


OBJETO RANGE Y LA PROPIEDADES CELLS...........................38

PROCEDIMIENTO

FUNCIONE

EVENT
CODIGOS DE E
PALETA DE COLORES............................................................47

SELECCIN DE FILAS................................................................50

SELECCIN DE COLUMNAS. .
INSTRUCCIN WITH.
CDIGOS DE FORMATO..................................................................55
TRABAJAR CON LIBROS Y HOJAS...................................................58

CDIGO BSICO DE USO FRECUENTE:........................................62


EJERCICIOS PRCTICOS CON APLICACIN DE CDIGO DE MACROS.

63

CAPITULO 5. LENGUAJE VISUAL BAS1C DE APLICACIONES


(VBA).................................................................................... 58

Fundamentos de Programacin VBA.........................................................................68

SentenciaDIM....................................................................................................69

Tipos de variable:.................................................................................................69
Variable Variant...........................................................................................................69
Declaracin de Variables......................................................................................... 70
Dimensionar variables............................................................................................. 73
Utilizar variables...................................................................................................... 73

Vida de las variables................................................................................................74


Las variables estticas............................................................................................ 75
Variables a nivel de procedimiento.......................................................................... 75
Variables a nivel de mdulo........................................................................................ 76
Nivel de mdu lo (Privado)...................................................................................... 76
Nivel de mdu lo (Pblico).........................................................................................77

Variables a nivel de aplicacin................................................................................77


El nivel de acceso de una variable g lobal................................................................78
Usar la instruccin Option Explicit....................................................81

Constantes......................................................................................................81

Los Procedimientos............................................................................................................82
Procedimiento Function.................................................................................................84
Estructuras de programacin.....................................................................................85
Ingreso de datos: Emplear las funciones MsgBox, InputBox..................................86

Constantes para MsgBox........................................................................................ 88


InputBox (Cuadro de entrada)................................................................................ 90

Ejercicios prcticos con empleo de estructuras secuenciales. .

94

CAPITULO 4. ESTRUCTURAS DE PROGRAP4 ACIN CONDICIONAL................98

Instruccin If...Then...Else simple................................................................................98

Instrucciones Condicionales anidadas..........................................103

Instruccin

Select....Case.

Option Compare Marco......................................................................121


Anidacin.............................................................................123

Select ... Case


Then ... Else.

en comparacin con...................If ...


125

Contador.........................................................................................................129
Acumulador.

Inicializar los contadores y acumuladores. .


Instrucciones. .
For.. Next.........................................................................131
La propiedad Offset. .
ForEach

Next...................................................................................................143

Generar Regin de colores que emplea VBA............................................................147


DoWhi|e............................................................148

Do Loop. .

Crear Formulario..............................................................................160
Insertar UserForms....................................................................162
Controles del formulario. .
Aadir controles a un UserForm..........................................................165

Aadir procedimientos de control de eventos..................................170


Codificar el botn Cancelar..............................................................170
ZCmo ejecutar un formulario?........................................................171
Proceso de colocar en una celda el dato ingresado.............................................174

Limpiar el Contenido del formulario.................................................176


Trabajar con UserForms...................................................................180

Proyecto: Registro de datos en cursos........................................................................181

Crear el formu tario...........................................................................................................181


Agregar el cdigo.......................................................................................................... 183

Inicializacin del formulario:................................................................183


Cmo funciona el cdigo de iniciacin?.....................................................................185
Configurar los Botones de Comando...................................................186

?Cmo funciona el cdigo del evento CmdIngresar_Click?......................................189

Gestin de las casillas de verificacin................................................191

Apertura del Formulario...................................................................192


Ejercicios prcticos con formularios.
tCmofunciona?.........................................................195

CAPITULO 7. FUNCIONES PERSONALIZADAS Y CONTROL DE


ERRRORES. 208

Creacin de funciones personalizadas con VBA.............................208

Uso de mdulos para funciones....................................................209


Uso de argumentos en el uso de funciones............................................................209

Ejecutar una funcin desde la hoja de clculo...............................212

Verificar el resultado. .
Im portar y Exportar mdu los.
Expo ar duIo..........................................................................214
Impo tarMdulo................................................215
Ver la descripcin de la Funcin Personalizada..............................218

cCmo aadir una UDF a una categora?.....................................219


MANIPULACIN DE
ERRORES.

220

Errores tpicos. .
Estructura de manejo de errores...............................................221
La instruccin On
Error. .

222

Habilitar y activar el controlador de errores..................................224

Bloques de control de errores y On Error Goto................................................224


La Declaracin Resume........................................................................................ 224
La Primera forma de Resume............................................................................... 225
La segunda forma de Resume es Resume Next..................................................... 226

La tercera forma de Resu me es Resume < label >.............................................. 226


Control de errores con mltiples procedimientos................................................. 227
DEPURACIN DE PROGRAMAS.......................................................................................... 227
Uso del editor para depurar programas.................................................................. 227

La ventana Inmediato........................................................................................... 227


El objeto Debug........................................................................................................ 229

Puntos de interrupcin........................................................................................... 230


Recorrer procedimientos paso a paso. .
Recorrer el cdigo....................................................................................................231

Ventana Locales........................................................................................................... 232

Ventana de Inspeccin............................................................................................. 232


Introduccin al Manejo de Errores....................................................................... 235
En caso de error.................................................................................................... 237
Saltar a una etiqueta............................................................................................. 237

Ir a una etiqueta numerada...............................................................................238


Reanudar el flujo de cdigo.................................................................................. 239

Tipos de error.................................................................................................... 242


Errores de sintaxis................................................................................................. 242

Los errores en tiempo de ejecucin.................................................................. 244


El objeto Err........................................................................................................... 245

El nmero de error............................................................................................ 245


El mensaje de error...........................................................................................250
Compilar mdulos................................................................................................. 256

Optimizacin de VBA............................................................................................. 257

Acceso a celdas en un rango...................................................................................257

Modo de clculo.................................................................................................... 258


Los ndices de la coleccin................................................................................... 258

Constantes.............................................................................259

Vinculacin anticipada..............................................................................................259
Lazos FOR EACH.............................................................................................................. 259
Objeto Range no Objeto de seleccin...................................................................259

La actualizacin de pantalla..................................................................................260
Objetos simples en lugar de Objetos compuestos.................................................260

Declaracin especfica del tipo de objeto..............................................................260


Declaraciones con WITH..................................................................261

Funciones de hoja de clculo. .


Funciones tiles............................................................................................................261

Ca

Gestin de Macros.
Objetivos:

0' Gestin de macros.


e Uso de macros en form ularios.

0' Plantillas con formularios y macros.


0' Ejercicios prcticos con macros y form ula rios.

Pgina 1

Programa Nacional de Informtica

Fig. 1: Las Macros en Excel.

Gestin de Macros.
Si rea l iza una ta rea en forma conti nua en Microsoft Excel, puede automatizar la tarea

mediante una macro. Una macro es una serie pasos (Fig. 2) que incluye la seleccin de
comandos y funciones que se al macenan en una aplicacin de Microsoft Visua l Basic
em pleando un mdulo y se puede ejecuta r cada vez que requiera para llevar a cabo
una tarea.

Fig . 2 : Pasos en una Macro.

Crear una nueva macro.


AI crea r una macro, Excel al macena la accin que realiza en cada paso que hace
un clic sobre un comando o sobre un botn. Una vez que se ha term inado de
dar los pasos necesa rios se debe g ua rda r la macro y a cont nuacin, ejecutar la
macro para repetir, o "reprod ucir" los comandos. Se debe tener muy en cuenta
que si comete un error a l grabar la macro, las correcciones realizadas tambin se

registran como parte de la macro. Visual Basic almacena el cdigo generado


en cada macro en un nuevo mdulo adju nto a un libro.

En la figura 3 se muestran los ,


pasos que se progra ma rn para

la presentacin del form ula rio


de Excel pa ra gestionar datos
en formato de tabla.
Pasos que deben segu irse:
1. Clic en el botn formu tario.
2. Clic

en

los

botones

de

recorrido.
3. Cl ic en el botn Cerra r.

Fig . 2 : Macro pa ra mostrar el form ulario.

Formas de ejecutar una nueva macro.


Se puede ejecuta r una macro empleando alguna de las sigu ientes formas:
" va..
"""" LA
1. Seleccionndola deuna

del g rupo Cdigo en

la

Ficha Desarrollador.

Fig. 4 Seleccionar macro para Ejecutarla.


2. Mediante una combinacin de teclas.

3. Asig nando la macro a un botn dela barra de herram ientas de acceso rpido.

4. Asignando la macro a un Botn de comando u otro control de formu la rio.


a. En este caso la macro se ejecuta a l hacer clic en un botn de comando.

b. La macro se asocia o enlaza al botn de comando, tal como se muestra


en la siguiente fig ura 5.

Fig. 3 Enlaza r macro a Botn de comando.

Eliminar macros.
Las macros que ya no se requieran se eliminan desde el cuad ro de dilogo macro
(Fig. 6), en la ficha Desarrollador.

Fig. 6 Elimi nar una Macro.

Grabar macros.
Es importante que se tenga definido claramente el proced miento com pleto para
real iza r la ta rea que se desea automatizar, pues como se ha dicho antes, si

d urante la grabacin de cada uno de los pasos que conformarn la

macro,

se

comete error en algu no de ellos, stos quedarn g ra bados como parte del
procedimiento.
Se debe tener muy presente, lo sig uiente:
Si ya tiene la seguridad de saber el procedimiento paso a paso de la tarea a
automatiza r se procede a g rabar d ichos pasos en una nueva macro.

Grabacin absoluta y relativa.

celda, lo que sign ifica que las ubicaciones

macro

slo

fu nciona

con

las

direcciones

Cuando g rabe una macro con la referencia


d ri i a

de celda

relativa

(Fig.

7),

las

acciones

Fig. 7 Referencias Relativas.

g rabadas en la macro son relativas a la

ubicacin de la celda inicial.


Los ejemplos sig uientes registran la misma accin con la referencia de celda

absol uta y relativa a continuacin.

Grabacin con referencia a celda absoluta.


Pa ra g rabar una macro con referencia a celda a bsoluta, siga estos pasos:
1. Crea r un nuevo libro en Microsoft Excel y, a continuacin en la Hoja1,

seleccione la celda B2 de la hoja de clculo.


2. En la ficha Desarrollador, el gru po Cdigo, haga clic en el botn
Grabar Macro (Fig 8).

" Grahar acr c

Fig. 8 Iniciar la grabacin de la Nueva Macro.

En el cuadro nombre de Macro, escri ba Grabacin_Absoluta

y, a

contin uacin, haga clic en Aceptar (Fig . 9) .

Asgnar rraoo a

7eado

Guardar rraoo en'


Todos los documentos /lornal. dos) Desoipon:

Fig. 4 Dar nombre a la Macro.

4. En la barra de herramientas Detener gra bacin, com pruebe el aspecto


del botn Referencia relativas. Si aparece presionado el botn Usa r
Referencias relativas, haga clic pa ra desactivar la grabacin relativa.

. nu.
Fig. 5 Fijar Referencias Relativas.

5. Eseri ba prueba y, a conti nuacin, haga clic en Introducir (la ma rca de


verificacin verde en la ba rra de frmulas) (Fig. t 1).

'

Prueba
Fig. 6 Aceptar el Dato.

6. En la ficha

Inicio,

en

el

gru po

Porta papeles,

haga

clic

en

el

botn Copiar y, a continuacin, seleccione la celda C4. Luego, haga clic


en el botn Pega r en el gru po Portapa peles. Pulse la tecla [Esc].

En la ficha Desarrollador, gru po Cdigo, haga clic en Detener g ra


bacin (Fig. 12) .

Fig. 7 Detener la Grabacin de la Macro.

7. Para ejecuta r la macro g rabada, borre los conten idos de las celdas B2 y

C4. Haga clic en otra celda, l uego, en la ficha Desa rrollador,

botn

Macros del g rupo Cdigo, en la Iista Nombre de Macro, haga clic en


Gra bacin

Absol uta y, a conti nuacin, haga cl ic en Ejecutar (Fig . 13).

Nombre de la maoo:
Crabaan Absoluta

Fig. 8 Ejecutar la Macro.

Cancr

Notar que el contenido siempre se guarda en la celda C4, no importa donde se ubique la ce
Referencia Absoluta.

Grabacin con la referencia de celda relativa.

Pa ra gra ba r una macro con la referencia de celda relativa, siga


estos pasos :

Crea r un nuevo libro en Microsoft Excel y, a continuacin en la

Hoja1, seleccione la celda B2 de la hoja de clculo.


En la ficha Desa rrollador, el gru po Cdigo, haga clic en el
botn Graba r Macro (Fig. 14).

.. n.
3.

En el cuadro nombre de Macro, escriba Grabacin Relativa

y, a

continuacin, haga clic en Aceptar.


4. En la barra de herram ientas Detener gra bacin,

compruebe

el

aspecto del botn Referencia relativas. Si aparece presionado el


botn Referencia relativas, haga clic para desactivar la grabacin
relativa (Fig . 15).

. u.

Escriba Prueba y, a continuacin, haga clic en Introducir (la marca


de verificacin verde en la barra de frmu las) (Fig. 16).

6. En la ficha Inicio, en el g rupo Portapapeles, haga clic en el botn


Copiar y, a continuacin, seleccione la celda C4. Luego, haga clic en
el botn Pega r en el gru po Portapapeles. Pu Ise la tecla [Esc].

7.

En la ficha Desarrollador, gru po Cdigo, haga clic en Detener

g rabacin (Fig . J.7).

8. Pa ra ver ejecutar la macro gra bada, Borre los contenidos de las


celdas B2 y C4. Haga clic en alg una otra celda, Iuego, en la ficha

Desarrollador, en el botn Macros del grupo Cdigo y, a

continuacin, en la Iista nombre de Macro, haga

clic

en

Grabacin Relativa y, a continuacin, haga clic en Ejecutar (Fig.


18).

:
b

Manos en: Este libro

Cancelar |

Fig. 18 Ejecuta r la Macro.

Notar que el contenido siempre se guarda en la celda que se encuentra


a la derecha y dos celdas debajo de la celda origen, no importa donde
se ubique la celda origen. Esto es por el efecto de la Referencia Relativa.

Actividad 1: Crear un nueva macro para generar los meses del ao.

Qu pasos se deben realizar?


Se deben realizar los siguientes pasos:
1. Seleccionar Celda Inicial.
2. Escribir Enero en la celda seleccionada.
3. Arrastrar hasta genera r el mes de Diciembre.
4. Clic en la celda del mes de Enero.
Todas estas acciones se deben g uardar en un macro con un nombre que la identifique.

Procedimiento de grabacin.
Pr - nualr

1. Seleccione la
ficha
2. En el gru po Cdigo, realice lo sig uiente (Fig. 19):

Fig. 9 Crea r la nueva Macro.

3. Se muestra el siguiente cuad ro de dilogo (Fig. 20),


Grabar r acro
Nombre de la raoo:
Ntodo abreviado:

Escriba el
nombre : meses

Cuar dar raoo en:


Este l bro
Oesoipon:

Fig . 10 Nombre de la nueva Macro.

4. Se inicia r el proceso de gra bacin, justo despus de hacer clic en el botn


de comando [Acepta r] (Fig. 21).

En este momento empezar


a grabar toda occin que se
realice (Tenga cuidado).

Fig. 11 Inicio de la grabacin de la Macro.

5. Seleccione la Celda A1.


6. Estando activa la celda AI: Escriba Enero (Fig. 22).
7. Arrastre hasta la celda A12.

Fig . 22 Celda de Inicio de la Macro.

En la figura 23 se muestra la forma en que debe desa rrolla r la macro:


a) Se muestra el mes de Enero y a l a rrastra r se van presentando los sigu ienes
meses, hasta que se Ilega a l mes de Diciembre.
b) El rango se queda seleccionado, por ello debe hacer cl ic en la celda AI.

1 Enero
t

Arrastre desde esta esquina hasta la celda A12

Enero

Febrero
Marzo
4 Abril
5 Mayo

Jun io
J u Iio
Agosto
Septiembre

IO Octubre
t t Noviembre
t2 Diciembre
Fig . 12 Generacin de los Meses.

8. Clic en la celda AI .
9. Detenga la grabacin (Fig. 24).

Pgina 11

Programa Nacional de Informtica

Fig . 13 Detener la Gra bacin.

Enlazar macro a un botn de comando.


Una vez que se ha creado la macro debe ejecutarla, se puede realizar desde
un botn de comando. Desde la Ficha Desarrollador, g rupo Controles, clic en el
comando Inserta r, Controles de form ulario y Clic en Botn.
1. Inserte un Botn en la celda EI.

2. AI Terminar de trazar el rectngulo sobre la celda,


3. Se muestra el cuadro de dilogo de la Fig. 25 :
4. Haga clic en la macro meses.
5. Finalmente clic en el botn de comando [Aceptar].
Mano

Nomtve de la maoo:
meses

Fig. 14 Asignar el Nombre de la Macro Meses.


6. Se muestra el botn con un texto predeterminado: Botn 1, proceda a ca mbiar
el contenido (Fig. 26):

Botn 1
Fig . 26 Botn de comando insertado.

7. Haga clic sobre el texto


8. Escriba Genera meses (Fig. 27).
E

Genera Meses

Fig. 15 Nuevo Contenido.

9. Resu Itado Final


:

E
Genera Meses

Fig. 16 Nuevo Texto en el botn de comando.


10. Haga clic en cualquier celda vaca y Iuego clic en el botn Genera meses. Se
muestran los meses del ao a partir de la celda seleccionada.

Seguridad de macros.
La seguridad es un tema importante cuando se trabaja con Excel 2010 macros. Si
abre las hojas de clculo que contienen macros de fuentes externas, estas macros
pueden ser perjudiciales para su equipo. De forma predeterminada, Excel le
protege de la ejecucin de macros, pero si va a crear sus propias macros, es
probable que desee cambiar la configuracin de seguridad de proteccin.
Siga estos pasos para ver y establecer el nivel de seguridad de macros en Excel
2010:
1. En la ficha Desarrollador, haga clic en el botn Seguridad de macroa (Fig.
29) en el gru po Cdigo.
. |

| .|

Grabar macro

Visual

Fig. 17 Seguridad de macros.

En el cuadro de dilogo Centro de confianza seleccione Configuracin de


macros (Fig. 30).
Pgina 13

Programa Nacional de Informtica

Fig. 18 Centro de Conanza.

2. Estableciendo un nivel de seguridad:

Deshabilitan todas las macros sin notificacin: Permite ejecutar slo


las macros almacenadas en una ubicacin de confianza. Haga clic en la
configuracin de ubicaciones de confianza en el panel izquierdo para
manejar estas ubicaciones de confianza. Adems, dado que las macros
se deshabilitan automticamente, esta opcin desactiva las alertas de
seguridad.

Deahabilitar todaa laa macros con notificacin: Muestra una alerta de


seguridad cuando un libro con macros se abre. A continuacin, puede

decidir si desea habilitar las macros asociadas con el libro. Esta es la


configuracin por defecto de Excel.

Deshabilitan

todas

las

macros

excepto

las

firmadas

digitalmente: Puede ejecutar slo las macros que estn firmados


digitalmente.

Habilitar

todas las macros: Permite la ejecucin de macros sin

notificacin. Esto puede ser til si usted tiene un montn de macros, pero
ser conscientes del riesgo al utilizar macros de fuentes desconocidas.

3. Haga clic en Aceptar.


Una firma digital es un sello electrnico cifrado, es una autenticacin segura
de obtener de una autoridad de certificacin comercial.

Uso de macros en formularios.


Excel proporciona una forma sencilla de introducir datos en una base de datos de
Excel. En estos formu la rios personalizados se insertarn los controles de
Windows que un usuario usa de forma diaria al operar el sistema operativo

Windows. El uso ms prctico y sencillo es preparar un formulario que slo tenga


controles de formulario como: Cuad ros de texto, etiquetas y botones de
comando que facilita el ingreso de datos.Vamos a administrar datos de alumnos,
cursos y profesores mediante un formu lario de inicio y controles de formu lario.
El formulario de inicio tendr la siguiente apariencia (Fig 31) :
"

Fig. 1.9 Hoja de inicio de la automatizacin.


a) Se emplean 3 Botones de comando.
b) Cada botn de comando, "Llamar a los datos correspondientes, mediante el
uso del formulario de Excel.
Se debe contar con el botn Formulario en la Barra de herramientas
de Acceso rpido.
Los datos a emplear son los siguientes:

Datos de los Alu mnos.

Datos de los Cursos.


Datos de los Profesores.

Pgina l5

Programa Nacional de Informtica

Datos de los Alumnos

Datos de los Alum nos.

2
4

7
8

DATOS DE LOS CURSOS


C6digo

ApelI:W

C-100

Windows

C-101

Word

C-103

Excel

C-\02

Word

Horario
08.00-10.30
8 00-10 30
10 30-13 00
08 00-10 30
10.30-13.00
17 00-19 30
08 0610 33
10 30-13 00
17 00-19 30

Datos de los Cursos.


(Fig. 33)

Datos de los Profesores.


(Fig. 34)

Se requieren de 3 macros:
Macro 1:
Abrir formulario de Alumnos, macro de nombre: abrealumnos.
Macro 11:
Abrir formulario de Cursos, macro de nombre: ab recursos.

Macro III:
Abrir form ula rio de Profesores, macro de nom bre: a b rea profesores.

Actividad 2: bt acro para abrir formulario de Alumnos.


Siga los sig uientes pasos :
I. Abr r el archivo: Formulariosl.xlsx, que se encuentra en la ca rpeta Ejercicios,
captulo 1.
2. Seleccionar la hoja Inicio.
3. Clic en la celda AI.
4. Haga clic en el comando Grabar macro, del gru po Cdigo, ficha Desarrollador.
5. En cuadro de dilogo:

Grabar macro, escri ba como Nombre de la macro

: Abrealumnos y Iuego, clic en el botn Aceptar (Fig. 3 5) .


Grabar macro
Nombre de la maoo:
abrealurnnos|
Ntodo abreviado:
Guardar maoo en:

Este libro

Fig . 20 Nombre de la macro 1.

Haga clic en el botn Formulario de la barra de herramientas de Acceso rpido.

Luego, clic en la pestaa de la Hoja A umnos, Iuego, clic en la celda


BS. Clic en el botn detener grabacin.

Pgina 17

Programa Nacional de Informtica

Ejecutar la macro: Abrealumnos.


Asignar macros a botones en form ularios.

En el proceso de gestin de las macros, stas se deben ejecuta r y una de


las formas es asignarlas a botones de comando, de esta manera se tiene la
faci lidad de ejecutarlas tan solo haciendo un cl ic sobre el botn.
1.

En el libro : Formulariosl, seleccione la hoja Inicio.

2. Escoja el botn de comando : Alumnos de la hoja inicio.


3. Haga clic derecho, se muestra el sig uiente men contextua l (Fig. 36).

Fig. 36 Asig nar la macro al botn de comando.

Fig . 21 Macro Abreal umnos.

6. Clic en el botn de comando [Aceptar].


7. Haga clic en otra celda de la hoja Inicio.
8. AI apu ntar sobre el botn de comando AI umnos (Fig. 38), se muestra
el puntero de enlace a l form ulario de Excel con los datos de los a l
umnos.

Profesores

Fig. 38 Activar la ejecucin de la macro.

9. AI hacer clic e n el botn [Alumnos], se va a mostra r los datos de los


AI umnos.
Estando en la hoja AI umnos, debe crea r una macro pa ra retorna r a la
hoja Inicio y debe asocian a a un botn de comando: [Retornar] (Fig.

Retornar

Fig. 22 Macro de Retorno en el botn Retorna r.


a) Debe crear las otras dos macros para activar el formulario que

muestren los datos de los cursos y alumnos con sus respectivos


retornos a |a hoja In|c|o.
b) Guarde

todo

el

contenido

en

una

nueva

versin

de

nombre :

Formula riola.xlsm.

Recuerde que se est g rabando una macro y como tal requ iere que
se guarde como :
Libro de Excel habilitado para macros (*.xIsm)

Asignar macros a otros controles en formularios.


Es posible asignar macros a otros controles de un form ulario, tales como casillas
de verificacin, botones de opcin . Se asignar una macro a cada uno de

los

botones de opcin pa ra permitir cambiar el color de borde de un rango de celdas.


Los colores a ca mbiar sern : Rojo, Verde y Azu l . El formu lario modelo es el

sig uiente (Fig. 40) :

HH

O Rojo

O 'zerde

Fig. 23 Asignar macros a otros controles.

Actividad 3: St acro para cambiar de color a un rango de celdas.


I.

Abr r el archivo : Formularioll.xlsx.

2. Haga clic derecho sobre el botn de opcin etiquetado como Rojo.


3. En el men contextual mostrado (Fig . 41).

4. Clic en el comando Asignar macro.


5. Se muestran las macros ha bilitadas, asig ne la macro: Rojo (Fig. 42).

Fig . 25 Asig na r la macro Rojo.

6. Luego, clic en el botn [Aceptar].


7. Proceda de la misma forma para asignar las macros a los botones de opcin Verde y
Azul.

8. Ejecute las macros haciendo clic en cada botn de opcin y se da r cuenta que el
rango de celdas B3:H9, cam bia de color de borde, acuerdo a l botn de opcin
pulsado.

Plantillas con formularios y macros.


Las plantillas hojas de clculo previamente organizadas de acuerdo a una utilidad
determi nada. En el quehacer d iario una em presa pblica o privada tiene procesos

estn da r o de uso com n, razn por la cual Microsoft ha prepa rado un pool de
plantillas de uso libre (Fig . 43).

lHmero

Fig . 26 Modelos de plantillas.

Pgina 21

Programa Nacional de Informtica

Estas plantillas se pueden asociar a macros de acuerdo a los requerimientos del


usuario.

Usar plantillas predefinidas


Pa ra encontrarlas, siga los sigu ientes pasos :

1. Abra un nuevo a rchivo.


2. Clic en la ficha Archivo.
3. Clic en el botn Nuevo (Fig . 44).

IJuevo

Fig. 27 Nueva plantilla.

4. Se muestra un gru po de modelos (Fig . 45).

.
. r

Fig . 28 Modelos de plantillas.


5. Haga clic en la plantilla Calculadora de la hipoteca, Iuego, cl ic en el botn

[Crear], se muestra el contenido de la plantilla (Fig. 46) .

Fig. 29 Plantilla Calcu ladora de la hipoteca .

En este caso hay que adoptar el sig no de soles como moneda, rea lice lo sig uiente:
a. Seleccione toda la hoja.
b. Ingrese a formato de celda.
c. Seleccione la categora moneda, l uego en smbolo:

De este modo, debe seleccionar el modelo que desee.


A la plantilla anterior se le puede crear una macro para i nsertar el espacio de fi la

pa ra un nuevo registro de gastos.

Crear plantillas personalizadas.


a) El usuario tam bin puede crear sus propias plantillas persona l izadas.
b) AI ser personal izadas, el usuario crear o solicitar a un especia Iista la
nueva macro. Por ejemplo, se requiere gua rda r los datos de personas que han
sido entrevistadas sobre un curso de ca pacitacin .
c) Debe crear una plantilla como la siguiente (Fig. 47) :

Encuesta de Mercado

Fig. 30 Modelo de la nueva planti lla persona l izada.

d) Cada vez que se requiera, debe insertar una nueva fi la en blanco pa


ra registrar los datos de un nuevo entrevistado.
e) La macro se debe en lazar a un botn de comando ubicado en la celda J 1 (Fig.

48).

Encuesta de lVlercado

Fig. 3 t. Botn para insertar nuevos Registros de datos.

Pgina 23

Programa Nacional de Informtica

Utilizar plantillas personalizadas.


Finalizado el formu Iario y la macro(s) correspondientes, se debe probar su
desempeo.
Pa ra el caso de la encuesta, se debe hacer clic en el botn de comando [Nuevo
Registro] pa ra ing resa r los datos de un nuevo entrevistado.
Pa ra resolver la Macros, realice el sig uiente procedi miento :

1. Teniendo a bierta la hoja de la encuesta de Mercado, haga clic en la ficha


Desarrollador, el comando Grabar macro, del g rupo Cdigo.
2. En el cuad ro mostrado, escri ba nuevo_entrevistado (Fig. 49) .
Crabar mro

ar a

Fig. 32 Nueva macro : nuevo_entrevistado.

3. Clic en el botn de comando [Aceptar].


4. Ahora, apunte a l selector de la fila 5 y

haga clic derecho.

Encuesta

5. Clic en el comando Insertar.


6. Haga clic en la celda CS.
7. Clic

en

el

comando

Nuevo P -- -

Detener

grabacin.

8. Apunte sobre el botn


comando Asignar macro.

Fig . 34 Asig na r nueva


macro.

9. Seleccione la macro nuevo_entrevistado (Fig 52).

Fg. 3

sgn

b tn d

nd .

10. Haga cl ic en otra celda para desactivar el modo de diseo.

11. Escoja el botn de comando Nuevo Registro.


Siempre se inserta una nueva fila a partir de la fila 5, con lo cual se pueden
ingresa r nuevos datos de un entrevistado.

Programa Nacional de Informtica

Pgina 26

Ejercicios prcticos con macros.


Dirigidos:

En este caso emplear el archivo FormularioIV.xlsx, el cual tiene dos Hojas (Fig.

Encuesta Hist o nc o

Fig. 36 Hojas Encuesta e Histrico.


Ya se cuenta con la macro para insertar Nuevos registros, se crea r una nueva

macro que permitir ir pasando a un histrco los datos de los entrevistados.


La hoja Histrico (Fig. 54), ya cuenta con un enca bezado inicial :

Fig. 37 La Hoja histrico.


La hoja Encuesta (Fig. 55), tiene la sig uiente a pariencia :
r.

Encuesta de Mercado

Fig . 38 La Hoja Encuesta.

a. Los datos del nuevo entrevistado se insertan en la f la 5.

b. Mediante la ayuda de una macro, los datos de este nuevo entrevistado se


agregarn a partir de la fila 3, en la hoja Histrico.

En la hoja Encuesta realice el siguiente procedimiento:


1. Escriba a partir de la celda CS los datos de un nuevo entrevistado
(Fig. 56):

Encuesta de Mercado
Onro

Provnc m

Se o

Fig . 39 Nuevos datos desde la celda CS.

2. En la ficha Desarrollador, el g rupo

Cdigo, haga clic en el


botn Grabar Macro. (Fig . 57).

3. Escriba el nombre de la

macro: Histrico, clic en el


botn de comando

[Aceptar].

4. Luego, clic en la hoja Histrico.

5. Apunte a la fila 3, haga clic


derecho, y Iuego, seleccione el
comando Insertar (Fig. 58).

+' .'

6. Luego, clic en la celda A3.

to

7. Vaya a la hoja Encuesta.


8. Clic en la celda C5 y seleccione el rango hasta la celda J5. (Fig. 59) .

. Clic en el botn Copiar, en la ficha Inicio.


H

Encuesta de lVlercado
j soldadura

Fig . 41 Seleccin del Rango.


10. CIic en la hoja Histrico.
11. Seleccione el botn Pegar, en la ficha Inicio.

I2. Se ha insertado los n uevos datos en la hoja Histrico.


13. Ta I como se muestra en la figura 60.

Pgina 27

Programa Nacional de Informtica

Apel! dos
Oaa
Pan:a

Nomdes
van
&aflos

Domo!!o
Av 0au 8&6
A vCau Ms

D n o
e ado
tex do

Povsra
r ma
uma

&eo
V
v

Fig. 42 Nuevo Registro insertado.

14.Contin e haciendo clic en la hoja Encuesta.

15.Pulse la tecla [Esc].


16.En la ficha Desarrollador, grupo Cdigo, haga clic en Detener grabacin.
(Fig . 61).

17. Final mente, enlace la macro histrico al botn de comando: [A histrico].

Usar referencias relativas


! Segun da J le i acro s

. g.
Fig. 43 Detener g rabacin de la macro.

Ca

La Macro

el Cdigo.

Objetivos:
o

e
o

La ficha Desa rrollador.

Entorno de programacin.

Objetos de Excel . e
Eventos.

La macro y el cdigo.
La ficha Desarrollador.

La ficha Desarrollador permite aadir partes de cdigo a la

hoja

de

Excel,

tambin es una gran manera de acceder a las distintas opciones para la creacin
de una aplicacin.
Puede utilizar sus habilidades de prog ramacin para automatizar las tareas en
Excel.

Una rpida vista de los Grupos de Opciones de la Ficha


Desarrollador.
La ficha Desarrollador

contiene

diferentes

opciones

tiles

para

los

desarrolladores. Todas las opciones disponibles de la ficha Desarrollador se


clasican en los sig uientes cinco grupos:
Cdigo.
Complementos.
Controles.

XML.

Modificar.

Grupo Cdigo.
El grupo Cdigo contiene diferentes opciones:
La opcin Visual Basic permite iniciar el Editor de Visual Basic.

Macros muestra la Iista de todas las macros creadas / grabadas.


Grabar macro permite crear una nueva macro.
La seguridad de macros permite configura r los aspectos de seguridad de la
macro (Fig. 62).
Grabar macro

Visual Macros
Basic
A Seguridad de
macros Cdigo

Fig. 1 Grupo Cdigo.

Programa Nacional de Informtica

Pgina 30

Grupo ComPlementos.
El g rupo Complementos permite ha bilitar en
Excel Complementos como Solver, COM.

Ambas herramientas son tiles para los


desarrolladores, ya que ayudan la escritura
modelos de comunes de objetos (Fig 63).

Complementos Complementos
COM

Grupo Controles.
Incluye funcionalidad para agregar
controles a una interfaz de usuario,
por ejemplo controles ActiveX para la
hoja de clculo Excel. Puede Ver
cdigo y entrar al Modo de diseo,
se pueden modificar las Propiedades
del control y Ejecutar cuadro de
dilogo (Fig 64).

Propiedades
Qi Ver cdigo
Insertar Modo
Diseo @ Ejecutar cuadro de dilogo
Controles

Fig. 2 Grupo Controles.

Grupo Xbf L.
El grupo XB L contiene opciones
tiles para la codificacin XF1L en
Excel. Ofrece opciones para escribir el
cdigo fuente XML, importar y
exportar archivos XllL, y actualizar
los datos XML (Fig 65).

E! Actua li a r dato .

XML
Fig. 3 Grupo XML.

Grupo 55odificar.
El grupo Nlodificar contiene el Panel de Documentos como
nica opcin (Fig 66).

Panel de
documentos
Modificar
Fig. 4 Grupo
Nodificar.

Entorno de programacin.
Las macros son de gran utilidad para el usuario que le permite realizar procesos con ms
rapidez y ahorro de tiempo. Pero hay que saber que ellas estn asociadas o

est n

basadas en un lenguaje de programacin: El Visual Basic para Aplicaciones o Ilamado


VBA. Todo reunido en un entorno de prog ramacin que tiene como componentes un :

a) Edito r de Visua l Basic.


Este editor de Visual Basic nos va a

accin

con

la

incorporacin

de

i nstrucciones que nos perm iten progra ma r

con ms propiedad .

Fig. 67 Acceso a la ventana de cdigo.

b) Entra r y sa lir del edito r de VBA.


Para Entrar a l Editor de Visual Basic.

i.

Haga clic en la Ficha Desarrollador, g rupo Cdigo, y seleccione Visual


Basic (Fig 67).

ii.

Tambin puede acceder utilizando la combinacin de teclas [Alt] + [FI1].

iii.

La ventana del Editor de Visua I Basic (Fig 69), presenta :

1)
2)
3)
4)
5)

La Barra de Men.
La Barra de herramientas.
La ventana del Explorador de proyectos.
La ventana de Propiedades.
rea de edicin de Cdigo.

Pgina 32

Para Sa l i r del Editor de Visual Basic, puede hacerlo de las sig uientes formas:
E. Salir del Editor de Visual Basic sin cerra r la ventana de Programacin.

Fig. 70 Salir de la ventana de cdigo.

Fig. 6 Cerrar y volver al Excel.

Ventana de Proyectos.
En esta ventana se muestra una Iista jer rquica
de

los

proyectos

todos

los

elementos

contenidos en los mismos y a los que se hace

A!temarcspens

C di

referencia en cada uno de ellos. Cada libro en

yr.,m vsrno

Excel Ileva asociado un proyecto de VBA. Un

-'"

nmero arbitra rio de mdulos de cdigo y


de UserForms. (Fig 72)

Fig. 7 Ventana de Proyectos.

Ventana de Propiedades.

Las propiedades se encuentran en la colu nina de la


izquierda y los valores a congurar se ingresan en la col umna de la derecha. (Fig 73)

Fig. 73 Ventana de Propiedades.


Programa Nacional de Informtica

Pgina 34

Mdulos.
en Visual Basic que posteriormente se

'"""

ejecutar. Hay tres tipos de mdulos


de cdigo :

Est ndar,

Clase y

Formulario.

Fig. 74 Ventana de Mdulos.

Cada uno de los cua les posee una accin especfica. Pa ra

los proyectos que se

desa rrollarn en este manual se emplear n los mdulos estn da r.


Tambin se menciona:

Ventana UserForm. Esta ventana contiene un UserForm (Formulario del usuario ]


, con el cual se pueden insertar controles para su uso en los programas de VBA.
Mediante un UserForm y los controles Acf iveA del cuadro de herramientas se
podr constru ir cualquier cuad ro de di logo persona lizado, adaptado a los
requerimientos del usua rio.
' rrxsor rxa - v+w +

Fig. 8 Ventana del User Form.

Cuadro de herramientas. Se activa junto con el UserForm y es el contenedor de los


controles ActveX, los que pueden ser seleccionados y a rrastrados hacia el UserForrn.

Examinador de objetos.

Permite

recorrer

los

objetos,

mtodos,

propiedades

eventos relacionados con un control ActiveX o una aplicacin de Excel . Mediante el


Examinador de objetos se simplifica la forma de prog rama r un objeto.

Ventana Inmediato. En esta ventana se puede

ingresar

ejecutar una

lnea

de

cdigo en Visual Basic, y ver de inmediato el resultado que se obtend ra. Por tanto, se
utilizar a la hora de depura r cdigo de Visua l Basic (Fig 77).

Fig. 10 Ventana Inmediato.

Objetos de Excel.
Visual Basic es un entorno de programacin orientado a objetos. Qu sig nifica
orientado a objetos? Sig nifica que en el entorno de Visual Basic, se progra ma todo lo

relacionado a un objeto; en otras pa labras, si se tiene un botn, se puede progra ma


r que ocurre con l cuando se hace clic" o doble clic" o slo se pasa el puntero
por encima o se pu Isa el botn derecho del mouse. Es decir, que a cada objeto le
corresponden eventos (la accin sobre el objeto).
Excel facil ita una jerarqua de objetos que si rven para automatiza r o persona l iza r el
trabajo d iario.

Los Objetos se encuentran listados de acuerdo a la jera rqua que tienen :

El objeto Application es el objeto su perior y representa a la aplicacin Excel .

El objeto WorkBook se representa a los disti ntos l i bros abiertos dentro de la


a plicacin Excel. Depende del objeto Application.

El objeto WorkSheet es el conj unto de hojas de un libro. Depende de un objeto


ActiveWorkBook.

El objeto Range se refiere a una celda o a un rango de celdas. Normal mente depende
de un objeto WorkSheet.
Programa Nacional de Informtica

Pgina 36

Por lo cual, se puede decir que un objeto Application puede contener varios Libros

(WorkBooks), que estos a su vez contienen hojas (WorkSheets), que a su vez


contienen otros objetos (por ejemplo Range).
Se pueden modifica r o conocer las caractersticas de cada uno de estos objetos,
accediendo a las propiedades de los mismos.
Para el objeto Range se tienen las siguientes propiedades :

Value, contiene el valor de la celda (su contenido) .

Column y Row, contienen respectivamente los datos de la fila y la col umna que se
refieren con la celda.

Font, contiene el tipo de fuente de los ca racteres que se muestran las celdas (Arial,
Courier, Times New Roman, etc) .

Ta mbin es posible llevar a cabo acciones sobre los objetos que facilita Excel . Cada una
de estas acciones recibe el nombre de mtodos. Por ejemplo para el objeto Range se
tienen los sig uientes mtodos :

Activate, activa una celda determi nada, es decir, coloca el cursor (el foco) sobre ella.

Clear, borra el contenido de una celda o rango de celdas (los valores que contienen).

Copy, copia el contenido de la celda o rango de celdas en el porta pa peles.

Las Colecciones.
a) Una coleccin es un g rupo de objetos de la misma clase.
b) Los ms utilizados en la prog ramacin de objetos de Excel VBA son Libro, hoja
de clcu lo y rango (Workbook, Worksheet, y Range).
c) Workbooks es una coleccin de todos los objetos Workbook.
d) Worksheets es una coleccin de objetos de Worksheet.

e) El objeto Workbook representa un libro de trabajo, el objeto Worksheets


representa una Hoja, y el objeto Range representa un rango de celdas.
f)

En la figura 78 se muestran todos los objetos mencionados:

El libro de trabajo (Workbook) es actual mente Libro1.xlsx.

La hoja de clculo (Worksheet) actual es Hoja1 como se indica en la ficha


Hoja.

Dos rangos se seleccionan rango B2 y B6:BIO.

Qtaes la hoja 1

Fig. 11 Colecciones de una Hoja.

Los Objetos Workbook y Worksheet (Libro y hoja).


Un Workbook es el mismo a rchivo de Excel. La coleccin Workbook contiene
todos los libros que est n abiertos actual mente. Un libro de trabajo contiene por
lo menos una Worksheet. En VBA, se puede hacer referencia una hoja de clculo
de la sigu iente manera :
Worksheets ("Hoja 1").

Worksheets

("Hoja I") es

la

hoja

de

clculo

que

el

nom bre

"Hoja I".

Otra forma de hacer referencia a una hoja de trabajo es utilizar el nmero de


ndice como sigue:

Worksheets ( 1)
Lo anterior se refiere a la primera hoja de la coleccin .
Recuerde que Worksheets ( 1) no es necesa riamente la misma hoja que

Worksheets ("Hoja 1").


Workbooks(" LibroI") .Worksheets(" Hoja 1")
Workbooks(" Libro2") .Worksheets(" Hoja 1")
La etiqueta de la hoja muestra qu la hoja est activa, la hoja activa es
"Hoja3". Se m uestra en negrita y fondo blanco (Fig 79).

Fig. 12 Hoja activa.

Pgina 37

Programa Nacional de Informtica

Objeto Range y la Propiedades Cells.


Range representa una celda, una fi la, una colu nina, una seleccin de las celdas que
contienen uno o ms bloques contiguos de celdas. A continuacin se muestran alg unos
ejemplos de cmo el objeto Range puede ser utilizado.
El sig uiente ejem plo coloca el texto "9 P" en el rango AE: BS, en la Hoja2.
(Fig 80) .

. Worksheets( " Hoja2").Range("AI :B5") = "2 P"

B
JP

Fig. 13 Asignar un valor a un Rango.

Tenga en cuenta que, Worksheets. Range("AI ", " BS") - "JP" dar el mismo resultado
que el ejem plo anterior.
El siguiente texto "JP" en las celdas AI, A3 y AS en Hoja 2.
Worksheets(" Hoja2 "). Range("AI, A3, A5")

"J P"

Ejemplo

JP

Fig. 14 Asignar un valor en forma alterna.

a) El Objeto Range tiene una propiedad Cells.


b) La propiedad Cells toma uno o dos ndices como sus pa rmetros. Por ejemplo,
Cells(/nc/ex) o Cells(row, co/umn)

Donde:

Index; es la direccin o referencia de la celda.

Row; es el ndice de fila y cofurrzn es el ndice de la colu nina.

Los sigu ientes tres formatos son similiares:


1. ActiveSheet. Range.Cells (1,1)

2. Range. CelIs (1,1)


3. CelIs(1, 1)
El siguiente cdigo devuelve el mismo resultado:
Range ("AI") = t. 23

Cells( 1,1) = 123

Procedimientos.
Son las estructuras que permiten escri bir las instrucciones que el usuario ingresa o el

cdigo que se genera de forma automtica cuando se crea una macro.

Queda definido entre las expresiones:


Sub Y
End Su b
El formato a utiliza r es el siguiente:
Sub

Nombre_Procedimiento(

End Sub

El Nombre_Procedimiento

lo asig na el usua rio y se crea dentro de un

mdulo est ndar.


Se tienen dos tipos de proceda ientos Sub:
a) Generales y
b) De Evento.
a) Procedimientos Generales.
Los procedi mientos generales son creados pa ra rea l izar un clculo o una operacin

donde no participe el usuario.


Un ejem plo con cdigo sera el siguiente :
Private Su b Demo I()
Range("AI ").Val ue = Esta es la Celda AI "
End Sub

b) Procedimientos de Evento.

Los procedim ientos de evento son los que responden ante una accin realizada por
el usuario como : Clic, clic derecho, Pulsar la tecla Enter, etc.
Un ejem plo con cdigo sera el siguiente:
Private Sub cmdsal udos Click()
Me. IblSaIudo.Caption = " i Buen da Am igos ! "
Me.Caption = " i Listos para iniciar con VBA ! "

End Sub
En este caso el nombre del procedimiento es cmdSaludos_Click.

Este tipo de procedim ientos se asocian o enlazan con los controles de form u Iario,
por ejemplo un botn de comando. Al hacer clic sobre el botn de comando, se

ejecutar todo el cdigo que est contenido en el procedimiento.


Private Sub cmdsal udos_Click()
Me. IbISaIudo.Capt on = " i Buen da Am igos ! "

Me.Ca ption = " i Listos pa ra iniciar con VBA ! "

End Sub

Funciones.
Las funciones son pequeos programas hechos en cdigo VBA que le permiten al usuario
em plearlos pa ra que rea licen la bores
especficas. El formato es:
Function Nombre_Fu ncin(Arg umentos)
Nombre_Funcin = Valor_a_devolver
End function

Eventos.
Los eventos en VBA permiten gestionar las acciones que rea lizan los usua rios sobre
los controles, de esta manera es posible controla r la accin a tomar cuando el usuario
hace algo definido en la hoja, con la celda o con a lgn objeto.
Alg unos ejem pios de eventos en VBA son los siguientes:

Workbookopen. El usuario abre un libro de Excel.

WorkbookActivate. El usua rio activa un libro de Excel.

SelectionChange. El usuario cam bia la seleccin de celdas en una hoja .

Empleando el Examinador de Objetos se pueden observa r los eventos. Los objetos se

ubican en el panel izquierdo y las propiedades, mtodos y eventos en el panel


derecho, tal como se indica en figura 82

Fig. 15 Los eventos en VBA.

Actividad 4: Activar una hoja mostrando un cuadro de dilogo.


AI activar la Hoja 3 se presenta un Cuadro de Mensaje con el texto: Trabajando en
la Hoja1.
Siga los sig uientes pasos :
I. En un n uevo libro, ingrese al Editor de Visua l Basic.
2. En la ventana de Proyectos, haga doble cl ic en la Hoja 3.
3. En la ventana de cdigo, en el Panel de Objetos, donde se muestra

General

Seleccione Worksheet. Ta l como se muestra en la fig ura 83.

Fig . 16 El Worksheet.
Pgina 41

Programa Nacional de Informtica

Esta accin selecciona de forma inmediata el procedimiento para el evento


SelectionChange.

Programa Nacional de Informtica

Pgina 42

4. Haga clic en el botn del cuadro combinado y seleccione de la Iista el evento :

Activate (Fig 84).

Fig. 17 Evento Activate

De esta forma se crea el procedim iento del evento Activate

5. Escri ba el sig uiente el cdigo en el proced imiento : Worksheet_Activate().

Frivzze Sub Works eec_Lcc ivun e()

F:ivzne

SubWorks:ee n_5elecn icn2 ange(3 y 'ai Targe n As Range)

6r.:l SuE
v

Fig . 85 Cdigo del procedimiento Wotksheet Activate.


6. Regrese a la hoja de clcu lo.
7. Haga clic en la Hoja3.

La fu ncin msgbox genera el cuad ro de mensaje (Fig 86) .

Fig. 18 Resu ltado de activar la Hoja.

8. Guarde el libro con macros (Fig 87).

Actividad 5: Escribir un texto en la celda B2.


Se utilizar el Editor de VBA para escr bir el texto : Estoy en la celda B2.
Siga los sig uientes pasos :
I. En un n uevo libro, ingrese al Editor de Visual Basic.
2. En la barra de men, comando Insertar, inserte un nuevo Mdulo (Fig 88) :

UscFom
Fdodu

Fig. 20 Inserta r Nuevo Mdulo.


3. Haga doble clic en el b1dulo1 y

En la ventana de cdigo, ag regue un nuevo

procedi miento Sub: Texto

Ezd 5uk

Fig. 21 Nuevo Procedimiento Sub.

4. AI escribir Range(B2). El editor muestra un panel de ayuda con las propiedades y

mtodos que se a plican al objeto Range (Fig 90) .

Programa Nacional de Informtica

Pgina 44

5 exro()
Range(3?).v

Fig. 22 Panel de ayuda.


5. Complete la instruccin de la sig uiente manera .

Fig. 23 Cdigo del procedimiento.


Para ejecutar el proced i miento puede realizar lo sig u i ente :
a) Clic en el botn Ejecutar Pu Isar la tecla FS. (Fig 92)
Formato

Depuracin

Ejecutar

b) Se muestra la hoja 1, usted notar que se ha escrito el texto en la celda


B2.
8

o
t

'

Actividad 6: Escribir un texto en la celda B4, con jerarqua de objetos.


Utilice el Editor de VBA para escrib r el texto : Estoy en la celda B4.

Siga los sig uientes pasos :

I. En el libro actual, ingrese a l Editor de Visual Basic.


2. Seleccione le Mdulo Iy abra la ventana de Cdigo.
3. Haga doble clic en Mdulot y

En la ventana de cdigo, agregue un nuevo

procedi miento Su b : Texto2. (Fig 94) .

Sur c ex u o()
Range(T2) .Valu e = Estoy en T2 " 5.t
texto2(]
6nd 5 W
5:L
l
ZI

Fig . 25 Nuevo Procedim iento texto2.

4. Escriba :
Wor/rSAeets[3/.Aange("64 "/.t7afzre = "Esta es fa Celda B4 de fa Aoya 3".
En el espacio que hay entre Sub y End Sub.
AI escribir WorkSheets(3).Range("B4").

Se indica la referencia a la celda B4 de la

hoja 3
Ejecute el procedim iento y compruebe los resultados
Haga el nuevo procedi miento: Texto3 y escri ba :

ActiveWorkbook.WorkSheets(E).Range("B6").Value = "Esta es la Celda B4


de la hoja 1 del libro1"

En el espacio que hay entre Sub y End Sub.


AI

escribir ActiveJ/VorJbooJr, se

est

refiriendo

a l libro

activo.

Ejecute

el

procedim iento y com pruebe los resultados.


Programa Nacional de Informtica

6. Ahora, elabore el nuevo procedimiento: Texto4 y escriba: :


Application. ActiveWorkbook WorkSheets( E).Range("B8").Value - "Esta
es la Celda B8 de la hoja 1 del librot (jera rqua com pleta)"
En el espacio que hay entre Su b y End Sub.
7. Guarde el libro con macros: Jera rquas. xlsm.

Cdigos de Edicin.
En el Excel VBA es posible em plear cdigo para trabajar o editar una celda o un rango de
celdas, as como filas o col umnas.
El objeto Range, es la unidad bsica para referirse a los objetos de edicin en Excel .
Su uso aba rca a :

A un conj unto de celdas.

A una sola celda.

A toda una fila o colu nina.

A celdas de otras hojas.

Como propiedades el objeto Range tiene las sig uientes:

ActiveCell, representa la primera celda activa de la ventana activa (windowactive).


Areas, todos los rangos de una seleccin mltiple.
Cells, representa a una celda o coleccin de ellas.
Columns, representa las columnas de la hoja activa, o un rango determinado.
Entire column/ row, la col unina/fila entera dentro del rango.
End, la celda situada al final del rango especificado.
Offset, la celda desplazada segn un nmero especfico de fila columna.

Cdigos pa ra gestiona r:

Celda
Range("AI") . Select
Seleccionar

[AI]. Select

CelIs(1, 1).Select

Copiar Pega r

Range("AI") .Copy Range("B2")

Nom bra r

Range("C4"). Name -"Modelos"

Negrita

Range("B4") . Font.Bold = True

Itlca

Range("B4") . Font. Italic - True

Tama o

Range("B4") . Font.Size = 14

Celda
Colorindex

Range("B4"). Font.CoIorI ndex = 3 'Color Rojo

Borrar comentarios

Range("CI"). CIearComments

Borra r formatos

[B4].ClearFormats

Paleta de colores.
Color 0 Color 0
Color 1

C0l0 t 2

3
3
2136

Color 19
Color oColor 20

Color ,1

Color -'2

Color 13

Actividad 7 : Aplicacin de Range en Celda.


1.

En un nuevo Iibro, ingrese al Editor de Visual Basic.

2.

En la barra de men, en el comando Insertar, inserte un nuevo Mdulo.

3.

Haga doble clic en btdulo E y

en la ventana de cdigo, agregar un nuevo

procedimiento Su b : Celdas.
4. Escriba el sigu iente cd igo:

Sub Celdas()
'Formas de Seleccin de la Celda B2
Range( B2"). Select
[BZ]. ielect

CeIIs(2, 2).Select
'ingresa el nombre Julio en la celda BZ
CeIIs(2, 2). Value - Julio

Pgina 47

Programa Nacional de Informtica

'Copia el contenido de la celda B2 a la celda D2

Range("BZ). Copy Range("DZ ")


'En la oe/da B2, se aplica Negrita, Itlica, co/or rojo y
tamar o J 4

Range("BZ" ). Font. Bold


True Range("BZ). Font.italic True
Range(B2). Font. Colorlndex - 3 Color Rojo
Range("B2"). Font.Size 14
'Asigna el nombre Ilodelos a la celda BZ
Range("BZ ").I\iame -- "Ilodelos "

End Sub
5. Guarde el libro con macros : Celdas.xlsm.

Rangos
Range("AI : AS") . Select

Seleccionar

[AI: AS] . Select


Range("BI,C2, D4") . Select

Copiar Pega r

Range("AI : A5") .Copy Range("B2")

Nom bra r

Range("C4: DS"). Na me ="Datos"

Negrita

Range("B4: B8") . Font.Bold = True

Range("B4: B8"). Font. Italic - True

Range("B4: B8") . Font.Size = 14

Range("B4: B8"). Font.CoIorIndex - 5 'Color Azul


Borra r regin de datos

Rango("B3"). CurrentRegion. Clear

Actividad 8: Aplicacin de Range en Rangoa.

En esta actividad se muestra la forma de a plicar Range en un rango de celdas.


1. En un nuevo libro, ing rese al Editor de Visual Basic.
2. En la barra de men, en el comando Insertar, inserte un nuevo btdulo.
3. Haga doble clic en blduloE y

nuevo procedim iento Su b : Rangos.


Escriba el sig uiente cdigo :

En la ventana de cdigo, ag rega r un

Sub Rangos()
Formas de Seleccin del Rango B2.'
B6 Range("B2. B6 ").Select
[B2.' B6]. Select
Escribe contenido en el Rango
Ranpe("C2. C6 ". Value -Senati"
Copia el contenido del rango C2. C6 a la celda E2

Range("CZ.-C6 "). Copy Range("E2 ")


En el rango C' C6, se aplica /\/e9r/ta, Itlica, co/or
Azul y tarriaio 14
Range(C2 /C6). Font. Bold - True

Rari9e(C2.- C6 ). Fort. Italic True


Range("CZ.C6 ").Font. Colorlndex 5 'Color Azul
Range("C2. C6 ").Font. Size - 14
'Asigna el nombre Mo/e/os al rango ce/la CX: C6

Range("CZ:C6 ").Name = "IIodeIos "


End Sub
4. Guarde el libro con macros : Rangos.xlsm.

Caso especial: Seleccionar todos los datos de un rango de datos.


Cuando se requ iere seleccionar un rango del que no se conoce su alcance. Se debe tener
en cuenta que estos van ca mbiando. Por ejem plo cuando se tiene una lista de ventas en
la cual se agregan nuevos registros. La instruccin

CurrentReg ion permite selecciona r

todo este rango de ventas, aun cuando no se conozca el tamao.

Actividad 9: Seleccin de un Rango de Celdas.


I. Abr r el archivo Ventas.xlsx, i ngrese a l Editor de Visual Basic.

2. En la barra de men, en el comando Insertar, inserte un nuevo Nldulo.


3. Haga doble clic en Nldulo1 y
procedim iento Su b : Seleccionar.
4. Escri ba el sig uiente cdigo :

En la ventana de cdigo, agrega r un nuevo

Sub Selecciona r ()
Se/ecc/ona la regin actual

Selection. CurrentRegion. Select


End Sub

5.

Guarde el libro con macros: Ventas. xlsm

Seleccin de Filas.
Filas

Seleccionar

Una sola
Adyacentes

Rows( "2: 2").Select


Rows( " 5 :9").Select

Alternas
Nixtas

Range("3: 3,7: 7, 10: 10").Select


Range("1 : 1,5: 5, 11: 11,15: 15").Select
Rows(2) InseH

Una

Insertar

[A4].EntireRow.insert
Rows( "10: 15").insert

s
n
Eliminar vacas

Rows(4). Delete
Rows("3: 5").Select

Va rias

Selection. EntireRow. Delete

Eliminar contenido
Borra r formato

Rows(3). Clear
RoWs( " 2: 2").CIea rFormats

Actividad 10: Seleccin de Filas.


t . En un nuevo libro, ingrese al Editor de Visual Basic.

2. En la barra de men, en el comando insertar, inserte un nuevo f8dulo.


3. Haga doble clic en L'ldulo1 y

En la ventana de cdigo, ag regar un

nuevo procedimiento Sub: Filas.

Escriba el siguiente cdigo


Sub SeleccionaFilas ()
'Se/ecciona la ///a 4, Si/a 7 y de la fila 11 hasta la fila J 5

Range(4.-4, 7. 7,11.15).Select
End Sub

4.

Guarde el libro con macros: Seleccionafilas.xlsm.

Seleccin de Columnas.
Columnas

Seleccionar

Una sola

Rows( "B: B").Select

Adyacentes
Alternas
Nixtas

RoWs( "C: F).Select

CoIumns( "C: C").insert


[D1]. EntireColu inn.insert

Una

Insertar

Range("CI : EI0"). EntireCol umn.insert

n
Eliminar vacas

Range("E: E,G: G, J: J").Select


Range("C: C, E: E,H: H,K: M").Select

Col umns("B: B").Select


Col umns("B: C"). Select

Varias

Eliminar contenido

Selection. EntireColu inn.Delete


CoIumns(3) . Clear

Borra r formato

Col umns("D: D").Clea rFormats

Actividad 11: Seleccin de Columnas.


I. En un n uevo libro, ingrese al Editor de Visual Basic.

2. En la barra de men, en el comando Insertar, inserte un nuevo Nldulo.


3. Haga doble clic en Nldulo1 y

En la ventana de cdigo, ag rega r un nuevo

procedi miento Sub: Seleccionacolumnas.


4. Escri ba el sig uiente cdigo :

Sub Seleccionacolumnas ()
Se/ecciona la Columna C, la co/umna E, Co/umna /-/ y de la K
Range(C. C,E . E,H . H, K . M ). :ielec:t
End Sub

5. Guarde el libro con macros: Seleccionacolumnas.xlsm.

Pgina 51

Programa Nacional de Informtica

En la sig uiente ta bla se resume un gru po va riado de operaciones que es posi


ble trabajar con los rangos:

Operacin

Ejemplos
' Copia la celda El
Range(C1 ). Copy
'Copia la celda D1, este formato tambin es vlido.
[V1J. CopY
Copia la ce/o'a CJ (la primera posicin e9u/vale a ha y la se9uoo'a a
co/umna)3).
. Copy
Cells(1,

Copiar

Cop/a el rari9o de ce/c/as C2 : DE

Range(C2.- DE). Copz


'Copia el rango de celdas D2 . :2, esta es otra terminologa tambien
vlia
[O2
.E2J. Topz
Copia lodo contenido de la celda N2 y lo pega en la c:e/da P3
Range("M2").Copy Range( "P3")

Pegar

Nombrar

Transponer

Otro formato, resa/dando la ce/da donde se va a pegar, empleo de propiedades


Range("M2").Copy Destination : = Range("P3")
Rango F4. G8 con el nombre Precios.
Range("F4: G8"). Name ="Precios"
Convertir /a en :o/umna
Range("C2: F2").Copy
Range(H3"). PasteSpecial Paste: = xlPasteAlI, Transpose: =True

' Convertir columna en //la


Range("B3 : B7").Copy
Range("D2"). PasteSpecial Paste: =xlPasteAll, Transpose: =True

Instruccin With.
Se emplea cuando se tiene un conjunto de propiedades aplicadas a un mismo

objeto. Esto permite hacer referencia a varias propiedades de un mismo objeto.


EJEMPLO 1. Se tiene este g rupo de propiedades aplicadas a l rango: C2:C6.

'En el ranpo C2. C6, se aplica Negrita, Itlica, color Azul y [amao 14
Range("CZ.* C6"). Value "Datos "
Range("CZ.-C6" ).Font.BoId True

Aanpe("C2/ C6 "). Cont.ltaIic - True


Ranpe("C2 /C6"/.Font. Co/or/nc/ex - 5 Color Azul
Range(C2:C6 "/.Font. 5/ze = 14
'Asigna el nombre I4odeIos al rango celda CZ .
C6 Range("C2:C6" ). Name - "IIodeIos

Puede escri bir este cd igo mediante With/End With:

Sub Formatos ()
En el rango C2: C6, se aplica Negrita, /t/ ca, color Azul y tamao
14

Wit:h Range("CZ.C6 ")


. Value -- "Datos "

.Font. Bold - True


.Font.italic - True
.Font. Colorlndex 5 'Color Azul
.Font. Size - 14
'Asigna el nombre Modelos al rango celda C2 . C6
.Name = /fo:le/os
End With

End Sub

E9 EMPLO 2. Considere que desea a plicar el sig uiente formato a una fila : Negrita, doble

subrayado, fuente g rande y color especial .


El cdigo podra ser el siguiente:

Range(B2 . DZ"). SeIect


Selection. Font. BoId -True
Selection. Font.Size -12
Selection. Font. CoIorindex5
Selection. Font. UnderIine-xIUnderIineStyIeDoubIeAccounting

Puede escribir el cdigo usando With / End With. Tenga en cuenta que pa ra hacer
referencia a l objeto debe em peza r con un punto :
Wt:h Range ("B2.'D2"). Font:

.Bold True
.Sze -12
.Co/orIndex 6

. UnderIine -xIUnderIineStyIeDoubleAccounting

Pgina 53

Programa Nacional de Informtica

E9 EMPLO 3. Uso de With para borra r formatos y otros elementos.

Sub Borrar ()

With Range( "C2")


. ClearComments

' Borra comentarios

. ClearContents

' Borra contenidos

. ClearFormats

' Borra formatos

. ClearNotes

' Borra notas

. Clear

' Borra tod o lo anterior

End With
End Sub

EJEMPLO 4. Uso de With para ordena r datos.


Considere estos datos para aplica r el ordenamiento (Fig 95).
E

Datos42 M302 M 302


M4 x302

DMOSLE Mx022 Mx022

Mx302

Max022

Ddtos35
Max023
Dtos 13
Max102 Max202

Max023

Max022

Max102
Max202

Max023
Max102
Max202

Max023
Max102
Max202

Fig . 26 Datos pa
ra

ordena r.

Este cdigo permite ordenar los datos que se muestran en la figura anterior.
Sub ordenar( )
With [B2].CurrentRegion
' [B3].CurrentReg ion podra ser - Range(' B3 : f4 29')
. Sort Key1: =Range("G10"), Order1:=xIAscend ng, Header: =xIGuess
. Sort Key1: = Range( "F4"), Order1 : =xIDescending, Header: =xIGuess
. Sort
Key1:= Range( "B3 "), Order1 :
=xlAscending, Key2 := Range( "C2"),
Order2:
=
xlAscending,
Key3
:Range("D2"),
Order3
:-xlAscending,
Header: =xIGuess
End With
End Sub

Cdigos de formato.
Con este cdigo es posible cam bia r la a pariencia del contenido de una hoja. En el
sig uiente ejem plo se proceder a cam biar el formato a la fila activa.
E9 EMPLO 1.

En un nuevo libro, inserte un nuevo mdulo, escr ba el siguiente procedimiento:

Sub formatofila( )
ActiveCell. EntireRow.Select

With Selection.Font
.Na me = "Calibri"
.Size - 14
.Striketh rough = Fa lse

.Superscript = False
.Subscript = False
.OutIineFont - Fa lse
.Shadow = False
.Underline = xlU nderlineStyleNone
.ThemeCoIor = xlThemeColorLight1
.TintAndShade = 0

.ThemeFont - xlThemeFontMinor
End With
Selection. Font. Bold = True
With Selection.Interior
.Pattern = xISoIid

.PatternCoIorI ndex - xlAutomatic


.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0.399975585 192419

.PatternTintAndShade = 0
End With
End Sub

* Son dos ejemplos el 1 se refiere a toda la fila el 2 a una celda.

Programa Nacional de Informtica

E9 EMPLO 2. El procedimiento perm ite a plica r formato a la celda activa (Fig 96) .

Fig . 27 Aplicar formato a celdas


En un nuevo libro, en un nuevo mdulo inserte el sig uiente procedimiento:

Sub FormatoE()

Selection.Font.BoId - True
With Selection.Font
. Name = " Bernard MT Condensed

. Size = 11
. Strikethrough - False
. Su perscript = Fa lse
. Su bscript = Fa lse
. OutlineFont = False
. Shadow - Fa lse
.U

Underline - xlUnderlineStyleNone

.ThemeCoIor = xlThemeColorLight1
.TintAndShade = 0

.ThemeFont - xlThemeFontNone
End With
Selection. Font.Size = 20
With Selection. Font
. Color = -4165632

.TintAndShade - 0
End With
Selection. Font.ltalic = True

With Selection
. HorizontalAlignment = xlCenter
.V

erticaIAIignment - xlBottom

.W

ra pText = False

. Orientation = 0
.AddIndent - False
.IndentLevel = 0
. Sh rinkToFit = False

. Readingorder = xlContext
. MergeCells = False
End With

Selection. Borders(xIDiagonaIDown). LineStyle


Selection. Borders(xIDiagonaIU p) . Linestyle

xlNone
xlNone

With Selection Borders(xIEdgeLeft)


. LineStyle - xlConti nuous

. Colorlndex = 0

.TintAndShade = 0
. Weight = xlMediu m
End With

With Selection.Borders(xIEdgeTop)
. LineStyle = xlContinuous
. Colortndex = 0
.TintAndShade - 0
. Weiqht = xlMediu m

End With
Selection. Borders(xIEdgeBottom)
LineStyle = xlContinuous
Colorlndex - 0

TintAndShade =
Med
Selection Bordersf xlEdgeRig ht)
. LineStyle - xlConti nuous

.T ntAndShade =
Weight - xlMediu m
End With
Borders(xIInsideVerticaI) Linestyle

Bordersfxll nsideHorizonta l) LineStyle

xlNone

xlNone

End Sub

Pagina 57

Programa Nacional de Informtica

Programa Nacional de Informtica

Pgina 58

Trabajar con libros y hojas.


En los sig uientes procedi mientos, se mostrar n las operaciones que se pueden
realiza r a nivel de Libros.
Abrir.

Sub Abrir( )
Dim Nombre As String

NombreLibro "C.\BoIetas.xIsx"
' Se valida la existencia del libro, se muestra un mensaje de aviso
IF Dir( NombreLibro) - Then

NsgBox NombreLibro 8 " no se Existe!


Else

Workbooks. Open FileName.' NombreLibro, updateLinks.' False

End if
brr

Dim Libro As
Workbook
Set Libro Workbooks. Open(Filename. "C. \PIaniIIas\Boletas.xIsx", Pass

word.' - "angeles ", WriteResPassword. - "kiara")


br

Application. EnableEvents - True


Workbooks. Open Filename.' "c. \
Planillas\Boletas.xlsx", UpdateLinks .- -
False End Sub

Cerrar.

Application. DisplayAlerts = False


ActiveWorkbook.CIose

Guardar.

Sub Guardar( )
On Error Resume Ilext
On Erro r Resume Next, usado como control de error: Se evitar el
error derivado de una celda vaca y/o con un ca racter con el que
excel no permite g uarda r un libro

Active Workbook.SaveAs [A1]. Value


Es similar a considerar
' ActiveW orkbook. SaveAs Filena me := Range('AI').Va Iue

End Sub

Borrar.

Su b BorrarLibro ( )

Workbooks("C. \Novedades.xIsx). Delete


End Su b

Crear.
Sub NuevoLibro( )

Workbooks.Add
End Su b
d

Sub DosL bros()

Workbooks.Add
Workbooks.Add
End Sub

En los sigu ientes procedimientos, se mostrar n las operaciones que se pueden


realizar a nivel de Hojas

Programa Nacional de Informtica

Pgina 60

Insert:a nueva hoja.

Sub InsertarHoja( )
ActiveWorkbook.Worksheets.Add
End Sub
Es posible tambin aplicar:
Sub In9ertarHoja()
Dim Hoja As Worksheet

Set Hoja = Worksheets. Add


End Sub

Selecciona r.

Sub Seleccionar( )
pa ra selecciona r l a primera hoja del l i bro activo

Active Workbook.Sheets(J).Select
' pa ra selecciona r l a seg unda hoja del l i bro activo

Active Workbook.Sheets(2).Select
no rn ol ecr i rnn r l n to res ra loja del l ibro activo

Active

iheets(3). ielect

n6 tu

WnrknheeLnf"Hn ia2

lInve alter. Worksheets("Hoja5)

End Sub
'Caso aue el libro te no a 3 hojas, estando la hoja 2 activa
' Pa ra mover la hoJa 2 del ante de l a hoja 1

Sub moverHoia f \
Dim Hoja As Worksheet

Set HoJa = ActveSheet


Nove

-Sheets(1)

Set Hoa - Sheets(1)

Ho ja. Ilove

Sheets(Sheets. Count)

Borrar.
Sub BorrarHoja( )
Sheets("Hoja1 ").Delete
End Su b
'Caso de elimina r hoja sin mostra r confirmacin

Sub borrarHoja()
Application. DisplayAlerts
False Sheets("Hoja1 ").Delete
Application. DisplayAlerts

True

End Su b

Sub NuevoLibro( )

Workbooks.Add
End Sub
--------------Caso dos libros
Sub NuevoLibro()
Workbooks.Add
En Su
Cop
Copiamos la Hoja1 despus de la Hoja3
\Hnrkshetsf"Hnjn l ).CiD )/ alter.

Worksheets(Hoja3

")

End Sub
Otro caso oara cooia r una hoja

copiarHoja
Dim Hoa As Worksheet
Set Hoia - ActiveSheet
Hoja. Copy

=Sheets(1)

Hoa - Sheets(1 J
Copy'

=Sheets(Sheets. Count)

End Sub
Pgina 61

Programa Nacional de Informtica

Renombrar.
Sub Renombrar( )
Sheets(1). Name - "Precios
End Sub
Nota : No se distinguen Mayscu las de minscu las.
Sheets(" Precios") . select

Sheets(" PreciOS").select
Sheets(" precios").select

Sub ColorEtiqueta()
ActiveWorkbook. Sheets(Hoja1 ").Tab.Colorlndex

End Su b
Pa ra saber el nmero que corresponde a l color, realice lo siguiente:

1. C//c derecho sobre la etiqueta de haja.


2. Elige la opcin Co/or #e Etiquetas .

4. Aceotar.
5. En la ventana inmediato del editor VBA escribe.

1-t'---h--r.7ab.Co/ornde.

Cdioo bsico de uso frecuente:


e

Fentrnr tnxtn

on
.HnriznntalAl q nment = xlCenter

b. Alinear a la izquierda

With Selection

.HorizontaIAIignment = xlLeft
End With

c. Alinear a la derecha

With Selection
.HorizontalAl gn ment = xlRig ht
End With

d. Fuente

With Selection. Font


. Name = Aria l"
End With

e. Tamao de letra

With Selection.Font
. Size =
10 End With

f.

Borra toda la informacin del rango actual usado, comenzando desde


B3.
Rango( "B3"). CurrentRegion. Clear

Ejercicios prcticos con aplicacin de cdigo de macros.


En este primer caso, se emplea cdigo para convertir un texto que se encuentra
en minsculas a maysculas.
1. En

un

nuevo

libro,

inserte

un

nuevo

mdulo,

escriba

el

sig

uiente procedimiento:

Pgina 63

Programa Nacional de Informtica

5t Iajuscula(}
Dim lO.r As Icng
wio. 6electicn
For lCnr - ? Tc 1??
.Replace C::(lC.r}, UOase( C:z{lC.r))

= _

2. En una celda escriba un texto en minscula pa ra convertirlo a MAYSCULAS.


C

3. Ejecute la macro

Nombre de la raoo:
ANayuscula|

Se obtiene el texto en MAYSCULAS.

Los sigu ientes ejercicios deben esta r codificados en mdulos ta l como se indica :

Sub CuentaFilas()
CantFilas = Selection. Rows. Count

Ca mbia r Rows por Col u mns pa ra

conta r col umnas

MsgBox CantFilas & " Celdas Selecccionadas


End Su b

Sub CuentaHojas()
mycount

Application. Sheets. Count

MsgBox "El libro tiene " & mycount & " Hojas"
End Su b

Sub Cuenta()
Contador = Range("a 1") + 1
Range("a 1") = Contador
End Su b
Sub MiPosicion()
Fila = ActiveCell. Row
Columna

ActiveCell. Colu inn

Msg Box "Ubicacin de la celda : Fila: " & Fla & ", Col umna : " & Col umna
End Su b

Asig na r nom bre persona l izado a Rango de cel das

Su
Su

rAN

hreRn nqo(

Application. Goto

= "Ventas"

Su

OcultatHo jas( )
Sheet1 .Visihle - xlSheetVervHiJrlen
Si ocu lta sus hot as de esta man era, los usua rios no ser n ca paces de
ostra

rom

os

en

Sl o el uso de cdiaos VB ser caoaz de visualiza r l as hojas d e nuevo.

Su
Ocu

F rel

AopIication.Visible = Fa lse
Pued e ocu ltar la a o ficacin Excel con esta ma cro. Esto desactiva los men s
rte F x rel
b
Programa Nacional de Informtica

End Sub

Sub InsertFilas()
Dim Rng

Rng = InputBox("Escriba el nmero de filas requerido. ")


Range(ActiveCeIl . Offset(0, 0), ActiveCelI.Offset(Rng - I, 0)). Select
Selection . EntireRow. insert
End Sub

Sub LastRow( )
Range("a 65536"). End(xIUp).Offset(1, 0). Select
' Muchos usua rios necesitan sa ber la sig uiente fil a disponi ble pa ra los
datos de entrad a .
Esto loca liza el cdigo de la sig uiente fila disponi ble en la col umna A

End Su b
Pa ra g raba r el l i bro despu s d e ejecuta r l a macro
La seg unda macro g ua rda el l i bro lla mado " Emprendedor" ,
Se debe especifica r la ruta del arch i vo a g raba r

Sub Graba LibroActual()


Act veWorkbook Save

Nnm

<*i =/rkhn=k n = Filename : ="C : \Em prendedor. xlsx"


End Sub
Tem
M ido el fi en nn do o mora a n fon oJori ita r la sig u i ente l nea de cd igo

Application.Wait Now + Ti meVal ue("00 :00 : 10")


Mn Pnx f" Hnn Trnnri irrirfn 1 fi eni ndos")

Su plzquierda()
Cel da activa se ubica como pri mera fila, en la pa rte su perior de la pantalla

Artiver.i coi
Artivere| Rnw
EndVUith
Programa Nacional de Informtica

Pgina 66

Su

Pgina 67

Programa Nacional de Informtica

Ca

Lenguaje Visual Basic


de Aplicaciones
Objetivos:

9 Funda mentos de Prog ramacin VBA.


9 Variables.
4

Estructuras de prog ramacin

4 Ingreso datos.
9 Ejercicios

prcticos con empleo

secuenciales.

de estructuras

Lenguaje Visual Basic de Aplicaciones (VBA).


Fundamentos de Programacin VBA.

Este captulo es para usuarios que quieren obtener el mximo rendimiento de


Excel VBA. La Programacin en Excel VBA no es difcil, pero es necesario
conocer las pala bras claves utilizadas en Excel VBA.
Con el propsito de tener la capacidad de:

a. Desarrollar soluciones personalizadas, automatizar tareas y aumentar el


rendimiento mediante VBA.

b. Aplicar los modelos de objetos para programar de manera efectiva en el


sistema Microsoft Office.

c. Explotar los controles ActiveX para crear interfaces de usuario funcionales y


fam iliar.

d. Solucin de problemas de cdigo usando las herramientas de depuracin de


VBA.

Hay siete fases distintas en el desarrollo de una aplicacin de Excel (algunas


aplicaciones pueden ser programadas en otras fases o mientras que algunas
puede no ser necesa rio) :
a. Anlisis: La com prensin de los requisitos de una aplicacin de Excel.
b. Interaccin: Traducir ideas preliminares sobre los requerimientos a travs de

la interaccin con el usuario final para garantizar que las actividades estn
bien alineadas con las expectativas del usuario final.
c. Codificacin: La escritura de cdigo y desarrollo de elementos g rficos de
interfaz de usua rio pa ra transforma r las ideas en un formu la rio de tra bajo.

d. Documentacin:

Elaboracin

de

documentacin

para

proporcionar

informacin sobre las caractersticas de la aplicacin.


e. Embalaje: El desarrollo de un paquete de instalacin para la aplicacin
cuando la aplicacin lo requiera pa ra su distribucin.
f.

Seguridad: El desa rrollo e incorporacin de procedim ientos de seg uridad en


la aplicacin cuando la aplicacin est disponible a travs de licencias o su

uso est restringido.

Pgina 69

Programa Nacional de Informtica

g.

Entrenamiento: Proporcionar una formacin prctica a los usuarios que


van a trabajar en el uso de la aplicacin.

Sentencia DOM.
En la creacin de sol uciones a un requerim iento se necesitan guardar valores
que en un momento oportuno sern necesarios. Estos va lores pueden ser
ingresados desde teclado o son generados por una expresin o frmula.
Pa ra ello se requ iere de objetos lla mados Variables.
La va ria ble reserva un espacio en memoria para guardar el valor a procesa r.
Pa ra poder em plea rla debe declara rta y debe hacerlo con la sentencia: Dim. (Dim

es la abreviatura de Dimensin).
Dim, declara y asigna espacio para almacenar una o ms variables.
Una va ria ble queda definida cuando se especifica:
a. El nom bre de la va riable.

b. El tipo de dato al que a punta.


c. El mbito en el que es visible.

Tipos de variable:
El tipo de dato a g uardar defi ne el tipo de variable a crear. Se tienen los
sig uientes ti pos de datos:

a. Numricos.
b. Booleanos.
c. Fecha / Hora.
d . De texto (cadenas).
e. Va riant.
f.
g.

De objeto.
Registros de datos defin idos por el usuario.

Variable Variant.
El ti po Variant es un ti po de dato que puede contener prcticamente cualquier
tipo de datos. El prefijo que se suele utilizar para identificar una variable Variant

es var.
Hay excepciones, por ejem plo no puede contener una cadena de longitud

Cuando se declara una va riable o se escribe la ca becera de una funcin sin


especifica r el tipo que va a contener devolver, implcita mente se est
declarando como de tipo Variant.

Debe recorda r que si se declara una variable sin especifica r su tipo,

implcitamente la declara como Variant.


La ltima declaracin sera equivalente a
Dim varM iVariable

Declaracin de Variables.
Se deben decla rar todas las variables que se utilizan en un progra ma para indica
r al com pilador de Visual Basic el tipo de datos de la variable y otra

informacin, por ejem plo qu cdigo puede tener acceso a la misma.


Pa ra decla rar va riables se podra hacer a Igo as:
Dim Precio As Currency

' Decla ra la va ria ble Precio de tipo Moneda

Dim Nombre As String

Decla ra la variable nom bre de tipo texto

Entonces debe indica r una decla racin en este orden :

1. La sentencia Dim.
2. El nombre de la va ra ble.
3. La palabra reservada As.
4. El ti po de dato a gua rda r.

Los ti pos de datos se identifican como sig ue :

a. Datos numricos.
Existen dos fa milias de datos numricos.

Datos numricos de nmero entero.

Datos numricos de coma flotante.

Como datos enteros se tienen los siguientes ti pos :

Nombre del Tipo

Tamao

Valor inferior

Valor Superior

Sufijo

Prefijo

iii

Bt1B2b
I t

2B
B

Pgina 71

-32.76
2. 1 7.

3.6

32. 6
2. 147.483.

ng

Programa Nacional de Informtica

Por Sufijo se entiende que es un carcter de definicin de tipo que se puede


aadir a la Variable o Constante, pa ra definir el tipo al que pertenece.
Por ejem plo Dim Va lorLong & declara implcita mente la variable ValorLong como
Long.

Esta decla racin equiva le a la sigu iente :


Dim ValorLong As Long

b. Nmeros de Coma Flotante.


Los nmeros de coma flotante son unos tipos de datos que admiten valores
no enteros.
Por ejemplo estos son valores de coma flotante:
3. 14159265358979
2.71828182845905
45562. 1#
6.00
Como datos de coma flotante se tienen los sigu ientes tipos:
Nombre
Sinqle

Tamao

Negativos

Positivos

Sufi)o

Prefijo

4 Bytes
dbl

Currency

8B/es

-9223372036854775808
a 0

0
a
922337203685477.5807

cur

Un cuad ro resumen :

Ejemplos:

a. Declarar una variable para guardar el sueldo de una persona


Dim sngaueldo As Single
Declarar una variable para guardar la cantidad de PC de cierta
empresa.

Dim intCantidad_Pc AAss Integer


Declarar una variable para guardar el nombre de un pas.
Dim strNombrePais As String

d. Declarar una variable para guardar la fecha de ingreso a una


empresa.
Dim datFecha1ngres As Date

e.

Declarar una variable para guardar la fecha de ingreso a una

empresa.
Dim blnEstadoSalida As Boolean
Programa Nacional de Informtica

Pgina 72

Dimensionar variables.
Implica la reservacin de un espacio en la memoria, a este espacio se le identifica
mediante un nombre y est disponible pa ra que perm ita gua rda r los valores en
forma temporal d urante la ejecucin del prog rama . Asf es como se dimensiona
una variable:
Dim [identificador] As [tipo]

Porqu es importante dimensionar una varia ble? La diferencia ocurre a nivel


fsico. Puesto que a l definir la variable se define el tipo de dato que va a guardar.

Si no se dimensiona la variable sta en forma automtica ser de tipo Variant,


este tipo de variable esta preparado para recibir tanto nmeros enteros,
decima les o ta mbin letras.

AI dimensiona rse como Variant y toma un espacio en la memoria y se prepara


para que gua rda r tanta variedad de datos como sea posible. Esto hace que
se Reserve" mas espacio en ella, si se compara con una variable solo hecha

para almacenar un tipo de dato. Por lo tanto, si sabe que la variable solo
contendr letras, pa la bras o ca racteres no numricos seria mejor dimensionar
esa variable como String, esta clase de variables solo aceptan letras, palabras o

caracteres no numricos.
Debe entonces dimensionar correctamente la variable de acuerdo al tipo de dato
que se em plear a lo la rgo del programa.

Utilizar variables.
Es importante

que

las variables

queden

debidamente

definidas

emplea rlas.
Tambin puede declara r una varia ble escri biendo menos cdigo.

Por ejemplo ca mbiando As Integer por 7o.

A continuacin se muestran los sim bolos para a brevia r:


Dim nro as Integer

Abreviatura : Dim nro%

Dim nro as Long

Abreviatura : Dim nro&

Dim nro as Sing le

Abreviatura: Dim nro!

Dim nro as Double

Abreviatura: Dim nro#

Dim nom as String

Abreviatura: Dim noms

Dim nom as Variant

Abreviatura: Dim nom

antes

de

La va ria ble tipo String permite configurar el tamao deseado del sig uiente modo.
Dim [variable] as String * [Cantidad de caracteres deseados]
Vea la diferencia :
Caso Genrico

Caso Configurado

Dim saludo as String

Dim sal udo as String *10


sal udo -"Hola am ig "

sa l udo -"Hola a mig "

Vida de las variables.


El tiempo de vida de una variable permite saber hasta cuando una variable ser
vlida durante la ejecucin de un prog rama. Una variable puede tener una
d uracin limitada por el tiempo de ejecucin de una lla mada de procedimiento.

Otras variables pueden durar desde su creacin hasta el final de la ejecucin


del prog rama.
Norma l mente, todas las variables declaradas a nivel de un mdulo tend r n
la d uracin de acuerdo a la vida de una a plicacin y las va ria bles declaradas
dentro de un procedimiento slo existen mientras que el procedimiento se

est ejecutando.
Se deben considera r, alg unas excepciones a la regla general.

Las variables estticas. Las va ria bles estticas conservan sus va lores
entre llamadas a procedimientos. Un uso comn de variables estticas es

como indicadores de control para evita r la recursin ilimitada, Los


indicadores de control para la configuracin de una propiedad solo se

escriben una vez.

Mdulos de clase. Las variables decla radas a nivel de mdulo de clase


existen durante toda la vida til de los objetos de clase.

Mdulos de formulario. Las variables declaradas en los mdulos de


formulario existen desde que se crea la instancia del formulario. Sin
embargo, Visual Basic Applications trata mdulos de forma a Igo particu lar y
crea r automticamente una instancia de un formu tario en lo que se hace
referencia a alguna de sus propiedades.

Una varia ble local Static tiene un perodo de duracin ms largo que el del
procedimiento en el que se declara. Los lmites de la d uracin de la variable
dependen de dnde se declare el procedimiento y si est o no Shared.

La variable se inicializa

La variable deja de

En un mdulo.

La primera vez que se llama


al procedimiento.

Cuando el programa finaliza


la ejecucin.

En una clase o estructura,


Shared.

La primera vez que se llama


al procedimiento en una
instancia especfica o en la
propia clase o estructura.

Cuando el programa finaliza


la ejecucin.

La rimera vez que se llama


al procedimiento en una
i neta ncia especfica.

Cuando la instancia se libera


para la recoleccin de
elementos no utilizados.

Declaracin de

procedimiento

En una clase o estructura,


nosha red.

existir

Las variables estticas.


Norma l mente, cuando un procedimiento pone fin a todas las varia bles se
restablecen . Las variables estticas son un caso especial, ya que conservan su
valor aun cuando el procedimiento termina. Las varia bles estticas se declaran a
nivel de proced imiento. Una

variable

esttica

puede

ser

til

si

se

necesita

mantener un segu imiento del nmero de veces que se ejecuta un procedimiento.


Se puede declarar una

va ria ble

esttica y se incrementa r cada vez que se

ejecuta el procedimiento. En el siguiente ejem plo:


Sub MySub ( )

Static Contador As Integer


Dim Mensaje As Stri ng

Contador = Contador + 1
Mensaje = " El nmero de ejecuciones : " & Contador
MsgBox Mensaje

End Su b
A pesar de que el valor de una variable declarada como esttica es

retenida

despus de la finalizacin del proced imiento, d icha va ria ble no est disponi ble

para otros procedimientos. En el ejemplo anterior, la variable de contador slo


est disponible en el procedim iento FlySub. En otras pa la bras, es una va riable
de nivel de procedimiento.

Variables a nivel de procedimiento.


Una variable local o de procedimiento se decla ra dentro de un procedim iento
individual o funcin y no es visible fuera de esa su brutina.
Las va ria bles Ioca les slo se pueden utiliza r en el procedim iento en el que
se decla ran.
Programa Nacional de Informtica

Cuando

el

procedim iento

la

funcin

termina

la

va riable

se

elimina

automticamente y la memoria es liberada.

Puede utilizar la instruccin Dim, Static o Private dentro de una su brutina o


funcin.
La forma ms com n de declara r una variable local es utilizar la instruccin
Dim entre las instrucciones Sub y End Sub.

Una de las grandes ventajas de las variables locales es que puede utilizar el
mismo nombre en diferentes subrutinas sin ningn conflicto.
Public Su b procedure_na me ( )
Dim slocalvariable As Stri ng

End Su b

Una de las ventajas de las variables locales es que se puede utilizar el mismo
nom bre en diferentes su brutinas sin ningn conflicto.

Variables a nivel de mdulo.


Nivel de mdulo (Privado).
Una variable de nivel de mdulo se declara en la seccin de declaraciones de un
mdulo de cdigo (est ndar, de clase o UserForm).
Las va ria bles de nivel de mdu lo pueden tener dos valores ya sea pblica o

privada .
Una va ria ble de nivel de mdulo privado es visible slo en el mdulo que se
decla ra.

Si se decla ra una variable de nivel de mdulo con la instruccin Dim esto es


equivalente a utilizar la instruccin privada.

Private sbtoduleLevel As String


Dim sModuleLevel As String

Public Sub Procedure_name ()


End Sub

Programa Nacional de Informtica

Pgina 76

Nivel de mdulo (Pblico).


Una variable de nivel de mdulo pblica es visible para todos los mdu los del

proyecto.
stos ta mbin se conocen como nivel de proyecto o varia bles globales.

Debe insertar estas declaraciones en la parte superior de los mdulos, antes de


cualquier procedimiento o funciones.
Las variables del alcance del proyecto tambin deben ser decla radas en un
mdulo de cdigo estn da r y no en un mdulo de form u Iario de usua rio o clase.
Pblico sProjectLevel As String

Public Sub procedure_name ()

End Sub

Variable de nivel de mdulo pblica (o g lobal) debe estar precedido


de una "g".

Variables de nivel de mdulo privado deben haber sido precedido

de un "m".

Variables a nivel de aplicacin.


En este nivel, las va ria bles declaradas se les conocen como va ria bles globales.

Una va ria ble globa l es conocida en toda la aplicacin o proyecto.


Una va ria ble globa l es una varia ble declarada fuera del Sub Name y los End Sub

Tal varia ble norma l mente se declara en la seccin su perior de la a plicacin.


Vea este ejem plo:
Option Explicit
Dim Apellido As Stri ng
Sub Ejercicio( )
End Sub

Despus de decla ra r una variable g lobal, se puede acceder a l en las otras


reas de la a plicacin.

Vea este ejemplo:


Option Explicit
Dim Apellido As String
Ejercicio Sub ()

Dim nombre As String


nombre = " t ili"
Apellido = "Angeles"
End Sub

Au nque declara una va riable global dentro del a rchivo donde se utiliz, ta mbin
puede decla rar una va ria ble globa l en un mdulo sepa rado para utilizarlo en
otro mdulo.

El nivel de acceso de una variable global.


Cuando se utiliza una variable global, el lenguaje Visual Basic le permite
controlar su nivel de acceso. El nivel de acceso de una variable es un proceso de
control de cuanto acceso a una seccin de cdigo tiene la va ria ble.

Variables privadas.
Una variable se denomina como privada si slo se puede acceder a ella desde el
mismo archivo (el mismo mdulo) donde se utiliza.

Para declarar una variable, en Iugar de Dim, se utiliza la palabra clave Private.
Se tiene el sig uiente ejemplo:
Option Explicit

Private Apellido As String


Ejercicio Sub ()

Dim Nombre As String


Nombre "Rosa"

Apellido = "Esca tante"


End Sub

Recuerde que una va riable privada puede ser accedida por cualquier cd igo en el

mismo md ulo.

Variables pblicas.
Una variable se denomina pblica si se puede acceder a ella ya sea dentro del
mismo mdulo donde se declara o fuera de su mdulo.

Para declarar una variable pblica en lugar de Dim, se utiliza la palabra clave
Public.
Se tiene el sig uiente ejemplo:
Option Explicit

Private Apellido As String


Public Nom breCompleto As String
Ejercicio Su b ()
Dim Nombre As String
Nombre - " Rosa "

Apellido = " Escalante"


NombreCompleto = Nom bre & " " & Apellido
End Sub

Como recordatorio, una va ria ble pblica est disponible pa ra el cdigo dentro y

fuera de su mdulo . Esto significa que usted puede crear un mdulo, declarar
una variable pblica en el mismo, y tener acceso a esa va riable en otro mdulo
donde sea necesario.

Una variable privada est disponible dentro de su mdulo, pero no fuera de su


mdulo.
Si se decla ra una variable privada en un md u lo y trata de acceder a l en otro

mdulo, se recibir un error.


En el sigu iente cdigo, se tienen dos mdulos:
a. En el mdulo 1 se declara la va riable NombreCompleto como privada.
b. En el mdulo 2 se trata de asig narle un valor pero en el mdulo 2

NombreCompleto no es conocida, por lo tanto se genera un error.

Mdulo 1:
Option Explicit

Private Nom breCompleto As String

Mdulo 2:
Option Explicit

Private Apellido As String


Private Nombre As String
Ejercicio Sub ()
Nombre - "Rosa"

Apellido = "Escalante"
Nom breCompleto = nombre & "" & Apellido
ActiveCell. Form ula R1CI = NombreCompleto
End Sub

Esto prod ucira :

Fig. 97 Verificar el mbito de una variable.


Si en el mdu lo 1 se cambia Nom breCompleto

de Privada a g lobal se muestra el

nom bre completo en la celda actual (Fig 98).

Programa Nacional de Informtica

Pgina 80

Fig . 98 Cam bio de tipo de variable.

Usar la instruccin Option Explicit.


Se puede declarar implcitamente una variable en Visual Basic mediante su
uso en una sentencia de asignacin. Todas las variables que estn
implcitamente declaradas son de tipo Variant.
Las variables de tipo Variant requieren ms recursos de memoria que la
mayora de variables. Su aplicacin ser ms eficiente si se declaran las
variables expl citamente y con un tipo de datos especfico.
Declarar explcitamente todas las variables reduce la incidencia de errores de
conflicto de nom bres y los errores de ortografa.

Si no desea que Visual Basic realice declaraciones implcitas, puede colocar la


Intruccin Option Explicit en un mdu lo antes de cualquier procedim iento. Esta
decla racin requ iere declara r explcitamente todas las va ria bles dentro del
mdulo.
Si un mdulo incluye Option Explicit, se produce un error en tiempo de

compilacin cuando Visual Basic encuentra un nombre de variable que no ha


sido previamente declarado, o que se ha escrito incorrecta mente.
Puede config ura r una opcin en el entorno de prog ra macin de Visual Basic
para incluir automticamente la declaracin de Option Explicit en todos los

mdulos nuevos.
Es recomendable que se declare j usto debajo de la seccin declaraciones.

Constantes.
Una constante es un valor que no cam bia es decir tiene un valor propio e
independiente. Puede ser un nmero, un texto, una fecha o un valor Igico.
Ejemplos:

Numricas
Textos
Fecha

123, 145.67
: Lima", f'1ili",
Pasiona 11/07/ 1958

Los Procedimientos.
Un procedimiento se define como un gru po de sentencias que se ejecutan como
una unidad.
Los procedimientos se escriben y se a Imacena en un mdulo.
Tipos:

VBA tiene dos tipos de procedimientos:


a.

Proced imientos Su b y

b.

Proced imientos Function .

a. Procedimiento Su b.
Este es el procedimiento ms com n en una macro grabada y editada
normal mente.
Se ejecuta el cdigo Inea por Inea, pa ra llevar a cabo una serie de acciones

y/o clculos.
El formato pa ra este tipo de procedim iento es:

Sub Nom breDelProcedim ento ([a rgumentos] )


1 Inea de cdigo que se ejecuta
|nea de cdigo que se ejecuta

'Comentarios

'Comentarios

End Sub

Los "argumentos" son elementos

opciona les que pueden ser explcitos

o implcitos.
Esto permite

pasar los va lores y/o referencias al proced i miento de llamada y

se maneja como una va ria ble.


Si se crea un procedimiento concebido como una macro en Excel, los usuarios
no deben especificar ningn a rgumento.
Llamada a un procedi miento Call.
Lla ma r a otro procedim iento puede inclui r la declaracin de la Ilamada segu ida

del nombre del procedimiento con a rgumentos opcion a les. Si los arg
umentos son usados, los usua rios deben usar pa rntesis pa ra la lista de a
rgumentos.

Programa Nacional de Informtica

Pgina 82

Ejemplo de la sentencia CALL:

Procedim iento pa ra ser llamada con un solo


'a rgumento expl cita mente "declarado como una cadena

Sub MiMensaje (strText As String )


Msg Box strText
End Sub

a. Correcto

" Pruebe el procedim iento de lla mada

Sub TestMensaje ( )
Call MiMensaje (" i Funcion!")
End Su b

b. Incorrecto - Debe utilizar el parntesis

" Pruebe el procedim iento de Ilamada

Sub TestMensaje ( )
Call MiMensaje "c Funciona?"
End Su b
c. Corrector (alternat:iva) - Sin palabra clave Call utilizado y por
lo tanto no requiere parntesis.

Pruebe el procedim iento de Ilamada

Sub TestMensaje ( )
MiMensaje "Funcion ! "

End Sub

Un proced imiento puede ser terminado, antes de colocar los End

Sub' declaracin utilizando el Exit Sub decla racin.

Este proced imiento se term i na r despus de l a pa rte A


y pa rte B, nunca se ejecuta r

Sub Termina rAhora ( )


La pa rte A del Cdigo aqu .
Exit Sub

Cdigo de la parte B aqu ..


End Sub

Procedimiento Function.
La principa l diferencia entre un procedimiento Sub y un procedimiento Function
es que un procedimiento Function ejecuta el procedimiento y devuelve un valor
mientras que un procedimiento Sub ejecuta el procedim iento sin devolver un

valor.
Una analoga simple de un procedimiento Function en comparacin con la de un
procedimiento

Sub

puede

ilustrarse

utilizando

dos

ejemplos

con

las

caractersticas de Excel :

Archivo,

Guardar

es

una

accin

no

devuelve

una

respuesta

devuelve

una

respuesta

Procedimiento Sub.

La

funcin

Suma

procedimiento

calcula

el

rango(s)

Function.

El formato para este ti po de proced imiento es:

Function NombreDeProcedimiento ([argu mentos] ) [As tipo]

El cdigo se ejecuta aqu


NombreDeProcedimiento - Respuesta del cdigo ejecutado
+-+ +nction

Los Argumentos son opcionales los cuales pueden ser explcitos o implcitos.
Esto permite que los valores y / o referencias al pasar al procedimiento de
lla mada se manejen como una va riable.
El tipo de dato en el atributo As Tipo se utiliza pa ra hacer la funcin explcita. Sin
un tipo declarado, la funcin es implcita ( As Va riant ).

La ltima l nea antes del End Function utiliza el nom bre del procedim iento para

devolver la expresin (o respuesta ) de la funcin.


Un procedimiento puede ser terminado antes de la declaracin End Function
mediante el uso de Function Exit.
Este acta y responde de la misma manera como se aplica en los Procedimientos
Su b.
Un ejemplo de un procedimiento Function:
' Esta fu ncin ca lcu l a la distancia de milias a kilmetros .
Funcin Convert rAKm (dbIMiIlas As Double ) As Double

ConvertTirAKm = 1. 6 * dblM llas


End Function

Un procedim iento Sub que utiliza la fu ncin anterior:


Usando l a fu ncin anterior que debe utilizar pa rntesis.
Sub Ca rDistancia

Msg Box ConvertirAKm (25)


End Sub

En Excel, esta funcin tam bin se puede utilizar (conocida como una funcin
definida por el usuario - UDF) (Fig 99).
+

Millas

/.

= onvertirA k m( 3)

160|

K ilomteros |=ConvertirAKm(

Fig. 99 Ejemplo de UDF y resu Itados.

Estructuras de programacin.
Pa ra inicia r un entendim iento del entorno de programacin es importante que se
empiece por procesos secuenciales, es decir que la secuencia de ejecucin de los
prog ramas sea de l nea por lnea desde la primera hasta la ltima.

Pg|na
85

Programa Nacional de Informtica

De esta forma ser sencillo detecta r o realiza r un segu imiento de posibles errores
de si ntaxis o de lgica de programacin .

Cuando se logre el conocimiento y experiencia se va estudiando y a prendiendo las


estructuras Condicionales, Repetitivas y subprogramas o su brutinas.

Empecemos con la estructura secuencial.


Secuencial.

La forma ms sencilla consiste en indicar una secuencia de acciones a ser


ejecutadas de forma consecutiva.
La composicin secuencial no es
conmutativa. a= 20
c =a +b
print c

Existe una notacin a lternativa, sepa rando las sentencias mediante el carcter;

a= 20; b=3O
c = a + b; print c

Ingreso de datos: Emplear las funciones f5sg Box, 1nputBox.


a) Cuadro de mensaje (Msg Box).
Uncuad rodemensaje(Msg Bo )

Fin de Actva''zacion

muestrauncuad rodealertade

los botones, iconos y configuracin de


otros a rgumentos. (FigIOO)

Hay dos tipos de cuadros de mensaje:


1. Declaracin Msg Box. Se muestra el cuad ro de mensaje sin
respuesta. Msg Box TextoMensaje, [botones], [Ttulo], [Ayuda],
[contexto]
2. bt sg Box Funcin. Se muestra el cuad ro de mensaje y devuelve un va

for. Va ria ble =


[botones] ,

Msg Box

TextoMensaje,

[Ttulo],

[Ayuda], [contexto] )

Ejemplo 1- Declaracin: Msg Box

Sub CuadroMensajeDemo ()
Los pa rntesis no son necesa rios para una declaracin

Msg Box " La tarea se ha


completado" End Sub

Ejemplo 2 - Funcin FlsgBox (Fig 102):

Sub CuadroMensajeRpta ()
Dim respuesta

respuesta = MsgBox ("Entrada adicional", vbYesNo + vbQuestion,

"Entrada de datos")
End Sub

Entrada de datos

Fig. 102 cuadro de Mensaje con respuesta


En el ejemplo anterior, el vbYesNo es el comando utilizado para crear el
botones S y No, y el + vbQuestion es el comando para crea r la imagen del
signo de i nterrogacin .

Si el usuario hace clic en S, el cuadro de mensaje devolver la constante


vbYes.

Si el usua rio hace clic en No, el cuad ro de mensaje devuelve la constante

vbNo.

Pgina 87

Programa Nacional de Informtica

Ejemplo 3 - Funcin MsgBox (varias lneas):

Sub Cuad roMensajeMu Itilinea ( )


Dim i ntRespuesta As Integer

intRespuesta = Msg Box("Usted ha decidido guardar este archivo. "


& vbNewLine & " Desea contin uar?" & vbNewLine &
" Haga clic en 'S'para guardar o ' No pa ra salir y no guarda r. ", _
vbQuestion + vbYesNoCancel , "Gua rda r Arch ivo")
End Sub

El ejemplo anterior mostrar va rias l neas en el cuadro de mensaje utilizando


la constante vbNewLine. (Fig 103).
Guardar Arch vo

Usted ha decidido guardar eje archivo. Desa continuar


Haga clic en Si para guardar o No para salir y no guardar.

Fig. 103 Cuadro de mensaje con 3 botones y cambio de lnea.

Constantes para MsgBox.


Botones e iconos se combinan para mostrar Botones que tienen un valor nico
que ayuda a los usuarios para establecer combinaciones de botones:
Constante

Valor

t'uestra Botones

vbAbortRetrytgnore

0
1
2

Solo Aceptar.
Aceptar y Cancelar.
Abortar, Reintentar y Omitir.

vbYesNoCancel
vbYesNo

3
4

S, No y Cancelar.
S y No.

vbRetryCancel
vbCritical

5
16

Reintentar y Cancelar.
Visualizar Mensaje crtico icono.

vbOKOnly

vbOKCancel

Constante
vbQuestion
vbExclamation

Exclamacin.

vblnformaUon

Informacin.

Constante
vbDefaultButton 1

Pregu nta.

Valor

Botn Predeterminado
El primer botn es el predeterminado.

vbDefaultButton2
vbDefaultButton 3

0
256
512

vbDefaultButton4

768

El eua rto botn.

El seg undo botn .


El tercer botn.

Moda l de aplicacin, el usuario debe


responder al cuadro de mensajes antes
de continuar trabajando en la aplicacin
actual.

vbApplication Modal

Constante

Casos especiales

vbSystemModal

4096

Moda l del sistema, todas las a plicaciones se


suspenden hasta que el usuario responda
al cuadro de mensaje.

vbMsg BoxHel pButton

16384

Ag rega el botn Ayuda a l cuadro de


mensaje.

VbMsgBoxSetForeground

65536

Especifica la ventana del cuadro de


mensaje como ventana de primer plano.

vbMsgBoxRight

52428
8

Las sig uientes constantes se a plican


a

El texto est alineado a la derecha.

la Funcin Msg Box cuando el usuario hace

clic en un botn que devuelve un valor nico.

Constante

Valor

Descripcin

vbOK

Aceptar

vbCancel

Cancela r

vbAbort
vbRetry

Abortar

vblgnore
vbYes

Pasar por alto

vbNo

No

Reintentar

Mientras el cuad ro de mensaje bt sgBox se muestra, el procedim iento esperando


a que el usua rio haga clic en un botn dependiendo si se trata de una decla
racin o de una funcin.

Tenga en cuenta la diferencia entre los dos tipos de cuadros de mensaje con
respecto a cuando se usan parntesis. Tenga en cuenta de cualqu ier funcin debe
ser colocada en el Iado derecho del signo igual, porque devuelve un va for.

InputBox (Cuadro de entrada).


Una caja de entrada de Excel (InputBox) es una fu ncin en la cual se puede
especifica r qu el resultado sea d e un determinado tipo. Si el argu mento del
tipo se omite, el cuad ro de entrada devuelve un texto (cadenas) de va for.

La estructura (sintaxis):
Va ria ble - Application.InputBox (TextoMensaje, [Ttulo] , [Predeterminado],
[XPos], [YPos], [HelpFile], [Hel pContextlD], [Tipo])

Argumento

Descripcin

TextoM ensaje

El texto en el cuadro de entrada.

Ttu lo

Ttulo del texto de la barra (opcional).

Predeterminado

Valor por defecto de la caja de entrada (opcional).


Posicin de la caja de entrada. Si deja en blanco, el cuadro
de entrada aparecer en el centro de la pantalla (opcional).
Ayuda asociado adjunto documento (opcional).
Identificador nico para el documento de ayuda - marcador

t
pF
pCD
Tp

(opcional) .

Define el ti po de datos a devolver (opciona l) .

Los sigu ientes tipos se pueden utilizar:

Significado

Una frmula.
Un nmero.

Texto (una cadena) .

Un va for lgico (verdadero o fa l so).

8
16
64

Una referencia de celda, como un objeto Range.


Un va for de error, como # N / A.
Una matriz de valores.

Si desea que el cuadro de entrada acepte texto y nmeros, configure el Tipo de


argu mento a E + 2.
Pa ra Ilamar a la funcin InputBox de Excel y no a la funcin InputBox de
VBA, debe em plear la pa labra clave Application desde la Biblioteca del Excel
donde pertenece.
Application.InputBox (...
Pa ra los siguientes ejem pios, se declarar n las variables como Variant.
Ejemplo 1- Cuadro de texto de entrada:

Sub entrada1 ()
Dim x

x =AppIication. InputBox ("Por favor ingrese un n mero" , 1)


ActiveCeIl. Val ue - x

End Sub
ro cir
Por favor Ingrese un nmero

Ejemplo 2 - Caja Frmula de entrada: (Fig. EO4 y 105).

Sub entrada2 ()
Dim Y

Y-Application.nputBox ("Por favor, escriba una frmula" , 0)


ActiveCeII. Val ue
End Sub

Fig. 104 Cuad ro de


entrada.

Pgina 91

Programa Nacional de Informtica

Fig . 105

Resu ltado
generado.

Ejemplo 3 - Cuadro de texto de entrada (Fig 106):

Sub entrada3 ()
Dim strMiNombre As String
strMiNombre = InputBox (" Escriba su nombre", " Entrada de datos")
ActiveCeIl. Val ue = "Mi nom bre es & strMiNom bre
End Sub

Cancelar

Fig. 106 Cuad ro de entrada.


Si hace clic en el botn Cancela r, se devolver una cadena vaca "" por lo que el
resu Itado ser "M i nom bre es". (Fig 107).

B
1
2 Mi nombre es

Fig. 107 Sin resultados.


Ejemplo 4 - Uso de argumentos con nombre (Fig 108):

Esto le permite poner los argu mentos en eua Iquier orden.

Sub entrada4 ()
Dim strResult As String
strResult = InputBox (Prompt : = " Por favor, ingrese el monto",

Title : = " Entrada de datos")


ActiveCell .VaIue = strResult
End Sub

Por favor, ingrese el monto

Fig . 108 Configurar argu mentos


Se debe tener en cuenta que si se hace clic en el botn Cancelar se devuelve un
valor vaco y lo mismo sucede si no ingresa ningn monto y hace clic en el botn
Aceptar.

En la mayora de los casos, el siguiente cdigo debe aadirse inmediatamente


despus de la lla mada de la fu ncin InputBox.
If [Variable] = Empty then Exit Su b

El cdigo anterior dar por terminado el procedimiento si la va riable cadena est


vaca.
As f que el ejemplo anterior el se verla as (Fig 109) :

Sub entrada4 ()
Dim strResult As String
strResult= InputBox (Prompt: ="Por favor, ingrese el monto", _

Title: = " Entrada de datos")


if strResult = Empty then Exit Sub Aqu term i na si est vaco
ActiveCeII.Val ue - strResu lt
End Sub

Pgina 93

Programa Nacional de Informtica

Por favor ingrese el monto


Cancelar

Fig. 109 Entrada de datos

Ejercicios prcticos con empleo de estructuras secuenciales.


1. Dentro del formato del Inputbox.
InputBox (Prom pt [, ttulo] [, dela ult], [x], [y] [, HelpFile] [, HelpContextl d]
[,tipo])

Donde tipo especifica el tipo de datos de retorno:


Tipo

Dato de Retorno

Frmula.

Nmero.

2
4
8
16

Texto.

64

Matriz de valores.

Valor Lgico (True or False).


Referencia de celda (Objeto Rango).
Valor de Error.

En u n n uevo libro, inserte u n nuevo mdu lo y escriba


proced imiento:

Sub Selecciona rRangolnputBox()

Dim RangoSeleccionado As Range


Set RangoSeleccionado = Application. InputBox(Prompt : =
_ " Por favor seleccione un Rango",
Title : ="InputBox Method", Type :- 8)

IfRangoSe|eccionado Is Noth |ng Then


' Range is blank

Else
RangoSeIecc onado.Select
End Of
End Sub

el sigu iente

AI ejecutar la macro se muestral el siguiente cuadro de entrada y resultado:


F
D
E
F

Aceptar

2. En este ejercicio, se ingresa un valor en la celda activa e indica que la


macro se ha terminado de ejecutar.

Pg|
na95

Programa Nacional de Informtica

Ca

Estructuras de
Programacin Condicional.
O Instruccin If...Then...Else simple.
4 Instrucciones Condiciona les anidadas.

O Instruccin Select....Case.
9 Desarrollo de ejercicios prcticos.

Pgina 97

Programa Nacional de Informtica

Estructuras de Programacin condicional.


Instruccin If...Then...Else simple.
La instruccin If...Then... Else nos permite eva l uar una expresin y nos
devuelve un resu Itado lgico que puede ser Verdadero o Falso.

Tiene 2 formas de emplea rse:


1. If (expresin
lgica) then
instrucciones
End If

2. If (expresin lgica) then

instrucciones Verdad
Else

instrucciones Falso

End If

En la forma 1, La instruccin If... ejecuta una nica instruccin o un


bloque de

declaracin.
Una sola lnea If... Then ... Else.
Puede utiliza r la sintaxis de una lnea pa ra las construcciones breves y sencillas.
Pa ra distingui r entre una si ntaxis de varias lneas y la sintaxis de una sola l nea :
Si en la primera lnea If, no sigue nada despus de la palabra clave Then en la

misma l nea, es de varias lneas, de lo contra rio es de una sola lnea.

Sintaxis (de una sola lnea).


Si condicin Entonces instrucciones Else eIse_statements
En el sig uiente ejemplo, se establece el estado "Adu Ito" en la varia ble a si
la afi rmacin es cierta :

f Edad> = 18 Then Estado = "Adu Ito"

En la forma 2 se forma una estructura, se tiene que distribuir la instruccin en

varias lneas.

En el sig uiente ejemplo, se establece el estado "Ad ulto" en la varia ble Estado si la

afirmacin es cierta :
Tambin puede utilizar va rias lneas de bloques en el caso de la sig uiente
declaracin :

f edad = 18 then

Estado - "Adulto"
Vota r = "S"
End If
Tenga en cuenta que en el caso de bloques de va rias lneas, End f se necesita,
pero en el caso de una sola l nea no.
El If ... Then ... en la seg unda forma se ut l iza para defin i r dos bloques de

condiciones :
a) La primera en el caso de que el resultado de evalua r la expresin sea
Verdadero.
b) En el caso de qu e el resultado de eva l uar la expresin sea Fa Iso.
Ejemplo :
If edad = 22 then
Toma = "S"
Else
Toma = "No"
End
If

Una vez ms, tenga en cuenta que la instruccin End If se necesita en este caso, ya que
hay ms de un bloque de instrucciones.

Actividad 12: Evaluacin de instruccin if simple.

En este caso se va a mostra r el uso de la instruccin If que eval ua r en un procedi miento

el valor que contiene una celda.


I. En un n uevo libro, en la hoja I, escriba el siguiente contenido.
2. Coloque un botn de comando en la hoja de tra bajo. (Fig 110).

I Puntaje

Estado
Eva l ua

Fig. 110 Aplicar la instruccin IF.


3. Ingrese a I editor del VBA.
4. En un nuevo mdulo aada las siguientes lneas de cdigo :
Sub eval uar()
Dim puntaje As Integer, estado As String
puntaje = Range("A2") .Va l ue
If puntaje = 60 Then

estado = "Aprobado"
Else
estado - " Desaprobado"
End f

Range("B2").Val ue = estado
End Sub
El proced imiento realiza

lo siguiente :

1. La primera lnea de cdigo declara dos variables. Una variable de tipo Integer y una
variable de tipo String .

2. A contin uacin, se inicializa la va riable de resultado con el valor de la celda A2.

3. Si la puntuacin es mayor o igual a 60, asignamos el texto 'pasa' a la variable estado.


4. Por ltimo, se coloca el valor de la variable de grado en la celda B1.
ELSE
Puede utilizar una i nstruccin Else para asig nar el texto Desaprobado' a la
variable de

estado si el puntaje es menor de 60.


Cierre el Editor de Visual Basic, escriba un va for en la celda A1, y
haga clic en botn de comando Evalua. (Fig 11 I)

Programa Nacional de Informtica

Pgina 100

A
t
2

Puntaje

B
Estado
85 Aprobado

Eva lua

t Punta e
Estado
2
43 Desaprobado

Fig .

Evalua

11IAplicacin de la i nstruccin IF.

Actividad 13: Evaluacin de instruccin if simple.

Uso de la instruccin If, se tiene un dato en la celda AI y ser eval uado en un

procedimiento.
1. En un nuevo libro, en la hoja I, escriba el siguiente contenido y
2. Coloque un botn de comando en la hoja de tra bajo. (Fig 112).
A

1Precio Actual Nuevo Precio


2
120

Nivela

Fig. 112 Aplicacin de la instruccin IF simple.


3. Ingrese a I editor del VBA.
4. En un nuevo mdulo a ada las sig uientes lneas de cdigo (Fig 113) :

Fig. 113 Cdigo de a plicacin de la instruccin IF

La instruccin If le indica a Excel que si el valor de la celda A2 es mayor que 100


(True), cambie el valor de B2 sumando el valor de la celda A2, ms otros 50, else

(Falso) cam bia el valor de B2 aIOO. Este sera el caso de la Funcin

"Si" cuando es

utilizada en su forma ms sim ple.


Una vez que Excel se encuentra con el "If" com proba r el valor de A2, si el va for es
mayor deIOO, entra r en el argumento verdadero:
Range ("B2"). Value= SO + Range("A2"). Value
A partir de ah sald r de la opcin "Si" o en otras pa la bras, se om itir el argu mento fa Iso:

Range ("B2"). Valor = 1OO

Suponiendo que desea que Excel compruebe si el valor de la celda A2 est dentro
del intervalo de va lores 100 a BOO, es necesario extender la evaluacin de la condicin,
se puede hacer esto:
Los operadores "AND"y "OR" se utilizan en conj uncin con la instruccin "If".
Operador "AND".
Este operador se usa para realizar una conjuncin de dos

condiciones.

Cada vez que utilice el operador "AND" slo se obtend r un valor verdadero
si AMBAS condiciones son verdaderas (True y True).

Utilice este operador como a continuacin se indica :


I.

En el libro actual, en la hoja 1, escriba el sig uiente contenido.


2.

Coloque un botn de comando en la hoja de tra bajo (Fig 114)

6
7 PuntajeResultado 8 12

Evalua

Fig. 114 Apl icar la i nstruccin IF.

3. Ingrese a l editor del VBA.


4. En un nuevo mdulo aada las siguientes lneas de cdigo (Fig 115) .

Programa Nacional de Informtica

Pgina 1 0 2

Libro1 - Mdulot (Cdigo)

Fig. 115 Cd igo con operador relacional AND.

Esto sera decirle a Excel que si el valor de la celda A8 est entre IOO y BOO (True),
entonces debe hacer una asig nacin :
Range ("BB"). Value = Aceptado
Si el valor de la celda A8 no est entreIOO y BOO debe hacer esto :
Range ("BB"). Value = Rechazado"
Una vez ms, podra aad r una cantidad ili mitada de operadores AND" de todas las

condiciones corrientes diferentes.


5. Guarde el a rchivo como : si 02.xIsm.

Instrucciones Condicionales anidadas.


Se tiene que una instruccin if...then ...else... end if es evaluada dentro de otra
instruccin if...then ...else... end if.
Es posible realiza r ms de una evaluacin interior.

Existen varios formatos:


E. Forma 1.
If condicion 1 Then
Instrucciones 1
Else
If condicion 2 Then
Instrucciones2
Else
If condicion3 Then
Instrucciones3
Else
Instruccin4

End If
End If
End If
2. Forma 2

If condicion0 Then
Instrucciones 1
Elself elseif condicion 1 Then
elseif instrucciones_1
Elself eIseif_condicin n Then
elseif instrucciones_n
Else
else instrucciones
End tf
Ejemplo E: Estructura If Else.

I. En un n uevo libro, en la hoja I, escriba el siguiente contenido y


2. Coloque un botn de comando en la hoja de tra bajo. (Fig 116)
A
2Marca

Evaluacin

Fig. 116 Aplicar la instruccin IF ELSE.


3. Ingrese a l ed itor del VBA.

4. En un nuevo mdulo aada las sig uientes l neas de cdigo.

Evalua

Sub Sianidado1()
Este proced imiento devuelve el mensaje "Bueno", si las marcas son iguales a 60.

Dim Ma rcas As Integer

Marcas - Range("A3") .VaIue


If Marcas = 80 Then
Range(" B3") .VaIue = "Excelente"

Msg Box "Excelente"


Else

If Ma rcas > - 60 And Marcas < 80 Then


Range("B3"). Va l ue = "Bueno"
Msg Box "Bueno"

Else
If Ma rcas > - 40 And Marcas < 60 Then
Range(B3"). Va l ue = " Promedio"
Msg Box "Promedio"

Else

Range("B3"). Va l ue - " Malo"

Msg Box "Malo"


End
If End If
End Of
End Sub

Los resultados (Fig 117) :


D

Evaluacin 12
Pobre

Aceptar

Fig. 1J.7 Resu Itados del cdigo con IF.

Ahora, se proba r el mismo ejercicio con el formato if... elseif.


Ejemplo 2: Estructura If Elseif.

I. En el libro actual, en la hoja 1, escriba el sig uiente contenido.


2. Coloque un botn de comando en la hoja de tra bajo (Fig 118).
A

6 Marca

Eva luacin

Eva lua I

60
Fig

118 Aplica r instruccin IF ELSEIF

3. Ingrese a I ed itor del VBA.

4. En el mdulo 1 aada las sig uientes lneas de cdigo:


Sub Sianidado2()
Este proced imiento devuelve el mensaje "Bueno", si las marcas son iguales a 60.

Dim Ma rcas As Integer


Marcas = Range("A7")
.VaIue If Marcas :> - 80
Then

Range("B7"). Val ue - " Excelente"


MsgBox " Excelente"
Elseif Ma rcas = 60 And Marcas < 80 Then

Range(" B7").Val ue - "Bueno"


MsgBox " Bueno"
Elsef Ma rcas > = 40 And Marcas 60 Then
Range(" B7") .Va l ue = " Promedio"
Msg Box Promedio"
Else

Range(" B7") .Va l ue = "


Malo" Msg Box " Malo"

End If
End Sub

Resultados (Fig 119).

Fig. 119 Resu Itados de IF ELSEIF


Ejemplo 3 (Flultiple Of ... Then).

Mltiples UF ... THEN (en este ejemplo 3) se pueden utilizar a lternativa mente para el
ejemplo anterior (Ejemplo 2) Estructura Elseif, pero no es un mtodo muy eficiente.

Mltiples IF ... THEN en comparacin con la estructura Elseif.


En mltiples If ... Then, VBA se ejecuta a travs de cada uno de los bloques If ... Then
incluso despus de encontra rse con una condicin verdadera (y la ejecucin de
las instrucciones estados asociadas), mientras que en una estructura Elseif todas

las condiciones posteriores se omiten despus de encontrarse con una verdadera


condicin. En este sentido, la estructura Elseif es ms rpida. Por lo tanto, Mltiples
f ... Then no podra ser un mtodo muy eficaz si el mismo se puede hacer con la
estructura Elseif.
Sub demo 1()
Este procedimiento d evuelve el mensaje " Bueno", si ma rcas - 60.
Dim Marcas As Sing le
Marcas - 60
rca

= 80 Then

Msg Box " Excelente"

If Ma rcas > - 60 And Marcas < 80


Then Msg Box "Bueno"
End If
If Marcas = 40 And Marcas < 60 Then
Msg Box "Promedio"
End If

End Sub

Ejemplo 4 (mltiples variables de la prueba):

Para probar mltiples variables con las declaraciones IF . . . THEN, a continuacin se


tienen mtodos a lternativos:
Opcin :t (Estructura Elseif).

Sub IfThenl()
Este p rocedimiento devuelve el mensaje "Apto" o " No a pto" en matemticas o
en ciencia"

Dim matemticas, ciencia As Integer


matemticas - 50
ciencia = 30
If matemticas = 40 And ciencia = 40 Then

MsgBox "Apto tanto en matemticas como en ciencia"


Elseif matemticas > - 40 And ciencia < 40 Then

MsgBox "Apto en matemticas y No apto en


ciencia" Elseif matemticas < 40 And ciencia =
40 Then
MsgBox "No apto en matemticas y en Apto ciencias"
Else

Msg Box " No a pto tanto en matemticas ni en ciencia"

End
If

Opcin 2 (If ... Then ... Else Anidados).

Sub IfThen2()
'Este procedimiento muestra el mensaje "Apto en matemticas y No Apto en
ciencias"
Dim matemticas As Single, ciencias As Single
matemticas = 50
ciencias = 30
If matemticas = 40 Then

f ciencias = 40 Then
MsgBox "Apto en ambos matemticas y ciencias"
Else

Msg Box "Apto en matemticas y No Apto en ciencias"

End
If

Sub IfThen2()
Este procedimiento muestra el mensaje "Apto en matemticas y No Apto en
ciencias"

Dim matemticas As Single, ciencias As Single


matemticas = 50
ciencias - 30
If matemticas = 40 Then
If ciencias = 40 Then

MsgBox "Apto en a mbos matemticas y ciencias"


Else
MsgBox "Apto en matemticas y No Apto en ciencias"
End
If

Else

If ciencias = 40 Then
MsgBox " No Apto en matemticas y Apto en ciencias"
Else

End
If

MsgBox " No Apto en am bos, matemticas y ciencias"

End
If

End Su b

Opcin 3

(Multiple TI ... Then):

Esto puede no ser el mtodo ms eficiente, como se explica en la opcin 2 anterior.

Sub IfThen 3()


Este p rocedim iento retorna el mensaje "Apto en matemticas y No Apto en
ciencias"

Dim matemticas As Integer, ciencias As Integer

matemticas = 50
ciencias = 30
If matemticas > - 40 And ciencias > - 40 Then
Msg Box "Apto en a mbos matemticas y ciencias"
End If
If matemticas > - 40 And ciencias < 40 Then
Msg Box "Apto en matemticas y No Apto en ciencias"
End If
If matemticas < 40 And ciencias > = 40 Then
Msg Box " No Apto en matemticas y Apto en ciencias"
End If

If matemticas < 40 And ciencias < 40 Then


Msg Box " No Apto en am bos matemticas y ciencias"
End If

End Sub

Ejemplos del uso en una sola lnea de sintaxis de If ... Then ... Else:
a. Ejemplo O :
If marcas 80 Then MsgBox "Excelentes Marcas"
If marcas > 80 Then MsgBox "Excelentes Marcas" Else MsgBox Aceptables"

If marcas > 80 Then MsgBox "Excelentes Marcas", , "Graduando"


'El ttu lo Grad uando a l cuad ro de mensaje Msg Box "
If marcas 80 And vprom 80 Then MsgBox "Marcas y Promedios son Excelentes"

Else MsgBox "Aceptables"


'Usando un operador lgico y el condiciona I AND

If marcas > 80 Then If vprom > 8O Then MsgBox "Ambas Marcas y Prorned |os son
Excelentes"
Otro anida miento de la instruccin If., .Then

Programa Nacional de Informtica

Pgina t 10

b. Ejemplo O2: Va rias instrucciones en una lnea.

Sub

IfThenu

naLinea() Dim marca


As Single marca 85

If marca = 85 Then MsgBox " Excelente marca - 85 a 90" : tsg Box "Siga

As! " : MsgBox Format(85 / 90 * 100, "0. 00") & "% ma rea"
' Ejecutar va rias i nstrucciones despus de l a pa l abra clave Then . El
m uestra 3 mensajes : "Excelente MARCA - 85

90",

"Siga

As ! " y

Cd igo
" Ma rca

94,44%

End Su b

Resultados.

Aceptar

Aceptar

Fig. 120 Resultados de eval uacin cond iciona l .

Sub IfThenunalinea 2 ()
Ma rcas oscuras como promedio nico, como nico

ma rcas = 85
vprom = 75
IF marcas> 80 Then If vprom > 80 Then Msg Box " Las ma rcas y promedio
son exrel enten"

Flne

Meg Rnx "Ma rcas son excelentes, pero el promedio no

lo es" Else Msg Box " Marcas no son excelentes" Ani damiento IF . . . TH EN .
Cd igo devolver el mensaje : " Marcas son excelentes, pero el promed i o no lo
es"

End Sub

AI ejecutar, se debe obtener el


siguiente cuadro de mensaje (Fig 121):

j . . .

Aceptar

Fig. 121 Resultado del IF.

Sub IfThenunaLinea3 ()
Eva Iuacin en una sola l nea
Dim marcas As Single

Ma rcas = 65
If Marcas > 80 Then Msg Box "Las Ma rcas son Excelentes" Else Of Ma rcas :>
- 60 Then Msg Box " Las marcas son Buenas" Else If Marcas = 40 Then
MsgBox "Las ma rcas son Promedio" Else Msg Box "Las ma rcas son Pobres"
utilizan do l as pala bras cl ave else if (en una sola l nea de sintaxis), si mila r
a Elseif (en varas l neas de sintaxis). Procedimiento devolver el mensaje : "
Las ma rcas son buenas".

End Sub
AI ejecutar, se debe obtener el sigu iente cuad ro

M.ero.oft Excei

de mensaje:

Fig. 122 Resultado del t F.

A continuacin, alg unos otros ejem pios de la instruccin if con Elseif.

Sub IfThenelsif1 ()
Eva l uacin if con el sif
Dim LReg ion As String

LReg ion - Range("A2") .Va fue


if LReg ion = N" Then
LReg ion Name = " Norte"
Elseif LReg ion = "S" Then

LRegion Na me = "Sur"
Elseif LRegion - "E" Then
LReg ion Name = " Este"
ElseTf LRegion = "O" Then

LRegion Na me = "Occidente"
End If

Range("B2") .Va l ue - LReg ion Name


End Sub
AI

ejecutar,

se

debe

obtener

el

siguiente resultado (Fig 123) :

Regin Norte

Fig. 123 Resu Itados del IF.

El IF... Entonces ... Elseif se utiliza para probar las condiciones adicionales sin
necesidad de nuevo if.
Por ejemplo:

Sub IfThenelsif2 ()
Eva l uacin if con el sid
Dim edad As Integer

edad - Range("A5"). Va lue


if edad = 18 and edad < 22 Then
Msg Box "Se puede votar"
EIsef edad = 22 and edad < 62 Then
Msg Box "Se puede beber y vota
r"

Pgina 113

Programa Nacional de Informtica

Elseif edad > - 62 Then


MsgBox "Usted es eleg ible para aplicar el Seg uro Social "
else
MsgBox " No se puede beber ni vota r"
End
If

Tenga en cuenta que la ltima condicin en virtud de lo dems es, implcitamente una
eval uacin como: Edad < 18 aos.
Al ejecutar, se debe obtener el sig uiente cuad ro de mensaje :

35

Evalua
Microsoft Excel

Se puede beber y votar

Aceptar

Fig. 1 Cuadro de mensaje resultado de aplicar el IF.


Evaluacin de Sintaxis.

Evalu el cdigol y cdigo2, determine el error o errores.


' Este cd igo1 es correcto
If True Then NlsgBox "Es Verdad"
' Este cd i go2 no se ejecuta r Porqu
? If True Then bt sg Box "Something"

Else Msg Box "Nothing"

Este cdigo3 no se ejecuta r Z


Porqu? If True Then M9g Box " Es
Verdadero" Elseif tsgBox " Nothing"
Else err. Raise("Error Grave")

Instruccin Select....Case.
Ejecuta diferentes bloques de cdigo o declaraciones, dependiendo de la condicin
que se se est cu mpliendo. Se eva Ia una expresin y en funcin de su
resultado se ejecutan las instrucciones asociadas.
Es muy si milar a la de TI... Then ... Else declaraciones.

Sintaxis:
Select Case expresin
Case expression valor 1

instrucciones I
Case expression va for n

instrucciones n
Case Else
else_statements

End Select

Expresin puede ser una variable, un ca mpo o un rango.


Se debe evalua r como un valor lgico, va for texto, valor numrico, de tipo fecha
o cualquiera de los tipos de datos bsicos de Boolean, Byte, Integer, Long, Sing
le, Double, Decima l, Date, Object, String, Variant.
Es necesa rio especificar una expresin. Es el valor de esta expresin que se

evalua y compara (con expression_valor ) en cada case, y cuando se cumpla,


las declaraciones especificadas en la sentencia correspondiente se ejecutan.
expression_valor: [expresin va lor_1 ... expresin

va lue n], el

datos de expression_va lor debe coincidir o ser

convertible

tipo de
la

de

expresin.
En cada case, el valor de la expresin se com pa ra con el expression_valor,
y si se encuentra una coincidencia, las instrucciones especificadas se ejecutan.
Es necesario especificar a l menos una expression_valor.

Expression_valor se prueba en el orden en que se

mencionan .

Estos

(expression valor) son como una Iista de condiciones y cuando se cumple una
condicin, el bloque correspondiente del cdigo se ejecuta.

Instrucciones:

[ . . .instrucciones I

instrucciones n],

declaraciones

especificadas en un determinado case se ejecuta r si el valor de expresin


coincide con expression_value de ese case.

Else_statements: Estas declaraciones se ejecutan si no hay coincidencia en


ninguna de las expression_values, es de uso opcional.
End Select, termina el bloque de instrucciones Select ... Case.
Ejemplo 1:
Su b 5electCase1 ()

'Haciendo la edad equivalente a "joven" devolver el mensaje "Nte nos de 40


aos"
Dim edad As String
edad = Range("A2").Val ue

Select Case edad


Case "Anciano"
MsgBox "Sobre 60 a os"
Case " Meda"

Msg Box " Entre 40 a 59 aos"


Case "Joven"
MsgBox "Menos de 40 a os"
Case Else
MsgBox " No Apto"

End Select
End Sub

AI
debe

ejecutar,
obtener

siguiente

de

se
el

Persona Joven

B
Microsoft Excel

cuad ro

mensaje

Fig. 125
Resu ltado de

aplicar el Case.

(Fig

Menos de 40 anos

Uso de la palabra clave To para especificar el rango su perior e inferior de los

valores.
Use la pala bra clave

To

en expression_valor

para especifica r el rango superior e

inferior de los valores coincidentes, como se muestra a continuacin.


El valor a la izquierda de palabra clave To debe ser menor o igual que el va for a la
derecha de la palabra clave To.
Rango tam bin se puede especificar para cadenas de ca racteres.
Ejemplo:
Sub seleccionaCaseTo ()
Las ma rcas con val or " 69 devolver el mensaje" Promed io " ; ma rcas con
valor 10 1 d evolver el mensaje "Fuera d e Rango "

Dim marcas As Integer

marcas = InputBox("Escriba el valor logrado)


Select Case marcas
Case 70 To 100
Msg Box " Bueno"

Case 40 To 69
MsgBox "Promedio"
Case 0 To 39

MsgBox " No Apto"


Case Else
MsgBox "Fuera de Rango"

End Select
End Sub
AI ejecutar, si escribe 56 debe obtener el sigu iente cuadro de mensaje:

Escriba cl valor logrado


Promedio

Fig. 126 Cuadro de entrada pa ra eval ua r el Case.

Uso de la palabra clave Is (con un operador de comparacin) para comparar los

valores.
Para inclu i r un operador de comparacin (=, < > <,, < =, o =) en expresin_value,

utilice la palabra clave Is. La palabra clave Is se inserta automticamente antes del
operador de com pa racin, si no est especficamente incluida. Ver ejemplo.
Ejemplo:
Sub seleccionarCasels ()
'Se ingresa l a tem peratura y se muestra un cuad ro de mensaje de acuerdo a l
va for i ngresado

Dim tem p As Single


temp = InputBox("Ingrese la temperatura actu al)

Select Case temp


Case Is = 40
Msg Box "Extremo
Caliente" Case Is > - 25

MsgBox "Moderadamente Caliente"


Case 19 = 0
Msg Box "Tiempo Normal "

Case Is < 0
Msg Box " Muy Fro"
End Select

End Sub
AI ejecutar el proced imiento, si escri be 30 debe obtener el siguiente cuadro de mensaje
(Fig . 127) :

Ingrese la temperatura actual

Fig. 127 Cuadro de entrada y resultado en un cuadro de mensaje en Case.

El uso de una coma para sepa rar varias expresiones o intervalos en


cada clusula Case.

Expresiones mltiples o rangos pueden especificarse en cada clusula case, separando


cada expresin con una coma (que tiene el efecto de que el operador OR).
Expresiones

m Itiples o rangos tam bin se pueden especificar

pa ra cadenas de

caracteres.
Vea a lgunos ejem pios.

Sub selectCaseM ultiple_1 ()


'Se i ngresa un dato y se eval a seg n su ti po
Dim palabra As Variant

palabra - InputBox("Ingrese el dato a evaluar")


Select Case palabra
Case "a", "e", "i", "o", "u"

MsgBox Voca|es
Case 2, 4, 6, 8

Msg Box " Nmero Par"


Case :t, 3, 5, 7, 9, "Emil'y"
Msg Box " Nmero Impar Emify"
Case Else

Msg Box " Fuera de Rango"


End Select
End Sub

AI ejecutar, si escri be 3 debe obtener el siguiente cuad ro de mensaje (Fig 128) :

Numero Impar Emily

Fig. 128 Entrada y resultado en el Case.

Ejemplo:

En este ejem plo, la comparacin de cadenas "manzanas" To "uvas" determina un va for


entre "manzanas" y "uvas" en orden

a lfabtico,

y util iza

el

texto predeterm inado

del

mtodo de comparacin bina ria (que disting ue entre maysculas y minsculas) porque
Option Com pare

no es especificado.

Sub seIectCaseMultiple_2 ()
' pl tanos d evolver el mensaje de " texto entre l as manzanas

y uvas,

mangos, o l os nmeros 98 o 99" ; na ranjas devolver el mensaje "Fuera de

a lcance"

Dim dato As Variant, resultado As String


dato - InputBox("Ingrese un n mero o nombre de fruta ")

Select Case dato


Case 1 To 10, 11 To 20 : resultado = "Nmero est entre 1 y 20"
Case manzanas" To "uvas", mangos", 98, 99 : resultado - "Texto
entre manzanas y uvas, o especficamente mangos, o nmeros 98 o

Case Else: resultado = "Fuera de Rango"


End Select
Msg Box resultado
End Sub
AI ejecutar, si escri be 18 debe obtener el sigu iente cuadro de mensaje (Fig 129) :

Programa Nacional de Informtica

Pgina 1 2 0

Fig . 1. 29 Entrada y Resultados en el Case.

Pgina 121

Programa Nacional de Informtica

Option Compare NJarco.


Puede comparar los datos de cadenas utilizando mtodos de comparacin de
cadenas de binario, texto o base de datos . Base de datos slo se utiliza con
Microsoft Access.

Option Compare Binary hace que las comparaciones de cadenas basadas en


un criterio de ordenacin bina ro (en Microsoft Windows, la pgina de cdigo
determina el orden de clasificacin - en el que se utiliza ANSI 1252 para Ingls
y muchos idiomas europeos) - > A < B < U <Z <a b < u <z <a < u <a
Option Compare Text hace las comparaciones de cadenas que no se basan en
un caso sensible al orden de clasificacin de texto, (A = a) <(A = A) < (B b) <
(U u) <(U - U) * (Z - z)

Option Compare (es decir Option Compare Binary o Option Compare Text) se
puede utiliza r para esta blecer el mtodo de com pa racin. Debe ser utilizado en
el nivel de mdulo, antes de cualquier procedimiento. Si la declaracin Option
Com pare no se especifica, el texto predeterm inado mtodo de comparacin
es binario.
Ejemplo - Option Compare Binary o por defecto.
Sub optionCom pareBinar'y ()
Opti on Com pa re Bi na ry se especifica y por lo tanto la com pa racin texto ser
entre mayscu l as y minscu las. " M anzanas" devolver el mensaj e " Fuera d
e a l cance", " uvas" devolver " Fuera de a lcance" ( "G" vi ene antes de "a " en
el cd igo ANSI), "tierra" devol ve r " El texto est entre las manzanas y las
uvas", mientra s que " tierra " est " Kuera de a lcance "

Dim texto As String


texto = InputBox ("Escriba el texto")
Select Case texto
Case "manzanas" To " uvas"
MsgBox "Texto entre manzanas y uvas"
Case Else

MsgBox "Fuera de a lcance"


End Select
End Sub

AI ejecutar, si escribe naranjas y debe obtener el siguiente cuadro de mensaje


(Fig 130) :

Fig. 130 Entrada y Salida en el Case.


Ejemplo - Option Com pa re Text.

Sub optionCompareText ()
Option Compare Text se especifica y por l o tanto la com paracin de texto no

disting ue entre mayscu las y minscul as ; Si tenemos Manzan as "y "


Uvas" devolver el mensaje de "Texto entre las manzanas y las uvas", y
"Tierra " y "tierra " d evolver "Fuera de Rango"
Dim texto As String
texto - InputBox(" Escriba el nombre de la fruta")
Select Case texto
Case "manzanas" To "uvas"

Msg Box "Texto entre manzanas y uvas"


Case Else
Msg Box " Fuera de Rango"

End Select
End Sub

AI ejecutar, si escribe naranjas y debe obtener el sig uiente cuad ro de mensaje


(Fig 131) :

Fig. 131 Entrada y Salda en el Case.

Anidacin.
En el bloque de instrucciones Select ... Case se pueden anidar unos dentro de
otros y tam bin con If ... Then ... Else y bucles (loop como interior o exterior),
sin ningn Imite.
Cuando Select ... Case est anidado dentro de otro, tiene que ser un bloque

com pleto y term nar con su propio End Select , dentro de un determ nado case
o Case Else.
Ejemplo: (utilizando anida dos Select Case . . . instrucciones).

Sub selectCaseNested :t ()
'Comp roba r si u na serie est vaca o no est

vaca, si

tiene un

va for

numrico y l uego eva l uar si ta mbin tiene una frmu l a, y si no es numri co,
entonces Cul es la longi tud o ta ma o d el texto?

Dim rango As Range, tamao As Integer


Set rango - ActiveSheet. Range("AS")
Select Case IsEmpty(rango)
Case True

MsgBox rango.Address & " Sin valor, vaco"


Case Else

Select Caae IsNumeric(rango)


Case True

Msg Box

rango.Address

&

"tiene

un

valor

numrico"
Select Case rango. HasFormula
Case True

Msg Box rango.Add ress & " tiene una frmu la"
End Select
Case Else

tamao = Len(rango)
Msg Box rango.Address & " el tamao del texto es " &
tamao
End Select
End Select
End Sub

Pgina 123

Programa Nacional de Informtica

AI ejecutar, si escribe en la celda AS la frmu la: = B2 + 5, debe obtener los

siguientes cuadros de mensajes:


Ver figura 132.
A
t Persona
2 Joven

Acepta

Fig. 132 Resultados de aplicar el Case.


Otros ejem pios
Ejemplo A.

Se debe asignar una tarifa de acuerdo al grado alcanzado.


Sub grado()
Dim Grado, Tarifa As String
Grado = InputBox("Escriba el valor del grado")
Select Case Grado
Case is > = 90

Tarifa - "A"
Case is > - 80
Tarifa = " B"

Case is > = 70
Tarifa = "C"
Case is > - 60
Tarifa = " D"

Case Else
Tarifa = " Error en dato"
End Select
Msg box Ta rifa Asignada : & Ta rifa
End sub

DD

Acepta r

Select ... Case en comparacin con If ... Then ... Else.


Am bas son sentencias condicionales, en el que una o ms condiciones son
eva l uadas y un bloque de cdigo se ejecuta en funcin del resultado de la
eva l uacin.
La diferencia radica en que la decla racin

de

un

SELECT...

CASE,

una

sola

expresin (o va riable) se exami na y evalua en un momento. La variable a eval uar

se determ ina en la primera l nea de "expresin Select Case", y l uego en va rios


enu nciados case se especifican los valores posibles.
Mientras que en las decla raciones If... Then ... Else, expresiones mltiples (o
variables) pueden considerarse y eva l uarse simu Itnea mente.

La declaracin SELECT... CASE pone a prueba un solo elemento pa ra va rios


valores posibles, mientras que If ... Then ... Else prueba

varias

i nstrucciones

para varios va lores posibles.


En este sentido, las declaraciones If... Then ... Else son ms flexi bles en la
prueba de mltiples variables pa ra va rias condiciones.

En el caso de un gran nmero de condiciones, las declaraciones Of... Then ... Else
dan una apariencia com pleja y el cdigo tiende a ser ilegible.
Desarrollo de ejercicios prcticos.

Este ejercicio perm ite evaluar el contenido de una celda. En un nuevo mdulo
inserte el siguiente procedi miento:
Sub ti podato()

If Application.IsText(ActiveCeII) = True Then


MsgBox "Contiene Texto"
Else

Contiene texto

If ActiveCell = " Then


MsgBox "Celda en Blanco"

' Est en blanco

Else
End If
If ActiveCell .HasFormu la Then

MsgBox "Contiene una frmu la"


Else
End
If

IfIsDate(ActiveCeIl .Value) = True Then

Msg Box "Contiene una Fecha"


Else

End If
End If
End
Sub

Contiene u na frm u la

'Contiene una fecha

Ca

Estructuras de control
repetitivo.
Objetivos:
9 Instrucciones de control repetitivo.
*

For... Next.

'

For Each... Next.

Do Whi le.

Do... Unt l .
*

Pgina 127

Do Loop.

Desarrollo de ejercicios prcticos.

Programa Nacional de Informtica

Estructuras de control repetitivo.

Los lazos son herram ientas de programacin m uy importantes y poderosas en VBA, y se


utiliza en la mayora de los lenguajes de progra macin .
Los Lazos, Bucles o Loops se util izan para repeti r un bloque de cdigo tantas veces como

sea necesa rio, hasta que una condicin dada siga siendo verdad o un punto especfico (o
va for) se cu mpla, cuando se hace falso se sale del lazo y se contina con el siguiente
cdigo del prog rama.
Las estructuras de control repetitivas se utilizan para resolver casos donde sea necesario

repetir un determinado nmero de veces un conju nto de instrucciones llamados bucle.


Un bucle permite escribir unas pocas l neas de cd igo y logra r una salida mucho
ms consolidada, slo por la aplicacin de la repeticin .
Hay tres tipos bsicos de VBA Loops (subdivididos en 6 bucles como a conti nuacin) :

1. El bucle for

El For... Next declaraciones


El For Each... Next declaraciones
2. El Do While Loop

El bucle Do While... Declaraciones


El Do ... Loop Wh ile
3. El bucle Do Until

El Do Until... Loop declaraciones


El Do... Loop Hasta declaraciones

El bucle For VBA y el Do While loops son los dos bucles ms importantes en el

lenguaje VBA. Pueden ser utilizados para llevar a cabo una tarea especfica de forma
iterativa hasta el momento en que se cumpla una condicin (o el bucle se termina
VBA). Para complementar el trabajo de las estructuras repetitivas se debe entender
claramente el concepto de las va ria bles que hacen de: Contador y Acum ulador.

Contador.

Contador

Debe tener en cuenta que una vara ble es una posicin de

memoria

que se

reserva en la com putadora, en la cual el valor que guarda puede cam biar d urante

la ejecucin de un programa, as pues, un contador es un tipo de va ra ble que


incrementa o decrementa (disminuye) su contenido en un valor constante. Puede
au mentar de Ien I, de 2 en 2, etc.
Cuando se dice que se incrementa sig nifica que se suma.
Nmero_de_veces = Nmero_de_veces + 1
En este caso la asig nacin se resuelve primero en el Iado derecho y el va for

resultante se ASIGNA (se gua rda) en la va ria ble del Iado izquierdo.
Como se puede observa r, a la varia ble Nmero_de_veces, se le incrementa
un valor constante (1), es decir, a su contenido se le suma un valor y el

resultado guarda en la misma variable.


Observando su estructura se ve que es fcil identifica r cundo una varia ble es
un contador.

Cuando se dice "decrementa significa que se est restando.


Cantidad total = Cantidad total - 3

Como se puede observar, a la varia ble Cantidad_total, se le resta un va for

constante (3), es decir, a su contenido se le resta un valor y el resultado se


vuelve a guardar en la misma variable.
Debe recordar su estructura.
El valor con el que se inicie el acumulador, depender del problema a resolver.
Ejemplo:

Valor inicial

Cantidad vueltas =

Cantidad vueltas -

Cantidad vueltas

Cantidad vueltas -

Cantidad vueltas

Acumulador.

Contador

Un acumulador es una variable que incrementa o decrementa su contenido en

cantidades variables.
Ejemplo. Incremento de valor.

Total sueldos - Total sueldos + sueldo


Como se puede

observar,

la variable

Total_sueldos,

se

le incrementa

una

cantidad va riable, es decir, a su contenido, se le suma la cantidad y se guarda el


resultado en la misma variable.
Observe su estructura y ser fcil identifica r cundo una

variabl e

es

un

acum ulador.

Cuando se dice decrementa" signica que se est restando.


Programa Nacional de Informtica

Pgina 130

Total_deuda = totaI_deuda monto_pagado


Como se puede observar, a la variable Total_deuda, se le decrementa una
cantidad va ria ble, es deci r, a su contenido se le resta el valor y el resultado se
g ua rda en la misma variable.

Inicializar los contadores y acumuladores.


Es muy importante que se inicialicen siempre los contadores y acumuladores
antes de incrementa nos.

Total sueldos 0

Saldo Actual - 450

Esto hace que tengan un valor inicial y se vaya modificando en cada repeticin
que se realiza dentro de un Lazo, Loop o proceso repetitivo.

El valor con el que se inicie el acumulador, depender del problema a


resolver.
Ejemplo.

Valor inicial

Total_deuda
Total_deuda =

Total deuda -

BOO

(*)

Total_deuda - 100
Total_deuda

- 50

(*) No olvidar de realizar la inicializacin.

Instrucciones.
For...Next.
El For... Next repite un bloque de cdigo un nmero especfico de veces.

Se tiene el sig uiente formato:

For variable contador - valor inicial To valor final [Step Incremento]


[Bloque de cdigo]
Next variable_contador

En el caso de
tener: For i - 1 To
10 Next i

Le est diciendo a Excel realizar 10 repeticiones.


En cada uno de los bucles sucesivos, el contador i se incrementa en 1. Cuando el For...
Next termina, la va ria ble i ha a Icanzado el va lor de 10.
Entre los identificadores For...Next, se puede escrib r cd igo que se repite cada vez. AI

utilizar el bucle de esta manera, se ga rantiza que se ejecuten cada uno de los
pasos necesarios pa ra ir desde el valor i nicial hasta el va for fi nal .
Ejemplo O. Su ma de los primeros 5 nmeros enteros.

Sub forNext1()
Dim n As Integer
Dim nsuma As Integer
nsuma = 0

For n = 1To 5
nsuma - n + nsuma
Next n
t sgBox nsuma
End Sub
La va riable contador es "n", la cual se debe declara r.

El valor_inicial del contador es 1, y su valor_fiinnaal eess 5, los dos son va lores


numricos. El uso de palabra clave "Step" es opcional - es un valor numrico por el cual

se incrementa el contador cada vez que se ejecuta el bucle. El valor por defecto del
incremento es 1, salvo que se especifique otro va for.
El control del incremento lo rea liza l a instruccin Next contador, y vuelve a la instruccin
FOR, que repite el bloque de cdigo si el valor del contador no supera el va for "final" de

5.
Si el contador es igual a l valor "final", el bucle contin ua r, se detiene cuando el valor

"final" es excedido. El bloque de cdigo que se repite en este bucle es:


nsuma = n +- nsuma.

Explicacin paso a paso:


a. En este ejemplo, el contador n se incrementa 1, y en el primer bucle (donde n

1),

el acumulador nsuma se incrementa en 1 (se aade 1 a su valor inicial de cero).

Programa Nacional de Informtica

Pgina 1 3 2

Se rea liza el incremento con la instruccin Next del contador en 1 (n = 2) y vuelve


a la instruccin FOR, y en el segundo bucle nsuma se incrementa al 3 (suma 2 a

su valor anterior de 1);


Se rea liza el incremento con la instruccin Next del contador en 1 (n 3) y vuelve a
la instruccin For, y en el tercer bucle nsuma se incrementa a 6 (3 aade a su va for

anterior de 3); se realiza el incremento con la instruccin Next del contador en 1 (n


=
4) y vuelve a la instruccin For, y en el bucle cuarto nsuma se incrementa hasta 10
(4 agrega a su valor anterior de 6).
d. Se rea liza el incremento con la instruccin Next del contador en 1 (n = 5) y vuelve a
la instruccin FOR, y en el quinto ciclo nsuma se incrementa a 15 (suma 5 a su va for

anterior de 10).
e. Despus de ejecutar el bucle quinto, se realiza el incremento de la instruccin Next
contador (es decir, n) en un valor de 6 y vuelve a la instruccin FOR, pero esta no se
ejecuta d ebido a que su valor ha excedido el valor "final" de 5 que fue considera
do como Imite. Entonces, MsgBox mostra r (Fig 133) :

Fig. 133 Resultados del For.

En resumen, Un bucle For ... Next utiliza una variable como contador que aumenta
o disminuye su valor en cada repeticin del bucle.
Ejemplo 02. En el sig uiente ejem plo se rellenan las 10 primeras celdas del 1 a 1 10.
1. En un nuevo libro, en la hoja 1.

2. Ingrese al editor VBA y escriba las siguientes lneas de cdigo (Fig 134).

Fig. 134 Cdigo aplicado a l For.

En este ejem plo,


que

es la varia ble

hace de contador desde 1 hasta 10.

En el desarrollo del bucle cada valor

que va tomando la variable i se va

asignando a cada celda de la primera

6
7

8
9
0

8
9
10

col umna de la hoja activa, con lo


cual se muestran los valores del 1 a

10) (Fig 135).


Tenga en cuenta que la variable de
contador, por defecto, se

incrementa

en 1.

Ejemplo 03. Ahora se realizar el relleno con incrementos de 2 en 2, generando la


secuencia 1, 3, 5, 7,9.
1. En un nuevo libro, en la hoja 2.
2. Ingrese a l ed itor VBA y escriba las siguientes lneas de cd igo.

SE fo:r.ex7?()
Dim i As Integer

Fig. 136 Cdigo apl icado a l For.

Observe el uso del Step 2, le ndica a l For que rea lice incrementos de 2 en 2.
Los valores generados son los sigu ientes (Fig 137) :

Fig . 137 Resultados del For.

Ejemplo 04. Ahora se realizar el relleno en forma decreciente de 2 en 2,


generando la secuencia 10, 8, 6, 4, 2.
1. En un nuevo libro, en la hoja 3.
2. Ingrese a l editor VBA y escriba las siguientes lneas de cdigo (Fig 138).

Fig. 1. 38 Cdigo del For

Observe el uso del Step -2, el cua l le indica al For que rea lice decrementos de 2

en 2.
Los valores generados son los sig uientes :
B

10
Fig . 139 Resultados del For.

Debe tener en cuenta que el proceso se inicia en la celda AIO, pues el for,
inicia en 10 y va dismin uyendo de 2 en 2.

se

Actividad 14: Evaluar loa valores de la celda.


En un nuevo libro, en la hoja 1, escriba el siguiente contenido.
Coloque un botn de comando en la hoja de tra bajo.
3. Escriba el Texto Evalua r en el botn de comando (Fig. 140).

B
68
78

Evaluar

66
Fig. 140 Config ura r Botn de comando y datos.

Se evaluar el valor de cada celda para ver si es mayor de 50 y empleando un


contador ir contando a todos los que cumplen dicha condicin.
4. Ingrese a I editor del VBA.
5. En el mdulot aada las sig uientes lneas de cdigo (Fig. 141) :

S.r derofor.(
r r ooraI Az In:ege:, :As Izzege: zozai =

For i = 1 To 4
'Se selecciona la celda j se e a1ua pa:a ver si cxpie la co.-.d:citn
?eIlai, : .&e1ecr
1 Isg3ox Repezicin =
If Oe1Ie( i, l.value s? Itez zozaI - zozaI + i
::er i
1eg3o x total & valores r ores que &?

Fig . 141 Cdigo a aplicar el For

a. Las dos primeras lneas de cdigo declara dos variables de tipo Integer. Uno
llamado total y una i nombre.
A contin uacin, se inicializa la va riable total con el va for 0.

Agregue el bucle For Next que va de 1 a 4.


d. Crear una declaracin If Then que se incrementa por un total de 1 si el valor es
mayor de 50 a os.
e. Por ltimo, utilizar un cuadro de mensaje pa ra mostra r el nmero total de valores

superiores a 50.

f.

Los resultados cuando hace clic en el botn de comando en la hoja de un par de


veces, Figuras 142 al 145:
B

A
1

68

Eva luar

78

Repeticion - J

Aceptar
Fig. 142 Resultado, en la repeticin 1.
g. Clic en el botn de comando Aceptar.

B
Evaluar
65
Repeticion - 2

Aceptar

11

Fig. 143 Resultado, en la repeticin 2.


h. Clic en el botn de comando Aceptar.
A
1

'

68
78

"

Eva luar
Microsoft Exc..

8
9

Fig. 144 Resultado, en la repeticin 3.

i.

Clic en el botn de comando Aceptar.


A

68
78

|Evaluar

" Microsoft Exc...

Repetir in - 4

Aceptar

11
Fig. 145 Resultado, en la repeticin 4.
j.

Clic en el botn de comando Aceptar.

Explicacin:
Las lneas de cdigo entre For y Next se ejecutarn cuatro veces.
Para i = 1, 2, 3 y 4.
Para i 1, Excel VBA asigna 1 a la variable i y obtiene la celda (1, 1). Valor. Este es el
primer valor. , Excel VBA ta mbin incrementa la variabl e total en 1 porque el primer
valor es mayor que 50. Cuando Excel VBA alcanza Next i, toma el siguiente valor de i,
o sea 2 y de nuevo ejecuta la instruccin For. Para i = 2, Excel VBA asigna 2 a i y

obtiene la celda (1,2). Este es el segundo valor. Para i - 2, Excel VBA tambin
incrementa la variable total en 1 porque el segundo valor es mayor que 50. Pa ra i = 3,
etc. Excel VBA recorre el cdigo de cuatro veces y despus que sa le del bucle For
A
B el resultado:
Next y ejecuta el resto del cdigo,
presenta
Evaluar
Microsoft Excel

3 valores mayores que 50

Aceptar

Fig. 146 Resultado fi nal de evalua r con el For e IF.

Es u na buena prctica siempre aplicar sangra (ta bulador) en el cdigo


entre las palabras FOR y NEXT. Esto hace que el cdigo sea ms fci l de
leer.

For i - 1 To 4

Se selecciona la celda y se eva l ua pa ra ver si cum ple la


condicin Cells(i, I).Select
MsgBox "Repeticin = & i

If Cells(i, I).Value > 50 Then tota l - total + I


Next i

Actividad 15: Evaluar Puntajes.


En este ejemplo se usa una varia ble contador que puede conta r la cantidad de
a l umnos Aptos y la cantidad de NO Aptos, de acuerdo a las ca lificaciones
obtenidas por los a l umnos en un examen.
El programa tambin diferencia los puntajes que cu mplen con el m nimo de color
azu l y los puntaje no aptos con color rojo. El puntaje a eva l uar debe ser su perior a
50 para considera rse Apto, un puntaje menor indica NO APTO. Se ha r uso de
un contador.

Se va a emplear la referencia de celdas, de acuerdo a los datos, los puntajes se


inician en la celda B3, entonces una referencia a la celda inicial ser : Cells(i + 2,
2). La va ria ble i que haces la veces de contador se inicia en 1, por ello se
incrementa en el valor 2 para que inicie en la celda B3. Se va a emplea r la
estructura repetitiva For para que evale cada uno de los 20 puntajes que han

obtenido los alumnos.


Realice el siguiente procedi miento:

1. En un nuevo libro, en la hoja 1.


2. En la ficha Programador, inserte un botn de comando en la hoja de tra
bajo.
3. Si pide el nombre de una macro, haga clic en el botn de comando
[Cancelar].
4. Escriba
147).

el

Texto

Evala

puntaje

l uego

el

siguiente

contenido

(Fig.

60

- to
s
Fig.

147 Eva l uar puntajes, config ura r el conten ido.

5. Ingrese a l ed itor del VBA.


6. En un nuevo mdulo aada las sig uientes lneas de cdigo : (Fig. 148).

.'ie i ceiie s, ceiIe ?4,


.'iue - cou.-.e:
.vaiue - ? - co:zrer

Fig. 148 Cdigo de la eva l uacin de puntajes.


Si el valor de esa celda es mayor a 50, el valor del contador se incrementa en Iy
el color de la fuente ca mbia a azul (el Colorlndex es 5), de lo contrario no hay
incremento en el contador y el color de la fuente se ca mbia a rojo (Colorlndex = 3) .
Los resultados fina les son los sig uientes (Fig. 149) :

Programa Nacional de Informtica

Pgina 140

80
90

Iva1uaPunta)e

90

72
86

Fig . 149 Resultados de eval uar puntajes

La propiedad Offset.
La propiedad offset tiene 2 argumentos que corresponden a la posicin relativa de
la celda.
El formato genera l es el sigu iente :
Object.offset(RowOffset, ColumnOffset)
'Al considera r 0 pa ra los a rgumentos de fi l a y col umna

ActiveCell.Offset(O, O).Select

Se selecciona como celda activa inicial la celda actual.


Para considerar que la celda activa se encuentra una fila por debajo (Fig. 150).
ActiveCell.Offset (1,O) - 1

Fig. 150 Direccionar hacia abajo.

Si la celda activa inicial hubiese sido ES, ahora la celda activa sera F5 (Fig . 15 1) .
ActiveCell.Offset (O,1) - 1

Fig. 151 Direccionar a la derecha.

ActiveCeIl.Offset (O, -3) - 1 Coloca a "1" tres columnas a la izquierda de E5 (en


B5). (Fig. 152)

Fig .

152 Direccional a la izquierda.

Es importante ta mbin tener en cuenta que se obtend r un error si se asig na o se


trata de desplaza r a un rango inexistente.
Por ejemplo:
Celda activa actual : B2
ActiveCell.Offset(-5, O).Select

Da r un error porque no existe el rango que se trata de seleccionar seran 5


las a rriba de B2.

Programa Nacional de Informtica

Pgina 1 4 2

Sub ejemplo vba_offset( )

Dim RANGO As Range


Set RANGO - Range("BI")
RANGO.Offset(2, 4).Value = " 11 DE JULIO GRAN CELEBRACIN"
Se mueve 2 filas por debajo y 4 col umnas a la
derecha End Sub

Fig. 153 Mover 2 filas debajo y 4 a la derecha.

For Each... Next.


Repite un bloque de cdigo pa ra cada objeto en un gru po.
Se repite la ejecucin de un bloque de cdigo, para cada elemento de una
coleccin .

El bucle se detiene cuando todos los elementos de la coleccin se han cubierto, y


la ejecucin se mueve a la seccin de cdigo que sigue inmediata mente a la
i nstruccin Next.

Formato:
For Each element In group

[statements]
[Exit For]

[statements]
Next [element]
El procedimiento indicado abajo muestra el nom bre de cada hoja del libro actua 1.

Vea el uso del bucle Each...Next loop a travs de la coleccin Hojas de Trabajo.
1. En un nuevo libro, en la hoja 1.
2. En la ficha Programador, inserte un botn de comando en la hoja de tra bajo.
3. Si pide el nombre de una macro, haga clic en el botn de coma ndo

[Cancelar].

4. Escri ba el sig uiente cdigo en un nuevo mdulo.

Su b M uestra NombreHoja()
Dim mihoja As Worksheet
For Each mihoja In Worksheets
Msg Box mihoja. Name
Next mihoja
End Sub

5. Asocie la macro al botn de comando.


6. Al hacer clic en el botn de comando [Ver hojas].
7. Se muestra la sigu iente sa lida (Fig. 154 a 156).
B

Aceptar

Fig. 154 Salida del uso del For Each, hojaI.

8. Haga Clic en el botn de comando [Aceptar].

Ver hojas

Fig. 155 Salida del uso del For Each, hoja 2.

9. Haga Clic en el botn de comando [Aceptar].

Ver hojas

c'

.
Fig. 156 Salida del uso del For Each, hoja 3.

1. En un nuevo libro, en la hoja 1.


2. En la ficha Programador, inserte un botn de comando en la hoja de tra bajo.

3. S pide el nom bre de una macro, haga clic en el botn de


comando [Cancelar].
4. Escri ba el sig uiente contenido (Fig. 157).

15
0

Emily
Mili
11/07/2012

Ver Celdas

Fig. 157 Contenido y Botn de comando en For Each .


5. Escriba el sig uiente cdigo en un nuevo mdulo (Fig. 158).

Fig. 158 Cdigo en el For Each.


6. Seleccione el rango de datos (Fig .150
159) .
Emily B

Ver Celdas

Fig. 159 Seleccionar datos del rango

7. Al ejecuta r el procedim iento se obtiene (Fig . 160 a 163) :


B

Fig. 160 Resu ltado de evaluar con el For Each.

8. Haga Clic en el botn de comando [Aceptar].


B

Ver Celdas

11/07/20t2

Fig. 161 Resu ltado del For Each.

9. Haga Clic en el botn de comando [Aceptar].

1J/07/20

Fig. 162 Resultado al eval uar el texto Mili.


B

fa da SBA T eneden+emdolD072012

Fig. 163 Resu ltado de eva l uar con la fecha 1 /07/20 12.

Generar Regin de colores que emplea VBA.


1. En un nuevo libro, en la hoja 1.
2. En la ficha Programador, inserte un botn de comando en la hoja de tra bajo.
3. Si pide el nombre de una macro, haga clic en el botn de comando
[Cancelar]

4. Escriba el sig uiente cdigo en un nuevo mdulo (Fig . 164).

Fig. 164 Cdigo del mdulo

5. Seleccione la celda
procedim iento se

AI,

del

libro

actua 1.

AI

ejecuta r el

obtiene:
E

6
4
0

Fig . 1.65 Colores generados

Do While.
El Excel Do While es otra de las estru cturas repetitivas de mucha utilidad pa
ra los prog ramadores. En Excel Do While Loop repite un conju nto de
instrucciones
/ cdigos definidos mientras que una condicin especfica es cierta.
La condicin se eva l a como verdadera, el cdigo que forma el bucle se ejecuta
tanta veces como indique la condicin .
Observe el siguiente ejem plo:

Do Wh ile (La condicin es eval uada como verdadera)


'Cd i go que se ejecuta

Bucle

Su poniendo que desea eliminar todos los espacios de una cadena en la


celda activa en la hoja de clcu lo activa.
Usted puede logra r esto mediante la com binacin de otras funciones de Excel
con Do While Loop.

Sub Elimina_espacios()
Dim Cadenasi n Espacios As String Decla ra ti po stri ng
Dim posicion As Long Indica la posicin del caracter encon trado
Pa ra este ejem plo se asu me que l a cel da tiene el texto : J u l io Csa
r Se tiene la facilidad de coloca r cu a l qu ier otro texto con espacios
Cadena si n Espacios = ActiveCell
La fu ncin i nstr retorna la posicin del primer espacio que se encu en tra

posicion - InStr(CadenasinEspacios, " ")


El bucle se repite mientras l a posicin sea mayor que cero
Do While posicion 0

Cadenasin Espacios = Left(CadenasinEspacios, posicion - I) &


Mid(CadenasinEspacios, posicion + I, Len(CadenasinEspacios) posicion)posicion = InStr(Cadenasin Espacios, " ")
'Actua l iza la posicin

pa ra encontra r la sig uiente ocurrencia del

espacio
Loop
Msg Box Cadena si nEspac os

End Sub
Do While permite recorrer l a cadena en la celda activa hasta que haya procesado
todos los espacios disponibles.

Do Loop.
En este caso la instruccin eval a la condicin al nal del bucle.
Siempre el bucle se repetir mientras la condicin esta blecida en el While sea
cierta o de un resultado verdadero.

Cuando el resultado es falso se sale del bucle de repeticin


Formato:
Do
[Bloque de cdigo]
Loop While [Cond icin]
Ejemplo 1.

La condicin (nro 5) se prueba al final del bucle, y porque se cu mple, se


repite el bucle, pero slo una vez despus de que el va for de nro se reduce a 4 la
condicin se hace fa Isa y fi naliza el bucle. nsuma devuelve el valor 5.

Sub doloopW hile2()

Dim nro As Integer


Dim nsuma As Integer
nro = 5
nsuma = 0
Do

nsuma = n + n5uma
nro = nro - I
Loop While nro 5

MsgBox nsuma
End Sub

El bucle Do Until repite un bloque de cdigo indefinida mente hasta que la


condicin se cumple y se eval a como True (Verdadera).

La condicin se puede evaluar ya sea al comienzo o al final del bucle.


El formato Do Until... Loop declaraciones" com prueba la condicin antes de
la repeticin, mientras que "Do ... Loop Until

declaraciones

"

prueba

la

condicin al final del bucle. Si la condicin se com prueba al principio del Bucle,
el bloque de cdigo no se ejecuta si la condicin se cumple un principio en s
mismo (y el bucle no se ejecuta ni una sola vez), mientras que si la

condicin se comprueba al final, el bucle se ejecuta al menos una vez.


Formatos:
Do Until [Condicin]

[Bloque de cdigo]
Loop
Do

[Bloque de cdigo]
Loop Until [Condicin]

Esta estructura de bucle, como el Do... While Loop, se a seg ura de que el bucle
se ejecuta r al menos una vez, la eva l uacin de la condicin se realiza a l na l
del bucle. El bucle se detendr cuando la condicin sea verdadera. (Com parar esta
estructura de bucle para el bucle Do.. . Until Loop).

Programa Nacional de Informtica

Pgina 150

Por ejemplo. Para asignar los 10 primeros enteros a las primeras fila de la

primera col unina :

Fig. 166 Cdigo para asig nar valores.


Ejemplo 1. Se eval ua r si una celda est vaca, de ser verdadero se pinta el color
de fondo. El proceso se rea l iza al menos una vez.

Fig. 167 Cd igo para asig nar colores.

Desarrollo de ejercicios prcticos.


El presente ejercicio abarca estructuras de control repetitivo.
1. En un nuevo libro, inserte el sig uiente contenido:

Configure como sig ue :

En la celda B2, escriba: Convertir Nmeros a Letras.


* Inserte un botn de comando con el texto Convertir, enlace con la macro:
convierte numeros letras y detrs de este botn un rectngulo de esquinas
redondeadas.
v' En la celda BS, se escribir el nmero a convertir en letras. En la celda C4,
escriba la frm ula: = B5 y a plicar formato de milla res con 2 cifras decimales.
Color de texto igua l al color de fondo del rectngu lo mayor.
El rect ngulo de color na ranja es un rect ngulo de esqu inas redondeas que
se debe config urar como sig ue:
Se selecciona y en el Cuad ro de Nom bres, escriba: numero, en la barra de
frmu las; = C4.
El rectngu lo de color celeste de la parte inferior, naranja es un rectng ulo
de esquinas redondeas que se debe configurar como sigue:
* Se selecciona y en el Cuadro de Nombres, escriba: En Letras, en la ba rra de
frmu las: = CS.
3. Ingrese a la ventana de cdigo, inserte un nuevo mdulo y escriba el sig uiente
procedmiento y funcin :
Sub convierte_numeros_letras()
Dim Texto

Dim Millones
Dim Miles

Dim Cientos
Dim Decimales

Dim Cadena
Dim Cad Millones
Dim Cad M les

Dim CadCientos
Programa Nacional de Informtica

Pgina 152

Texto - CeIIs(5, 2) 'Toma el nmero de la celda BS


Texto - FormatNumber(Texto, 2)
Texto = Right(Space(14) & Texto, 14)
Millones = Mid(Texto, 1, 3)
Miles = NJid (Texto, 5, 3)
Cientos - Mid(Texto, 9, 3)

Decimales - bt id(Texto, 13, 2)


Cad Millones = ConvierteCifra (Mi llones,
I) Cad Miles = ConvierteCifra(Mi les, 1.)
CadCientos

ConvierteCifra(Cientos,

0)

If Trim(Cad Millones) "" Then


If Tri m(Cad Millones) = " UN" Then
Cadena = Cad Millones & " MILLON "

Else

Cadena - Cad Millones & " MILLONES"

End
End If

If

If Tri m(Cad M les) "" Then

Cadena -Cadena & " & CadMies &" MIL

TrimfFnrlMile ' Fnrl+ientos) = "UN Then

FnJenn = FnJena & " y " & Decimales & "/100"


else
M IIe ' Fie'ntns - "000000" Then
Cadena

= Cadena & " " & Trim (CadCientos) & " y " &

U=i m a\== & "/ 100"

Cadena - Cadena & " " & Trim(CadCientos) & " y " &
Per i m a\i & "/100"
End
Cells(5, 3) = Trim(Cadena) 'Ubica el texto en letras en la celda : CS

'****** Este concepto explicar con detalle en el captulo 6 **********

union +=---+-*'*-(Texto, SW)

= ==*=== ===== Unidad


tvt7entnn txtDecena, txtUnidad

Centena - Mid(Texto, 1, 1)
Decena = Mid(Texto, 2, 1)
U nidad = Mid(Texto, 3, 1)

Select Case Centena


Case " 1 "

txtCentena -CIEN

f Decena & Unidad "00" Then


txtCentena = "CIENTO"
End If
Case "2"

txtCentena = "
DOSCIENTOS" Case "3"

txtCentena = "TRESCIENTOS"
Case "4"

txtCentena "CUATROCIENTOS"
Case 5"

txtCentena = QUINtENTOS
' trentena = SFISCIENTOS

Case "7"
tvtPontona = "' FTECIENTOS"

==- "CHOCIENTOS

rase u
' trentena -"fi|OVECIENTOS

tXtDeeri a - "ONCE"

**7ecena = "DOCE"
*+Decen a - "TRECE"

Case "4"

txtDecena - "CATORCE"
Case "5"

txtDecena ="QUINCE"
Case "6"

txtDecena - "DIECISEIS"
Case "7"

txtDecena = "DIECISIETE"
Case "8"

txtDecena = "DIECIOCHO"
Case "9"

txtDecena = "DIECINUEVE"

End Select
Case "2"

txtDecena - "VEINTE"
If Unidad < "0" Then

txtDecena = "VEINTI"
End If

txtFerenn = "TP FINTA

If Unidad < "0" Then


txtDecena = "TREINTA Y "

txtDecena = CUARENTA"
If Unidad < "0" Then
txtDecena ="CUARENTA Y "

case 5
txtDecena = "CINCUENTA"
If Unidad < > "0" Then

txtDecena ="CINCUENTA Y "


Case "6
txtDecena = SESENTA"
If f Jn irtarf < "0" Then

*tDecena - "SESENTA Y '

End If
Case "7"

txtDecena - "SETENTA"
If Unidad < "0" Then
txtDecena

="SETENTA Y "

End If
Case "8"

txtDecena - "OCHENTA"
If Unidad < "0" Then
txtDecena = "OCHENTA Y "
End If
Case "9"

txtDecena = "NOVENTA"

If Unidad < "0" Then


txtDecena = "NOVENTA Y "
End If

End Select
If Decena < "1 "
Then Select
Case Unidad
If SW Then
txtU nidad = "UN"
Else
txtU nidad - "UNO"

'Jnidad = "DOS"

'Jnidad - "TRES

'Jnidad = "CUATRO"

txtU nidad = "CINCO"


case

b
t-tU nidad = "SEIS"

Case
txtU nidad = "SIETE"

txtUnidad ="OCHO"
Case "9"
txtUnidad - "NUEVE"
End Select
End
If

ConvierteCifra = txtCentena & " " & txtDecena & txtUnidad

End Function
4. Escri ba un nmero en la celda B5 y haga clic en el botn de comando Convert r. El

nmero en letras se muestra en el rectngu lo de color celeste.

Pgina 157

Programa Nacional de Informtica

Ca

Creacin de
formularios de usuario.
Objetivos:
4 Crea r Formu Iario.

O Insertar UserForms.
4 Controles del form ula rio.

O Aadir controles a un UserForm.


O Aadir procedimientos de control de eventos.
O cCmo ejecutar un form ulario?

4 Trabajar con UserForms.


6 Ejercicios prcticos con form ula rios.

Pgina 159

Programa Nacional de Informtica

Creacin de formularios de usuario.


Crear Formulario.
Un formu la rio de usuario es un cuadro de di l ogo hecho a la medida o

requerimientos del usuario que se construye utilizando el Editor de Visual Basic.


Con un formulario de usuario puede crear una interfaz fcil de usar para la
gestin de datos del libro, de esta manera se tiene la entrada de datos ms
controla ble para el usuario que crea el formu tario y ms fcil pa ra el usua rio
que usa r el formulario.

Importante tener en cuenta que el creador del formulario no necesariamente va a


operar el form ulario.

Se realizarn los pasos para mostrar cmo crear un formulario de usuario para el
ingreso de datos sobre a lgn requerim iento en particular.
El trabajo se divide en dos tiempos principales :
1. Tiempo de Diseo: Se realiza la insercin del form ulario, los controles (Fig.

1.68) y el cdigo VBA (Fig . 169) . para hacer que fu ncione.


2. Tiempo de ejecucin: En el eua l se prueba si el formu Iario cum ple con

todos los requerimientos para el que fue construido (Fig . 170).


En las sig uientes imgenes se puede apreciar la a pa riencia de estos dos tiempos
en la creacin de un form utario.

Tiem po de diseo.

0epartarento

Controles
JStermedio
Avanzado

Fig. 168 Formu Iario Tiempo Diseo.

Tiem po de diseo.

Cdigo
VBA

P::vare Sur crdClea:Fc.r_Click(} Sell Use:Forr_Inisiaiize

Fr:vaze Sur cmdt K_ Click()


ActiveFo:kb oc k.Szeets {9eserva ae Surso) .csivatej 9ange(I}.Selecs
Dc

Fig . 169 Cdigo, Tiem po de diseo.


Tiem po de ejecucin.
Reginos Dso:

Telefono.

Fig. 170 Comprobacin de Requerim ientos.

Pgina 161

Programa Nacional de Informtica

Insertar UserForms.
a. Al insertar el UserForm se em pieza a Constru ir el formu Iario.

b. Inicie Excel y abra el Editor de Visual Basic (atajo de teclado : [Alt] +


[FI1]). Usted tend r que utiliza r tanto en el Explorador de proyectos y la
ventana Propiedades de modo que si no son visibles abr nos en el men

View.

Cuando inicie la creacin del UserForm se debe evitar hacer


un doble clic en cualquier objeto (a menos que la instruccin lo
U

indique) porque a veces se abre la ventana de cdigo del

formulario. Si

usted

hace

esto

de

forma accidenta l,

simplemente cierre la ventana de cdigo haciendo clic en el


botn Cerra r o volver a la Ventana de diseo de formu Iario
de usuario con la combinacin de teclas [Control] + [Tab].

Insertar un nuevo UserForm.


Aseg rese

de

que

ejemplo

VBAProject

seleccionado
(Fig.

171)

en
a

el

el

libro

actual

(Libro 1))

Insertar y elija UserForm (Fig .

Insertar

Fo rmato

proyecto - V8AProjcct

est

Explorador

continuacin,

(por

de

abra

_j
proyectos
el

men

172) .

Depura

Fig. 171 Libro actual seleccionado.

Fig . 172 Ejecutar el


UserForm.

AI hacer esto un nuevo UserForm en blanco aparece en la ventana de cdigo


del Editor de Visual Basic y una entrada correspondiente en el Explorador de
proyectos (Fig. 173).

@ V8A8ro/ect (Libo:t)

Fig. 173 Nuevo UserForm .

El Explorador de proyectos muestra una nueva


carpeta Ilamada Formularios que contiene el nuevo
UserForm que se le ha dado el nombre UserForm 1.

Formularios
8 UserForm 1

Tambin debe ver el Cuadro de herramientas


(Fig. 174) .

Si no es visible haga clic en cualquier l ugar del


nuevo UserForm (el Editor de Visual Basic ocu lta la
caja de herramientas cuando determina que se est
trabajando en otro Iugar) y si todava no apa rece

puede abrirlo desde el men Ver.


En este cuadro de herram ientas encontrar los controles que se insertarn en el
formu Iario que est diseando.
Apu nte sobre un control y se muestra el nombre del mismo
en los llamados ToolTip. (Cuad rito a ma ri Ilo)
Cuadro de texto

El formulario de usuario tiene en el borde nodos a l rededor. En el borde superior,


en la esquina inferior derecha y la mitad en los lados inferior y derecho del
formu Iario, son pequeos cuadrados blancos.
Estos permiten redimensionar o hacer el cambio d e tamao seg n se requ iera.
Usted puede utilizar el mouse para arrastra r estos tiradores para cam biar el
tamao del form ulario al ta ma o requerido.
La rejilla de puntos en el formu la rio est para ayudarle a alinear fcil mente los
controles que se van insertando. Ver Figura 175.

Pgina 163

Programa Nacional de Informtica

Fig . 175 Nodos en el formula rio.

Cambie el nombre del formulario de usuario y aadir un ttulo.


Un solo proyecto puede incluir muchos UserForms as que es una buena idea dar a
cada uno un nom bre significativo.

Con el formulario de usuario seleccionado encuentre la propiedad Name en la


ventana Propiedades (normalmente es el primer elemento de la Iista) y
ca mbiarlo a un nom bre que personal ice el formu Iario, genera lemtne se incluye
el prefijo: frm pa ra identificarl o en la ventana de cdigo. A continuacin, se
cambia la propiedad Caption para identificar el formulario en Tiempo de

ejecucin. El Explorador de proyectos muestra ahora el nuevo nombre del


formulario de usuario y la barra de ttulo de la forma cambia inmediata mente
para mostra r el nuevo ttulo.

AI dar el valor a la propiedad Name recuerde que no debe incluir espacios en el


nom bre, o utilizar cualqu iera de las "pa labras reservadas" VBA (es decir, las
palabras clave que son parte del leng uaje VBA ta I como "Date").

Controles del formulario.


Los controles son los objetos, como cuad ros de texto, cuad ros com binados y
botones de comando, que ser n colocados en el formu Iario. La seleccin de
los controles est ndar se realiza al eleg r uno de los botones del cuadro de
herramientas. (Fig. 176).

Apu nte a un botn del cuadro de H ram ient


informacin sobre el nombre del control que se muestra en el
Toolti p.

gbi

.:

l7

Cuadro de texto

Fig. 176 Cuadro de herramientas

Aadir controles a un UserForm.


Agregar un control Cuadro de texto 'y una Etiqueta.

Agregue un control Cuad ro de Texto a I form ulario haciendo clic en


el botn de cuadro de texto en el cuadro de herramientas, Iuego
apunte en la ubicacin que desea para el control y haga clic en el
formu lario (Fig. 177).
Ucrr orm1

Cuadro oe herramientas

Fig . 177 Insertando u n cuadro de texto.

AI igual que con el UaerForm cua Iquier control que se coloca en el formulario

muestra un borde punteado y controladores de tamao cuando el elemento


est seleccionado (pulse en cualquier elemento para seleccionarlo).
Puede cambiar el tamao y la forma de un control arrastrando desde uno de los
nodos del borde izquierdo o derecho, el cambio de tamao se encarga (el puntero

del mouse cambia r a una flecha de dos puntas (Fig. 178)) o ca mbiando
los

valores de las Propiedad es de altura (Height) y ancho (Width) en la ventana


Propiedades.

Para mover un control arrastre desde uno de los bordes de puntos en un punto
entre los controladores de tamao (el puntero del ratn se mostrar una flecha
de cuatro puntas (Fig. 179)) o ca mbiar la valores de sus propiedades Top y Left.
g _p

Fig. 178 Moviendo el control.

p,g, p

Fig. 179 Ca m biando Tamao.

Cada control debe tener un nombre significativo para que cuando se escriba el
cdigo se pueda fcilmente identificar.
Por ejem plo el primer cuadro de texto tiene actua l mente el nombre TextBox 1.

Utilice la ventana Propiedades para cambiar su nombrar a txtNombre.


Es til ag regar un prefijo al nombre de los controles, pues

estos permiten describir el tipo de control ("txt" para un


cuad ro de texto, "cbo" para combobox, etc.) Esto permite

identidicar el tipo de control que se est usando.


Obliga a que los nombres se vean j untos cuando se muestra en una lista. Ta
mbin permite utilizar palabras reservadas que de otra manera no se podran

utilizar (por ejemplo, en Iugar de Date emplear txtDate para una fecha).
Ahora use la caja de herramientas para colocar una Etiqueta (Label) en el
formu Iario. Para cambia r el ttulo de la etiqueta que puede escribir directa
mente en la etiqueta o puede ca mbiar su propiedad Caption en la ventana de
propiedades.

Cuando se mueven los controles alrededor del formu Iario es deseable que
encajen con los puntos de la cuadrcula. Aunque esto es una caracterstica til,
a veces es necesario colocar los objetos con mayor precisin. Usted se dar
cuenta de que no se puede colocar la etiqueta exactamente al nivel del centro
de la caja de texto. La rejilla obliga a ser demasiado alto o demasiado baja.
Utilice la ventana Propiedades para restar (o agregar segn sea necesario) 3
unidades arriba de la etiqueta de modo que est en posicin correcta en relacin
con el cuad ro de texto (Fig. 180).

Este cambio debe realizarlo en la propiedad Top en la ventana de propiedades


cuando el control est seleccionado.

Fig. 180 Utilice la ventana Propiedades para ajustar con precisin la posicin de

un control.
Cuando el control no es parte del cdigo, no es necesa rio da r a la etiqueta un
nom bre personalizado porque, en el proyecto, no se esta r refirindo a ella en el
cdigo, au nque en otras circunstancias, es posible que desee hacerlo.

Agregue los controles restantes.


Utilice las mismas tcnicas para agregar los controles restantes al formulario.
Puede ag rega r cuad ros de texto, un cuad ro combinado (un cuad ro de texto
con una Iista desplegable), casillas de verificacin, botones de comando, etc.

Aqu est una Iista de los controles con referencias de ejemplos y uso de los
prefijos:

Control

Valor(es)

Propiedad

TextBox

Na me

txtApellidos

Label

Caption

Apellidos

ComboBox

Na me

cboDepartamento

Na me

ch kRecibido

Caption

Rec bi?

Na me

txtDescripcin

Height

45

Width

132

Scrollbars

2-fmScroll barsVertica l

Na me

cmdAceptar

Caption

Aceptar

Na me

cmd Limpiar

Caption

Limpa r

Na me

cmdCancelar

Caption

Cancelar

CheckBox

TextBox

CommandButton

CommandButton
CommandButton

En eua lquier momento puede comproba r exactamente


cmo se ver el formulario de usuario que se est creando,
Sugerencia

pulsando la tecla [FS] o haciendo clic en el botn Ejecutar


de la barra de herramientas del Editor de Visual Basic. AI
hacer esto se abrir el formulario de usua rio en la hoja actual.
Para volver a I Editor de Visual Basic, cierre el formulario

de usuario, haciendo clic en el botn cerrar [x] en la


esquina superior

Crear la lista ComboBox.

En el caso de un cuad ro com binado (combobox) se requ iere que se indique de


dnde se va obtener la informacin para crear la lista.
Hay dos maneras de hacer esto.

I. Se puede hacer con el o


2. Se puede hacer referencia a un rango de celdas con nombre en el libro.
El seg undo mtodo es a menudo el que se prefiere porque fcil mente se puede
editar la Iista sin tener que volver a escrib r ning n cdigo.

Cam bie a Excel y a bra una hoja de clcul


el

mismo

libro.

Escriba

una

Dlas

colu nina de

elementos que representan las entradas que


desea que apa rezcan en la l ista d esplegable.

LUIS

mates
Escribir un dato en cada celda . Si desea que

3 Mircole
los elementos aparezcan en orden alfabtico
4 s
en la Iista en la hoja de clculo, d b
Jueves
ordenarlos en forma estndar o en forma
g
viernes
personalizada.
y Sbado
Domin

'

Ahora seleccione las celdas que contienen los elementos de la Iista y el nombre
del rango de celdas. La forma ms fcil es haga clic en el cuadro de Nombres (el

cuadro justo encima ya la izquierda de la celda AI), escriba Das como ejemplo
(Fig. 181) y pu Ise [Enter].
Haga clic en otro l ugar de la hoja de trabajo a continuacin, compruebe que se ha
nom brado correctamente el nombre del rango haciendo clic en la flecha que

apunta hacia abajo a la derecha del Cuadro de Nombres. Se debera ver el


nom bre del rango en la lista.
Vuelva al Editor de Visua l Basic y haga clic en el cuad ro combinado que est

editando para seleccionarlo y Iuego vaya a la Ventana de Propiedades y busque

la propiedad RowSource. Escriba el mismo nombre que utiliz para la rango que

contiene la Iista (en este ejemplo, Das. Fig 182).


Propiedades - C omboBoxt
N

is6tyle
0 - fris6tylel pt
is tidth Loed NatchEntry t4atchRequired Calse
f4axtength f4ousefcon NousePointer
t - frNatchEn False
(f+inguno)
- kNousePr

Fig.

182 Asig nar nombre Das.

Fig. 183 Cuad ro combinado con


los datos.

Pruebe el cuadro combinado, haciendo clic en el formu Iario para activan o (pulse
la tecla [FS]) y podr ver que el cuad ro combinado muestra a hora la Iista de
das. (Fig . 183) .
Compruebe
Muchos

el

orden

usuarios

de

cuando

tabulacin.
desean

navegar"
por los controles en el formu tario lo hacen
pulsando la tecla

[Tab] .

El

orden

de

tabu lacin es inicial mente definida por el


orden en que se colocan los controles en el
formu Iario.
Ejecute el formu Iario (abr r en Excel) y, a
partir del primer cuad ro de texto, pulse la

tecla [Tab] va rias veces y com pruebe que


se va

navegando" por

los controles a

travs del formu Iario en un orden lgico.


Si desea ca mbiar el orden debe cerra r el

formu Iario y en el Editor de Visua l Basic


abra el men Ver y seleccione el comando
Orden de tabu lacin . (Fig. 184).

Se muestra el cuad ro de dilogo con la relacin de todos los controles que


contiene el formula rio. Aqu se pueden mover los elementos (arriba y a bajo) en
la Iista para controla r el com portamiento de la tecla [Tab] cuando se navega en
el formu Iario (Fig. 185).

ttNom0re btpellidos
Ladel1 ctodias Lael2 txtHorario cma.cenar cmdLimpiar Lab+13
txtF recuencia

Fig. 185 Cuad ro de dilogo para cambia r orden .

Aadir procedimientos de control de eventos.


Escriba el cdigo VBA.

El diseo del formu la rio se ha term nado. El siguiente tra bajo es escribir el
cdigo VBA para prog ramarlo, de

acuerdo a los requerimientos.

El

cdigo

es

necesario para programar los controles.


Es com n que en un formu Iario se tengan tres botones de comando : Aceptar,
Limpiar y Cancelar.

Codificar el botn Cancelar.


El botn Cancelar es el ms sim ple de codificar. Se tiene que hacer el mismo
trabajo que el botn ([x]), incorporado en la esquina su perior derecha del
form ulario, lo cual cierra el formu la rio. Seleccione el botn de comando y
config ure las propiedades (Fig. 186) :
Propidadr - mdC a n lar

r alrv
AutoSue BadCo BadS e

Programa Nacional de Informtica

Pgina 170

Fig .

Pgina 171

186 Configurar las propiedades Name y Ca ption .

Programa Nacional de Informtica

Haga doble clic en el botn de comando que se codificar para el proceso de

Cancelar. (o el botn derecho del ratn y seleccione Ver cdigo) para abrir la
ventana de cdigo e ingresar al mdulo de cdigo.
En el Editor de Visual Basic se ha escrito las l neas Sub y End Sub del evento
Click del botn de comando. Coloque el cursor en la lnea en blanco entre estas

lneas, pulse la tecla [Tab] e introduzca la siguiente lnea:


Unload Me
El cdigo debera tener este aspecto :
Private Sub cmdCancelar Click ()
Unload Me
End Sub

ZCmo ejecutar un formulario?


Probar el cdigo.

Abra el men Depuracin y elija com pilar VBAProject. Si se prod uce un


mensaje de error comproba r su escritura y compile de nuevo.
Luego cambia r a la ventana de diseo de formu iario (pulse [Control] + [Tab] o
haga doble clic en el nombre del form utario en el Explorador de proyectos).
Pulse la tecla [F5] pa ra ejecuta r el formu la rio en Excel .

Haga clic en el botn Cancela r del formu Iario. El formu Iario debe cerrarse y debe
volver al Editor de Visua l Basic. (Fig. 187).

Fig . 187 Botn Cancela r en el Formu Iario.

Evaluar el dato ingresado.

Es importante tener en cuenta que a l ingresar los datos pa ra procesa nos,


estos necesariamente deben tener contenido, para lo cual debe realizar esta
validacin. En el caso de un cuad ro de texto ste debe ser verificado en lo
siguiente:
I. Verificar que el usuario ha i ngresado el dato, esto es llamado "Validacin.

2. El dato ngresado se debe escribir en la hoja de c lculo o servir pa ra


un proceso.
3. Limpia r su contenido pa ra la siguiente entrada de datos.
Proceso de Validacin.

Realice lo siguiente:
I. En el form ulario actual, inserte u na etiqueta, u n cuad ro de texto y u n botn de
comando. (Fig . 188).

Fig. 188 Controles en el formula rio.


2. Configure las propiedades de los controles como sigue:

Control

Propiedad

Valor

Label

Caption

Nombre

TextBox

Name
Name

TxtNombre
CmdAceptar

Caption

Aceptar

CommandButton

Controles ya configurados se muestran como indica la figura 189.

Programa Nacional de Informtica

Pgina 1 7 2

Fig. 189 Controles Configurados.

3. Haga doble clic sobre el botn de comando Aceptar.


4. En la ventana de cdigo se ha generado el procedimiento de evento Click. Fig.
190.
cmdAceptar
Private Sub cmdA oep nsr Click()

Fig. 190 Procedimiento de evento Click.


5. Inserte el siguiente cdigo y los resultados se aprecian en las fig uras 1921 y

If Me.txtNombre.value = " then


Msg box Por favor escriba el Nombre",vbexcIamation,"Error en Nombre"

Ne.txtNombre.Setfocus
End if

Fig . J. 9 J. Va l idacin de Ingreso del Nombre.

Fig . 192 Error en el Nom bre, no se ingreso nada.

Proceso de colocar en una celda el dato ingresado.


Se ha procedido a validar el nom bre y ahora es momento que dicho nombre se
coloque en una celd y los sigu ientes vaya 9 egndose debajo del ltimo
ingresado.

Realice lo siguiente:

En el userform creado, haga doble clic en el botn de comando Aceptar.


En la ventana de cdigo, debajo del nom bre del procedimiento, escriba la
sig uiente declaracin :
Dim nroFila as Long

Se asume que las entradas en la Hoja1 se empezarn a ubicar


debajo de la celda AI.

n roFila - Worksheets(HojaI") . Range(AI.").CurrentRegion.Rows.Count


Esta decla racin cuenta el nmero de filas de datos que se i ncluyen en la regin
que i ncluye la celda AI y g uarda ese nmero en la variable

RowCount. Ahora

escriba las Ineas que perm iten escribir el dato ingresado en la hoja de clcu
lo (Listado 01) :

Listado 01.

With Worksheets("Hoja 1") .Range("A1")


. Offset(N roFila, 0).Va l ue = Me.txtNombre. Value
. Offset(N roFila, 1).Val ue = Format(Now, "dd/m m/yyyy hh : nn :
ss") End With

Debe obtener hasta el momento el procedimiento con el siguiente contenido. (Fig


193) :

Fig .

193 Cdigo del Evento Cl ick, botn Aceptar.

El cdigo utiliza una serie de declaraciones similares para escribir el valor de


cada dato ingresado en una celda. Cada celda se identifica por su posicin
relativa a la celda AI mediante la propiedad VBA Offset. Esto requiere dos
nmeros, el primero representa el nmero de filas de distancia de la celda A 1
(que se mantiene en la variable RowCount), el segundo representa el nmero

de columnas fuera de la celda AI (que est escrito en el cdigo como un


nmero).

Finalmente una ma rca de tiempo se escribe en l a ltima colu nina usando la

funcin format( ) para especificar la hora exacta de ingreso, suministrada por la


funcin Now () . Ahora es un buen momento para compilar y probar el cdigo.

Para completar el procedimiento, despus de que los datos se han escrito en la


hoja de trabajo, el form ulario debe ser prepa rado para un nuevo ingreso de datos.

Limpiar el Contenido del formulario.


En el userform actual, inserte un nuevo botn de comando y aplique las siguientes
propiedades:

Control
Com mand Button

Propiedad

Valor

Na me

Cmd Limpiar

Caption

Limpiar

Adicional mente, esto requiere de otra variable que debe figurar en la

parte

superior del procedimiento :


Dim vctrl As Control
Esta variable representa los controles de la hoja de c lculo y se utiliza r en el
sig uiente ciclo que visita cada control, se com prueba si se trata de un cuad ro
de texto, y si lo es, establece el valor del control en una cadena vaca (

(Listado

Listado 2:

For Each vctrl In Me.Controls


If TypeName(vctrl) - "TextBox" Then
vctrl.Value = " "
End If

Next vctrl
Debe tener el sig uiente cdigo (Fig 194) :

).

Compruebe y guarde el UserForm terminado.

Una vez terminada la labor de codificacin del formu Iario, debe com pila r y proba
r el cdigo. Si usted est convencido de que el

form u Iario

est

funcionando

correcta mente, g uarde el a rchivo. El trabajo est casi terminado. Todo l o que
queda por hacer es crear un macro pa ra abr r el form ula rio.

Una macro para abrir el formulario de usuario.


a. Como se ha visto, es fcil a brir el UserForm en el Editor de Visua l Basic, pero
la persona que va a utilizar esta herramienta necesita una manera fcil pa
ra a brir el form u Iario de Excel.
b. Seleccione el formu la rio, haciendo clic sobre la cuad rcula.
c. En la ventana de propiedades, asigne en la propiedad Name, el valor:
frm Datos. En la propiedad Caption, escriba: Entrada de Datos.
Debe obtener la sig uiente apariencia (Fig 195):

Fig . 195 El form u Iario de Datos.

Entonces para abrir el formulario desde el entorno del Excel, hay varias
maneras de hacer esto, todos implican una macro que contiene la declaracin
muy simple:
frmDatos.Show

Abrir en forma manual el Formu Iario.


Esta declaracin se puede inclu ir en una macro que el usua rio puede lla ma r
desde el men ha bitual . Pa ra crear esta macro primero vaya a l men Insertar del
Editor de V sua l Basic y elija mdulo pa ra agrega r un mdulo estnda r pa ra el
libro que contiene el formu Iario de usua rio. Escriba el cdigo siguiente en la
ventana de cdigo del mdulo nuevo (Listado 3) :

Listado 3:
Worksheets("Hoja 1").Activate
frm Datos. Show
Debe mostra r el sig uiente contenido (Fig 196) :

Subiir_frrLa c os() Worksheezs(H o j al).Acziva ue f-rDai os.S:ow


J S E

Fig. 196 Cdigo macro abrir el form utario frmDatos.


La primera lnea es opciona l . Le dice a Excel para cambia r a la HojaI.

Pero el cdigo que escribe los datos en la hoja de c lculo especfica la hoja de
c lculo por su nombre, podra ser omitido y los datos seran escritos en el

luga r

correcto.
El usua rio puede ejecuta r esta macro en el men de la forma habitual
(Ficha Programador -+ Gru po Cdigo -3' Macros) o desde un botn en la barra
de herramientas de acceso r pido o ta mbin se puede asignar a un botn de
comando.

Pa ra abrir el formu la rio desde un botn de comandos, siga los sig uientes pasos:
1. Del gru po formu Iario, inserte un botn de comando en la hoja 1 (Fig 197).
" i
Insertar l.lcdc

lngresoDatos
Fig . 197 Botn de comando para ejecuta r la macro.

2. Asocie la macro Abrir_frmDatos al botn de comando.


3. Pruebe a abrir el formulario de datos, haciendo clic en el botn de comando
Ingreso

Datos.

Abrir el formulario automticamente.

Se puede hacer uso de uno de los procedimientos

de

Excel

de

eventos

incorporados pa ra a brir el form utario de usuario automtica mente cuando se a


bre el libro.
En el Editor de Visual Basic busque y haga doble clic en el mdulo ThisWorkbook
en el Explorador de proyectos.
Este mdu lo existe para gestionar las macros especficas pa ra un propsito

particu la r en el libro actua I.


En la pa rte su perior de la ventana de cd igo hay dos listas desplega bles.
La izquierda actual mente leer Genera l . Abra la Iista y seleccione Workbook.
Como se muestra en la fig ura 198.
y

'

veP /

xy

VBARrojscf (lMrvfown01tsm)

Fig. 198 El mdulo Workbook.

El Editor de Visual Basic crea automtica mente la macro Workbook Open pa


ra usted. Todo el cdigo que se escribe en esta macro se ejecutar

automticamente cuando se abre el libro. Completar el cdigo de la macro de la


siguiente manera (Listado 7) :
Private Sub Workbook Open()

Worksheets( "Hoja 1").Activate


End Su b
Adicionalmente en el mdu lo actual inserte el sigu iente cdigo (Fig 199) :

Suk un o_Cpen()

Fig. 199 Crea r la macro para a brir el form ula rio frm Datos.
Guarde todo el contenido del libro.

Recuerde que debe hacerlo como se muestra en la imagen (Fig 200) :


Nombre d arrf vo

- ' i "

Tipo: Libro d cI habilitado para r acros {xlsrn)

Fig. 200 Nombre del a rchivo a gua rdar.

AI a brir nueva mente el libro Usted com probar que el form ula rio se a bre
automticamente.
Compruebe que va l ida el ingreso del nombre y que el que ha ingresado se va

adicionando a l ltimo va for ingresado. Esto lo puede com proba r cerrando y


volviendo a a brir el form ulario, as como ingbesando nuevos nom b res.

Trabajar con UserForms.


Se mostra rn alg unos casos especiales de userforms que interactan con la
hoja de clcu lo y que sirven de gua para crea r otros.

Programa Nacional de Informtica

Pgina 180

Proyecto: Registro de datos en cursos.


En este proyecto se muestra cmo crea r un form ulario de usua rio para el
ingreso de datos persona les de los empleados que asisten a una capacitacin anual
por parte de la em presa.
Se utiliza un gru po de los controles como :
Los cuadros de texto, cuad ros com binados, botones de opcin ag rupados en
un marco, casillas de verificacin y botones de comando.
En cada uno de ellos se inserta r cdigo VBA para que se obtengan datos
validados. Cuando el usuario hace clic en el botn Aceptar los datos del formu Iario
se ingresan en la siguiente fi la disponi ble en la hoja de clcu lo.

El trabajo se divide en dos secciones principales :


1. La creacin del form ulario.
2. Escrib r el cdigo VBA.

El formu la rio de usua rio fi nal se ver algo como la sigu iente imagen (Fig. 201).

Fig. 201 Formulario de Ingreso de Datos.

Crear el formulario.
Como se observa en la figura 201, hay:
a. Cuadros de texto.
Nombre (Se ingresar el Nombre y a pellidos de la persona).

Telfono en el que se registra el nmero del telfono del usuario.

Cuadros combinados.
Departamento.
z

Curso.

Que permiten selecciona r un elemento de una lista de datos que identifican el


depa rtamento a l que pertenece y el curso a recibir.
Botones de opcin.
Bsico.
ntermed io.
Avanzado.

Agru pados en un marco (Nivel) para que el usuario pueda elegir slo uno de
los niveles.
d. Casillas de verificacin.
Almuerzo.
Refrigerio.

Estos controles debido a que no se agru pan en un marco, pueden ser


seleccionados de acuerdo a lo que el usuario requiera. Si n embargo, si una
persona elige Al muerzo, no es necesa rio saber si requiere o no Refrigerio.

Por lo tanto, la casilla de verificacin Refrigerio es de color g ris hasta que se


necesite.

e.

Botones de comando.
ingresar.
Limpiar Datos.
Cancelar.
Cada

uno rea l iza una fu ncin

predefinida

cuando

se hace cl ic. Ingresar

permitir que los datos se inserten en las celdas de la hoja1.


Limpia r Datos prepa ra para una nueva entrada de datos y Cancelar para
anular cualquier actividad rea lizada .
Entonces debe Abr r un nuevo libro, ingresar a l editor VBA, inserta r un nuevo

Userform, inserta r los controles ta l como se indica en la figura 201 y l uego


configura r las propiedades de los controles, tal como se deta lla a continuacin :

Programa Nacional de Informtica

Pgina 1 8 2

Propiedades de los controles.

Control

Tipo

Ajuste

Propiedad
Name

FrmCa pacitacion

Ca ption

Capacitacin Empresarial

Textbox

Name

TxtNom bre

Telfono

Textbox

Name

TxtTelefono

Departamento

Combo box

Name

CboDepartamento

Curso

Combo box

Name

CboCurso

Nivel

Frame

Name

Fra Nivel

Ca ption

Nivel

Bsico

Option Button

OptBasico

Intermedio

Option Button

Optlntermed io

Avanzado

Option Button

OptAvanzado

AI muerzo

Check Box

UserForm

UserForm

Nombre

Refhgeho

Ingresar

Cancelar

Limpiar Datos

Check Box

Command Button

Command Button

Command Button

Ch kAlmuerzo

Ebd

Falso

Ch kRefr ger o

Enabled

Falso

Name
Caption

Cmdlngresar

Default

Verdadero

Name

CmdCancela r

Caption

Cancelar

Cancel

Verdadero

Name

Cmd Limpia r

Caption

Limpiar Datos

Ingresar

Agregar el cdigo.
Inicializacin del formulario:
La mayora de los form ula rios necesita de alg n tipo de configuracin cuando se

abren.
Esto permite esta blecer valores por defecto, por ejem plo un cam po vaco, o
los datos de las listas de los cuadros combinados.

Este proceso se Ilama nicializacin del formulario y es realizado

por

una

macro Ilamada UserForm_Initia lize. Entonces, para inicia lizar el formulario


de Capacitacin Mensual debe genera r el cdigo. Realice lo sig uiente:
I. Pa ra ver la ventana de cdigo del formu Iario vaya a l Men Ver -9' Cdigo o
pulse la tecla F7.
2. Cuando

la

ventana

de

cdigo

se

a bre

por

procedi miento UserForm_Cl ick () vaco. Utilice las

primera
listas

vez

contiene

desplega bles

un

en la

parte superior de la ventana de cdigo. Del cuad ro combin ado de la


izquierda elija UserForm y del Iado derecho el mtodoInitialize. Ver Figura 202.

Fig. 202 Inicializar el formu Iario.

3. Esto crear

el

procedimiento

que

necesita.

procedimiento UserForm Click () .


4. Escriba el cdigo sig uiente en el procedimiento:
Private Sub UserForm Initialize()
txtNombre. Va l ue =

txtTeIefono. Value = ""


4Vith cboDepadamento
.AddItem Ventas
.AddItem " Marketi ng"

.AddItem Ad ministracin"
.AddItem " Diseo"
.AddItem " Publicidad"
.AddItem " Log stica "

.AddItem "Transporte"
End With
cboDepartamento.Val ue = ""
With cboCurso

Ahora

puede

eliminar

el

.AddItem "Access"
.AddItem "Excel"
.AddItem "PowerPoint"
.AddItem "Word"

.A

ddItem "DreamWeaver"

End With
cboCurso.Va l ue "" optBasico - True
chkAl muerzo =
False chkRefrigerio =
False txtNombre.

End Sub

SetFocus

cCmo funciona el cdigo de iniciacin?


La finalidad del procedimiento UserForm_Initialize () es preparar el formulario
para su uso, establecer los valores iniciales para los diversos controles y la
creacin de las listas que los cuadros combinados mostraran.
Por ejemplo las dos lneas siguientes establecen el contenido de las dos cajas de
texto en vaco sin contenido:
txtNombre.Val ue - ""

txtTelefono.Va l ue = ""
Luego vienen las instrucciones para los cuad ros com binados. Primero se ag regan
los datos de la l ista, a conti nuacin, el va for i nicial del cuadro combi nado que se

presenta r a la vista del usua rio.

With cboDepartamento
.AddItem "Ventas
.AddItem " Marketing "
(Agregar los que sean necesarios...)
End With

cboDeparta mento.Value = ""

En cuanto a los cursos se seleccionan a partir de botones de opcin. Si se


requiere una eleccin inicial, se puede hacer a partir del primer curso, en este
caso:

optBasico = True
Para elegir si seleccionar Almuerzo o Refrigerio se emplean las casillas de
verificacin. Ambas casillas de verificacin se establecen inicia l mente en False
(es decir, sin ma rca r). Se establece en True si desea que la casilla de
verificacin se muestre ya marcada:
ch kAlmuerzo = False
ch kRefrigerio False

Por ltimo, el enfoque se realiza al primer cuadro de texto. Esto coloca el


cursor en el cuadro de texto de modo que el usuario no necesita hacer clic
en la cuadro de texto antes de comenzar a escribir:
txtNombre. SetFocus

Configurar los Botones de Comando


Hay tres botones de comando en el form ulario: Ingresar, Limpia r Datos y

Cancelar, y cada uno debe ser codificado de acuerdo a los requerimientos


propios del proceso de ingresa r los datos en la hoja del libro.

Codificar el botn Cancelar.


Anteriormente, se ha utilizado la ventana Propiedades para establecer la
propiedad Anular del botn Cancelar en verdadero.
Cuando se establece la propiedad Cancel como True, en un botn de comando

esto tiene el mismo efecto de "hacer clic en" ese botn cuando el usuario
presiona la tecla Esc en su teclado.
Pero esto por s solo no har que cualquier evento suceda en el formulario. Es
necesario crear el cdigo para el evento click del botn que, cierre el formulario.
Rea lice el sig uiente procedimiento:
1. Estando a bierto el form ulario de usuario pa ra edita r en el Editor de

Visua l Basic, haga doble clic en el botn Cancelar. La Ventana de

cdigo del formulario se abre con el procedimiento cmdCancel Click () listo


para su edicin.

2. El cdigo para cerrar el formulario es muy simple. Agregue la siguiente lnea


de cdigo en el procedimiento:

Private Sub cmdCancel Click()


Unload Me
End Sub

Codificar el botn Limpiar Datos.


Se tiene un botn para borra r los datos en el formu Iario, en caso que el
usuario cambie de opinin y reinicie todo. Para que sea ms fcil si hay algn

cambio en el registro de datos de los cursos para la capacitacin.


Todo lo que tiene que hacer es ejecuta r el procedimiento de inicializacin de
nuevo.

Una macro se puede emplear para ejecutar otra macro (o una serie de macros
si es necesario) mediante el uso de la palabra clave: Call.
Siga los siguientes pasos:
1. Haga doble clic en el botn Limpiar Datos del formu Iario. La ventana de
cdigo del form utario se abre con el procedimiento cmdLimpiar_Click () Iisto

para su edicin.
2. Agreg ue el siguiente cdigo al procedimiento:
Private Su b cmdClea rForm_CIick()
Call UserForm Initalize
End Sub

Codificar el botn Ingresar.


A contin uacin se indica el cdigo VBA que se tiene que insertar para la

transferencia de los datos del formu l a rio a la hoja de clculo. Cuando se


estableci la propiedad Cancel en el botn Cancelar en True tambin se debe
configurar la propiedad del botn Ingresar Default como verdadera.
Esto sera lo mismo que hacer clic en el botn Ingresar cuando el usuario
presiona la tecla Enter (o Retorno) en su teclado.
Entonces, debe rea l iza r los siguientes pasos:

I. Haga doble clic en el botn Ingresar. La ventana de cdigo del form u Iario se
a bre con el proced i miento cmd ingresa r_CIick () l isto para su edicin .

2. Modificar el procedim iento pa ra ag regar el sigu iente cdigo:

Private Sub cmd Ingresar Click()


ActiveWorkbook. Sheets("Hoja 1").Activate

Range("AI").Select
Do
If IsEm pty(ActiveCelI) - False Then
ActiveCelI.Offset(1, 0). Select
End If
Loop Until IsEm pty(ActiveCeII) = True

ActiveCeII. Value

txtNombre. Value

ActiveCell. Offset(0, 1) = txtTeIefono.Va l


ue
ActiveCell. Offset(0, 2)

cboDepa rtamento.Va l ue

ActiveCeIl. Offset(0, 3) - cboCurso. Value


If optBasico - True Then
ActiveCeII.Offset(0, 4).Value = " Bas"
Elseif optlntiate = True Then
ActiveCeII.Offset(0, 4) .VaIue = "Int"
Else
ActiveCeII.Offset(0, 4) .VaIue ="Avn"

rerefln'fn n)i' | ue- No


nd
rhkP efhgehn = Trueie=

Arti eCe Ofsetf0,


'frhkA|m erzn = Fn|se *n
ActveCe ORse(0,

lse
Arti' re|l Cffs'fM Gl " =4| = h| o

Ra gef "A

el ert

cCmo funciona el cdigo del evento CmdIngresar_Click?


Las dos primeras Ineas asegura ran que el libro de tra bajo activo sea el correcto
y mueve la seleccin a la celda AI :
ActiveWorkbook. Sheets(" Hoja

").Activate

Range("A1") . Select

Las sigu ientes l neas mueven la seleccin hacia debajo de la hoja de c lculo
hasta que encuentre una celda vaca:

If IsEmpty(ActiveCelI) = False Then

ActiveCeIl. Offset(1, 0).Select


End If
Loop Until IsEmpty(ActiveCell) = True
Las sigu ientes cuatro lneas escriben el contenido de los controles de ing reso de
datos del formu Iario en la hoja de clculo, utilizando la celda activa (que es en la
col umna A) como referencia y movindose a lo largo de la fila de una celda a
la vez :
ActiveCelI.Value = txtNombre. Va l ue

ActiveCeII.Offset(0, 1) - txtTeIefono. Value


ActiveCeII.Offset(0, 2) - cboDepa rtamento. Va l ue
ActiveCeII.Offset(0, 3) = cboCurso. Value
Los botones de opcin han sido colocados en un marco en el formu la rio pa ra
que el usuario pueda elegir slo uno. Una instruccin IF se utiliza pa ra indicar a
Excel lo que debe asignar para cada opcin :

If optBasico = True Then


ActiveCelI.Offset(0, 4).Val ue = "Bas"
Elseif optlntiate = True Then

ActiveCeII.Offset(0, 4).Value - "Int"


Else
ActiveCelI.Offset(0, 4).Val ue = "Avn "
End
If

Los IF de Excel son sencillos de usar. Se pueden tener muchas opciones como
desean, slo tiene que insertar un ElseIf adicional para cada uno. Si slo hay
dos

opciones, no necesitara Elseif , slo If y else seran suficientes (no se olvide de


cerrar la estructura condicional con un End If ) .
Hay otra instruccin IF para cada casilla de

verificacin.

Para el

al muerzo

se

requiere una casilla de verificacin, un lzl en la casilla significa "S", la persona


requiere un a l muerzo, y no confirmacin sig nifica "No" no lo requ iere.

If chkAl muerzo = True Then

ActiveCelI.Offset(0, 5).Value - "Si"


Else

ActiveCelI.Offset(0, 5).Value = "No"

End
If

Vendra bien una declaracin simila r en la casilla de verificacin del Refrigerio,

pero si la persona no necesita Almuerzo es irrelevante si requiere o no


Refrigerio. En todo caso, sera errneo suponer que no requ iere Refrigerio,
simplemente porque no requera el al m uerzo. La instruccin IIpor tanto, contiene
una segunda sentencia anidada if:
If ch kRefrigerio = True Then

ActiveCell . Offset(0, 6).Va l ue = "Si"


Else
If chkAl muerzo = False Then
ActiveCeII.Offset(0, 6) .VaIue
=""
Else

End
If

ActiveCeII.Offset(0, 6) .VaI ue = "No"

End
If

Una ma rca en la casilla del Refrigerio sig nifica "S" es deci r la persona desea un

refrigerio. Si no hay una cruz en la casilla, el anidado IF verifica la casilla de


verificacin del Aal muerzo Requerido casilla de verificacin. Si el almuerzo es
Requerido la casilla de verificacin tiene una marca en l, entonces si no hay
marca en la casilla de verificacin Refrigerio sign ifica que la persona no requiere

Refrigerio as que inserta "No" en la celda. Sin embargo,


verificacin del al muerzo esta
Programa Nacional de Informtica

si

la

casilla

marcada, entonces no se sa be si la

de

persona
Pgina 190

requiere Refrigerio (no importa de todos modos) por que la celda

se deja

en

blanco ("") .

Pgina 191

Programa Nacional de Informtica

Finalmente se prepara el formu Iario pa ra un nuevo ingreso desde el principio de la

hoja de clcu lo, Iisto para la siguiente entrada :


Range("AI"). Select

Gestin de las casillas de verificacin.


Final mente, un ejemplo de cmo los controles en un form ulario pueden ser
manipu lados cuando est n en uso. Cuando las propiedades del control se
establecen, la propiedad Enabled de la casi lla de verificacin Refrigerio

se

estableci en False. Cuando un control no est habilitado, el usuario no puede


introducir un valor en l, a pesar de que puede contener un va for que ya esta
ba all, y VBA puede agrega r, qu itar o cam biar el valor.
No necesita sa ber si la persona pide Refrigerio, si no se ordena el al muerzo. Por lo
tanto, la casi lla de verificacin del Refrigerio permanece desactivada a menos que

una marca se coloque en la casilla de verificacin del a l muerzo. A contin uacin,


el usua rio es libre de ma rca r la casilla de verificacin Refrigerio si lo desea . Si
lo marca sa br que se ha respondido "S" y si no lo hace, sabr que han
respondido "No".
Puede ca mbia r la propiedad Enabled de fa Iso a

verdadero pa ra tener un

procedimiento que se ejecute automtica mente cada vez

que el valor del

Alm uerzo requiere com proba r los cambios de la casilla. Afortunadamente,


hay ms controles que tienen un procedimiento Change y la que est usando aqu
es chkAlmuerzo_Change().

Se

usa

esta

opcin

para

activar

la casilla

de

verificacin cuando el Refrigerio est presente y requiere que la casilla de


verificacin est marcada, y desactiva rlo cuando la casilla de verificacin del

almuerzo no est marcada .


Slo hay una cosa ms que tiene que hacer. Su ponga que alguien marc la casilla
de verificacin requ iere alm uerzo, y ta mbin marc la casilla de verificacin
Refrigerio. Luego cam bia de opinin y retiran el check de la casilla de verificacin
Alm uerzo.

Una lnea adicional de cdigo puede hacer que el check se retire cuando el cuad
ro est desactivado. Aqu est el cdigo:
Private Sub chkAl muerzo_Change()
If chkAl muerzo = True Then

chkRefrigerio. Enabled = True

Else

chkRefrigerio. Enabled = False


chkRefrigerio = False
End
If
End Sub

Apertura del Formulario.


El formulario est Iisto para su uso, as que tiene que ser abierto con una macro
sim ple. Se puede conectar a un botn de la ba rra de herra mientas persona l izada,

u n botn de comando dibujado en la hoja de clculo o u n grfico eua lqu iera (a la


derecha haga cl ic en el g rfico y seleccione Asignar macro) . Si es necesario, cree

un mdulo nuevo para el libro y aadir el siguiente procedimiento :

Sub AbrirfrmCapacitacion()
frmCa pacitacion. Show
End Sub

Ejercicios prcticos con formularios.


Actividad 16: Formulario de Inicio (Formlnicio.xlsm).
Creacin de una "pantalla de bienvenida" para un libro.
Ahora, se explica r cmo crear una Formu Iario de presentacin de un libro de Excel.
Un Formu la rio de bienvenida a pa rece cuando se a bre el libro y desa parece a
utomticamente despus de un determinado tiempo transcurrido.
Configurando el procedimiento.

Siga estas instrucciones para crear un Form ulario de inicio de su


proyecto. I. Crear un nuevo libro de trabajo como se ha indicado
anteriormente.
2. Ingrese al Editor de Visua I Basic e inserte un nuevo UserForm al proyecto. El nombre
del formu la rio ser : UserForm 1.

Programa Nacional de Informtica

Pgina 1 9 2

3. Inserte un control de imagen, se puede insertar una imagen del logo de la em presa o
a lguna otra imagen representativa de lo que se quiere resalta r en el form ulario de
Bienvenida (Fig 203) .

Pgina 193

Programa Nacional de Informtica

Diplomado en Microsoft Excel

ara la Gestin Em resarial

Fig. 203

Insedar e|
Control Imagen.

Fg4

ns

5. Seleccione la imagen a insertar en la ubicacin de la ca rpeta que la contiene (Fig

205) :

Fig. 205

Ubicando la imagen a inserta r.

Se muestra el sigu iente contenido (Fig 206) :

Fig . 206 Aj ustando la imagen al area del control imagen

6. Adems, es posible que desee establecer la propiedad Ca ption de UserForm a una


cadena vaca.

7. Ubicar el objeto ThisWorkbook, haga doble clic y cree el procedim iento indicado en la
Fig . 207 :
Archivo

Edicin

Ver Insertar

Formato

Depuracin

Ejecutar

Herramientas

Complementos

@ Formlnicioxlsm - ThisWorkbook (...

F i ivaze Sub Wc:kb ook Cp en()


UserForml.5.cw
En:l 5uE

Fig . 207 Procedi miento para a brir el Form

8. Haga doble clic en la zona de las cuadriculas del UserForm 1 y escriba el siguiente
procedi m iento. Ver figura 208.

Programa Nacional de Informtica

Pgina 1 9 4

Fig .

208 Procedi miento para controlar el tiempo de permanencia del Form

Private Sub UserForm Activate()

Application. OnTime Now + TimeVal ue("00 :00 :05"), " KillTheForm "
End Sub

9. En un nuevo mdulo, inserte la siguiente subrutina (Fig 209) :

Fri' e s,r

illT:,ro r()

Jnload UserForn.1
ind 5uh

Fig . 209 Procdi miento para descargar el Form.

ZCmo funciona?
Cuando se abre el libro, se ejecuta el procedim iento Workbook_Open.
Este procedi miento muestra el formu la rio de

aparece,

se

produce

el

evento Activate

usua rio.

Cuando

que activa

el

el

UserForm

procedimiento

UserForm_Activate.
Este procedimiento utiliza el mtodo OnTime

del objeto de aplicacin

ejecutar el procedimiento (lla mada KillTheForm) por un tiempo determinado.

para
En

este caso, el tiempo es de cinco segu ndos. (Es posible cambiar este interva lo
modificando el a rgumento de la funcin TimeValue).

El procdimiento KillTheForm simplemente descarga el formu Iario de usua rio.


Resu ltado en la figura 210.

Fig. 210 Conten ido Formu Iario de Inicio.

Actividad 18: Creacin de un formulario mediante programacin.


En ciertas ocasiones no se em plea adecuadamente el Entorno de Desa rrollo Integrado
de Visual Basic (VBIDE) el cual brinda ciertas herramientas que abrevian y potencian

las aplicaciones que se pretenden crear.


En este ejemplo se emplear la funcin Getoption para gestionar botones de opcin en
un formu Iario. El ejemplo va a ayudarle a entender cmo funciona el VBIDE.
La funcin Getoption.
Esta fu ncin lla mada Getoption, tiene tres argu mentos:

OpArray: U na matriz de cadenas que contiene los elementos que ser n mostrados

en el formu la rio como botones de opcin (Option Buttons) .

Default: Un entero que especifica el botn de opcin seleccionado (Option Burron)


por defecto cuando el formu tario es mostrado en la pantalla. Si es cero, ninguno de
los OptionsButtons se muestra.

Ttulo: Texto a mostrar en la barra de t ftu lo del UserForm .

Cuando la funcin es Ilamada se ejecutan las siguientes tareas:


1. Se crea un nuevo formu Iario de usuario.
2. Se agrega controles Option Button a l UserForm, el nmero de estos corresponde a
l nmero de elementos en el a rgumento OpArray.

3. Se agregan dos controles CommandButton al UserForm (Aceptar y Cancelar).


4. Crea dos procedimientos pa ra manejar los eventos Click de los botones de comando.

5. Aj usta el ta ma o del UserForm para config urar a los OptionButtons.

6. Se muestra el formulario de usuario y espera la respuesta del usuario.


7. Devuelve el nmero de ndice del elemento seleccionado al procedimiento de Ilamada
- o lo devuelve Fa lse si el UserForm fue cancelado.
8. Elimina el formu Iario de usuario.
La funcin Getoption es muy til para solicitar informacin de un usuario, y a menudo
es una excelente alternativa de uso en Iugar de B't sg Box o InputBox - y ciertamente
es ms fcil que crea r un UserForm persona lizado.

Este proceso es muy rpido y casi instantneo en un sistema.

Uso de la funcin Getoption.


La funcin es com pleta mente de a uto-contenido en un mdulo. En consecuencia,
se puede aadir a cualquier proyecto existente importando el archivo * BAS o
copiando y pegando el cdigo.

El siguiente ejemplo es un procedimiento simple que muestra el uso de Getoption. Se


crea una matriz de 12-elementos (Ops) que consta de los nombres de los meses. A
continuacin, lla ma a la funcin Getoption pasando los a rgumentos sig uientes:
La matriz de 12 tems.

Un literal 1 (el primer elemento es el valor predeterminado).

Una cadena literal ("Seleccione un mes").


Sub NombreMes()
Dim Ops(1 To 12) As String
Dim i As Integer
Dim mes elegido As Variant
Crea el array de los nombres de los meses
For i = ITo 12

Ops(i) - Format(DateSeriaI (1, i, I), "mm mm")


Next i

mes elegido = Getoption (Ops, I, "Seleccione un Mes")


If mes_eIegido = Fa lse Then

Range("A6") = "Sin Seleccionar"


Else

Range("A6") - Ops(mes eleg ido)


End If
End Sub

La sig uiente fig ura 21I, de la izquierda, muestra el Userform que se muestra a l usuario.

Cuando el usuario hace clic en Aceptar, la fu ncin Getoption devuelve un valor entre Iy
12. Si el usuario hace clic en Cancelar, la funcin devuelve Fa lse.
En la

fig ura 21I, de la derecha, se seleccionan los d as de la semana de un rango

previamente nom brado.


Selecc one ur Me

Cancelar
Aceptar

Fig. 211 Formu la rios Generados por la funcin Getoption.


Realice el sig uiente procedi miento :
I. En un nuevo libro va a i nsertar el sig u iente contenido (Fig . 212) :

Ver Nombre de Mes

Formas: Bisel

Botones de
comardo

Formas:

redondeadas
Fig. 212 Contenido del libro de Getoption.
El primer botn de comando se enlaza a la macro : NombreNles.
El seg undo botn de comando se en taza a la macro: NombreDia.

La forma rectngu lo de esqu nas redondeadas se configura como se indica en la

fig ura (Fig. 213).

Clic y cambie el nombre

Escriba la
celda
relacionada

Fig. 213 Configura r el Rectngu lo esqu nas redondeadas.

El primer rectngu lo tiene de nombre VerMes y se relaciona con la celda B6.

El segundo rectngu lo tiene de nombre VerDia y se relaciona con la celda A7.

Asigne una imagen como fondo de la forma Bisel .

2. Ingrese al ventana

de cdigo, en

un

nuevo

mdulo, inserte

los siguientes

procedim ientos (Fig. 214, 215) :

'7owlreMes()
Dim Cps(1 To 12) As S o rizg

Dim i As Incege:
Diw res_elegiao As 'ariant
?iea si i rr a ie i:a -:r r-z

r: i - i T .z

Cps(i} = Fo:xac(Da oe5erial(1, i, .), rxnn")


.exn i
mes_ elegio - GezCFicn (Cps, 1, Seleccione

if rres elecido - Talse T..eRange(6)= 6iz Seleccionar

Mes)

6lse
Razge(A6)j- tps(me e_elegido)
En If

Fig .

21704 Proced imiento para seleccionar el mes.

Se resalta que el mes seleccionado se guardar en la celda A6. En la celda B6,


escri ba la frm ula : = Nompropio(A6).

t4o wr reDia()
Cps()
Ls 'sriunr
Dim Dim
Din

Cnz Ls Izzege:, i Az Izc eger dia elegido As 'aria-u

Cnn
Range(Diaz)
ReDim
.Co znn Cpa (i Tc Cnn)

ro:
- :=c
i
Dr

Cps(i) = Rang e {"Dias) .Range(A l) .Cffse n (i - l, O)

'4en i
ia elegido - Ge Cpuicn (Ops, l, Seleccione un Da) IT ia eleoido = Talse T.e/ Range(A

) /- "

Ra-ge(A)j - Cps(dia elegido)

Fig. 215 Procedimiento para seleccionar el d a.


'

Se resalta que el mes seleccionado se gua rda r en la celda A6.

3. En un nuevo mdulo se insertar el cdigo de la funcin Getoption. Se muestra la


parte i nicial de la fu ncin (Fig . 216) .

Fig . 216 Cdigo de la Funcin Getoption

Programa Nacional de Informtica

Pgina 200

4. El cdigo completo es el siguiente:


Option Explicit
' Paso d e reg reso la fu ncin desde el form u l a rio d e usua
rio Public GETO PTION RET VAL As Variant

Function GetOption(OpArray, Default, Title)


Dim TempForm

'As VBComponent

Dim Newopt on Button As bt sforms.OptionButton


Dim NewCom mand Button 1 As l"t sforms.Com mand
Button Dim NewCom mandButton 2 As
Nlsforms.CommandButton Dim TextLocation As Integer
Dim X As Integer, i As Integer, TopPos As Integer
Dim MaxWidth As Long
Dim WasVisible As Boolean

'Oculta r ventana de VBE pa ra evita r parpad eo d e pantalla


Application.VBE. MainWindow. Visible = Fa lse
Crea el UserForm

Set TempForm = Th isWorkbook.VBProject. VBComponents. Add(3)


Tem pForm . Properties(" Width) = 800
'Ag rega los Option Buttons

TopPos = 4
MaxWidth = 0 'Guarda el ancho del mayor Optionbutton
For i = LBound(OpArray) To UBou nd(OpArray)
Set Newoption Button - TempForm. Desig ner.Controls. Add("forms. Option Button.
1") With Newoption Button
.Width = 800

.Ca ption = OpArray(i)


.Height = 15
.Left - 8

.Top = TopPos
.Tag = i

.AutoSize = True
If Default - i Then .VaIue - True

If .Width > MaxWidth Then MaxWidth = .Width

End With

TopPos - TopPos + 15
Next i
'Ag rega el botn Can ce la r

Set NewCommand Button 1 - TempForm. Desig ner.Controls.Add("forms. Com mand Button.


1")

With NewCommandButton 1
.Ca ption ="Cancelar"

.Height = 18
.Width = 44
.Left - MaxWidth + 12

.Top = 6

End With
'Ag rega el botn Acepta r

Set NewCommand Button2 = TempForm. Desig ner.Controls.Add("forms. Com mand Button.


1") With NewCommand Button2
.Ca ption ="Aceptar"
.H

eight - 18

.Width = 44
.Left = MaxWidth + 12

.Top = 28
End With
'Ag rega r controlador de eventos-su bs pa ra l os boton es de comand o

With TempForm.CodeMod ule


X = .CountOfLines
.I nsertLines X + 1, "Su b Command Button 1 Click()"
.InsertLines X + 2, " GETOPTION RET VAL- Fa lse"
.InsertLines X + 3, " Unload Me"
.InsertLines X + 4, "End Sub"
.InsertLines X + 5, "Su b Command Button2 Click()"

.InsertLines X + 6, " Dim ctl"


.InsertLines X + 7, " GETOPTION RET VAL - Fa lse"
.InsertLines X + 8, " For Each ctl In Me. Controls"
.InsertLines X + 9, "

If ctl.Tag < """" Then If ctl Then GETOPTION_RET VAL =

ctI.Tag"
.InsertLines X + 10, " Next ctl"
Programa Nacional de Informtica

Pgina 202

.InsertLines X + 11, " Unload Me"


.InsertLines X + 12, "End Su b"
End With
Config ura el formu l a rio

With TempForm

.Properties("Caption") = Title
.Properties("Width") - NewCommand Button 1.Left + NewCom mand Button1.Width +
10 If .Properties(" Width") < 160 Then
.Properties( " Width") = 160
NewCommand Button 1.Left = 106
NewCom mand Button 2. Left = 106
End If
.Properties("Height") = TopPos + 24

End With
' M uestra el form u la rio

VBA.UserForms. Add(Tem pForm. Na me). Show


El imina el formu l a rio

ThisWorkbook.VBProject. VBComponents.Remove VBCom ponent: =Tem


pForm '0 btien e la opcin sel eccionad a de nuevo a l procedimiento de ll a mada
Getoption - GETOPTION RET VAL

End Function

Actividad 19: Impresin con seleccin de hojas a imprimir.


En esta actividad mediante un formu la rio se mostra rn las hojas que contiene un libro y
el usuario decide cual de las hojas va a imprimir.
I. Abra el l ibro: Impri mi r hojas.

2. Vaya a la ventana de cdigo y en un nuevo mdulo, inserte el sigu iente cdigo en el


procedim iento

SeleccionaHojas.

Sub SeleccionaHojas()
Dim i As Integer

Dim PosSu p As Integer


Dim ContadorHojas As Integer
Dim PrintDlg As DialogSheet
Dim HojaActual As Worksheet

Dim cb As CheckBox
Application.Screen Updati ng = Fa lse

Verifica si el libro est protegido


If ActiveWorkbook. ProtectStructure Then
Msg Box "Libro est protegido.",
vbCritical Exit Sub
End If
'Aade una hoja de di logo tem po ra l

Set HojaActual = Act veSheet


Set PrintDlg = ActiveWorkbook. Da logSheets. Add
ContadorHojas - 0
'Aadir las casill as de verificacin

PosSu p = 40
For i = 1 To ActiveWorkbook. Worksheets.Count
Set HojaActua l ActiveWorkbook.Worksheets(i) 'Sa lta hojas
vacas y hojas ocu ltas
If Application.CountA(HojaActuaI.CeIls) < > 0 And

HojaActuaI.Visible Then

ContadorHojas = ContadorHojas + 1
PrintDlg.CheckBoxes. Add 78, PosSup, 150, 16.5
PrintDlg.CheckBoxes(ContadorHojas) .Text =
HojaActual. Na me

PosSup = PosSup + 13
End If

Next i
Mueve el botones Acepta r y Cancela r
PrintDlg. Buttons. Left = 240
'Con fig ura a l tura de di logo, el ancho y la leyenda

With PrintDlg. Dialog Frame


.Height - Application. Max

(68, PrintDlg. Dialog Frame.Top + PosSup - 34)

.Width = 230

.Caption ="Selecciona las hojas a imprimir"


End With
'Ca mbia r el orden de ta bul acin de los botones Acepta r y Cancel
a r ' Po r lo que el botn de opcin primero obtiene el enfoque

PrintDlg.

Buttons("Button

BringToFront

PrintDlg.

2").

Buttons("Button

3"). BringToFront 'Muestra e| cuadro de d|


|ogo

HojaActuaI.Activate
Application.ScreenU pdating - True
If ContadorHojas < > 0 Then
If PrintDlg. Show Then
For Each cb In PrintDlg.CheckBoxes
If cb.Va l ue = xIOn Then

Worksheets(ob.Caption) .Activate
'ActiveSheet. Printout

Impresin Directa

ActiveSheet. PrintPreview 'Previo a Impresin


End If

Next cb
End If
Else
MsgBox "Todas las hojas estn vacas."
End If
Borra r hoja de di l ogo tem pora l (sin
aviso) Application. DisplayAlerts = Fa lse

PrintDlg. Delete
Reacti va r hoja orig ina l

HojaActua l.Activate
End Sub
3. En

la

hoja

Pedidos

inserte

un

botn

de

comando

en lace la

macro

SeleccionaHojas.

Imprimir

4. Ahora, pa ra probar la seleccin de las hojas a imprimir, haga clic en el botn de


comando Imprimir, se muestra el siguiente form ula rio:

5. Se selecciona la hoja Pedidos y clic en el botn de comando Aceptar, se muestra


una vista previa antes de imprimir la Hoja Pedidos.

6. Haga clic en el botn Cerrar vista preliminar si desea sal ir o en el botn Imprimir
si desea realizar una impresin fsica .

Ca

Funciones personalizadas

control de errores.
Objetivos:
9

Creacin de funciones . persona l izadas con VBA.

Uso de mdulos para fu nciones.


Uso de argu mentos en el uso de funciones.
Ejecuta r una fu ncin desde la hoja de clcu lo.
10 Mani pulacin de errores.

Errores tpicos.
Estructura de manejo de errores.
R

Pgina 207

Depuracin de prog ramas.

Programa Nacional de t nformtica

Funciones personalizadas y control de errrores.

Creacin de funciones personalizadas con VBA.


Aunque Excel tiene ms de 300 funciones integradas, hay momentos en los
que no se puede lograr el resultado deseado con una funcin estndar o
quiere obtener el resultado mediante la creacin de una frmula anidada
utilizando una com binacin de funciones est nda r.
Es en este momento cuando una funcin personalizada o funcin defi nida por
el usua rio (UDF) puede ser muy til. Sin em ba rgo pueden ha ber alg unos
inconvenientes a l escribir una fu ncin en el VBA, en Iugar de una macro o
procedimiento. Siempre y cuando se es consciente de las reglas, no se debera
encontrar ningn problema serio.

Para la creacin de una UDF se requiere el uso de VBA. Esto significa que un
usuario no puede grabar una UDF, tiene que crear la UDF por si mismo. Sin
embargo, esto no quiere decir que no se puede copia r y pegar fragmentos de una
macro gra bada en su UDF.
Una UDF no tiene la misma flexibilidad que un procedimiento estn da r. Una UDF

no puede alterar la estructura de una hoja de clculo, como cambiar el nombre


de la hoja, la desactivacin de las lneas de divisin, la proteccin de la Hoja etc.
No pueden cambia r una caracterstica fsica de una celda, incluyendo la que a l
berga la UDF, por lo que no puede utilizar una UDF para cam biar el color de
fuente, color de fondo, de eua lquier celda, etc.
No puede utilizarla para trata r de cam biar eua lquier parte de otra celda de
ning una manera en absol uto. Esto significa que la UDF no puede poner un valor

en una celda, excepto la carcasa de la celda de la UDF. Una UDF no puede utiliza r

muchas caractersticas propias de Excel como autofiltros, filtros avanzados,


Buscar, Reemplazar, por nombrar slo unas pocas acciones.
Puede utilizar una UDF pa ra llamar (ejecutar) otro procedimiento est nda r, pero
si lo hace, el procedimiento est nda r estar bajo las mismas restricciones de
la propia UDF. Para empeorar las cosas, cuando se utiliza una lnea de cdigo

en una

UDF que no se puede ejecutar usted no puede recibir un error en tiempo de

ejecucin. Slo se debe utilizar para realizar un clculo de algn tipo y no tomar
el Iugar de un procedimiento.

Uso de mdulos para funciones.


Las funciones persona lizadas se crean dentro de u n md ulo, entonces s desea
incluir una nueva fu ncin personalizada, se debe considerar el siguiente formato o
estructura :
Public function NombredelaFuncin (param1 As tipo 1, param2 As
tipo 2 ) As Tipo

NombredelaFuncin = Valor de Retorno


End Function

Uso de argu mentos en el uso de funciones.


Puede tener los pa rmetros que se desee, y su tipo puede ser cualqu iera de
los tipos de datos bsicos de Excel o tipos de objeto como Range. Usted puede
pensa r en parmetros como los "operan dos".
Por ejemplo, cuando se dice Nlayusc(Marga rita") pa ra ca lcula r convertir el texto
Ma rga rita" en mayscu la, Ma rgarita se toma

como

pa rmetro. A

conti

nuacin, el cdigo de la fu ncin util izar ese va for para ca lcular otro valor y
presentar el resultado.

El procedimiento es el sigu iente, debe:


I.

Crear un nuevo libro o a brir el libro en el que desea utilizar la creacin de


la nueva funcin definido por el usuario (UDF) .

II.

Abra el Editor de Visual Basic que est integrado en Microsoft Excel,


vaya a Ficha Programador -+ Grupo Cdigo -+ Visual Basic (o pu Isando

Alt + FI1). Fig. 217


!nsertar ) Formato

Fig . 217 Ingreso al Editor de Visua l Basic.

Depura

Fig. 2l8lnsedar nuevo

Mdulo.

III.

Agregar un nuevo mdulo haciendo clic en el botn que se muestra en la


Figura 218.

IV.

Fig. 219 Ventana del nuevo Mdulo 1

Se muestra el nuevo mdu lo.(Fig . 219).


Agregue el cdigo de la fu ncin teniendo en cuenta que debe:
t . Utilizar los valores proporcionados por los pa r metros,

2. Asignar el resultado a l nombre de la funcin, y


3. Cerra r la fu ncin con el "End fu nction".
El caso de bloqueo, lo que le permite ejecutar una parte del cdigo slo si se
cum ple una condicin. Ejem plo:
Public Function ResultadoCurso (notafinal As
Integer) As String If notafinal = 14 Then
ResultadoCurso = "Aprobado"
Else

ResultadoCurso = "Desaprobado"
End If
End Function

Otro ejemplo, en el caso de emplea r el bloque Do Loop Wh ile. El bloque Do


Loop Wh le ejecuta una parte del cdigo While o Until hasta que una
condicin se cum pla. Ejemplo:

Programa Nacional de Informtica

Pgina 210

Public Function EsPrimo(valor As Integer) As Boolean


Dim i As Integer
i - 2
EsPri mo = True

If valor / i = Int(valor / ) Then


Es Primo - Fa lse
End If
Loop While i < valor And EsPrimo = True
End Function

El bloque For, que ejecuta una parte del cdigo de un nmero especificado de
veces. Por ejemplo para calcular el Factorial de un nmero entero positivo:
Public Function Factorial(valor As Integer) As Long
Dim resultado As Long
Dim i As Integer
If valor = 0 Then

resultado = 0
Else1f va for = 1Then
resultado = 1
Else

resultado - 1
For i = 1 To valor
resultado = resultado * i

Next
End
If

Factorial = resultado

End Function
Puede tam bin usa r la instruccin selectiva : Select Case, como se muestra en
el siguiente cdigo (Fig. 220) :

jN umeroAetrze
Furiic Fa-czioz Noe:oALez:as(z:c As Inteoe:) Ao Sz::zo
D:n. rec uln aoo Aa St:inc
Selecz Case n:o
Case
resultado - Uno
Case ?
resultado - Dos

Fig. 220 Uso del Select Case en un UDF.

Ejecutar una funcin desde la hoja de clculo.


En el libro de tra bajo actual vaya a la hoja 1. Figura 221.

Fig. 221 Pasar al libro de tra bajo.

Se va a utiliza r la funcin iniciando el contenido de una celda con el signo igual


segu ido del nombre de la fu ncin.

Anexar a l nom bre de la funcin

un pa rntesis de a pertura, los par metros

separados por comas y un pa rntesis de cierre final . (Ver Fig . 222) .

Por ejemplo :
= NumeroALetras (A4)

Programa Nacional de Informtica

Pgina 212

f.

=N umera ALetras(
A
4
)
E

=NumeroALetras( )

Fig . 222 La Funcin de conversin de Nmeros cortos a Letras.

Tambin puede utiliza r una frmu la definida por el usua rio, buscando en la

categora Definida por el usuario del asistente Insertar frmula (Fig. 223).
Basta con hacer clic en el Fx botn situado a la izquierda de la barra de frmulas.

uscar una funani


Escriba una breve desoipon de lo que desea hacer y, a contnuaon, haga dic en Ir

Fig . 223 Asistente para fu nciones.

Los par metros pueden ser de tres tipos:


1. Los valores constantes escritos directamente en la frmu la de la celda.

Cadenas tienen que estar entre comillas dobles en este caso.


2. Las referencias de celda como la B6 o rango referencias como AE:C3 (el
par metro tiene que ser del tipo RANGE)
3. Otras funciones anidadas dentro de su funcin (la funcin tam bin se pueden
anida r dentro de otras funciones). Es decir: = factorial (MAX (D6: D8))

Verificar el resultado.
Debe comprobar va rias veces despus de usar la funcin para a seg urarse de que
trata los va lores de diferentes pa rmetros correcta mente (Fig. 224) :

1 Uno
3 Tres

4,C uatro
s!-Numer ALetra S(

Fig . 224 Verificar el resultado de la funcin personalizada.

Importar y Exportar mdulos.


En ciertas ocasiones se requ iere conta r con un g rupo de procedim ientos su b
o Functions que se encuentran en un mdulo, y lleva no de un libro a otro libro.
En este caso puede realizar la exportacin o importacin del contenido del mdulo

fonnatoQepurar'nEjecMarHewamientasComplementosVentanaAyu

F:biic F.nc ic:. llm.e:oAle:as(n:o s ?:. ege:) Dim resulsa dc As 8tri-g

Fig . 225 Exportar un mdulo


2. Escriba el nombre del mdulo a exportar (Note que tiene la extensin : bas)
(Fig . 226) .

26''0P '2011
Carp
01:00
Carpi Carpi Carpi Carpi 17 '0 2012 II:28
30 10 2011 01 :18
2t '03 2012 05.31
17 10 2010 08 :19

Fig . 226 Nom bre del a rchivo a exporta r.


3. CI ic en el botn Guardar.

Irt3j3ot Ndulo.

Por ejemplo se tiene el mdulo ConvertirNmerosLetras en un archivo.


Se va a importar en un nuevo libro el mdulo que la contiene:
1. Abra un nuevo libro e ingrese al ed itor VBA.
2. Clic en men Arch ivo -+ Importar Archivo. (Fig . 227).

Fig . 227 Importar un mdu lo.


3. Seleccione el archivo de mdulo en la carpeta documentos (Fig . 228) .

NombeConvertirNumeoLara bas

Abr

Fig .

228 Abrir archivo importado.


4. Clic en el botn Abrir.

Agregar una descripcin y categora a una funcin definida por el usuario.


Hay al menos dos maneras que se utilizan para agregar una descripcin a una
UDF, una es relativamente bien conocida, mientras que la otra es un mtodo
sencillo, pero poco conocido.
Primero se utilizar el mtodo ms conocido:

Abra el libro UDF1.xlsm.

Ingrese a l editor VBA (Alt + F 11) y abra el cdigo del mdulo 1, l uego
seleccione en cua lquier l ugar dentro de la Function Doble (Fig.229).

Fig. 229 Funcin que ca lcula el doble de un nmero.

Ahora presione F2 para abr r el "Explorador de objetos".

En la pa rte su perior de la Iista de objetos hay dos cuad ros desplega bles. Haga
clic en la pa rte su perior y seleccione "VBAProject ". (Fig . 230) .

Examinador de objetos

Public Funsion 0oble(nro es /nreger) As Integer


l.\errbro de VBAPro er t. f.J odulo1

Fig . 230 El Examinador de objetos.

Ahora debe tener todos los mdulos y objetos g lobales que se muestran en el
cuadro "Clases", situado en la parte inferior del Objeto browser.

Haga clic en el nombre del mdulo que contiene la UDF.

En cuad ro "Miembros de la ... " de la derecha debera ver los nombres de

todas las fu nciones y procedimientos en el mdulo seleccionado.

Sola mente haga clic en el nombre de la UDF y seleccione "Propiedades".


(Fig . 231)
Examinador de objetos

Clases

! b
@ H0j1
Public Function 0oble(nro As .' ntege)

\/Dr definir in

Ocultar

Fig. 231 Seleccin de Propiedades de la funcin Doble.

Escriba una descripcin pa ra la UDF (Fig . 232), a continuacin, haga clic


en Aceptar y Iuego Guardar.

aneJar

Fig. 232 Detalle de la Descripcin de la fu ncin Doble.

Ahora se utilizar el mtodo poco conocido. Esto se hace mejor antes de escribir
el UDF.

Ir a Herramientas -+ F't acro -+ Grabar Nueva b1acro.


En el cuadro Descripcin, escriba una breve referencia para la UDF. Escriba
el nom bre de la UDF y haga clic en Aceptar.

Ahora Detener Grabacin.

Abra el VBE (Alt + FI1) y sustituir la palabra "Sub" con "Functin".

Aada los parmetros de las funciones de forma normal.

Ver la descripcin de la Funcin Personalizada.


1. Clic en el botn Inserta r funcin . (Fig. 233).
6

Fig . 233 Inserta r una funcin .

Detalle de la Descripcin
de la funcin Doble.

cCmo aadir una UDF a una categora?


Otra preg unta com n es, cmo ag regar una determinada categora a la UDF
para que se muestre en el cuad ro de dilogo "Pega r funcin". Por defecto todos
los UDF se agru pan en la categora "Definida por el usuario".
Aqu se muestra cmo usted puede cam bia r esto. Basta con ejecutar algn
cdigo como este :

'Agregar a Matern ca ythgononnetha


Application.

bt

acrooptions

Macro:

-"NombreFuncinPersonalizada",

Category: = 3

Los nmeros de las categoras son como se muestran a contin uacin :

Sin categora slo aparece en todas.


Financiero.

Fecha y hora.

Math & Trig.

4
S

Estadstica.
Bsqueda de referencia.

6
7
8
9
10
11
12

De base de datos.
Texto.
Logical.
Informacin.

13

DDE / Externo norma l mente ocu ltos.

14

Definido por el usuario por defecto.

Comandos norma Imente ocultos.

Personalizacin normalmente ocultos.


Macro Control normalmente ocultos.

Ingeniera slo est disponible si el complemento Herra mientas pa ra an lisis

se instala.
Rea l ice lo siguiente:

1. . En el libro actua l, en un nuevo mdu lo agreg ue el procedim iento: agrega


UDF y escriba el siguiente cdigo: (Fig. 235).

(General]

agrega UDF

5 uE agreg aUDF()

Fig. 235 Macro pa ra agrega r una UDF a una Categora.

2. Ejecute la macro: agregaUDF.


3. Revise la categora Matemticas y trigonometrcas. (Fig. 236).

Buscar una funan:


Esoiba una bre e desoipon de lo que desea hacer y, a continuaon. haga oic en tr

Selecoonar una funan:


COS

FACT FACT.DOBLE

oo

neo)

Halla el doble de un rmwo entero postvo.

Fig. 236 Funcin Doble en la categoria Matemticas y Trigonomtricas.

NANIPU LACIN DE ERRORES.


El manejo de errores se refiere a la prctica de progra macin y cod ificacin de antici pa r

las condiciones de error que pueden surg ir cuando el prog rama se ejecuta .
La aplicacin deber efectuar tantos controles como sea posible durante la inicializacin
para ga rantizar que los errores de tiem po de ejecucin no se produzcan ms adelante.
En Excel, esto i ncluye ga rantiza r que los

Iibros

de

tra bajo

y hojas

de

tra bajo

requeridos est n presentes y que los nombres necesarios deben esta r definidos.
Programa Nacional de Informtica

Pgina 220

Cuando la comprobacin se hace antes de que el trabajo rea l de la aplicacin se inicie,


har que sta sea ms estable. Es mucho mejor detecta r posibles situaciones de error

Pgina 221

Programa Nacional de t nformtica

cuando la aplicacin se inicia antes de que est en produccin, es decir operando con
datos reales, as no tomar mucho tiempo realizar las correcciones del caso.

Errores tpicos.
Los errores en genera l vienen en tres fuentes :
a. Error del com pilador, como va riables no declaradas que impiden que el

cdigo se com pile.

b. Error de usuario en el ingreso de datos, cuando se ing resa u n va for


negativo en el que slo se acepta un nmero positivo.
En Tiempo de Ejecucin, que se producen cuando VBA no

puede ejecuta r

correcta mente una instruccin del prog rama.


a. El primer error se su bsana al insertar las i nstrucciones o fu nciones que obligan
a que toda va ria ble se decla re antes d e usa rta o asigna rte un va for.

b. El segundo ti po de error se dan en el estado de operacin de la aplicacin y


ms se debe poner nfasis en prepara r correctamente al usua rio que va a
operar la aplicacin.
Los errores en tiempo de ejecucin .

Los errores tpicos en tiempo de ejecucin incluyen intenta r acceder a una


hoja de trabajo inexistente o un libro, o intentar dividir entre cero.

Si no dispone de cdigo de manejo de errores y se produce un error de


tiem po de ejecucin, VBA, se visualiza r un cuadro de dilogo con

el

cdigo del error.

Au nque esto puede ser aceptable, incluso deseable, en un e ntorno de


desarrollo, no es bueno para el usua rio final en un entorno de
produccin. El objetivo del cdigo de manejo de errores bien diseado es
anticiparse a posibles errores, y corregi rlos en tiem po de ejecucin o de
suspender la ejecucin de cdigo en un mtodo controlado y elegante. Su

objetivo debe ser evita r que los errores no controlados se den sin ser
administrados correctamente.

Estructura de manejo de errores.


Un aspecto import:ante para la creacin de cdigo adecuado pa ra

resolver

problemas va VBA, es la buena administracin del control de errores, debiendo


considerarla tanto para las macros como pa ra todos los procedimientos que se
programen. Es com n que suceda un error y que la aplicacin

se

cierre,

se

bloquee o no responde y se espera que muestre el error ocurrido pero no lo hace.

Entonces tiene que considerar la creacin de estructuras a propiadas para el

control de errores para que el Excel no se cierre sino que muestre mensajes
que el usuario que est trabajando con la aplicacin sepa que est
ocurriendo al suceder algn imprevisto. (Fig. 237).
Mic iosoft Y is ual basic

Yariabe de ob;eto o bloque With no establecido

Fig . 237 Cuad ro de Mensaje predeterm inado de error.


Un usua rio no entendido en prog ramacin no sabe de qu se trata el mensaje
que se muestra en la Fig . 237, entonces se debe considerar mostrar los mensajes
adecuados pa ra sa ber sin mayores detalles tcnicos que ha ocurrido.

La instruccin On Error.
El centro de control de errores en

VBA es la declaracin On Error. Esta

decla racin indica a VBA qu hacer cuando se produce un error de tiempo de


ejecucin. La declaracin On Error en tiene los siguientes formatos.
On Error Goto 0
On Error Resume Next

On Error Goto < label > :

a. El primer formato, On Error Goto 0, es el modo por defecto en VBA.


Esto indica que cuando un error en tiempo de ejecucin se produce en VBA,
debe mostrar el error en un cuadro de mensaje, que le permite escribir cdigo
en modo de depuracin o da r por terminado el prog ra ma de VBA.
Cuando On Error Goto 0 no se activa, es lo mismo que no tener habil itado
ningn controlador de errores. Cualquier error har que VBA lo muestre en el

formato estnda r en un cuadro de mensaje.


b. El segundo formato, On Error Reaume Next, es el ms usado com nmente
en forma muy am plia . Se instruye a VBA para ignorar el error y rean uda r la

ejecucin en la sig uiente lnea de cdigo. Es muy import:ante recordar que la


Programa Nacional de Informtica

Pgina 222

instruccin On Error Resume Next hace que no se de alg una forma de


"a rregla r" el error. Simplemente indica a VBA que contin e como si no
hubiera

ocurrido nada. Sin embargo, el error puede tener efectos

secundarios, como las variables no inicializadas u objetos establecidos en


Nothing. Es la responsa bilidad del creador de la a plicacin para que el
cdigo com pruebe una condicin de error y tome las medidas oportu nas.
Pa ra ello, debe comproba r el va for de Err.Number y si no es cero ejecutar
cdigo a propiado. Por ejemplo :
On Error Resume Next

N = I/ 0

' ca usa un error

If Err.Number < > 0 Then


N= I

End If

Este cdigo intenta asignar el valor 1/0 a la variable N. Se trata de una


operacin ilega l, por lo que VBA se producir un error 11 - Division By Zero y debido a que se tiene On Error Resume Next, el cdigo sig ue en la

condiciona l If. Esta instruccin comprueba el valor de Err. Number y le

asigna 1 a la variable N.
El tercer formato de On Error es

On Error Goto < label>, indica a VBA

que debe transferi r la ejecucin a la l nea que indica la etiqueta. Cada vez
que ocurre un error, la ejecucin de cdigo inmediatamente va a la l nea

siguiente del nombre especificado en la etiqueta. No se ejecuta nada del


cdigo entre el error y la etiqueta inclu ida en las sentencias del bucle de
control.
On Error Goto veError:

N - 1/0 Causa el error

Exit Sub
veError:

'cdipo de manejo de errores

Resume Next
End Sub

Habilitar y activar el controlador de errores.


Un controlador de errores est activado cuando una instruccin On

Error

se

ejecuta. Solo un controlador de errores est ha bilitado en un momento dado, y


VBA se com portar de acuerdo con el controlador de errores ha bilitado. Un gestor
de errores activo es el cdigo que se ejecuta cuando se produce un error

la

ejecucin se transfiere a otro Iugar a travs de una instruccin On Error Goto


< label> :.

Bloques de control de errores y On Error Goto.


Un bloque de control de errores, ta mbin denom inado controlador de error,
es una seccin de cdigo cuya ejecucin es transferida a travs de una
instruccin On Error Goto < labeI>: Este cdigo debe ser d iseado tanto para sol
ucionar el problema y reanuda r la ejecucin en el bloque de cd igo principal o pa
ra termi nar la ejecucin del procedimiento. No se puede utiliza r la instruccin

On Error Goto
< label> : simplemente para sa ltarse Ineas. Por ejem plo, el siguiente cdigo no
funcionar

correctamente :

On Error GoTo Error1:

Debug. Print I/0


'ms cd igo
Error1:
On Error GoTo Error2 :

Debug. Print I/0


m s cd igo
Error2:

Cuando el primer error es direccionado, transfiere la ejecucin a la lnea que sig ue


a Error1 : El controlador de errores sig ue

activo

cuando el segu ndo

error

se

prod uce, y por lo tanto el segu ndo error no es ejecutado por la instruccin On
Error.

La Declaracin Resume.
La declaracin Resume instruye VBA pa ra rean udar la ejecucin en un punto
especificado en el cdigo. Usted puede utilizar Resume slo en un bloque de
control de errores, y eua Iquier otro uso producir un error. Por otra parte,

Resume es la nica manera, aparte de salir del procedimiento, para salir de


un bloque de control de errores. cNo utilice la declaracin Goto para la
ejecucin directa del cdigo de un bloque de control de errores. Si lo hace,
puede causar problemas extraos con los controladores de errores.
La decla racin Resume tiene tres formatos de uso:
Resume
Resume Next

Resu me < label >

La Primera forma de Resume.


Usado solo, la declaracin Resume hace que la ejecucin conti ne desde la lnea

de cdigo que provoc el error. En este caso, debe asegura rse de que el bloque de
control de errores sol ucione el problema que provoc el error inicial. De lo
contrario, el cdigo entra en un bucle sin fin, saltando entre la lnea de cdigo que
provoc el error y el bloque de control

de errores. El cd igo sigu iente intenta

activar una hoja de clcu lo que no existe. Esto provoca un error (9 - Su bndice
fuera de rango), y el cdigo salta al bloque de manejo de errores que genera la
hoja, corrige el problema, y rean uda la ejecucin en la lnea de cdigo
provoc el error.

On Error GoTo ControlError :


Worksheets(" NuevaHoja"). Activate
Exit Sub
ControlError:
Frr N i im hur +ien

hoja no Ex iste, d ebe crea rt a

Worksheets.Add. Name - " NuevaHoja "


Reg resa a la l nea de cd i go qu e ca us el problem
a Resume

End If

que

La segunda forma de Resume es Resume Next.


Esto hace que la ejecucin del cdigo se reanude en la l nea siguiente a la lnea
que caus el error. El cdigo siguiente genera un error ( 1I- Divisin por cero) al
imentar establecer el valor de N .
El bloque de control de errores asig na Ia la N variable, y Iuego hace que la

ejecucin cont nu nmediatamente despus de la instruccin que provoc el


error.
On Error GoTo ControleE rror :
N = I/ 0

Debug. Print N
Exit Sub
ControleError :

' Reg resa a l a l inea si gu iente del erro


r Resume

Next

La tercera forma de Resume es Resume <label>:.


Esto hace que la ejecucin de cdigo se reanude en una etiqueta. Esto le perm ite
sa ltarse una seccin de cdigo si se produce un error. Por ejemplo,

On Error GoTo ControlError:


N- 1/ 0
Cd i go qu e se sa lta si ocurre u n error
Control 1:
' Ms cd i go a ej ecuta r

Exit Sub
ControlError:
Regresa a la l nea con la e tiqu eta Con tro 11 :

Resume Control1:

Todas las formas de Resume borran o resetean el objeto Err.

Control de errores con mltiples procedimientos.


Cada procedimiento no necesita tener un cdigo de error. Cuando ocu rre un error,

VBA utiliza la ltima instruccin On Error de ejecucin directa del cdigo. Si el

cdigo que causa el error est en un procedimiento con una instruccin On


Error, el control de errores es como se describe en las lneas anteriores.
Sin em bargo, si el procedimiento en el que se produce el error no tiene un
controlador de errores, VBA mira hacia atrs a travs de las llamadas a

procedimientos que conducen al cdigo errneo.


Por ejemplo si el procedimiento A Ilama a B y B Ilama a C y A es el nico
procedimiento con un controlador de errores, si se produce un error en el
procedimiento C, la ejecucin de cdigo se transfiere inmediatamente a l gestor de
errores en el procedimiento A, o mitiendo el cdigo restante en el B.

Una nota de precaucin.


Es tentador tratar los errores colocando una decla racin On Error Resume Next
en la parte su perior del procedi miento para que el cdigo se ejecute si n generar

un error. Esta es una muy mala prctica de codificacin. Recuerde que el uso de
On Error Resume Next no es corregir los errores. Sim plemente los ignora .

DEPURACIN DE PROGRAMAS.
Uso del editor para depurar programas.

La ventana Inmediato.
La depuracin consiste en examinar y proba r partes del cdigo o pa rtes de la
aplicacin para identifica r los problemas que pueden ocurrir cuando alg uien est
usando su base de datos.
VBA ofrece tantas herram ientas como sea ve
posible para ayudar en esta ta rea .
La ventana Inmediato es un objeto que se
puede

util iza r para

proba r las funciones

m nto

" '"
y

(Tambin puede utiliza r la combinacin de teclas


[Ctrl] [G]). (Fig. 238)

i
d

. .

opu n
f7

"

Es un h bito mantener la ventana Inmediato en la pa rte inferior del Editor de

cdigo, pero se puede pasar a otra ubicacin arrastrando desde su barra de


ttulo (Fig . 239) :

Fig. 239 Ventana Inmediato.

Probablemente la ms simple accin que se puede realizar en la ventana


Inmediato consiste en probar una expresin.
Por ejemplo, puede escribir una operacin a ritmtica y exam inar su resultado.
Pa ra ello, en la ventana Inmediato, escriba el sig no de interrogacin " ?" seg
uido de la exp resin y pulse Intro. (Fig. 240). He aqu un ejemplo que pone a
prueba el resultado de 845.35 + 684.7:

Fig. 240 Prueba de la ventana Inmediato.

Una de las acciones ms bsicas que se pueden realizar en la ventana Inmediato


consiste en probar una funcin incorporada.

Para ello, escriba ? Seguido por el nombre de la funcin y sus argumentos, si


los hay.
Por ejem plo, para probar la funcin UCase, en la ventana Inmediato, escri ba

debajo del resultado anterior:


? UCase ("rep blica del per")
Despus de escri bir la fu ncin y pulsar Enter, el resultado a pa recer en la

siguiente lnea : (Fig. 241)

Fig . 241 Resultado en la ventana inmediato de la funcin Ucase.

El objeto Debug.
La ventana Inmediato es reconocida en el cdigo como la depuracin de

objetos.
Pa ra mostrar mediante prog ramacin una cadena, en la ventana Inmediato, el
objeto Debug proporciona el mtodo Print.

La forma ms senc lla de utiliza r consistir en hacer pasa r una cadena.


Por ejemplo, su ponga que se crea un botn en u n form ulario, de nom bre
cmdEvaluaNombreCompleto

e inicializado con una cadena.

Vea un ejem plo de cmo se puede mostra r la cadena en la ventana Inmediato:


Private Sub cmd Eval uaNombreCompleto_CIick()
Dim StrNombreCompleto As String
StrNom breCom pleto = " Rosa Escalante"
Debug. Print StrNom breCompleto
End Sub

AI hacer clic en el botn, la ventana Inmediato mostrar la cadena pasada : (Fig.


242) .

Fig. 242 Resultado de la cadena en la ventana inmediato.

De la misma manera, se puede crea r una expresin ms elaborada y poner


a prueba su valor en la ventana Inmediato. Tambin se puede pasar un valor,

tal como una fecha, que se puede convertir fcilmente en una cadena.

Puntos de interrupcin.
Un punto de interrupcin es un va for en una l nea de cdigo que indica a VBA
detener la ejecucin inmediata mente antes de que la lnea de cdigo se ejecute.
La ejecucin de cdigo se coloca en lo que se denomina break mode (modo de
i nterrupcin). Cuando VBA est en modo de

i nterrupcin,

puede

introduci r

comandos en la ventana Inmediato para visua lizar o ca mbiar los va lores de las

variables.
Pa ra poner un punto de interrupcin (Tam bin se le refiere como punto de
quiebre, punto de ruptura) en una Inea de cdigo, puede hacerlo de 3 formas:
1. A la altura de la l nea actual, haga cl ic en borde izquierdo. (Fig 243).
2. Coloque el cursor en esa lnea y pulse la tecla F9.
3. Seleccione "Alternar punto de interrupcin" en el men Depuracin.

5 ub agre g aUDF()

EJ 5:L

Fig. 243 Punto de Ruptura con la forma 1.

Pa ra eliminar un punto de quiebre:


1. A la altura de la l nea actual, haga cl ic en borde izquierdo.
2. Coloque el cursor en esa lnea y pulse la tecla F9.
3. Seleccione "Alternar punto de interrupcin" en el men Depuracin. Fig .

244.

Programa Nacional de Informtica

Pgina 230

Qepu zoon ) tjeute He em!cntss Qomple mewtos Vente


Comp4a VBAPnjst
Pa oa a o o n:uon
F8

Fig.

244 Eliminar punto de i nterrupcin .

Cuando una lnea contiene un punto de qu iebre, se muestra con un fondo de color
ladrillo. Inmediatamente antes de esta l nea de cdigo sea ejecutada, aparecer
con un fondo ama rillo.
Recuerde, que cuando un punto de qu iebre es encontrado, la ejecucin de cdigo
est en pausa, pero esa lnea de cdigo no se ha ejecutado todava. No se pueden
coloca r puntos de interru pcin en las Ineas en blanco, lneas de comentario, o
lneas de declaracin de va ria bles (lneas con decla raciones Dim).
Despus de que un punto de ruptura es encontrado, puede rean udar la ejecucin
de cdigo normal pulsando FS o seleccionando "Conti nuar" en el men Ejecuta r,

o recorrer el cdigo Inea por lnea (ver ms abajo) . Tenga en cuenta que los
puntos de quiebre no se gua rdan en el a rchivo del libro. Si cierra el archivo, todos
los puntos de qu iebre son removidos. Los puntos de interrupcin se conservan
siem pre que el a rchivo est a bierto.

Recorrer procedimientos paso a paso.


Recorrer el cdigo.
Norma l mente, el cdigo se ejecuta sin supervisin. Se ejecuta hasta su fin
lgico. Sin embargo, cuando se est probando cdigo, a menudo es til recorrer

el cdigo lnea por lnea, observando la accin de cada lnea de cdigo. Esto
hace que sea fcil determinar exactamente qu lnea est causando un
comportamiento incorrecto. Usted puede recorrer el cdigo l nea por l nea
pulsando la tecla F8 para inicia r el procedim iento en donde se encuentra el
cursor, o cuando VBA se detuvo en un punto de quiebre. AI presionar F8 hace

que VBA ejecute lnea por lnea, poniendo de relieve la siguiente lnea de
cdigo en amarillo. Tenga en cuenta que

la lnea resaltada es la lnea de cdigo que se ejecuta r cuando presione F8.

Todava no ha sido ejecutado.

Ventana Locales.
La ventana Locales muestran todas las variables de un procedi miento (asf como

las variables globales declaradas a nivel de proyecto o mdulo) y sus va lores. Esto
hace que sea fcil ver exactamente que va for tiene cada variable, y donde
ca mbia, como es su paso a travs del cdigo. Puede visua liza r la ventana local
seleccionndola en el men Ver.
La ventana Iocal no perm ite cam biar los valores de las

variables. Sim plemente

muestra los nom bres y los va lores. La Ventana Loca l se muestra en la Fig. 245.
Tenga en cuenta que las va viables x1 e y1 en el Procedimiento de prueba se
muestran en la ventana. La lnea resaltada en amarillo es la lnea actua l de
ejecucin - es la siguiente Inea de cdigo VBA que se ejecuta r .

(General)

Fig. 245 Evalua r varia bles en Ventana Local.

Ventana de Inspeccin.
La ventana de inspeccin le perm ite "ver" una varia ble o expresin especfica y
ca usa la ejecucin de cdigo pa ra hacer una pa usa y entrar al modo de
i nterrupcin cuando el va for de esa variable o expresin es verdadera

(distinta de

cero) o cuando esa variable es ca m biada.

Pa ra mostrar la ventana de inspeccin, seleccinela en el men Ver. Para crea r


una nueva depuracin, seleccione Agregar inspeccin en el men Depuracin. Se
Programa Nacional de Informtica

Pgina 232

mostrar

la

ventana

Agrega r inspeccin

(Fig.

246),

que

se

muestra

continuacin.
Agregar inspeccin

Ayuda
Mdulo:

Tipo de nspecon

Fig . 246 Configurar Ventana de Inspeccin .


Hay tres ti pos de i nspecciones (Fig. 247), que se muestran en el cuadro de g rupo

Tipo de inspeccin.
Tipo de inspecan

esn de inspecan

tntmrupon cuando el valor sea verdadero


fnterrupon cuando ei valor cambie

Fig. 247 Ti pos de Inspecciones.

a. Expresin de inspeccin, causa que inspeccion en el trabajo al igual que la


visualizacin de la ventana Variables locales. Es simplemente mostrar el
valor de una variable o expresin cuando el cdigo es ejecutado.
b. Interrupcin Cuando el valor sea verdadero, causa que VBA entre en el
modo de interrupcin cuando la variable o expresin eva l uada es verdad
(distinto de cero).

c. Interrumpir cuando el valor cambie, causa que VBA entre en el modo de


interrupcin cuando el val or de la varia ble o la expresin ca mbia de valor.

Se pueden tener muchas inspecciones activas en el proyecto, y todas las


inspecciones se muestran en la ventana de inspecciones. Esto hace que sea
sencillo determinar cuando el valor de un variable cambia.

Gua Prctica del Control de Errores.


I. Abra la hoja de clculo Con su ltora.
2. Revise los contenidos. Hoja em pleados (Fig . 248)
.i.

Haga clic en la hoja Empleados.

Julpai Servicios de
Consultora
Empleados

56.20
95947 Claudia
Solar '
35.20
g08S0 LindaRosales
60485 Chiroque
Mia
Flores Angeles
Castro
65.45
47490 Kiara 30608 Mi li 26846 Juan
48.25
39.40
26.80

Fig. 248 Hoja de los Empleados para el control de errores.


ii .

Haga cl ic en la hoja Horarios (Fig. 249).

Julpai Servicios de Consultora


Empleados - Horarios
Nombre

Fecha Final

Fig. 249 Hoja de los Horarios pa ra el control de errores

iii

i.

Haga cl ic en la hoja RolPagos(Fig. 250) .

Julpai Servicios de Consultoria


Empleados Rol de Pagos

Fig. 250 Hoja de los RolPagos para el control de errores.


3. Guarde una copia del libro, nombre : Consu ltoria1.xlsm.
4. Especifique la carpeta donde lo g uarda r como: Excel_Errores.
5. Haga clic en Guardar.

Introduccin al Manejo de Errores.


Para hacer frente a los errores en el cdigo, el lenguaje Visual Basic
proporciona varias tcnicas. Una manera de hacerlo es preparar el cdigo para el
control de los errores.
Cuando se produce un error, se podra presenta r un mensaje al usua rio para que

l / ella se d cuenta de la ocurrencia mismo.


Para preparar un mensaje, se crea una seccin de cdigo en el procedimiento
en donde se producira el error. Pa ra iniciar este proceso, se crea una etiqueta.
Vea el sigu iente ejem plo:
Private Sub cmdCa lcuIar_Cl ick
() Hay_li n errnr
Ca lculo:
End Sub

rf e

Despus (bajo) la etiqueta, se puede especifica r el mensaje. La mayora de las

veces, se muestra el mensaje mediante un cuadro de mensaje. Aqu est un


ejemplo:
Private Sub cmdCa lcular Click ()
Hay_un_error_de_Calculo:
Msg Box "Hu bo un problema al realizar el c lculo"
End Sub

Si usted slo tiene que crear una etiqueta y su mensaje como este, su
procedimiento podra siempre ejecutar:
Private Sub cmdCa lcula r Click ()
Dim PagoHora As Double, Hora riosemanal As Double
Dim PagoSemanal As Double

"Una de estas dos l neas puede producir un error, tal como :


'Si el usua ro ingresa un nmero no v tido
PagoHora - CDbl (txtPagoHora)
HorarioSemana l =

CDbl (txtHorarioSemanal)

"Si hubo un error, el flujo podra sa ltar a la etiqueta


PagoSemanal= PagoHora * Hora riosemanal
txtPagoSemana l - FormatNumber (PagoSemana l)
Hay un error de Calcu lo :

MsgBox "Hubo un problema al realizar el clculo"


End Sub
Pa ra evitar esto, usted debe encontra r una manera de interrum pir el fl ujo
del programa antes de la seccin de etiquetas. Una forma de hacerlo es aadi r
una Inea de salida del procedimiento Exit Sub antes de la etiqueta. Esto se hace

como sigue:

Private Sub cmdCalcu la r_CIick ()

Dim PagoHora As Double, Hora riosemanal As Double


Dim PagoSemanal As Double
"Una de estas dos Ineas puede producir un error, tal como :
'Si el usua rio ingresa un nmero no v l ido

PagoHora = CDbI (txtPagoHora)


HorarioSemana l - CDbl (txtHorarioSemanal)
"Si hubo un error, el flujo podra sa ltar a la etiqueta
PagoSemanal = PagoHora * Hora riosemanal
txtPagoSemana I = FormatNumber ( PagoSemana l)
Exit Sub

Hay un error de Ca lculo:


Msg Box " Hubo un problema a l realizar el clculo"
End Sub

En caso de error.

Saltar a una etiqueta.


Se ha visto que es posible crear una etiqueta que presentara un mensaje al
usua rio cuando se produce un error.

Antes de que se produzca un error, deber indicar al compilador dnde ir si se


produce un error. Para proporcionar esta informacin, en la lnea que inicia el
procedimiento, escriba una instruccin On Error GoTo expresin, seguida del
nombre de la etiqueta en la que cre el mensaje. Aqu est un ejem plo:
Private Sub cmdCalcu la r_CIick ()

On Error GoTo Hay_un_error_de_Calculo:


Dim PagoHora As Double, HorarioSemanal As Double
Dim PagoSemanal As Double
" Una de estas dos Ineas puede producir un error, tal como
: 'S el usuario ingresa un nmero no vlido

PagoHora - CDbl (txtPagoHora)


HorarioSemanal = CDbl (txtHorarioSemana l)
"Si hubo un error, el fl ujo podra salta r a la etiqueta

PagoSemanal - PagoHora* HorarioSemanal


txtPagoSemanal= FormatNumber ( PagoSemanal)
Exit Sub

Hay_un_error_de_Calculo:
bt sgBox " Hubo un problema al realizar el clculo"
End Sub

El On Error GoTo indica al compilador dnde transferir el cdigo s se produce un


error.

Ir a una etiqueta numerada.


En luga r de definir una etiqueta alfabtica donde sa ltar en caso de error, se puede
crear una etiqueta numrica :

Private Sub cmdCalcular Click ()


Dim PagoHora As Double, HorarioSemanal As Double
Dim PagoSemanal As Double
PagoHora = CDbl (txtPagoHora)
Horar oSemanal = CDbl (txtHorarioSemanal )

PagoSemanal = PagoHora * Hora riosemanal


txtPagoSemanal - FormatNumber (PagoSemanal)
Exit Sub

10 :
MsgBox "Hubo un problema al realizar el clculo"
End Sub

Despus de crea r la etiqueta numrica, puede pedir al compilador que se dirija


(que sa tte) a ella si se produce un problema. Para ello, escriba On Error GoTo

segu ida de la etiqueta numrica. El compilador debera saltar a dicha


cuando sea necesa rio. Aqu un ejem plo:
Private Sub cmdCa IcuIar_Click ()
On Error GoTo IO

Dim PagoHora As Double, Hora riosemanal As Double


Dim PagoSemanal As Double

etiqueta

PagoHora = CDbl (txtPagoHora )


HorarioSemanal= CDbl (txtHora riosemanal )

PagoSemanal= PagoHora* HorarioSemanal


txtPagoSemanal - FormatNumber (PagoSemanal )
Exit Sub
10 :

Ft sgBox "Hubo un problema al realizar el clculo"


End Sub
Observe que la etiqueta numr ca funciona como el rtulo con letras. En otras

palabras, antes de escribir la instruccin On Error GoTo, debe haber creado la


etiqueta. En rea lidad, esto no es una regla. Usted puede pedir al com pilador
que pueda tratar al error de una manera u otra. Pa ra ello, utilice la
instruccin On Error GoTo 0 (o On Error GoTo -1 ) . Vea este ejemplo:
Private Su b cmdCalcular

Click ()

On Error GoTo 0
Dim PagoHora As Double, HorarioSemana l As Double

Dim PagoSemanal As Double


PagoHora - CDbl (txtPagoHora)
HorarioSemana l - CDbl (txtHora riosemanal)

PagoSemana l PagoHora* Hora riosemanal


txtPagoSemana l = FormatNumber (PagoSemana l)
End Sub

En este caso, si se produce el error, debe tener una manera de tratarlo.

Reanudar el flujo de cdigo.


En cada cdigo que se ha explorado hasta el momento, se anticip que podra

haber un problema, ahora se topa con l. En la mayora de los casos, despus


de tratar el error, se debe encontrar una manera de contin uar con el flujo norma l
del programa.

Una vez que se haya determinado la codificacin del error, para reanudar el flujo
norma l del programa, se utiliza el operador Resume.

Ejemplo :

Private Sub cmdCa lcular Click ()


On Error GoTo Hay_un_error_de_Calculo:
Dim PagoHora As Double, Hora riosemanal As Double
Dim PagoSemanal As Double

"Una de estas dos l neas puede producir un error, tal como :


'Si el usuario ingresa un nmero no v tido
PagoHora = CDbl (txtPagoHora)

HorarioSemana l = CDbl (txtHorarioSemanal)


"Si hubo un error, el flujo podra sa ltar a la etiqueta
P 9SemanaI - PagoHora * Hora riosemanal
Resume

txtPagoSemanal = FormatNum ber (PagoSemanal)


Exit Sub

Hay_un_error_de_Calculo:
MsgBox "Hubo un problema al realizar el clculo"
End Sub

Tenga en cuenta que puede escribir el operador Resume en casi cualqu ier l ugar.

En realidad, es necesario identificar donde el programa tendra que reanudar.


Dnde ms que despus de la presentacin del mensaje de error al usua rio?
Si desea que el programa contine con un valor alternativo que el que caus
el problema, en la seccin de etiquetas, escriba Resume Next .
Ejemplo:
Private Sub cmdCa lcular Click ()
On Error GoTo Hay_un_error_de_Calculo:
Dim PagoHora As Double, Hora riosemanal As Double
Dim PagoSemanal As Double

"Una de estas dos l neas puede producir un error, tal como :


'Si el usua rio ingresa un nmero no v tido
PagoHora = CDbl (txtPagoHora)
HorarioSemana l = CDbl (txtHorarioSemanal )

"Si hubo un error, el flujo podra sa ltar a la etiqueta


PagoSemanal - PagoHora * Hora riosemanal
txtPagoSemanal = FormatNumber (PagoSemanal)

Programa Nacional de Informtica

Pgina 240

Exit Sub

Hay_un_error_de_Calculo:
Msg Box "Hu bo un problema al rea lizar el c lculo"
Resume Next
End Sub

En este cdigo, probablemente hubo un problema, que es la razn por la que


presenta un mensaje al usuario. Luego, cuando el cdigo se rean uda, cdnde
debera ir el com pilador? Despus de todo, el problema no estaba resuelto.
Una manera de abordar el problema es proporcionar una alternativa a lo que

caus el problema, ya que se su pone que se sabe el tipo de problema que se


produjo. En el caso de un c lculo aritmtico, imagine que sabe que el problema
fue ca usado por que el usuario escribi un nmero no v tido (por ejemplo,
escribir un nom bre en el que se espera un nmero). En Iugar de dejar que el
progra ma se detenga, puede proporciona r un nmero como una a lternativa. La
forma ms sencilla es el nmero 0.
Antes de pedir al compilador que contine, debe ofrecerse una solucin a
lternativa (un nmero en este caso), puede volver a inicia lizar la variable que cau
s el error. Ejemplo:
Private Sub cmdCa lcular Click ()
On Error GoTo Hay_un_error_de_Calculo:

Dim PagoHora As Double, Hora riosemanal As Double


Dim PagoSemanal As Double
"Una de estas dos l neas puede produci r un error, tal como :
'Si el usua rio ingresa un nmero no vl ido
PagoHora = CDbl (txtPagoHora)

HorarioSemana l - CDbl (txtHorarioSemanal )


"Si hubo un error, el flujo podra sa ltar a la etiqueta
PagoSemanal= PagoHora* Hora riosemanal

txtPagoSemanal = FormatNumber (PagoSemanal)


Exit Sub

Hay_un_error_de_Calculo:
Msg Box "Hu bo un problema al rea lizar el c lculo"
PagoSemanal=0
Resume Next
End Sub

Si hay muchas va ria bles involucradas, como es en este caso, se puede inicializar
cada una.
Ejemplo:
Private Sub cmdCa lcuIar_Cl ick ()
On Error GoTo Ha'y_u n_error_de_CaIcu lo:

Dim PagoHora As Double, Hora riosemanal As Double


Dim PagoSemanal As Double
"Una de estas dos l neas puede producir un error, tal como:

'Si el usua rio ingresa un nmero no vlido


PagoHora - CDbl (txtPagoHora)

HorarioSemanal = CDbl (txtHorarioSemana l)


"Si hubo un error, el flujo podra sa ltar a la etiqueta
PagoSemanal = PagoHora * Hora riosemanal
txtPagoSemanal - FormatNumber (PagoSemanal)
Exit Sub

Hay_un_error_de_Calculo:
Msg Box "Hu bo un problema al realizar el clculo"
PagoSemanal =0
HorarioSemanal - 0

Resume Next
End Sub

Tipos de error.
No solo el control de errores se refiere a la anticipacin de los inconvenientes
de los problemas relacionados con los clculos aritmticos. En realidad, un progra
ma puede hacer frente a las diversas categoras de ocurrencias de error. Los

problemas se dividen en dos grandes categoras.

Errores de sintaxis.
Un error de sintaxis se produce si el cd igo intenta rea l iza r una operacin que el

leng uaje VBA no permite. Estos errores son proba blemente los ms fciles de
loca lizar porque el Editor de cdigo est configurado pa ra seala r en el momento
que usted est escribiendo el cdigo.
Si intenta escrib r o tratar de

inserta r un

operador

pa la bra

en

el

Iugar

equivocado en el cdigo, el editor de cdigo le hace saber de la ocurrencia del


mismo. Aqu un ejemplo (Fig.251)
Programa Nacional de Informtica

Pgina 242

Fig .

251 Error de sintaxis.

En este caso, si se trata de utilizar la palabra clave Do en lugar de un tipo de


datos (probablemente Double en este caso), el Editor de cdigo lo mostrara de
inmediato. Este tipo de error se seala para cada palabra clave y el operador
intenta utiliza rlo. Tenga en cuenta que, en el ejemplo anterior, se us una pala bra
clave vlida, pero en el momento equ ivocado. Si se equivoca al escribir una

palabra clave o un operador, se recibir un error. Consideremos el siguiente


ejemplo (Fig.252):
tr ri urrr rmi c dij
Epsicr. Expiicir
F r:vate Sub cv.uCalc iaz_CIick()

f''o deromp'1an:

Fig. 252 Error de Compilacin .


El programador ha escrito ma l el operador Mod y escribi t't AD en su l ugar.
Si se olvida de i ncluir un factor necesario en el cd igo, se obtiene un error de

sintaxis. Por ejem plo, si est creando una expresin aritmtica binaria que espera

un segu ndo operando despus del operador, usted recibir un error. Aqu f est un
ejemplo (Fig. 253) :

Fig. 253 Error de com pilacin por falta de operando.

En este caso, el progra mador pu Isa Enter despus del Mod, como si la expresin
estuviera completa. Esto da como resultado un error.
Estos son slo alg unos tipos de errores de si ntaxis que pueden a parecer. Como se
ha visto ya, si se tra baja en Microsoft Visua l Basic para escribir el

cd igo,

la

mayora de estos errores son fciles de detectar y correg r.

Los errores en tiempo de ejecucin.


Un error en tiem po de ejecucin se da cuando la a plicacin intenta hacer algo
que el sistema operativo no permite. En algunos casos, la aplicacin se

bloquea (Microsoft Excel puede deja de funcionar). En algunos otros casos, el


usuario puede recibir un error ms g rave.
Como su nombre lo indica, un error en tiem po de ejecucin cuando se ejecuta
el prog rama, es decir, despus de ha ber creado su aplicacin.

Afortunadamente, durante la fase de pruebas, puede encontrar algunos de los


errores para que pueda corregirlos antes de distribuir la aplicacin. Algunos
otros errores no pueden ocurrir incluso si solo se desea probar la a plicacin. Les
puede ocurrir a los usuarios despus de ha ber distribuido su aplicacin.

Por ejemplo, puede crear una aplicacin de alquiler de autos que es capaz de
mostrar imgenes al 100% del tiempo en su computadora con acceso desde la
unidad E: . Sin prestar atencin, despus de distribuir la aplicacin, puede que el
equipo del usuario no cuente con una unidad E: y, cuando se trata de mostra r las
imgenes, la aplicacin puede falla r.

Estos son algunos ejemplos de errores en tiempo de ejecucin:


a. Tratar de utilizar la memoria del ordenador que no est disponible

b. AI realizar un clculo que la computadora (por ejemplo, el procesador) no


permite. Un ejemplo es la divisin entre 0.
Tratando de utiliza r o cargar una biblioteca que no est disponible o no es
accesible, por eua lquier razn.
d . Realiza una operacin aritmtica en dos tipos incom patibles (ta les como trata

r de asignar a una variable Integer el resultado de agregar una cadena a

un valor Double).

e. El uso de un lazo que no se ha inicializado correctamente.


intentar acceder a una imagen no es accesible. Tal vez la ruta especificada
para la imagen est mal. Tal vez el cdigo le da la extensin equivocada al
a rchivo, a pesa r de que el a rchvo existe
Acceso a un valor fuera del rango permitido. Por ejemplo, usando una
variable Byte para asig nar un valor de una operacin que se realiza, excede
el lmite del tipo del dato.
Como usted puede imag ina r, en tiem po de ejecucin se producen errores

despus de que la aplicacin est lista, algunos de estos errores puede ser
difcil de identificar. Algunos otros errores dependen de la plataforma que se est
ejecutando la aplicacin (el sistema operativo, el procesador, la versin de la
aplicacin, la memoria (disponible), etc).

El objeto Err.
Pa ra ayuda r con el manejo de errores, el lenguaje Visual

Basic proporciona una

clase Ilamada Err .No se tiene que decla rar una variable de esta clase.

Un Err objeto est disponible tan pronto como se comienza a trabaja r en el cdigo
VBA y se puede acceder di rectamente a sus miem bros.

El nmero de error.
Existen va rios tipos de errores que se pueden prod ucir en un prog rama. Pa ra
ayudarle en la identificacin de ellos, el Err objeto est equ ipado con una
propiedad denominada Number. Esta propiedad tiene un nmero especfico pa ra
la mayora de los errores que se pueden produci r en un progra ma . Cuando el

prog rama se ejecuta y se encuentra con un problema, puede detenerse y mostra r


el nmero del error. Aqu est un ejemplo (Fig. 254, 255).

Pgina 245

Programa Nacional de t nformtica

Fig . 254 Error de Si ntaxis.

Fig . 25 5 Error. No se ha defin ido la variable.

Como se puede ver, en estos dos casos a l ejecutar el formu Iario se detectan dos
errores en tiempo de compilacin :
I. Error de sintaxis, se escri bi com llas dobles en I ugar de com llas sim ples.

2. No se ha definido la variable, no se cuenta con el cuad ro de texto:


txtPagoHora.

Debido a que hay muchos tipos de errores, tam bin hay muchos nmeros, hasta
el punto de que no puede revisar todos ellos. Cuando se ejecuta un prog ra
ma, para saber qu tipo de error, se ut liza la propiedad Number del objeto Err.
En el siguiente ejemplo se muestra el nmero de error y de que se trata y se

muestra en un cuadro de texto. Se tiene el sig uiente formu Iario (Fig. 256).

Fig. 256 Evalua r ing reso de tipo de datos.

Se est ingresando como monto del Pago por hora: 40

(Cuatro y la letra 0

mayscu la), y el botn de comando Calcular tiene el sig uiente cdigo


257):
'= ll (Fig.
t8l

. .

Fig . 257 Cdigo sin control de Error


Se m uestra el sig uiente mensaje de error (Fig. 258) .
Microsoft V iual 8asc

k ha profundo el error ' 13' en oeirpo de e;eciion:


lo coinnden los npos

Fig. 258 Mensaje de Error del Sistema

En este caso se muestra el botn de comando:


Finalizar que al pulsa rlo se term ina de ejecutar la aplicacin.
Depurar re direccion a a la ventana de cdigo.
Ayuda, para tener informacin del error.
Si consideramos el cdigo de control de error, como el siguiente (Fig. 259) :

.p:u:. .p.:o:
t:iva e Sub crdca1cula:_Ciick{)
Cn B-inr GoTc 3a,_.n_e--o r_de _&a1c lo:
Dix t agodsra je Ooucle, Horariodemar.ar je Dsutle
Din Fago6enanal je Le.rie
' a .e..a. - . c a s r .ede z z
-.
:

' s. zI .:. ::: ::.::-.: .:. :...v:: ::

tagodorz - ?Db?(z Pagodo:a


?.orarioSew.ar.al - ?Dh1(txz o rarioSer.a.- a t l

, a

it

1. :

.-_error_de_Oa1cuIo:
:+sgox "ubo un problema al realizar er calculo. & _
zh?rif & Erzor '1-o. rr. tcr z a
Lii.Descripzio-.
Fagoseraza. - ?
..o raric8er.a al - ?

Fig. 259 Control del Error con Err.

En este cdigo VBA Solo se va a mostra r el botn de comando Aceptar.


AI contener la decla racin : Resume Next, no perm itir que el

progra ma

se

Caiga, sino que hace sa ber del error ocurrido y Iuego calcu la el PagoSemana l ,
ha biendo asig nado 0 (Cero) a las variables involucaradas.

Se m uestra el sig uiente cuad ro de mensaje (Fig. 260, 261).

Fig. 260 Control del Error personalizado

Pago Hra

Fig . 261 Resu ltado del Pago Semanal con control del Error
Otro formato pa ra el control del error sera el sigu iente:

Private Sub cmdCalcu la r Click()

On Error GoTo Hay un error de Calculo :


Dim PagoHora Aa Double, Hora riosemanal As Double
Dim PagoSemanal As Double

'Una de estas dos lneas puede producir un error, tal como:


'Si el usuario ingresa un nmero no v tido
PagoHora = CDbl(txtPagoHora )
HorarioSemana l = CDbI(txtHora riosemanal)

'Si hubo un error, el flujo podra saltar a la


etiqueta PagoSemanal - PagoHora *
HorarioSemanal txtPagoSemanal FormatNumber(PagoSemanaI) Exit Sub

Hay_un_error_de_Calculo:
If Err. Number - 13 Then

MsgBox "Ha escrito un valor no vlido"


PagoSemanal = 0

HorarioSemanal = 0

Resume Next
End If

End Sub
En este caso se muestra el mensaje como sig ue (Fig. 262) :

Fig . 262 Mensaje de Error con uso del Error 13

El mensaje de error.
Como ya se ha mencionado, hay muchos errores y por lo tanto muchos
nmeros en poder de la propiedad Nmero del objeto Err. En consecuencia, el
hecho de sa ber un nmero de error puede ser vago. Para ayudarle a descifrar
un error, el objeto error proporciona una propiedad denominada Descripction.

Esta propiedad tiene un mensaje (generalmente corto) sobre el nmero de


error. Esta propiedad funciona junto con la propiedad Number.
Es posible mostrar el texto que muestra el objeto Err para la propiedad

Description, tal como se indica en el siguiente cdigoo:


Private Sub cmdCalcu la r Click()
On Error GoTo Ha'y_un_error_de_Calcu lo:
Dim PagoHora As Double, Hora riosemanal As Double
Dim PagoSemanal As Double

'Una de estas dos Ineas puede producir un error, tal como :


'Si el usuario ingresa un nmero no v tido
PagoHora = CDbl(txtPagoHora)
HorarioSemanal = CDbl(txtHora riosemanal)
'Si hubo un error, el fl ujo podra sa ltar a la etiqueta

PagoSemana l - PagoHora * Hora riosemanal


txtPagoSemanal = FormatN umber(PagoSemanaI)
Exit Sub

Hay_u n_error_de_Calculo:
If Err.Number - 13 Then
Msg Box Err.Description

Programa Nacional de Informtica

Pgina 250

PagoSemanal - 0
HorarioSemanal - 0
Resume Next

End If
End Sub

En algu nos casos, el mensaje de error no ser lo

suficientemente explcito,

especia l mente si un usuario si mplemente no es progra mador. La a lternativa es


crear su propio mensaje que se entienda f ci l mente, adems se puede combi na r

el nmero del error y la descripcin del error. Vea el siguiente cdigo:


Private Sub cmdCalcu la r Click()
On Error GoTo Hay_un error_de_CalcuIo:
Dim PagoHora As Double, Hora riosemanal As Double

Dim PagoSemanal As Double


Una de estas d os l neas puede producir un error, ta l como :
Si el usua rio i ng resa un nmero no v l ido
PagoHora = CDbl (txtPagoHora )

HorarioSemana l = CDbI(txtHora riosemanal)


'Si hubo un error, el fl ujo podra sa ltar a la etiqueta
PagoSemanal = PagoHora * HorarioSemana l
txtPagoSemana l = FormatNu mber(PagoSemanaI)
Exit Sub
Ha'y_un_error_de_Calculo:
3f Err. Number - 13 Then
MsgBox Err. Descri ption & : El valor ingresado no es vlido
PagoSemanal = 0
HorarioSemanal = 0
Resume Next
End If

End Sub

Aprendizaje Prctico: Nlanejo del error Hoja Horarios.


Aseg rese de que la hoja de trabajo Horarios est seleccionada.
I. En la ficha Programador, seccin de Controles, haga clic en Insertar y, en la
seccin Controles de formulario, haga clic en el botn (control de formu la rio)

2. Haga clic en un vaco en la hoja de Hora rios.


3. En el cuad ro de dilogo Asignar macro,

escriba

el

Nom bre de la macro:

btnAceptarHorarios CIick.
4. Haga cl ic en Nuevo.

5. Implementar el evento como sigue:


Sub btnAceptarHora rios Click()
On Error GoTo btnAceptarHorarios Error
Esta va ria ble nos ayuda r a com proba r l as fi las

Dim FilaActiva As Integer


Esta va ria ble tend r el nro del em p leado d e RolPagos
Dim NroPagoEm pleado As String
Esta va ria ble tend r el nro. em pleado en l a hoja Hora rios
Dim NroHora rioEmpleado As String
Esta s 2 va ria bles obt en d r los va l ores de la fecha de la Hora rios
Dim Fecha Inicio As Date, Fecha Final As Date

Esta s va ria bles rep resen tan el tiempo de tra bajado de la hoja Hora rios

Dim Semana 1Lunes As Double, SemanaIMartes As Double


Dim Semana 1Miercoles As Double, Semana IJueves As Double
Dim Semana 1Viernes As Double, Semana

Sabado As Double

Dim Semana 1Dom ngo As Double, Semana 2Lunes As Double


Dim Semanal Martes As Double, Semana 2Miercoles As Double
Dim Semana 2Jueves As Double, Semana 2Viernes As Double
Dim Semana2 Sa bado As Double, Semana 2Domingo As
Double Verifica los regi stros qu e comienzan en la fi la 8
FilaActiva - 8
Obtiene el nmero de emplead o de l a ta bla de Hora rios

NroHora rioEmpleado = Worksheets( "Hora rios"). Range("C6")


Obtiene l a fecha de i nicio de la hoja Hora rios

Fechalnicio

= CDate(Worksheets(" Hora rios") . Range("C8"))

Aad i r 2 semanas a la fecha d e i nicio


Programa Nacional de Informtica

Pgina 252

FechaFinal = DateAdd("d", 13, Fecha Inicio)


Obten er el tiempo tra bajado por cada d a

Semana 1Lunes = CDbl(Worksheets("Hora rios"). Range("CI 1"))


Semana 1l1a rtes = CDbI(Worksheets("Hora rios"). Range("D 11"))
Semana 1Miercoles = CDbl(Worksheets("Hora rios"). Range("E 11"))

Semana 1Jueves = CDbI(Worksheets("Horarios" ) .Range("FI


1").Value) Semana 1Viernes = CDbI(Worksheets("Horarios")
.Range("G11") .Value)
Semana 1Sabado - CDbl(Worksheets( "Horarios"). Range( "H 11").Val ue)
Semana 1Domingo = CDbI(Worksheets("Horarios"). Range("l 11").Va l ue)
Semana2 Lunes = CDbl(Worksheets("Hora rios"). Range("CI 2").Va l ue)
Semana2 l'4a rtes = CDbI(Worksheets("Hora rios"). Range("D 12").Value)
Semana2 l1iercoIes - CDbl(Worksheets("Hora rios"). Range( "E12").Value)
Semana2Jueves = CDbI(Worksheets("Hora rios"). Range( "F12") .Va l ue)
Semana2Viernes = CDbI(Worksheets("Horarios"). Range( "G 12").Va l ue)
Semana2 Sa bado = CDbl(Worksheets( "Horarios"). Range( "H 12").Value)

Semana2Domingo - CDbI(Worksheets("Horarios"). Range("112").Value)


' Prepa ra pa ra com proba r n me ro de Pago de cada em pleado
Do

Pa ra procesa r un Rol de Pagos, un em pleado del departamento de Conta bilidad


Entra en el nmero de un em p leado

Obtiene el nmero de emplead os del Rol de Pagos


NroPagoEmpleado = Worksheets("RolPagos"). CeIls(FiIaActiva, 8).Val ue
Consu lta r tod os los reg istros d el Rol de Pagos
Si se encuentra una celda vaca en la col umna d el nro emp
leado, Esto sig nifica que no hay ningn registro en esa fila .
Si no hay ning n reg istro,

If NroPagoEmpleado ="" Then


'. . LIena r ese reg istro con l os va lores de la hoja Hora rios

Worksheets("RolPagos"). CelIs(FiIaActiva, 2) - NroHorarioEmpleado

Worksheets("RolPagos") . CelIs(FiIaActiva, 3) - Fechalnicio


Worksheets("RolPagos") .CelIs(FiIaActiva, 4) = Fecha Final
Worksheets("RolPagos"). CeIls(FiIaAct va, 5) = Semana 1Lunes

Worksheets("RolPagos") .CelIs(FiIaActiva, 6) = Semana 1Martes


Worksheets("RolPagos"). CelIs(FiIaActiva, 7) - Semana 1Miercoles
Worksheets("RolPagos"). CelIs(FiIaActiva, 8) = Semana 1Jueves
Worksheets("RolPagos") .CelIs(FiIaActiva, 9) = Semana 1Viernes

Worksheets("RolPagos").CelIs(FiIaActiva, 10) = Semana 1Sabado


Worksheets("RolPagos"). CelIs(FiIaActiva, 11) - Semana 1Domingo

Worksheets("RolPagos"). CelIs(FiIaActiva, 12) = Semana2Lunes

Worksheets("RolPagos") . CelIs(FiIaActiva, 13) - Semana2Martes


Worksheets("RolPagos") . CelIs(FiIaActiva, 14) - Semana
2Miercoles Worksheets("RolPagos"). CelIs(FiIaActiva, 15) = Semana
2Jueves Worksheets("RolPagos"). CelIs(FiIaActiva, 16) =
Semana2Viernes Worksheets("RolPagos") .CelIs(FiIaActiva, 17) =
Semana2 Sa bado Worksheets("RolPagos"). CelIs(FiIaActiva, 18) Semana2Domingo Exit Do
End
If
Si se encuentra un reg istro, i ncremen ta r el n mero d e fi las en 1

FilaActiva = Fi laActiva + 1
y com p ruebe el reg istro sig uiente
Conti nua r hasta los sig uientes 93 registros
Loop While FilaActiva < = 93
Si encuentra un probl ema, salga de este p roced i miento
Exit Sub

btnAceptarHorarios_Error:
Si hubo u n erro r, compru ebe qu ti po de error qu e era ,
Si el error es 13, sig nifica que el usua rio ha i ntroducido un valor i ncorrecto .
'Se muestra a l usa rio el error
If Err.Number = 13 Then

Msg Box "Ha introducido un va for no vlido. ." & vbCrLf


& "Com pruebe todos los va lores en la hoja Horarios."
End If
Resume
Next End
Sub
6. Cierre Microsoft Visua I Basic.

7. Configure el botn de comando como Aceptar Hora rios (Fig. 263) .

Julpai Servicios de Consultorio


Empleados - Horarios

Fig . 263 Configurar el botn de Comando.

8. Para aceptar los datos de los Hora rios haga clic en el botn [Acepta r Horarios].
(Fig. 264)

Julpai Servicios de Consultora


Empleados - Horarios
Cdigo:

Angeles. ffi

Nombre:

Fecha Final: 15 11 2012

Fecha inicio: 05 1 1 20 1 2
Lu nes
Semana 1
Semana 2

Iartes
3 OO
600

3 00
6 50

Iircoles

Juev-es

1'iernes Sbado Domingo

%.0,
8OOM
Aceptar Horarios

Fig. 264 Ingreso de Datos del Empleado.

9. Haga clic en la pestaa RolPagos pa ra ver el resultado (Fig. 265).

Julpai Servicios de Coasultona

Empleados Rol de Pagos

Fig. 265 Datos Transferidos del Primer Empleado.

Compilar mdulos.
Las aplicaciones de oficina se crean de ta l manera que pueda resolver
requerim ientos con cosas llamadas "objetos" que pueden recibir instrucciones
mediante el uso de cdigo de VBA. Se envan instrucciones a va rios objetos d e
la aplicacin para hacer lo que le indicar que hagan . Compila r el proyecto VBA le
ayudar a detectar errores de sintaxis en el prog rama pa ra que pueda correg
irlos antes de hacer un lanzam iento.
Entonces, la compilacin convierte el cdigo escrito en el VBE en el cdigo que
puede ser ledo por Wi ndows.

Si no lo hace, entonces se realiza automticamente cuando se ejecuta el cdigo.


Si el cdigo no se compilar entonces no se ejecutar .
Instrucciones:

1. Inicie Microsoft Office Excel, haga cl ic en la ficha "Progra mador" y haga clic en
"Visual Basic" para mostrar la ventana del editor de VBA. Haga clic en el men
"Insert:ar" y haga clic en "md ulos" pa ra inserta r un nuevo mdulo de cdigo.
2. Crear u n n uevo procedimiento Su b:
Private Sub compi leVBA ()

3. Haga clic en el men "Herramientas" y desactive la casilla de verificacin


junto a "Auto Check Sintaxis". Haga clic en "Aceptar". Agregue el cdigo
siguiente contiene un error de sintaxis en la palabra "Got", que se ca ptura
cuando se

compi la el cdigo :
On Error GoT Err com pileVBA:

4. Ag regue el sigu iente cdigo pa ra mostra r una va riable de cadena con cuad
ro de mensaje:

Dim MyStr As Integer

mystr - "Este es mi proyecto de VBA"


MsgBox (mystr)
Ag regue el siguiente cd igo para fi naliza r el proced imiento y

captura r

eua lquier error durante la ejecucin :


Exit_com pileVBA:

Exit Sub
Err_compiIeVBA :

PJsgBox Err. Description


Resume Exit com pileVBA:
End Sub
6. Haga clic en el men "Test" y haga clic en "Compi la r Proyecto VBA". Usted
ver una ventana de di logo que le muestra un "Error de compilacin : Error
de sintaxis", destacando la lnea de cdigo que agreg en el paso 4. Haga clic
en "Aceptar" y cam biar la palabra "Got" a "Go" en el paso 4. Compile

el

proyecto de nuevo. El prog rama debe com pilar con xito.

7.

Pu Ise la tecla "F5" para ejecuta r el procedi m iento.

Optimizacin de VBA.
Esta pgina enumera algunas sugerencias y estrategias para optimizar la
aplicacin de Visual Basic pa ra Aplicaciones (VBA), pa ra que se ejecute ms
rpido. Hay pocas reglas absol utas para optim iza r VBA, pero logran mejora r
el rendimiento mediante la racionalizacin de la lgica bsica.

Acceso a celdas en un rango.


No es necesa rio utiliza r el mtodo . Cells para acceder a celdas especficas en
un rango. Por ejemplo, puede utilizar:
Range ("b1i Rango") ( 1,2) en Iugar de Range ("bt iRango" ). Cells ( 1,2)

Relacionado a esto se encuentra el mtodo abreviado de referirse a las celdas.

VBA permite referirse a las celdas con [AI] en lugar de Range ("AI"). Mientras
que la sintaxis [AI] es ms fcil de escribir, se ejecutar ms lento de que la
sintaxis Range ("AI").

Modo de clculo.
Norma l mente, Excel volver a calcu lar una celda o un rango de celdas cuando
las celdas precedentes han cam biado. Esto puede hacer que el libro recalcule con
demasiada frecuencia, que se ralentizar el rend miento.

Usted

puede

evitar

que

Excel recalcu le el libro usando la declaracin :


Application.Calculation = xlCalculationb 1anual

AI final de su cdigo, puede establecer el modo de c lculo a automtico con la


decla racin :
Application.Calculation - xlCalculationAutomatic
Recuerde, si n embargo, que cuando el modo de clcu lo es xlCalculationF8anual,

Excel no actua liza los valores de las celdas. Si la macro se basa en un valor de
celda actualizada, debe forza r el evento Ca lcula r, con el mtodo . Calculate,
que

se

puede

aplica

tanto

un

rango

especfico

(Range("blyRange").CalcuIate) o el libro completo (Calculate).

Los ndices de la coleccin.


A un elemento individ ua l de una coleccin de objetos se puede acceder ya sea
por su nombre o por su ndice en la coleccin. Por ejem plo, si tiene tres hojas
de c lculo ("Hoja I, "Hoja2" y "Hoja3") en u n l i bro ("Prueba0l"), se puede hacer

referencia a "Hoja2", ya sea con :


Worksheets ("Hoja2") o Worksheets(2)

En

general,

el

mtodo

del

nmero

de

ndice

(Worksheets

(2))

es

considerablemente ms rpido que el mtodo de nombre de ndice ( Worksheets


("Hoja 2")).

Sin embargo, el nmero y el orden de los elementos en una coleccin pueden


ca mbiar, por lo que suele ser ms seguro y ms fci l referi rse a elementos de una

coleccin por su nom bre, en l uga r de su nmero de ndice.

Constantes.
Siempre que pueda, declare valores como constantes, en luga r de variables. Ya
que nunca cambian sus valores, se eva Ian slo una vez cuando el cdigo es
com pilado, en luga r de cada vez que se utilizan en tiem po de ejecucin.

Vinculacin anticipada.
Est estrechamente vincu Iado con la Declaracin especfica Tipo de objeto.
usted va a trabaja r con otra aplicacin, como Word, declarar

el

objeto

Si

OLE

directa mente, en Iugar de una variable de tipo Object. De esta manera, una g ran
cantidad de recursos se rea l iza en tiem po de com pilacin

("Binding Early") en

Iugar de en tiempo de ejecucin ("Late Binding"). Por ejem plo, el uso


Dim Obj_ Wordl As Word.Application Iugar de Dim Obj_Word As Object

Lazos FOR EACH.


Cuando se recorre una coleccin es general mente ms rpida la instruccin For
Each en Iugar de utiliza r el ndice. Por ejem plo, el primer cd igo del bucle es ms

rpido que el seg undo:


Dim ch as Worksheet

For Each ch In Worksheets


Msg Box ch. Na me

Next ch
Dim i as 1 nteoer
For i = 1 To Worksheets.Count
MsgBox Worksheets(i). Name

Next i

Objeto Range no Objeto de seleccin.


Genera l mente, no es necesa rio selecciona r un interna lo antes de trabajar con
l. Por ejemplo, es ms eficaz utilizar:
Range("AI").Font.Bold - True, en l ugar de:
Range("AE").Select

Selection.Font. Bold = True

La actualizacin de pantalla.
Puede desactivar la actua l izacin de pantalla pa ra que Excel no

actualice la

imagen de la pantalla cuando se ejecuta el cd igo. Esto puede acelerar su cd igo.


Application.ScreenUpdating

= FALSE

Objetos simples en lugar de Objetos compuestos.


Si se tiene que hacer repetidas referencias a un objeto, como un rango, decla ra
r un objeto de ese tipo, asg nele el valor del objeto de destino y, a continuacin,
utilice el objeto pa ra hacer referencia a l valor a asignar. Por ejemplo :
Dim MisCeldas As Range

Set MisCeldas = Workbooks("Libro2"). Worksheets("Hoja3"). Range("C3 ")


M sCeIdas.Val ue = 123

AI referirse

directamente a MisCeldas,

VBA puede

acceder al objeto

directamente, en Iugar de resolver la ruta completa al objeto cada vez. Este


mtodo es til slo cuando se est accediendo a un objeto varias veces d urante
la ejecucin de cdigo.

Declaracin especfica del tipo de objeto.


Si es posible, evite usar el objeto o los tipos de datos Va riant. Estos tipos de datos
requieren una sobrecarga considerable para determi nar sus ti pos. En su

Iugar,

utilice los ti pos de datos expl citos, como :


Dim bt ihoja As Worksheet,

en Iugar de Dim Plihoja As Object

Dim Num Rows As Long, en Iugar de Dim NumRows As Variant

Esto es especialmente cierto con las variables de ndice en los bucles For Next, ya
que un tipo Variant tiene que ser re-eva l uado cada iteracin del bucle.

Pgina 2 6 1

Programa Nacional de t nformtica

Declaraciones con WITH.


Si se esta utilizando varias declaraciones en una fi la que se aplican a un m ismo
objeto, utilice una instruccin WITH, en luga r de calificar com plenamente el objeto
cada vez. Por ejem plo:

With Worksheets("HojaI").Range("AI ")


.Font.Bold = True
.Value - 123
End With

Funciones de hoja de clculo.


Puede utiliza r las funciones estndar de Excel en el cdigo VBA, en l uga r de
escribir las funciones de VBA. Ya que estas son tota l mente instrucciones
ejecutables en cdigo nativo, en l uga r de interpreta r el cdigo VBA, corren
mucho ms rpido. Por ejemplo, utilice:
Suma0 E = Application.WorksheetFunction.Su m(Range("AE:A1OO"))
En Iugar de:
For Each n In Range("AI : A 100")

Suma01 = Suma0 1 + n.Value


Next n

Funciones tiles.
A continuacin se presentan un g rupo de fu nciones tiles con cdigo VBA,
funcionales y muy tiles. Sim plemente copia r el cdigo y pegano en el mdulo
que se requiera.

FileExists, Devuelve TRUE si un determi nado archivo existe.

FileNameonly, Extrae la part:e del nombre de un a rchivo de una cadena de

ruta / nombre de a rch ivo.

PathExists, Devuelve TRUE si existe una ruta o ca mino particular.

RangeNameExists,

Devuelve TRUE si un determi nado nombre d e rango

existe.

SheetExists, Devuelve TRUE si una hoja en pa rticular existe.

WorkBooklsopen, Devuelve TRUE si un determi nado l ibro est a bierto.

La fu ncin ArchivoExiste.

Private Function ArchivoExiste(Ina me) As Boolean


Retorna true si el a rchivo existe
Dim x As String
x = Dir(Iname)

If x < > "" Then Arch ivoExiste = True


Else ArchivoExiste = Fa Ise
End

Function

La fu ncin SolamenteNombreArchivo.

Private Function SoIamenteNombreArchivo(pnombre) As String


Retorna el nom bre de una cadena de ruta / nombre de a rchivo

Dim i As Integer, longitud As Integer, temp As String


longitud - Len(pnombre)
temp = ""
For i = long itud To 1 Step - 1
If Mid(pnombre, i, 1) = Application. PathSepa rator Then

SolamenteNombreArchivo - temp
Exit Function
End If

temp = Mid(pnombre, i, 1) & tem p

Next i
SolamenteNombreArchivo = pnombre

End Function
La funcin RutaExiste.

Private Function Ruta Existe(pnombre) As Boolean


' Retorna true si la ruta existe

Dim x As String
On Error Resume Next
x = GetAttr(pnombre) And 0
If Err - 0 Then Ruta Existe True Else Ruta Existe = False

End Function

Pgina 263

Programa Nacional de t nformtica

La fu ncin NombreRangoExiste.

Private Function NombreRangoExiste(n name) As Boolean


' Retorna True si existe el nom bre de rango
Dim n As Name
NombreRangoExiste - Fa Ise

For Each n In ActiveWorkbook. Na mes


If UCase(n . Name) = UCase(nna me) Then
Nom breRangoEx ste = True
Exit Function

End If
Next n
End Function

La fu ncin HojaExiste.

Private Function HojaExiste(sna me) As Boolean


Retorna True si existe hoja del libro activo
Dim x As Object
On Error Resume Next

Set x = ActiveWorkbook. Sheets(sname)


If Err = 0 Then Hoja Existe = True
Else Hoja Existe - False
End Function

La funcin LibroEstaAbierto.

Private Function LibroEstaAbierto(wbnombre) As Boolean


'Retorna TRUE si el libro est abierto
Dim x As Workbook

On Error Resume Next


Set x - Workbooks(wbnombre)
If Err = 0 Then LibroEstaAbierto = True _

Else LibroEstaAbierto = Fa lse


End Function

Ca

Desarrollo de
Aplicaciones.
Apl icacin I: Registro de Postu tantes.
9 Apl icacin II: Calendario Posta I.

4 Aplicacin III. Control de Facturas.

Pgina 265

Programa Nacional de Informtica

Desarrollo de Aplicaciones.

Crea r aplicaciones persona lizadas, es una la bor que demanda tiempo y esfuerzo, poner
a punto las aplicaciones de acuerdo a los requerimientos de los usuarios es sacrificada y
a la vez placentera de poder atender todo lo que se solicita y estar muy complacido

que el esfuerzo realizado logra ayudar a resolver el quehacer de la gestin diaria.


Se debe combinar el uso de los objetos VBA con el adecuado cdigo, control de errores y
bien a plica dos los mtodos de optimizacin.
En este sentido se va a proponder la creacin de 3 aplicaciones tipos:

1. Aplicacin I: Registro de Postulantes.


2. Aplicacin II: Calendario de Imgenes
3. Aplicacin II: Control de Facturas.
1. Aplicacin I: Registro de Postulantes.
H

Salir de Excel

Fig . 266 Panel de Registro de Postu tantes.

Se solicita crea r una a plicacin pa ra el registro de datos de los postulantes a un

puesto laboral.
Se tienen 3 reas de postulacin:
a. Gastronoma.
b. Soldad ura.
c. Maquinaria pesada.
El sistema debe genera r los cdigos de cada rea :

rea

Cdigo

Gastronoma

Gst

Soldadura

Sld

Maquina ria pesada

MP

El inicio se indica en la (Fig. 267) .

Se cuenta con 3 hojas, la primera es el panel de adm inistracin (Fig . 267).


s.en

Fig. 267 Panel de Administracin.


Hay tres procesos:
1. Registrar Nuevos, para los nuevos postulantes.
2. Estadsticas, para mostrar los resultados de la cantidad por rea.
3. Salir de Excel, para terminar la sesin y salir del Excel.
Se tiene 3 hojas:
1. Inicio.

2. Datos.
3. Estadsticas.

Soldadura Maquinaria Pesada Gastronoma


Sld Mqp
Maquinaria
Get Mqp
Pesada
Sld Mqp
Soldadura
Sld Get Sld
Maquinaria
Mqp
Pesada Soldadura Gastronoma Soldadura Ma

La hoja de los datos


ingresados (Fig. 268).

Fig. 268

Hoja de Datos ingresados

La hoja de las
estad sticas.
(Fig. 269).

Fig. 269 Hoja de Estadsticas.

El formu la rio de captura de

datos es el siguiente.
(Fig. 270).

Fig . 270 Formu la rio de Ingreso de Datos.

Si no se ingresa el nombre del postulante y se pretende Grabar, el sistema le hace


saber que es obligatorio el ingreso (Fig. 271) :

Db introducir un nombre.

Fig.

271 Mensaje de validacin del i ngreso del nombre.

Para realizar la aplicacin, se tiene que complementar con el correspondiente cdigo.


Para el ingreso de los nuevos postulantes se debe considerar el siguiente cdigo VBA
(Fig. 272).

Fig. 272 Cd igo de Ingreso de Nuevos Postulantes.


Para el caso de las estadsticas, se tiene el sig uiente cd igo (Fig . 272) :

Ezr
Rango
Erm n:a
_Celdas()
UlzimaFila As long, n As Lcng cg, cs, cr. s Jong
S:eeos{"Darcs").Acnivaze
Ulir.aFila = Cella(6SSS6, i).E:.d(lp).Row

R,.-.g e( Cells(?, i, c,ii,oi i a riia, c.s,ie


Por n - 1 Tc lriwaFila
d e becn base Cells(r., ?) base Gss
cg - cg - ? base Sld

Fig. 273 Cdigo de aplicar las Estad sticas.


Para retornar a la hoja i nicio (Fig . 274) .

Fig . 274 Macro de Retorno a Inicio.


Para sali r del Excel (Fig . 275).

5:r 5ali r ezcel()


Applicat ion. Disp la yAler us - False Applica u io-.Quiz
-.J S L
'*

Fig. 275 Macro pa ra Sa lir del Excel.

Programa Nacional de Informtica

Pgina 270

Aplicacin II: Calendario de Imgenes.


En este caso se tendr un libro que permite crear un calendario de imgenes que

cambian cada mes.

Se tienen 4 hojas:
a. Calendario btensual: Los detalles del mes actual.
b. bJini Calendario: La configuracin de los meses.
c. Pies: Las imgenes que requiere el calendario.
d. Cale: La configuracin del mes actual.
En la imagen se muestran las hojas:

Calendario Mensual

N1ini Calendario

Pies

La Primera hoja, es la hoja principal, muestra el mes en curso:

Cale

La eua rta y ltima contiene la configuracin del mes actual :

Programa Nacional de Informtica

Pgina 272

El Cd igo que se requiere es el sig uiente:


Sub pickMonth()
Ca mbia el mes seleccion ado y lo actua l iza
Application. Screen Updating = False

Application. DisplayAlerts = False


With ActiveSheet. Shapes("Mes " & [curMonth]) . Fi ll
.Visible - msoTrue
. ForeCoIor.ObjectThemeColor = msoThemeColorBackg round 1

. ForeCoIor.Ti ntAndShade = 0
. ForeColor. Brightness = -0. 150000006
.Transpa rency - 0
.Solid
End With

[curMonth] - Mid(Application.Ca ller, 6)

With ActiveSheet. Shapes(Application.CaIler). Fill


.Visible = msoTrue
.ForeColor. ObjectThemeColor - msoThemeColorText1
.ForeCoIor.TintAndShade = 0
.ForeColor. Brightness = 0.349999994

.Transparency = 0
.Solid
End With
Application. ScreenUpdating = True
Application. DisplayAlerts = True
End Sub

Sub printAll()
'Genera un ca lendario en Formato PDF de los 12 meses
Dim cMonth As Integer
For cMonth = 1 To 12

Range("cale! curMonth"). Va lue = cMonth


Range("A1:J38") . Calculate

Range("'Ca Ienda rio Mensual'!Area_Imprim ir").ExportAsFixed Format

xlTypePDF,

Th isWorkbook. Path & "\" & c l4 onth & "-2012. pdf"


Next cMonth
End Sub

3. Aplicacin III: Control de Facturas.


Se desea llevar el registro de datos de las reparaciones realizadas y el coste de
las mismas con el uso de facturas. Se tiene un formato de las facturas del Centro
de Reparaciones tal como se m uestra a continuacin:

Centro de Reparaciones

Informacin del C3iente

ti o m t re.
i:'
11

:udad
onmaoioo del auio

Pieza #

Stock de Piezas.

Nomlre de la Piea

Prerio Uni Cantidad lm;one

Se tiene una base de datos de las piezas que son de ms frecuente uso en las
repa raciones. En la imagen sigu iente se muestra una pa rte de los datos:

Usted debe desarrollar lo necesa rio pa ra cada una de los sig uientes requerimientos:
a. Registro de datos: Debe Prepa ra r un formulario para el registro de los datos

necesarios de los clientes en una hoja .


b. Registro de datos de la repa racin : Preparar un form ulario para ta I propsito.
c. Obtener los totales de la orden de atencin.
d. Realizar la impresin de la factura directa o en un a rchivo PDF.

El participante es libre de crear el mejor diseo en cuanto a


presentacin y facilidad de uso de parte de los usuarios operadores
del control de facturas.
Se debe disear, de tal forma que cualquier persona lo entienda y
opere.

PROPIEDAD INTELECTUAL DEL SENATI


PROHIBIDA SU REPRODUCCIN Y VENTA
SIN LA AUTORIZACIN
CORRESPONDIENTE
AO DE EDICIN 2012
CDIGO DEL MATERIAL 82100130