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