You are on page 1of 67

MODULO II

PROGRAMA EXCEL PARA EXPERTOS


Macros y VBA para Excel
1.

INTRODUCCION GENERAL DEL MODULO

En el presente modulo desarrollaremos las pautas y conceptos para que mediante la


elaboracin de Macros podamos automatizar procesos dentro de nuestras aplicaciones Excel,
de tal forma que se puedan desarrollar soluciones con un entorno amigable, interactivo y de
fcil manejo, encapsulando en macros aquellas tareas frecuentes o que requieran de un nivel
de personalizacin que mediante cdigo en VBA se lleguen alcanzar.
2.

OBJETIVOS GENERALES DEL MODULO

El participante al finalizar el modulo podr:

3.

Reconocer la importancias de las Macros en EXCEL

Elaborar Macros automticas mediante la grabadora de macros

Conocer el lenguaje VBA (Visual Basic for Application) que permitir la creacin de
macros complejas basadas en cdigo.

Emplear de manera eficiente formularios (Userform) que permiten una mayor


interaccin del usuario con respecto a la aplicacin desarrollada.

PRE REQUISITOS DEL MODULO

Haber llevado satisfactoriamente el modulo I , de Grficos y Tablas Dinmicas en Excel

4.

CONTENIDO DETALLADO DEL MODULO


A. SESION 1
TEMARIO
Definicin de macros. reas de aplicacin de macros
Creando macros con la grabadora
Creando macros con programacin en VBA
Ejercicios
IMPORTANCIA
Esta sesin basa su importancia en ser la base de la creacin de macros que
permitan al desarrollador elaborar macros ms complejas tomando como
referencia los conceptos vertidos en esta sesin.
CONTENIDO DESARROLLADO

a. Definicin de Macro
Desde el punto de vista general, podemos decir que las macros nos ayudan a
automatizar tareas. Son partes de cdigo de programacin que es interpretado por
Excel y lleva a cabo distintas acciones o una sucesin de tareas. De esta forma, con
una macro podremos realizar tareas repetitivas muy fcilmente.
Sin embargo, ste no es el nico uso que podemos darle a una macro ya que, si
utilizamos el lenguaje de programacin en el que hablan las macros, Visual Basic
para Aplicaciones (VBA), podremos desarrollar desde tareas y funciones simples para
fines especficos hasta aplicaciones complejas que incluso conllevan a interaccin con
bases de datos, como lo veremos en el modulo III.
Las reas de aplicacin de las macros las podemos resumir en lo siguiente:
Automatizacin de procesos
Las macros nos permiten grabar o definir nuestros procesos y luego ejecutarlos
automticamente con 1 clic. Nos pueden ahorrar muchas horas de trabajo. Con las
macros podrs hacer tu trabajo mucho ms rpido. Se han visto casos extremos de
trabajos en Excel que llevaban 6 o 7 horas de armado manual y luego pudieron ser
automatizados en una macro que haca todo en pocos segundos.
Creacin de funciones a medida
Las funciones y frmulas Excel son la esencia de la hoja de clculos. Podemos
programar funciones a medida que hagan exactamente lo que nosotros queremos. Y
esas funciones se comportarn igual que las de Excel e incluso aparecern en el
men de funciones en la categora que nosotros indiquemos, tendrn sus respectivos
argumentos, etc.

Creacin de nuevos comandos, complementos y mens


Excel trae una gran cantidad de comandos y mens predefinidos que nos asisten para
las operaciones ms habituales. Las macros nos permiten crear nuestros propios
comandos y mens personalizados, e incorporarlos al Excel. La utilidad de los mismos
depende tan solo de nuestras necesidades. Los complementos Excel tambin estn
creados con macros.
Creacin de aplicaciones a medida
Excel es utilizado en diversos campos y por una gran cantidad de usuarios. Las
macros te permitirn construir complejas y elegantes aplicaciones para cualquier uso
que quieras darles. El lmite solo es tu imaginacin. Una aplicacin Excel consiste en
algo ms que una simple plantilla con datos y frmulas. Una aplicacin Excel es un
verdadero programa de software con una serie de caractersticas que lo hacen
utilizable por cualquier usuario sin que el mismo tenga que entender la lgica
"exceliana" que hay por detrs.
Formularios
Finalmente, con las macros podremos armar todo tipo de formulario para entrada y
gestin de datos. Dichos formularios pueden tener botones, listas desplegables, y
todas las herramientas que encuentras en formularios profesionales. Adems,
puedes hacer que los datos del formulario se vayan guardando en una tabla Excel
para posteriores anlisis y reportes.
Existen 2 tipos de macros:

Automticas
Basadas en la grabacin de las acciones realizadas y la asignacin a objetos.

Programacin
Emplear el uso de comandos en Visual Basic para Aplicaciones (VBA) asignado
su ejecucin a objetos, como un botn de comando por ejemplo.

b.

La ficha Programador

Desde la ficha Programador de la cinta de opciones de Excel es donde encontramos


todo lo necesario para el trabajo con macros. Por defecto esta ficha no esta visible en
la cinta. Aqu le damos los pasos para hacerla visible:
Paso 1:

Haga clic en el botn Office (parte superior izquierda de su pantalla , versin


2007)

Haga clic en la ficha Archivos (Versin 2010)

Paso 2:

Haga clic en el botn opciones de Excel (Excel 2007) o seleccione el men


opciones (Excel2010)

Paso 3:

En Excel 2007 aparecer un cuadro de dialogo, desde el cual , ubicado en la


opcin Ms Frecuentes , marque la casilla en donde se indica Mostrar ficha
Programador

En Excel 2010 haga clic en Opciones y de ah a la ficha que dice Personalizar


Cinta de Opciones, y haga clic sobre la casilla Programador

En ambos casos haga clic en Aceptar y ya ver la ficha Programador en la cinta


de opciones

c. Creacin de una macro automtica con la grabadora de macros


Antes de explicar la forma de grabar una macro debemos entender que todas las
macros generan un cdigo en VBA, lenguaje que ms adelante aprenderemos a
manejar, de tal forma que podamos administrar y personalizar las macros con
conocimiento de causa.
Excel trae incorporada una grabadora de macros. La misma funciona de forma muy
fcil. Encendemos la grabadora, ejecutamos las acciones que nos interesan sobre la
hoja Excel, paramos la grabadora y eso es todo. Excel escribe de forma automtica el
cdigo VBA de la macro. Ahora podemos hacer un experimento muy interesante.
Crear nuestra primera macro hacindola con la grabadora de macros. Sigue los pasos
a continuacin:
Paso 1. Vamos a grabar la macro

Ir a la ficha Programador > Grabar macro

Se abrir un cuadro de dilogo como el que se muestra a continuacin.

Donde dice Nombre de la macro escriba MiPrimeraMacro. Ese ser el nombre que
le daremos a nuestra macro.
Presione Aceptar y la macro comenzar a grabar todo lo que haga.
Ubicarse en la celda A1, escribe el valor 1500 y pulsar la tecla Enter
Paso 2. Detener la grabacin
Para terminar de grabar, debemos presionar el botn de detener grabacin

Paso 3. Revisin del cdigo generado

Accede al editor de Visual Basic con ALT+F11.


Debe hacer clic en Mdulo1 (ventana de la izquierda llamada Explorador de
Proyectos) para visualizar el cdigo de la nueva macro grabada. Ver una
pantalla como la siguiente:

4. Ejecucin de la macro

Vuelve a Excel con ALT+F11.


Ver que la celda A1 tiene el valor 1500 porque lo escribimos mientras
grabbamos la macro.

Para ver cmo opera la macro borra dicho valor.

Abre el men de macros presionando ALT+F8


Selecciona MiPrimeraMacro
Presiona Aceptar y ver cmo se escribe nuevamente el valor 1500 en la celda
A1.

d. Creacin de macros con programacin en VBA


La creacin de macros con programacin implica elaborar un programa (sencillo o
complejo, dependiendo la solucin que deseamos implementar atraves de la macro)
en cdigo VBA (Visual Basic for Application) que es el lenguaje con el que podemos
automatizar aplicaciones Office. Para codificar el programa requerimos de invocar al
Editor de Visual Basic con la pulsacin de las teclas ALT+F11 o desde la ficha
Programador acceder al comando Visual Basic (primer comando desde la izquierda
de la ficha)
El Editor Visual Basic
Una vez que haya accedido al editor de Visual Basic vers algo similar a la figura
siguiente (no importa si no lo ve estrictamente similar, eso depender de las
ventanas que tenga visibles y ocultas). Puede mostrar u ocultar estas ventanas desde
el men Ver.

El editor contiene 4 ventanas principales:

la Ventana Proyecto (parte izquierda superior)


la Ventana de Cdigo (parte derecha)
la Ventana Propiedades (parte izquierda inferior)
la Ventana Inmediato (parte inferior derecha)
Ventana Proyecto - VBA Project: Esta
ventana muestra los libros excel (xls) o los
complementos (xla) abiertos. Usualmente
ver nombres del tipo "VBAProject" y entre
parntesis el nombre del archivo o
complemento Excel. Veamos el caso de
VBAProject (Libro1). Simplemente significa
que tienes abierto un libro Excel llamado
Libro 1. Luego cuelgan 3 carpetas ms: Hoja1
(Hoja1), ThisWorkbook y Modulo (no importa
si ve todos estos elementos ahora, luego
explicaremos como activarlos). Estas
carpetas es donde habitan las macros.
Haciendo doble clic en ellas activars la
ventana donde se escriben las macros.

Ventana de Cdigo: esta es el lugar donde escribiremos el cdigo propiamente dicho


de las macros. Como no hemos escrito ninguna macro todava veremos la hoja en
blanco. Recuerda bien estas dos ventanas, ya que las usaremos a continuacin para
escribir nuestra primera macro.

Como ver el Editor de VB tiene muchas ventanas. Pero de momento solo nos
interesan las dos ventanas que te indicamos anteriormente: la Ventana Proyecto
VBA Project y la Ventana de Cdigo donde se escribe el cdigo de las macros. La
Ventana de Propiedades e Inmediato las dejaremos para ms adelante.
Recuerda: presionando las teclas ALT+F11 puedes ir desde Excel al Editor o desde el
Editor al Excel de forma alterna (debes mantener presionada la tecla ALT y presionar
F11 repetidas veces, vers como pasas de Excel al editor y viceversa).
Si estas en el editor y quieres regresar a la hoja Excel tambin puedes utilizar el
cono de Excel que se encuentra en el men superior del editor (primer cono de la
izquierda, con la X de Excel).
Creando la primera macro con programacin en VBA
Esta macro la denominaremos EnviarSaludo y permitir enviar un mensaje de
bienvenida unido al nombre del usuario ingresado en la celda A3 de la hoja Hoja1.
Siga los pasos a continuacin indicados:
Paso 1:
Ir al editor de VB. Desde la ventana del Explorador de proyectos seleccione la hoja
Hoja1.
Paso 2:
Desde la ventana de cdigo de la hoja Hoja1 ingrese el siguiente procedimiento (Sub)

Note que al codificar Sub EnviarSaludos y pulsar Enter, automticamente el editor ya


incluye el cierre del procedimiento con la sentencia End Sub
La funcin MsgBox se emplea para enviar saludos mediante un cuadro de dialogo.
Mas adelante revisaremos a profundidad esta funcin propia del lenguaje VBA.

Paso 3:
Vuelva a la hoja Hoja1 de Excel e ingrese en la celda A3 su nombre y apellido

Paso 4:
Probaremos la macro invocando a la ventana de macros pulsando ALT+F8 , desde la
cual seleccionaremos la macro llamada EnviarSaludo y haremos clic en el botn
Ejecutar.

Veremos el siguiente resultado

Modificar macros existentes


Si se desea modificar la funcionalidad de una macro ya creada, deber invocar a la
ventana de macros con ALT+F8 , seleccionar la macro a modificar y hacer clic en el
botn Modificar. Se abrir la ventana del editor VB con el cdigo de la macro
seleccionada para su modificacin.
Eliminar macros existentes
Invocar a la ventana de macros con ALT+F8, seleccione la macro que desea eliminar y
haga clic en el botn Eliminar, con lo cual la macro se eliminara incluyendo su cdigo.
Recuerde que si la macro eliminada la asigno a un control (un botn de comando por
ejemplo) el control ya no ejecutara ninguna accin.
Asignar la ejecucin de la macro a un control
Como es lgico pensar, no siempre ejecutaremos la macro desde la ventana de
macros. La idea de automatizar consiste en que las macros se ejecuten desde un
botn de comandos por ejemplo (o desde cualquier otro control que permita la
ejecucin de la misma). A continuacin explicaremos la manera como se puede
asignar la ejecucin de la macro EnviarSaludo a un botn que insertaremos en la
hoja Hoja1
Paso 1:
Desde la ficha Programador ubique el
grupo Controles, desde el cual
seleccione el comando Insertar, con lo
que se despliega la siguiente ventana:

Paso 2:
Desde el grupo de controles llamado Controles de Formulario seleccione el llamado
Botn (el primero de la izquierda) y dibuje dicho botn con el mouse dentro de
cualquier parte de la hoja Hoja1, de tal forma que al finalizar de dibujar el botn se
mostrara una ventana parecida a la ventana de macros, donde se elegir la macro a
ejecutar por el botn. Elija la macro EnviarSaludo y acepte.

Paso 3:
Vera que el botn esta seleccionado pero con el texto botn 1. Haga un clic sobre
dicho texto, edtelo y coloque Enviar Saludo y haga clic fuera del botn.
Ahora el botn quedo listo para ejecutar la macro. Haga clic sobre l y vera el
resultado.

NOTA: Ud. puede dibujar un control y no asignarle ninguna macro por el momento.
Esto se da en los casos en los cuales se desea primero dibujar los controles y luego
asignarlos a las macros. Para hacer esto, haga clic derecho en el botn indicado,
seleccione la opcin Asignar macro y repita el paso 2.

LABORATORIOS DESARROLLADOS
Laboratorio 1: Creando macros que naveguen entre las hojas y adems que
ordenen y filtren una base de datos
Abra el libro Demo01_Macros de su material de trabajo y realice lo siguiente
Paso 1:
Vaya el editor Visual Basic y desde la ventana del Explorador de Proyectos seleccione
la hoja Hoja1 (MenuPrincipal).
Codifique las siguientes macros:

Vuelva a la hoja Hoja1 de Excel y dibuje los siguientes botones. A cada botn asigne
la macro que corresponda (de acuerdo al texto de cada botn segn la figura, asigne
la macro respectiva)

Paso 2:
Seleccione la hoja Hoja2 (MacrosOrden) y con la grabadora de macros elabore las
siguientes macros:
OrdenarApellidosNombres
Donde grabe todas las acciones pertinentes para ordenar la base de datos por
apellido paterno, apellido materno y nombres (las de forma alfabetica de la A a la Z)
OrdenarSueldos
Donde grabe todas las acciones pertinentes para ordenar la base de datos por sueldo
de forma descendente
OrdenarAntiguedad
Donde grabe todas las acciones pertinentes para ordenar la base de datos por fecha
de ingreso, del ms antiguo al ms reciente
Ahora dirjase al editor VB. Seleccione la hoja Hoja2 .Agregue Ud. la siguiente
macro:

Salga a Excel y en la hoja Hoja2 dibuje los siguientes botones, asignndoles las
macros respectivas, de acuerdo al texto que se muestra en cada botn:

Paso 3:
Seleccione la hoja Hoja3 (MacrosFiltro) y con la grabadora de macros elabore las
siguientes macros:
Filtro1
Donde grabe todas las acciones pertinentes para aplicar filtros avanzados en la base
de datos de acuerdo al rango llamado Criterio1 y que muestre el resultado en el
rango Salida
Filtro2
Donde grabe todas las acciones pertinentes para aplicar filtros avanzados en la base
de datos de acuerdo al rango llamado Criterio2 y que muestre el resultado en el
rango Salida
Filtro3
Donde grabe todas las acciones pertinentes para aplicar filtros avanzados en la base
de datos de acuerdo al rango llamado Criterio3 y que muestre el resultado en el
rango Salida
Ahora dirjase al editor VB. Seleccione la hoja Hoja3 desde la ventana del Explorador
de proyectos .Codifique Ud. las siguientes macros:

Salga a Excel y en la hoja Hoja3 dibuje los siguientes botones, asignndoles las
macros respectivas, de acuerdo al texto que se muestra en cada botn:

B.
C.
D.
E.
F.
G.
H.
Paso 4:
Grabe su libro y pruebe cada macro desde la hoja1 MenuPrincipal.
Nota: Si se dirige al editor VB y desde la ventana del Explorador de Proyectos
selecciona el Modulo1, observe como las macros automticas (generadas por la
grabadora) estn codificadas.

EJERCICIOS PRCTICOS
Paso 1:
En el mismo libro Demo01_Macros, seleccione la hoja Hoja4 y dibuje los siguientes
botones (pero aun no asigne ninguna macro en ellos, solo dibjelos)

Paso 2:
Ahora desde el editor VB seleccione la misma (Introd_VBA) y codifique las siguientes
macros:

Paso 3:
Vuelva a Excel y asigne a cada botn la respectiva macro, haciendo clic derecho
sobre el botn respectivo y eligiendo la opcin Asignar Macro.
Grabe y pruebe su aplicacin

B. SESIN 2

TEMARIO
Definicin de programa
La programacin en Excel
Introduccin a la programacin con VBA

IMPORTANCIA
En la presente sesin se revisara los fundamentos de la programacin y
especficamente en Excel. Para aquellas personas que nunca han programado, este
captulo ser fundamental para iniciarse en la creacin de macros creadas por el
desarrollador.
CONTENIDO DESARROLLADO
a. Definicin de programa
Un programa se define como un conjunto de sentencias ejecutadas bajo una
estructura lgica secuencial, desarrollada para dar solucin a un problema
determinado.
Las sentencias se dan en un determinado lenguaje de programacin, como por
ejemplo Java, Visual Basic, C#, etc.
A continuacin mostramos un ejemplo de un pequeo programa que calcula el
monto de una comisin en funcin al ingreso de las ventas y el porcentaje de
comisin a deducir.

b. Introduccin a la programacin en Excel


Esencialmente la programacin de Excel se reduce a la manipulacin de objetos
mediante la escritura de instrucciones en un lenguaje que Excel puede entender,
siendo este el lenguaje VBA (Visual Basic for Application)
VBA est pensado como un lenguaje de secuencia de comandos de aplicacin de
Microsoft comn y ahora est incluido en las aplicaciones de Office 2007 y 2010 (e
incluso en aplicaciones de otros fabricantes). Por consiguiente, al dominar VBA
usando Excel se podr entrar directamente en la escritura de macros para otros
productos de Microsoft. Mejor an, se pueden generar soluciones completas que
usan opciones a travs de varias aplicaciones.
Por ejemplo las macros generadas por la grabadora de macros han creado en forma
automtica un cdigo en VBA.
Ms adelante veremos cmo realizar macros complejas utilizando cdigo VBA. Por
ahora tenemos que familiarizarnos con el lenguaje
El secreto de usar VBA con otras aplicaciones reside en entender el modelo de
objetos para cada aplicacin.
VBA simplemente manipula objetos, y cada producto (Excel, Word, Access,
PowerPoint y dems) posee un modelo de objeto nico propio.
Por ejemplo Excel expone varios objetos de anlisis de datos muy potentes como las
hojas de clculo, grficos, tablas dinmicas, escenarios y numerosas funciones
matemticas, financieras y temas generales. Con VBA se puede trabajar con estos
objetos y disear procedimientos automatizados.
Los mdulos
Las acciones de VBA se realizan mediante la ejecucin del cdigo VBA. El cdigo VBA
se escribe (o se graba) y se guarda en un mdulo VBA.
Los mdulos se guardan en un libro de trabajo de Excel pero se editan o visualizan en
el editor de Visual Basic. Un mdulo VBA se compone de procedimientos. Un
procedimiento es bsicamente un cdigo de ordenador que realiza alguna accin
sobre los objetos o con ellos.
Ejemplo: Procedimiento llamado Sub que enva en un mensaje la suma de 1+1
Sub Prueba()
Sum= 1+1
MSGBox La respuesta es & Sum
End Sub

NOTA: VBA manipula los objetos contenidos en su aplicacin anfitriona (en este
caso Excel).

Los procedimientos Function


Un mdulo VBA puede tener tambin procedimientos Function. Un procedimiento
Function devuelve un solo valor. Se puede llamar una funcin desde otro
procedimiento VBA o usar una frmula de hoja de clculo.
Ejemplo de una funcin que retorna la suma de los 2 parmetros que se le pasan
como argumentos
Function MiFuncionSuma(arg1, arg2)
MiFuncionSuma = arg1 + arg2
End Function

El modelo de objetos de Excel


Excel proporciona ms de 100 clases de objetos para manipular. Ejemplos de objetos
son un libro de trabajo, una hoja de clculo, un rango de una hoja de clculo, un
grfico y un rectngulo dibujado. Existen muchos ms objetos a nuestra disposicin y
se pueden manipular mediante el uso de cdigo VBA.
Las clases de objetos estn ordenados jerrquicamente. Los objetos pueden actuar
como contenedores de otros objetos. Por ejemplo, Excel es un objeto llamado
Application y contiene otros objetos como WorkBook y CommandBar. El objeto
WoorkBook puede contener otros objetos como WorkSheet y Chart. Un objeto
WoorkSheet puede contener objetos como Range, PivotTable y dems. Nos
referimos al orden de estos objetos como modelo de objeto de Excel.
Objetos similares forman una coleccin. Por ejemplo, la coleccin WorkSheets est
compuesta por todas las hojas de clculo de un libro concreto. La coleccin
CommandBars est compuesta por todos los objetos CommandBar. Las colecciones
son objetos en s mismas. Cuando nos referimos a un objeto contenido o miembro,
estamos especificando su posicin en la jerarqua del objeto, usando un punto como
separador entre el contenedor y el miembro.
Por ejemplo esta expresin se refiere al libro de trabajo Libro1.xls en la coleccin
WorkBooks.
Application.WorkBooks(Libro1.xls)
Nos podemos referir a la Hoja1 del Libro1 como
Application.WorkBooks(Libro1.xls).WorkSheets(Hoja1)
Si se quiere omitir una referencia especfica a un objeto, Excel usa los objetos
activos. Si el libro1 es el libro de trabajo activo, la referencia anterior se puede
simplificar a:
WorkSheets(Hoja1).Range(A1)
Si se sabe que la Hoja1 es la hoja activa, se puede incluso simplificar ms
Range(A1)

Propiedades de los objetos


Los objetos tienen propiedades. Se puede pensar en una propiedad como en una
configuracin para un objeto.
Por ejemplo, un objeto Range tiene propiedades como Value y Name. Un objeto
Chart tiene propiedades como HasTitle y Type. Se puede usar VBA para determinar
las propiedades del objeto y tambin para cambiarlas.
Nos podemos referir a propiedades para combinar el objeto con su propiedad,
separados por punto. Por ejemplo nos podemos referir al valor de la celda A1 de la
Hoja1 como
WorkSheets(Hoja1).Range(A1).Value

Se pueden asignar valores a variables de VBA.Para asignar un valor en la celda


A1 de la Hoja1 a una variable llamada Inters, use la siguiente instruccin
VBA:
Inters = WorkSheets(Hoja1).Range(A1).Value
Los mtodos de los objetos
Los objetos disponen de mtodos. Un mtodo es una accin que se realiza
con el objeto. Por ejemplo, uno de los mtodos para el objeto Range es
ClearContents. Este mtodo borra el contenido del rango.
Se pueden especificar mtodos mediante la combinacin del objeto con el
mtodo, separados por punto, as:
Range (A1).ClearContents
VBA tambin incluye todas las estructuras de lenguajes de programacin
modernos, como matrices, bucles y de ms, que analizaremos en la siguiente
sesin.
c. Las variables
El propsito principal de VBA es manipular datos. Algunos residen en objetos tales
como rangos de hojas de clculo. Otros se guardan en las variables que se crean.
Una variable es una localizacin de almacenamiento con nombre, dentro de la
memoria del ordenador.
VBA tiene algunas reglas relacionadas con los nombres de las variables:
Se pueden usar caracteres alfabticos, nmeros y algn carcter de puntuacin,
pero el primero de los caracteres debe ser alfabtico
VBA no distingue entre maysculas y minsculas
No se pueden usar espacios ni puntos
No se pueden incrustar en el nombre de una variable los siguientes smbolos:
#, $, %,!
Los nombres de las variables pueden tener hasta 254 caracteres

Los tipos de datos


Cuando definimos variables debemos asignarle su tipo de dato. En VBA se manejan
los siguientes tipos de datos

mbito de las variables


Se define as al campo de accin donde podemos emplear las variables. Esto depende
de donde las declaremos y con qu sentencia. Los alcances pueden ser

Variables locales
Una variable local es una variable declarada dentro de un procedimiento. Estas
variables se pueden usar slo en el procedimiento en que se declararon. Cuando el
procedimiento finaliza, la variable deja de existir y Excel libera su memoria.
La manera ms comn de declarar una variable local es situarla dentro de una
instruccin DIM. Ejemplo:

Sub MiSub()
DIM x As Integer
DIM First As Long
DIM InerestRate As Single
DIM TodaysDate As Date
DIM UserName As String * 20
Aqu se sita el cdigo del procedimiento
..
..
End Sub
Esto tambin es vlido:
DIM x As Integer, y As Integer, z As Integer
Esto no es vlido:
DIM x, y, z As Integer
Variables a nivel de mdulo
Algunas veces se desear que una variable est disponible para todos los
procedimientos de un mdulo. Para ello, se declara la variable antes del primer
procedimiento del mdulo (fuera de cualquier procedimiento o funcin). Ejemplo:
DIM fecha As Date
Sub Dias()
Aqu va el cdigo
End Sub
Sub Meses()
Aqu va el cdigo
End Sub
De esta forma la variable fecha podr ser reconocida en cualquiera de los 2
procedimientos
Variables Public
Para que una variable est disponible para todos los procedimientos de un proyecto
de VBA , se declara la variable a nivel de mdulo con el uso de la palabra Public. Por
ejemplo, si dentro de un modulo declaramos lo siguiente
Public InteresAnual as Long
La variable InteresAnual estar disponible en todo el proyecto.
Variables Static
Las variables estticas son un caso especial. Se declaran a nivel de procedimiento y
retienen su valor despus de que el procedimiento finaliza.

Ejemplo:
Sub Ejemplo()
Static Contador As Integer
Contador=Contador+1
Msgbox Contador
End Sub

De esta forma, cada vez que se ejecuta el procedimiento Ejemplo, la variable


Contador se incrementa en 1
Las instrucciones
Una unidad sintcticamente completa que expresa un tipo de accin, declaracin o
definicin. Normalmente una instruccin tiene una sola lnea aunque es posible
utilizar dos puntos (:) para poner ms de una instruccin en una lnea. Tambin se
puede utilizar un carcter de continuacin de lnea (_) para continuar una sola lnea
lgica en una segunda lnea fsica.
Ejemplo:
Sueldo= MontoHorasTrab*100 : Descuento=Sueldo*0.1 : Neto= Sueldo-Descuento
Aqu se tiene una lnea que maneja 3 instrucciones (separadas por : )que tambin se
pudieron codificar as:
Sueldo= MontoHorasTrab*100
Descuento=Sueldo*0.1
Neto= Sueldo-Descuento
Trabajar con cadenas
Existen dos tipos de cadenas en VBA:
Cadenas de longitud fija, que se declaran con un nmero especfico de caracteres.
La mxima longitud es de 65.536 caracteres.
Cadenas de longitud variable, que tericamente pueden tener hasta 2.000
millones de caracteres.

Dim MiCadena As String * 50


Dim SuCadena As String

TRABAJAR CON FECHAS


Es muy comn el hecho de trabajar con fechas. Para esto las variables se definen
como de tipo Date y sus valores se asignan de la siguiente forma:
Dim FechaInicio As Date
Dim HoraInicio As Date
FechaInicio As Date = #1/1/2012#
HoraInicio As date = #12:00:00#

Operadores aritmticos
+ Suma, - Resta, * Multiplicacin, / Divisin, \ Divisin entera,
Mod Resto, ^ exponencial, & Concatenacin
Operadores comparativos
= Igual, < Menor, > Mayor, <= Menor o igual, >= Mayor o
igual, <> Distinto
Operadores lgicos
Not (negacin lgica, And (conjuncin lgica), Or (disyuncin
lgica), XoR (exclusin lgica), Eqv (equivalencia en dos
expresiones), Imp (implicacin lgica)
Las expresiones de asignacin
Una expresin de asignacin es una instruccin de VBA que realiza evaluaciones
matemticas y asigna el resultado a una variable o aun objeto. VBA usa el signo igual
= como operador de asignacin.
Ejemplos:
x=1
x=x+1
x = (y * 2) / (z * 2)
FileOpen = true
Range(Ao). Value = 1995

Variables de objeto
Una variable de objeto es una variable que representa un objeto entero, como puede
ser un rango o una hoja de clculo. Se declaran con DIM o PUBLIC dependiendo de su
mbito de accin. Las variables de objeto son importantes por dos razones:

Pueden simplificar el cdigo


Pueden hacer que el cdigo se ejecute ms de prisa.

Para ver como simplifican el cdigo, veamos un ejemplo sin usar variables de objeto:
Sub VarSinObj();
Worksheets(Hoja1).Range(A1).Value = 124
Worksheets(Hoja1).Range(A1).Font.Bold = True
Worksheets(Hoja1).Range(A1).Font. Italic = True
End Sub
Esta rutina introduce un valor en la celda A1 de la HOJA1, del libro de trabajo activo,
y despus aplica Negrita y cursiva a su contenido. Para reducir el cdigo se puede
condensar la rutina con una variable de objeto.

Sub VarObj();
Dim MiCelda As Range

Set Micelda = Worksheets(Hoja1).Range(A1)


MiCelda.Value = 124
MiCelda.Font.Bold = True
MiCelda.Font. Italic = True
End Sub

LABORATORIOS DESARROLLADOS
Laboratorio 1:
Empleo de las funciones MsgBox e InputBox
La funcin MsgBox
Nos permite enviar mensajes personalizados mediante un cuadro de dialogo.
La funcin InputBox
Nos permite el ingreso de datos mediante un cuadro de dialogo donde dicho datos
ser almacenado en una variable

Paso 1:

Iniciar un nuevo libro Excel


Renombre a la Hoja1 como Saludos
Dirjase al Editor VBA
Desde su ventana del explorador de proyectos seleccione la hoja Saludos
codifique los siguientes procedimientos

Sub Saludar()
Msgbox (Bienvenido a Excel)
End Sub
Sub Saludar2()
Dim strNombre as String
strNombre =InputBox(Ingrese su nombre, Mensaje)
Msgbox (Bienvenido a Excel amigo(a) & strNombre)
End Sub
Paso 2:

Salga del editor VBA


En la hoja Saludos dibuje 2 botones desde el conjunto de controles de
formulario y asigne cada botn a la macro respectiva (guiarse por el texto de
cada botn en la siguiente figura):

Paso 3:

Grabe el libro con el nombre Demo01_Variables , como libro Excel habilitado


para macros
Haga clic en cada botn y compruebe la ejecucin de cada macro y analice el
comportamiento de las funciones MsgBox e InputBox

Laboratorio 2:
El objetivo de este laboratorio es comprender el tema de declaracin de variables y
su mbito de accin
Paso 1:

En su mismo libro Demo01_Variables renombre la hoja2 como


DemoVariables1 y la hoja3 como DemoVariables2
Dirjase al Editor VBA
Desde su ventana del explorador de proyectos seleccione la hoja
DemoVariables1 y codifique los siguientes procedimientos:

Dim valor3 As Integer


Sub Local1()
Dim valor1 As Integer
valor1 = 100
MsgBox "En el procedimiento Local1 la variable valor1 vale: " & valor1
MsgBox "En el procedimiento Local1 la variable valor2 vale: " & valor2
MsgBox "En el procedimiento Local1 la variable valor3 vale: " & valor3
End Sub
Sub Local2()
Dim valor2 As Integer
valor2 = 200
MsgBox "En el procedimiento Local2 la variable valor1 vale: " & valor1
MsgBox "En el procedimiento Local2 la variable valor2 vale: " & valor2
MsgBox "En el procedimiento Local2 la variable valor3 vale: " & valor3
End Sub
Sub EjemModulo1()
valor3 = InputBox("Ingrese valor de la variable Valor3", "Mensaje")
MsgBox "En el procedimiento EjemModulo1 la variable valor3 multiplicada por 10 es:" & valor3 * 10
End Sub
Sub EjemModulo2()
MsgBox "En el procedimiento EjemModulo2 la variable valor3 multiplicada por 20 es:" & valor3 * 20
End Sub
Sub EjemploVarPublica1()
nombrePublico = "Jose Leon"

MsgBox "La variable publica llamada nombrePublico en la hoja DemoVariables1 vale: " & nombrePublico
' Vamos a la hoja Demovariables1 a verificar si la variable nombrePublico es reconocida en esa hoja
Sheets("DemoVariables2").Select
End Sub

Paso 2:
Salga del editor VBA y en la hoja DemoVariables1 dibuje los siguientes botones de
formulario y asgnelos a las macros segn se indica:

Macro Local1

Macro Local2

Macro

Macro

EjemModulo2

EjemModulo1

Macro

EjemploVarPublica1

Paso 3:
Vuelva al editor VBA y seleccione la hoja DemoVariables2
Codifique lo siguiente
Sub EjemploVarPublica2()
MsgBox "La variable publica llamada nombrePublico en la hoja DemoVariables2 vale: " & nombrePublico
' Regresamos a la hoja Demovariables1
Sheets("DemoVariables1").Select
End Sub

Paso 4:
Salga del editor VBA y en la hoja DemoVariables2 dibuje un botn y asgnelo a la
macro que acaba de escribir

Paso 5:
Seleccione la hoja DemoVariables1 y pruebe los botones respectivos y analice los
resultados con su instructor
Laboratorio 3
El objetivo de este laboratorio es comprender el manejo de expresiones
matemticas como contadores y acumuladores
Paso 1:
Inicie un libro Excel y grbelo con el nombre Demo02_Expresiones como libro
Excel habilitado para macros
Ingrese al editor del VBA y seleccione la hoja1, codificando los siguientes
procedimientos
Dim y As Single
Dim acum As Single
Dim valor As Single
Dim cuenta As Integer
Dim promedio As Single
Sub Contador1()
'Contador con variable estatica
Static x As Single
x=x+1
Range("B1").Value = x
End Sub
Sub Contador2()
'Contador con variable de modulo
y=y+1
Range("B2").Value = y
End Sub
Sub Acumulador()
'Acumula los valores ingresados y los muestra en la celda B3
valor = InputBox("Ingresa valor")
cuenta = cuenta + 1
acum = acum + valor
Range("B3").Value = acum
End Sub
Sub MostrarPromedio()
' Toma los valores de acum y cuenta dle procedimiento Acumulador y obtiene el promedio de
los
' valores ingresados y lo muestra en la celda B4
promedio = acum / cuenta
Range("B4").Value = promedio
End Sub

Paso 2:
Salga del editor VBA y en la hoja1 ingrese los datos que se muestran a
continuacin (desde la celda A1) y dibuje los siguientes botones de formulario,
asignando a cada uno de ellos la macro segn corresponda al texto de cada botn
mostrado en la siguiente figura:

Paso 3:
Haga clic sucesivamente en los botones Contador1 y Contador2 y observe lo que
se asigna en las celdas B1 y B2.
Ahora pruebe el botn Acumulador ingresando la siguiente secuencia de valores:
10,20, 30, 40 y 50. Observe lo asignado en la celda B3
Por ltimo haga clic en el botn Mostrar Promedio y observe como se calcula el
promedio de la serie ingresada desde el botn Acumulador en la celda B4.
Grabe el libro y cirrelo.
EJERCICIOS PRCTICOS
Ejercicio 1:
El objetivo de este ejercicio es comprender como el usuario puede crear sus propias
funciones y emplearlas en las formulas en su hoja de trabajo, como si fueran las
funciones propias de Excel
Paso 1:

Inicie un nuevo libro Excel y grbelo como libro de Excel habilitado para macros
con el nombre Demo03_Funciones.
Ingrese al editor VBA y desde su ventana del Explorador de Proyectos agregue
un modulo, tal como se muestra a continuacin (el modulo se llamara Modulo1)

Paso 3:
En la ventana de cdigo del Modulo1 codifique las siguientes funciones
Public Function ConvertirADolares(tipoCambio As Single, monto As Single) As Single
ConvertirADolares = monto / tipoCambio
End Function
Public Function ConvertirASoles(tipoCambio As Single, monto As Single) As Single
ConvertirASoles = monto * tipoCambio
End Function
Public Function CalcularComision(ventas As Single, porcom As Single) As Single
CalcularComision = ventas * porcom
End Function
Public Function ConvertirAQuintales(peso As Single) As Single
ConvertirAQuintales = peso / 46
End Function

Paso 4:
Salga del editor de VBA
En la Hoja1 ingrese los datos mostrados en la siguiente figura:

En las celdas de resultados (B5, B10, E5 y E10) aplique las respectivas funciones
para obtener los resultados que se muestran. Si desea puede emplear el asistente
de funciones y ubique las funciones en la categora Funciones del usuario
Ejercicio 2:
El objetivo de este ejercicio es el modelo de objetos de Excel y como en base a ellos
crear macros que automaticen procesos cotidianos de Excel como crear nuevos
libros, ordenar las hojas, proteger celdas, etc,
Recursos:
Abra el libro Excel Demo04_ObjetosExcel (entregada como parte de su material de
estudio) y en la ventana de cdigo del VBA revise las macros creadas all y
compruebe su funcionamiento en cada caso.
Saque sus propias conclusiones y haga un breve debate en la siguiente clase junto a
sus compaeros e instructor.

C. SESIONES 3 Y 4
TEMARIO
Estructuras Secuenciales
Estructuras Condicionales
Estructuras Repetitivas o de Bucle
Ejercitacin
IMPORTANCIA
En la presente sesin revisaremos las diferentes estructuras de programacin del
lenguaje VBA, de tal forma de poder elaborar macros ms complejas y
personalizadas.
Las estructuras de programacin le permiten controlar el flujo de ejecucin del
programa. Tenemos tres tipos de estructuras de programacin:
Estructuras Secuenciales
Estructuras Condicionales
Estructuras Repetitivas o de Bucle
CONTENIDO DESARROLLADO
a.

Estructuras Secuenciales

Son las que ejecutan todas sus instrucciones de principio a fin, es decir no se queda
sin ejecutar ninguna instruccin de la estructura.
Ejemplo
Sub Calcular1()
'Declaracion de variables
Dim nota1 As Integer
Dim nota2 As Integer
Dim nota3 As Integer
Dim promedio As Single
'Asignamos los valores desde las celdas
'La propiedad value obtiene el valor de la celda
nota1 = Range("B3").Value
nota2 = Range("B4").Value
nota3 = Range("B5").Value

'Calculamos y mostramos el promedio


promedio = (nota1 + nota2 + nota3) / 3
Range("B6").Value = promedio
End Sub
b. Estructuras de Decisin
Los procedimientos de Visual Basic pueden probar condiciones y, dependiendo de los
resultados, realizar diferentes operaciones. Entre las estructuras de decisin que
acepta VBA se incluyen las siguientes:
If...Then
If...Then...Else
Select Case

Estructura If...Then
Use la estructura If...Then para ejecutar una o ms instrucciones basadas en una
condicin. Puede utilizar la sintaxis de una lnea o un bloque de varias lneas:
Forma A
If condicin Then
Sentencias
Forma B
If condicin Then
Sentencias
End If
Condicin normalmente es una comparacin, pero puede ser cualquier expresin
que d como resultado un valor numrico. Visual Basic interpreta este valor como
True o False; un valor numrico cero es False y se considera True cualquier valor
numrico distinto de cero. Si condicin es True, Visual Basic ejecuta todas las
sentencias que siguen a la palabra clave Then. Puede utilizar sintaxis de una lnea o
de varias lneas para ejecutar una sentencia basada en una condicin, los siguientes
dos ejemplos son equivalentes:
If Range(A5).Value>=1000 Then
Range(A6).Value= 200
End If

If CualquierFecha < Now Then


CualquierFecha = Now
btnGrabar.Enabled = False Desactiva el botn Grabar.
End If
Estructura If...Then...Else
Utilice un bloque If...The...Else para definir varios bloques de sentencias, uno de los
cuales se ejecutar:
If condicin1 Then
[bloque de sentencias 1]
[ElseIf condicin2 Then
[bloque de sentencias 2]] ...
[Else
[bloque de sentencias n]]
End If
Visual Basic evala primero condicin1. Si es False, Visual Basic procede a evaluar
condicin2 y as sucesivamente, hasta que encuentre una condicin True. Cuando
encuentra una condicin True, Visual Basic ejecuta el bloque de instrucciones
correspondientes y despus ejecuta el cdigo que sigue a End If. Opcionalmente,
puede incluir un bloque de instrucciones Else, que Visual Basic ejecutar sin ninguna
de las condiciones es True. If...Then...ElseIf es un caso especial de If...Then...Else.
Observe que puede tener cualquier nmero de clusula ElseIf o ninguna. Puede
incluir una clusula Else sin tener en cuenta si tiene o no clusula ElseIf.
Por ejemplo, la aplicacin podra realizar distintas acciones dependiendo del control
en que se haya hecho clic de una matriz de controles de men:

Private Sub mnuCut_Click (Index As Integer)

If Index = 0 Then

Comando Cortar

CopyActiveControl Llama a procedimientos generales


ClearActiveControl
ElseIf Index = 1 Then

Comando Copiar

CopyActiveControl
ElseIf Index = 2 Then Comando Borrar
ClearActiveControl
Else

Comando Pegar

PasteActiveControl
End If
End Sub

Veamos otro ejemplo:

Private Sub DeterminaCondicin ( )


If Val (txtPromedio) >=13 Then
txtCondicin = Aprobado
ElseIf Val (txtPromedio) >= 10 Then
txtCondicin = Asistente
Else
txtCondicin = Desaprobado
End If
End Sub

Observe que siempre puede agregar ms clusulas ElseIf a la estructura If...Then. Sin
embargo, esta sintaxis puede resultar tediosa de escribir cuando cada ElseIf compara
la misma expresin con un valor distinto. Para estas situaciones, puede utilizar la
estructura de decisin Select Case.
Estructura Select Case
Visual Basic proporciona la estructura Select Case como alternativa a If...Then...Else
para ejecutar selectivamente un bloque de sentencias entre varios bloques. La
sentencia Select Case ofrece posibilidades similares a la instruccin If...Then...Else,
pero hace que el cdigo sea ms legible cuando hay varias opciones.
La estructura Select Case funciona con una nica expresin de prueba que se evala
una vez solamente, al principio de la estructura. Visual Basic compara el resultado de
esta expresin con los valores de cada Case de la estructura. Si hay una coincidencia,
ejecuta el bloque de sentencias asociado a ese Case:

Select Case expresin_prueba


[Case lista_expresiones1
[bloque de sentencias 1]]
[Case lista_expresiones2
[bloque de sentencias 2]]
.
.
[Case Else
[bloque de sentencias n]]
End Select

Cada lista_expresiones es una lista de uno a ms valores. Si hay ms de un


valor en una lista, se separan los valores con comas. Cada bloque de sentencias
contiene cero o ms instrucciones. Si ms de un Case coincide con la expresin
de prueba, slo se ejecutar el bloque de instrucciones asociado con la primera
coincidencia. Visual Basic ejecuta las instrucciones de la clusula (opcional)
Case Else si ningn valor de la lista de expresiones coincide con la expresin de
prueba.
Por ejemplo, suponga que agrega otro comando al men Edicin en el ejemplo
If...Then...Else. Podra agregar otra clusula ElseIf o podra escribir la funcin
con Select Case:
Select Case Range(B5).Value
Case A
Range(C5).Value=1000
Case B
Range(C5).Value=1500
Case C
Range(C5).Value=2000
Case D
Range(C5).Value=3000
Case Else

Range(C5).Value=5000
End Select
Observe que la estructura Select Case evala una expresin cada vez que al principio
de la estructura. Por el contrario, la estructura If...Then...Else puede evaluar una
expresin diferente en cada sentencia ElseIf. Slo puede sustituir una estructura
If...Then...Else con una estructura Select Case si la instruccin If y cada instruccin
ElseIf evala la misma expresin.
Otros Ejemplos
a) Si las ventas (en la celda B2) son mayores a 10000 soles aplique un descuento de
10 % , si son mayores a 5000 y menores a 10000 aplique el 5% de lo contrario aplique
el 2%. Los porcentajes son con respecto al monto de ventas y debe mostrarlo en la
celda B3
Solucin:
If Range(B2).Value > 100000 Then
Range(B3).Value= Range(B2).Value* 0.1
ElseIf Ventas > 50000 Then
Range(B3).Value= Range(B2).Value* 0.05
Else
Range(B3).Value= Range(B2).Value* 0.02
End If

b) Si la cantidad vendida asignada a la variable intCantidad es 1 no existe descuento.


Si es 2 0 3 unidades se aplica el 5% de descuento; de 4 a 6 unidades el 10% pero si
excede a las 6 unidades se aplica el 20% .El porcentaje de descuento lo puede asignar
a la variable dblDscto

Solucin:
Select Case intCantidad
Case 1
dblDscto = 0.0
Case 2, 3
dblDscto = 0.05

Case 4 To 6
dblDscto = 0.10
Case Else
dblDscto = 0.20
End Select

c. Estructuras de Repeticin
Las estructuras de repeticin o bucle le permiten ejecutar una o ms lneas de cdigo
repetidamente. Las estructuras de repeticin que acepta Visual Basic son:

Do...Loop
For...Next
For Each...Next

Estructura Do...Loop
Utilice el bucle Do para ejecutar un bloque de sentencias un nmero indefinido de
veces. Hay algunas variantes en la sentencia Do...Loop, pero cada una evala una
condicin numrica para determinar si contina la ejecucin. Como ocurre con
If...Then, la condicin debe ser un valor o una expresin que d como resultado
False (cero) o True (distinto de cero).
En el siguiente ejemplo de Do...Loop, las sentencias se ejecutan siempre y cuando
condicin sea True:
Do While condicin
Sentencias
Loop
Cuando Visual Basic ejecuta este bucle Do, primero evala condicin. Si condicin es
False (cero), se salta todas las sentencias. Si es True (distinto de cero) Visual Basic
ejecuta las sentencias, vuelve a la instruccin Do While y prueba la condicin de
nuevo.
Por tanto, el bucle se puede ejecutar cualquier nmero de veces, siempre y cuando
condicin sea distinta de cero o True. Nunca se ejecutan las sentencias si condicin
es False inicialmente. Por ejemplo, este procedimiento solicita valores mientras que
el valor ingresado sea mayor que cero

Dim valor, contador


valor=InputBox(Ingrese valor,Mensaje)
Do While valor>0
contador = contador + 1
valor=InputBox(Ingrese valor,Mensaje)
Loop
MsgBox (La cantidad de valores ingresados fue: & contador)
Otra variante de la instruccin Do...Loop ejecuta las sentencias primero y prueba la
condicin despus de cada ejecucin. Esta variacin garantiza al menos una
ejecucin de sentencias:
Do
Sentencias
Loop While condicin

Hay otras dos variantes anlogas a las dos anteriores, excepto en que repiten
el bucle siempre y cuando condicin sea False en vez de True.
Hace el bucle cero o ms veces

Hace el bucle al menos una vez

Do Until condicin

Do

Sentencias
Loop

Sentencias
Loop Until condicin

Por ejemplo el siguiente cdigo solicitara un valor hasta que el valor ingresado sea
igual a cero

valor = 0
Do
valor = InputBox("Ingrese valor", "Mensaje")
Loop Until valor = 0

Estructura For...Next
Los bucles Do funcionan bien cuando no se sabe cuntas veces se necesitar ejecutar
las sentencias del bucle. Sin embargo, cuando se sabe que se va a ejecutar las
sentencias un nmero determinado de veces, es mejor elegir el bucle For...Next. A
diferencia del bucle Do, el bucle For utiliza una variable llamada contador que
incrementa o reduce su valor en cada repeticin del bucle. La sintaxis es la siguiente:
For contador = iniciar To finalizar [Step incremento]
Sentencias
Next [contador]
Los argumentos contador, iniciar, finalizar e incremento son todos numricos.
Nota: El argumento incremento puede ser positivo o negativo. Si incremento es
positivo, iniciar debe ser menor o igual que finalizar o no se ejecutarn las sentencias
del bucle. Si incremento es negativo, iniciar debe ser mayor o igual que finalizar para
que se ejecute el cuerpo del bucle. Si no se establece Step, el valor predeterminado de
incremento es 1.
Al ejecutar el bucle For, Visual Basic:
Establece contador al mismo valor que iniciar.
Comprueba si contador es mayor que finalizar. Si lo es, Visual Basic sale del bucle.
(Si incremento es negativo, Visual Basic comprueba si contador es menor que
finalizar.)
Ejecuta las sentencias.
Incrementa contador en 1 o en incremento, si se especific.
Repite los pasos 2 a 4.

Este cdigo imprime mediante MsgBox los nmeros del 0 al 100 :


Dim i As Integer
For i = 0 To 100
Msgbox (i)
Next
Este cdigo imprime mediante MsgBox los nmeros pares del 0 al 100 :

Dim i As Integer
For i = 0 To 100 step 2
Msgbox (i)
Next
Estructura For Each...Next
El bucle For Each...Next es similar al bucle For...Next, pero repite un grupo de
sentencia por cada elemento de una coleccin de objetos o de una matriz en vez de
repetir las sentencias un nmero especificado de veces. Esto resulta especialmente
til si no se sabe cuntos elementos hay en la coleccin. He aqu la sintaxis del bucle
For Each...Next:
For Each elemento In grupo
Sentencias
Next elemento

Por ejemplo, el siguiente procedimiento evala cada celda de un rango seleccionado


y si la celda tiene un valor mayor que 12 la pinta de color azul, de lo contrario la
pinta de color rojo.
For Each cell In Selection
If cell.Value > 12 Then
cell.Font.Color = vbBlue
Else
cell.Font.Color = vbRed
End If
Next
El siguiente ejemplo habilita todos los Cuadro de Texto de un formulario :

Private Sub ModoEdicin ( )


Dim control
For Each control In form1.Controls
If TypeOf control Is TextBox Then
Control.Enabled = True
End If
Next control
End Sub

Salida de una Estructura de Control


La instruccin Exit le permite salir directamente de un bucle For o de un bucle Do. La
sintaxis de la sentencia Exit es sencilla: Exit For puede aparecer tantas veces como
sea necesario dentro de un bucle For y Exit Do puede aparecer tantas veces como
sea necesario dentro de un bucle Do:

For contador = iniciar To finalizar [Step incremento]


[bloque sentencias]
[Exit For]
[bloque sentencias]
Next [contador]

Do [{While / Until} condicin]


[bloque de sentencias]
[Exit Do]
[bloque de sentencias]
Loop

Do
[bloque de sentencias]
[Exit Do]
[bloque de sentencias]
Loop [{While / Until} condicin]
Exit For y Exit Do son muy tiles ya que, algunas veces, resulta apropiado salir
inmediatamente de un bucle sin realizar ms iteraciones o sentencias dentro del
bucle.Cuando utilice la instruccin Exit para salir de un bucle, el valor de la variable
contador difiere, dependiendo de cmo haya salido del bucle:
Cuando termina un bucle, la variable contador contiene el valor del lmite superior ms
el paso.
Cuando sale de un bucle prematuramente, la variable contador conserva su valor
segn las reglas usuales del alcance.
Cuando sale antes del final de una coleccin, la variable contador contiene Nothing si
se trata de un tipo de dato Object y Empty si es un tipo de dato Variant.
CONTROL DE ERRORES DE EJECUCIN
Los errores de ejecucin de tipo externo suelen interrumpir de form sbita la
ejecucin normal del programa. Dependiendo del tipo de error, o bien VBA o bien
Windows mostrarn un mensaje de error que no siempre ser comprensible para el
usuario. Veremos ejemplos de cmo hacer que nuestro programa controle estos
errores sin terminar de forma anormal y generando nuestros propios mensajes de
error para el usuario.
Ejemplo:
Sub Calcular()
On Error GoTo Problemas
Dim Precio as Single
Dim Cantidad as Integer
Dim Total as Single
Precio=InputBox (Ingrese el precio del producto:,Ingreso)
Cantidad=InputBox (Ingrese la cantidad pedida del producto:,Ingreso)
Total = Cantidad*Precio
Msgbox El total del pedido es: & Total
Exit Sub
Problemas:
MsgBox Error, operacin cancelada por: & err.Message
EndSub
La etiqueta Problemas se ejecutara solo en caso de darse un error, como por ejemplo
se ingrese un valor tipo cadena (por ejemplo Pepe) como precio o cantidad. Si se

da ese caso, el programa no se cortara abruptamente , sino que deriva el control a la


etiqueta ya indicada y enva un mensaje indicando el motivo del error.

LABORATORIOS DESARROLLADOS
Laboratorio 1:
El objetivo de este laboratorio es comprender las estructuras secuenciales
Paso 1
Abrir el libro Demo_Estructuras, entregado como parte de su material de trabajo
Desde el editor VBA seleccione la Hoja1 y codifique las siguientes lneas:
Sub Calcular1()
'Declaracion de variables
Dim nota1 As Integer
Dim nota2 As Integer
Dim nota3 As Integer
Dim promedio As Single

'Asignamos los valores desde las celdas


'value obtiene el valor de la celda
nota1 = Range("B3").Value
nota2 = Range("B4").Value
nota3 = Range("B5").Value

'Calculamos y mostramos el promedio


promedio = (nota1 + nota2 + nota3) / 3
Range("B6").Value = promedio

End Sub

Sub Calcular2()

'Declaracion de variables
Dim nota1 As Integer
Dim nota2 As Integer
Dim nota3 As Integer
Dim promedio As Single
'Asignamos los valores desde las celdas
'value obtiene el valor de la celda
nota1 = Range("B10").Value
nota2 = Range("B11").Value
nota3 = Range("B12").Value
'Calculamos y mostramos el promedio
promedio = (nota1 * 2 + nota2 + nota3 * 3) / 6
Range("B13").Value = promedio
End Sub

Sub Calcular3()
Dim duracion As Single
Dim tarifa As Single
Dim importe As Single
duracion = Range("B18").Value
tarifa = Range("B19").Value
importe = duracion * tarifa
Range("B20").Value = importe
End Sub

Paso 2:
Salga del editor VBA. En la hoja Excel Hoja1, coloque 3 botones y asgnelos a cada
una de las macros creadas en el paso anterior
Pruebe cada una de las mismas con los datos de prueba que figuran en la hoja.

Laboratorio 2:
El objetivo de este laboratorio es comprender las estructuras condicionales con
If..Else..Endif
Paso 1
En el mismo libro Demo_Estructuras, desde el editor VBA seleccione la Hoja2 y
codifique las siguientes lneas:
Sub CalcularPromedio1()
'Declaracion de variables
Dim nota1 As Integer
Dim nota2 As Integer
Dim nota3 As Integer
Dim promedio As Single
'Asignamos los valores desde las celdas
'value obtiene el valor de la celda
nota1 = Range("B3").Value
nota2 = Range("B4").Value
nota3 = Range("B5").Value
'Calculamos y mostramos el promedio
promedio = (nota1 + nota2 + nota3) / 3
Range("B6").Value = promedio
'Evaluamos el promedio para enviar mensaje
If promedio > 18 Then
MsgBox ("Becado")
End If
End Sub
Sub CalcularPromedio2()
'Declaracion de variables
Dim nota1 As Integer
Dim nota2 As Integer
Dim nota3 As Integer
Dim promedio As Single
'Asignamos los valores desde las celdas
'value obtiene el valor de la celda
nota1 = Range("B10").Value
nota2 = Range("B11").Value
nota3 = Range("B12").Value

'Calculamos y mostramos el promedio


promedio = (nota1 * 2 + nota2 + nota3 * 3) / 6
Range("B13").Value = promedio
'Evaluamos promedio
If promedio > 16 Then
Range("B14").Value = ("Becado")
Else
Range("B14").Value = ("Estudia mas")
End If
End Sub
Sub CalcularPromedio3()
'Declaracion de variables
Dim nota1 As Integer
Dim nota2 As Integer
Dim nota3 As Integer
Dim promedio As Single
'Asignamos los valores desde las celdas
'value obtiene el valor de la celda
nota1 = Range("B18").Value
nota2 = Range("B19").Value
nota3 = Range("B20").Value
'Calculamos y mostramos el promedio
promedio = (nota1 * 2 + nota2 + nota3 * 3) / 6
Range("B21").Value = promedio
'Evaluamos promedio
If promedio <= 10 Then
Range("B22").Value = ("Nivel Bajo")
Else
If promedio <= 15 Then
Range("B22").Value = ("Regular")
Else
Range("B22").Value = ("Bueno")
End If
End If
End Sub

Paso 2:
Salga del editor VBA. En la hoja Excel Hoja2, coloque 3 botones y asgnelos a cada
una de las macros creadas en el paso anterior
Pruebe cada una de las mismas con los datos de prueba que figuran en la hoja.

Laboratorio 3:
El objetivo de este laboratorio es comprender las estructuras condicionales mediante
la resolucin de una planilla.
Paso 1
En el mismo libro Demo_Estructuras, entregado como parte de su material de
trabajo dirjase al editor VBA y seleccione la Hoja3. Codifique las siguientes lneas:
Sub CalcularPlanilla()
'Declaramos las variables de trabajo
Dim sueldo As Single
Dim tipo As String
Dim Hextras As Integer
Dim tardanzas As Integer
Dim neto As Single
Dim MontoHE As Single 'dsctos por HE
Dim montotar As Single 'dsctos por tardanzas
'Asignando datos
sueldo = Range("B3").Value
tipo = Range("B4").Value
Hextras = Range("B5").Value
tardanzas = Range("B6").Value
'Evaluamos el tipo
If tipo = "E" Then
MontoHE = 50 * Hextras
If tardanzas > 10 Then
montotar = sueldo * 0.1
Else
montotar = 0
End If
Else
MontoHE = 30 * Hextras
If tardanzas > 0 Then
montotar = sueldo * 0.08
Else
montotar = 0

End If
End If
'Calculamos el neto
neto = sueldo + MontoHE - montotar
Range("B7").Value = neto
'Se aplica formato de moneda
Range("B7").NumberFormat = "$ #,##0.00"
End Sub
Paso 2:
Salga del editor VBA. En la hoja Excel Hoja3, coloque un botn y asgnelo a la
macro creada en el paso anterior
Pruebe la macro con los datos de prueba que figuran en la hoja.

Laboratorio 3:
El objetivo de este laboratorio es comprender las estructuras condicionales con la
estructura Select ..End Select
Paso 1
Continuando en el libro Demo_Estructuras, agregue una hoja (Hoja4) y desde el
editor VBA seleccione la agregada y codifique las siguientes lneas:
Sub CalcularBonificacion()
Dim categoria As String
Dim bonificacion As Single
' Calculando
If Range("F4").Value = "" Then
MsgBox ("Debe ingresar una categoria")
Range("F5").Value = ""
Else
categoria = UCase(Range("F4").Value)
Select Case categoria
Case "A"
bonificacion = 100
Case "B"
bonificacion = 200
Case "C"
bonificacion = 300
Case "D"
bonificacion = 400
Case "E"
bonificacion = 500

Case "F"
bonificacion = 600
Case Else
bonificacion = 800
End Select
Range("F4").Value = categoria ' Para convertir la celda a mayuscula
Range("F5").Value = bonificacion
End If
End Sub
Sub CalcularComision()
Dim monto As Single
Dim comision As Single
monto = Range("F17").Value
If monto < 0 Then
MsgBox ("El monto no puede ser negativo")
Range("F18").Value = ""
Else
'Calculando comision segun el monto
Select Case monto
Case Is <= 100
comision = monto * 0.02
Case Is <= 500
comision = monto * 0.05
Case Is <= 1000
comision = monto * 0.1
Case Is <= 2000
comision = monto * 0.15
Case Else
comision = monto * 0.18
End Select
Range("F18").Value = comision
End If
End Sub
Paso 2:
Salga del editor VBA. En la hoja Excel Hoja4, coloque 2 botones y asgnelos a cada
una de las macros creadas en el paso anterior
Pruebe cada una de las mismas con los datos de prueba que figuran en la hoja.

Laboratorio 5:
El objetivo de este laboratorio es comprender las estructuras repetitivas con las
estructuras For-Next, Do While y Do Until
Paso 1
Continuando en el libro Demo_Estructuras, agregue una hoja (Hoja5) y desde el
editor VBA seleccione la agregada y codifique las siguientes lneas:
Sub DoUntil()
Dim numero As Integer
'solicito el nro desde input box
numero = InputBox("Ingrese numero")
Do Until numero = 0
numero = InputBox("Ingrese numero")
Loop
End Sub
Sub DoWhile()
Dim numero As Integer
'solicito el nro desde input box
numero = InputBox("Ingrese numero")
Do While numero <> 0
numero = InputBox("Ingrese numero")
Loop
End Sub
Sub ForNext()
Dim numero As Integer
For numero = 1 To 10
MsgBox (" El valor es: " & numero)
Next numero
End Sub
Sub ForNext2()
Dim numero As Integer
For numero = 10 To 0 Step -1 'step negativo
MsgBox (numero)
Next numero
End Sub

Sub Suma100()
'Variables
Dim numero As Integer
Dim suma As Integer
Dim fila As Integer
fila = 30
'Suma e impresion de los primeros 100 numeros
For numero = 1 To 100
suma = numero + suma
Cells(fila, 2) = numero
fila = fila + 1
Next numero
MsgBox (suma)
End Sub
Sub ForNext3()
'Variables
Dim desde As Integer
Dim hasta As Integer
Dim incremento As Integer
'Se personaliza el desde , hasta e incremento
desde = Range("F27").Value
hasta = Range("F28").Value
incremento = Range("F29").Value
Dim numero As Integer
For numero = desde To hasta Step incremento
MsgBox (numero)
Next numero
End Sub
Paso 2:
Salga del editor VBA. En la hoja Excel Hoja4, coloque 6 botones y asgnelos a cada
una de las macros creadas en el paso anterior
Pruebe cada una de las mismas.
Laboratorio 6:
El objetivo de este laboratorio es comprender las estructuras repetitivas
Paso 1
Continuando en el libro Demo_Estructuras, agregue una hoja (Hoja6) y desde el
editor VBA seleccione la agregada y codifique las siguientes lneas:

Sub TablaMultiplicar()
'La siguiente macro imprime la tabla con los primeros 12 multiplo de los
'numeros del 1 al 5
Dim valor As Integer
Dim multiplos As Integer
Dim fila As Integer
Dim columna As Integer
fila = 5
columna = 2
For valor = 1 To 5
For multiplos = 1 To 12
Cells(fila, columna) = valor * multiplos
fila = fila + 1
Next multiplos
fila = 5
columna = columna + 1
Next valor
End Sub

Paso 2:
Salga del editor VBA. En la hoja Excel Hoja6, coloque 1 botn y asgnelo a la
macro creadas en el paso anterior
Pruebe la macro y vera una tabla de multiplicar de los primeros 5 numeros.

EJERCICIOS PRCTICOS
Paso 1
Abra su libro Demo_EjerciciosEstructuras y desde el editor VBA seleccione la hoja
llamada Planillas2 y resuelva el siguiente enunciado
DATOS DE ENTRADA (ingresados de acuerdo a las celdas especificadas en su hoja
Planillas2)

SUELDO
AREA ( LEGAL, CONTABILIDAD,INFORMATICA,MARKETING,LOGISTICA)
TIPO DE TRABAJADOR ( ESTABLE O CONTRATADO)
HORAS EXTRAS
TARDANZAS

REGLA DE NEGOCIO HORAS EXTRAS

LEGAL
ESTABLE =20 SOLES

CONTRATADO=15 SOLES
CONTABILIDAD
ESTABLE =50 SOLES
CONTRATADO=35 SOLES
INFORMARTICA
ESTABLE =100 SOLES
CONTRATADO=45 SOLES
MARKETING
ESTABLE =60 SOLES
CONTRATADO=30 SOLES
LOGISTICA
ESTABLE =70 SOLES
CONTRATADO=35 SOLES

REGLA DE NEGOCIO PARA TARDANZAS


SI SON MAS DE 5 MINUTOS DE TARDANZAS SE APLICA LO SIGUIENTE

LEGAL
3% SUELDO
CONTABILIDAD
4% SUELDO
INFORMARTICA
2.5% SUELDO
MARKETING
1.5% SUELDO
LOGISTICA
2.8% SUELDO

SI LOS MINUTOS DE TARDANZA SON MENORES O IGUALES A 5 EL MONTO POR


TARDANZA SERA IGUAL A 0
DEBERA MOSTRARSE (En las celdas definidas en su plantilla)

MONTO POR HORAS EXTRAS


MONTO POR TARDANZAS
NETO A PAGAR (SUELDO+MONTO HORAS EXTRAS- MONTO POR TARDANZAS)

Solucion:
Sub Planillas2()
'Variables
Dim area As String
Dim tipo As String
Dim sueldo As Single

Dim horas As Single


Dim tardanzas As Single
Dim montotar As Single
Dim montohor As Single
Dim neto As Single
'Se emplea la funcion Ucase (que converte una cadena a mayuscula)
area = UCase(Range("B3").Value)
tipo = UCase(Range("B4").Value)
sueldo = Range("B5").Value
horas = Range("B6").Value
tardanzas = Range("B7").Value

' Las horas extras depende del estado y el area


'las tardanzas solo del area
Select Case area
Case "LEGAL" ' area Legal
If tipo = "ESTABLE" Then
' estables la hora extra = 20
montohor = horas * 20
Else
' de lo contrario 15
montohor = horas * 15
End If
'tardanzas
If tardanzas > 5 Then
montotar = sueldo * 0.03
Else
montotar = 0
End If
Case "CONTABILIDAD" ' area Contabilidad

' estables la hora extra = 50


If tipo = "ESTABLE" Then
montohor = horas * 50
Else
' de lo contrario 35
montohor = horas * 35
End If
'tardanzas
If tardanzas > 5 Then
montotar = sueldo * 0.04
Else
montotar = 0
End If
Case "INFORMATICA" ' area Informatica
If tipo = "ESTABLE" Then
' Estables H extra = 100
montohor = horas * 100
Else
' de lo contrario 45
montohor = horas * 45
End If
'tardanzas
If tardanzas > 5 Then
montotar = sueldo * 0.025
Else
montotar = 0
End If
Case "MARKETING" ' area Marketing
' Estables H Extra =60
If tipo = "ESTABLE" Then

montohor = horas * 60
Else
' de lo contrario 30
montohor = horas * 30
End If
'tardanzas
If tardanzas > 5 Then
montotar = sueldo * 0.015
Else
montotar = 0
End If
Case "LOGISTICA" ' Area Logistica
If tipo = "ESTABLE" Then
' Estables H Extra = 70
montohor = horas * 70
Else
' de lo contrario 35
montohor = horas * 35
End If
'tardanzas
If tardanzas > 5 Then
montotar = sueldo * 0.028
Else
montotar = 0
End If
End Select
' Mostramos el monto por H Extras
Range("B9").Value = montohor
'Se muestra el Monto por tardanzas
Range("B10").Value = montotar

' Se calcula y muestra el Neto a pagar


neto = sueldo + montohor - montotar
Range("B11").Value = neto
'Formato de moneda en el resultado
Range("B9").NumberFormat = "$ #,##0.00"
Range("B10").NumberFormat = "$ #,##0.00"
Range("B11").NumberFormat = "$ #,##0.00"
End Sub
Para probar el cdigo, dibuje un botn en la hoja Planillas2 y asgnelo a la macro
creada.
Ejercicio 2:
En el mismo libro del ejercicio anterior, hoja EjemploFiltro resuelva lo siguiente:
Ingresar desde una ventana InputBox un determinado tipo (1 o 2) y al ingresarlo copie
a la hoja DestinoFiltro todos los registros de la base de datos de la hoja EjemploFiltro
que sean del tipo ingresado. Enve un mensaje con la cantidad de registros copiados.
Solucin:
Sub Filtro()
On Error GoTo Mierror
' declaramos variables
Dim strTipo As String
Dim fila1 As Integer
Dim fila2 As Integer
Dim registros As Integer
' Asignamos valores a las variables de filtro
strTipo = InputBox("Ingresa el tipo", "Ingreso", 1)
' Empezamos a leer la base de datos
fila1 = 4
fila2 = 4
' limpiamos el rango
Sheets(Hoja4).Range("FiltroTipo").Clear

Sheets("Hoja4").Range("B2").Value = strTipo
Do While Cells(fila1, 1) <> ""
If Cells(fila1, 4).Value = strTipo Then
' si la columna 8 de la fila leida coincide
' con el area seleccionada la copiamos a la hoja 4
fila2 = fila2 + 1
Sheets("Hoja4").Cells(fila2, 1) = Cells(fila1, 1)
Sheets("Hoja4").Cells(fila2, 2) = Cells(fila1, 2)
Sheets("Hoja4").Cells(fila2, 3) = Cells(fila1, 3)
Sheets("Hoja4").Cells(fila2, 4) = Cells(fila1, 4)
Sheets("Hoja4").Cells(fila2, 5) = Cells(fila1, 5)
Sheets("Hoja4").Cells(fila2, 6) = Cells(fila1, 6)
registros = registros + 1
End If
fila1 = fila1 + 1
Loop
MsgBox "Se copiaron : " & registros & " trabajadores"
Sheets("Hoja4").Select
Exit Sub
Mierror:
MsgBox ("Error:" + Err.Description)
End Sub
Para probar el cdigo, dibuje un botn en la hoja EjemploFiltro y asgnelo a la macro
creada.

D. SESION 5
TEMARIO
Los UserForm o Formularios del usuario

Los controles

IMPORTANCIA
En esta sesin veremos como por medio el empleo de formularios podemos
elaborar aplicaciones con un mayor grado de interaccin con el usuario as como
conocer los principales controles que podemos incluir en dichos formularios
CONTENIDO DESARROLLADO
a. UserForms
Un cuadro de dilogo personalizado se genera en un UserForm y se puede acceder a
l con ayuda del Editor de VB. A continuacin se expone la secuencia tpica de fases a
realizar para la creacin de un UserForm:
1) Insertar un UserForm en el libro de trabajo
2) Escribir un procedimiento que despliegue el UserForm Este procedimiento est
localizado en un mdulo de VBA (no en el mdulo de cdigo para el UserForm)
3) Aadir controles al UserForm
4) Ajustar algunas propiedades a los controles aadidos
5) Escribir procedimientos de controlador de evento para los controles. Estos
procedimientos que estn situados en la ventana de cdigo para el UserForm, se
ejecutan cuando ocurren varios eventos (como hacer clic con el ratn en uno de los
botones ).
Un Formulario (o su denominacin en ingls Userform) se utiliza para crear un
Cuadro de Dilogo donde el usuario puede introducir informacin, o realizar otras
operaciones. Al ejecutar muchas de las opciones del men de Excel se abren
formularios. Por ejemplo, desde el men Herramientas > Opciones se abre un
formulario como el
siguiente,
desde
donde se pueden
activar o desactivar
distintas opciones
de Excel.

Este formulario es muy completo y posee pestaas en la parte superior, casillas de


seleccin (cuadraditos con tildes), casillas de opciones (crculos con un punto dentro)
y listas desplegables (lista con una flechita que despliega distintas opciones).
Tambin podemos crear nuestros propios formularios como se ve a continuacin.

Pasos para agregar un formulario


Para crear un Userform debemos hacer lo siguiente:
1. Abrir el editor de macros (por ejemplo, con CTRL+F11).
2. Insertar un objeto Userform. Esto podemos hacerlo fcilmente:
2.1 Seleccionamos el Libro Excel donde
trabajaremos
2.2 Hacemos clic derecho en el mismo y
elegimos la opcin Insertar > Userform
2.3 Como se ve en la imagen a continuacin ,
veremos que aparece un objeto Userform1
que cuelga de la carpeta Formularios

3. En la ventana de Cdigo de la derecha,


veremos que aparece un Userform en blanco, sin controles. Para abrir su Cuadro
de Herramientas puedes hacerlo desde el men Ver > Cuadro de Herramientas.
Ah figuran los controles que podremos agregar dentro del Userform. Para aadir
uno, simplemente hacemos clic izquierdo en el control deseado y luego clic
izquierdo dentro del Userform, en el sitio donde queramos agregar el control.

La idea es que mediante estos controles podremos tanto capturar como enviar
informacin o datos desde o hacia las celdas de Excel respectivamente. Tambin
podemos asociar macros a los controles que agreguemos al Userform (todo esto
lo veremos en secciones siguientes).

b. Los Controles
Ahora explicaremos brevemente la utilidad de cada control. Los controles se explican
en el mismo orden que aparecen en el Cuadro de Herramientas y en la figura anterior
(de izquierda a derecha y de arriba hacia abajo).
Explicaremos brevemente cada uno de estos controles

Haciendo doble clic en cada control se abrir una venta donde podremos escribir y
asociarle una macro. En la seccin siguiente veremos un ejemplo simple sobre como
crear un Userform paso a paso.
Para ver como se veran estos controles dentro del Userform, vamos a crear un
Userform que contiene los 15 controles que se pueden agregar. Los hemos agregado
en el mismo orden en que aparecen en el Cuadro de Herramientas.
Las Propiedades de los Controles
Los controles poseen caractersticas, las cuales se
denominan propiedades, siendo las mas
importantes el nombre, rotulo (Caption), color
de fondo y de primer plano ( BackColor y
ForeColor), entre otras.
Para aplicarlas lo puedo hacer seleccionando al
control y haciendo un clic derecho seleccione la
opcin Propiedades, con lo que se mostrara la
ventana de Propiedades del control y desde aqu
defina los valores que requieran cada propiedad.
Dicha ventana s muestra a continuacion

Los procedimientos de evento


Un procedimiento es un conjunto de instrucciones que realiza un trabajo
determinado. Podemos hacer un procedimiento para conectarnos a una base de
datos o limpiar un rango de celdas.
Los controles pueden ser programados para realizar algn trabajo al suscitarse un
evento sobre ellos. Estos son los llamados procedimiento de evento
Los controles pueden programarse bajo muchos eventos, pero de todos estos
eventos hay uno que es el evento por naturaleza del control.
Por ejemplo , en el caso de un botn el evento por naturaleza es el evento Click o en
el caso de las cajas de texto es el evento TextChanged
Para programar el evento por naturaleza del control bastara con hacer doble click
sobre el , con lo que se abrir la ventana de cdigo con el procedimiento listo para
codificarse.
A continuacin mostramos el procedimiento de evento btnCalcular_Click:

Si se desea programar en cualquier otro evento que no sea el evento por defecto, se
debe, desde la ventana de cdigo seleccionar desde el cuadro combinado de
controles el control a programar y desde el cuadro combinado de eventos el evento
a programar, todo esto desde el editor VBA, tal como se muestra a continuacin:

LABORATORIOS DESARROLLADOS
Laboratorio 1:
El objetivo de este laboratorio es construir un formulario y codificar su funcionalidad
Paso 1:
Inicie un libro Excel y denomnelo Ejem01_Formularios, grabndolo como libro
Excel habilitado para macros
Desde el editor VBA agregue un formulario de la forma ya explicada en este
capitulo
Sobre el construya la siguiente pantalla y nombre a los controles asi:

txtNota1
txtNota2
btnPromediar
lblPromedio

Paso 2
En el evento clic del botn btnCalcular codifique lo siquiente:
Dim nota1 As Integer
Dim nota2 As Integer
Dim promedio As Single
nota1 = txtNota1.Text
nota2 = txtNota2.Text
promedio = (nota1 + nota2) / 2
lblPromedio.Caption = promedio
If promedio >= 12.5 Then
lblPromedio.ForeColor = vbBlue
Else
lblPromedio.ForeColor = vbRed
End If

Paso 3:
Salga del editor VBA a la hoja1 de Excel
Inserte un botn de tipo ACTIVE X (no de formulario) en la hoja y nmbrelo
como btnMostrar
Asegurandose que este en tiempo de diseo haga doble clic sobre dicho botn
y vera que vuelve al editor VBA al evento clic del botn. Codifique ahora lo
siguiente
UserForm1.Show
Paso 4:
Vuelva a Excel y salga del modo de diseo y haga cilc sobre el botn colocado
en la Hoja1.
Vera como se lanza el formulario y prubelo ingresando notas y calculando el
promedio
EJERCICIOS PRACTICOS
Revise junto a su instructor el cdigo de los libros Ejemplo02_Registros y
Ejemplo03_Filtros para su revisin y saque conclusiones con sus compaeros
mediante un debate.
Amplie la funcionalidad de estos ejercicios segn lo pedido por su instructor

You might also like