Professional Documents
Culture Documents
3.
Conocer el lenguaje VBA (Visual Basic for Application) que permitir la creacin de
macros complejas basadas en cdigo.
4.
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.
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
Paso 2:
Paso 3:
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
4. Ejecucin de la 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)
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.
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.
NOTA: VBA manipula los objetos contenidos en su aplicacin anfitriona (en este
caso Excel).
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
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:
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
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:
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:
Paso 3:
Laboratorio 2:
El objetivo de este laboratorio es comprender el tema de declaracin de variables y
su mbito de accin
Paso 1:
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
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 Index = 0 Then
Comando Cortar
Comando Copiar
CopyActiveControl
ElseIf Index = 2 Then Comando Borrar
ClearActiveControl
Else
Comando Pegar
PasteActiveControl
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:
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
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
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
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.
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
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
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
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
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
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
LEGAL
3% SUELDO
CONTABILIDAD
4% SUELDO
INFORMARTICA
2.5% SUELDO
MARKETING
1.5% SUELDO
LOGISTICA
2.8% SUELDO
Solucion:
Sub Planillas2()
'Variables
Dim area As String
Dim tipo As String
Dim sueldo As Single
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
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.
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
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