81.macros. Aplicaciones VBA Con Excel
81.macros. Aplicaciones VBA Con Excel
Macros Aplicaciones
VBA
Excel
con
EDITORIAL
España - México - Colombia - Chile - Ecuador - Perú - Bolivia - Uruguay - Guatemala - Costa Rica
Macros - Aplicaciones VBA con Excel
Autor: Manuel Torres Remon
Jefe de edición:
Cynthia Arestegui Baca
Coordinación de edición:
Magaly Ramon Quiroz
Diseño de portada:
Darío Alegría Vargas
Corrección de es lo:
José Vásquez Espíritu
Diagramación:
Lizbeth R. Eufracio Quispe
Impresión
Talleres gráficos de la Empresa Editora Macro EIRL
Jr. San Agus n N.° 612-624, Surquillo, Lima, Perú
En la sesión uno se exponen los temas generales que permi rán entender el desarrollo
de las aplicaciones VBA mediante Excel; es muy importante la lectura de esta parte,
especialmente para quienes se inician en programación. En la sesión dos se exponen los
temas propios al entorno VBA que hacen referencia a los objetos asociados con Excel y
que interactúan con el mismo. En la sesión tres se desarrollan los aspectos preliminares
en programación, aquí podrá conver r procesos de negocios en algoritmos, de tal
manera que pueda resolver cualquier po de programa siguiendo un estándar. En la
sesión cuatro se aborda sobre los entornos gráficos de usuario a través del conocimiento
de todos los controles presentes en VBA; desde aquí ya podremos implementar
aplicaciones que solucionen problemas en un proceso de negocio. En la sesión cinco
se desarrollan aplicaciones que usan todos los componentes de VBA, además de las
principales funciones según el po de datos de VBA. En la sesión seis se exponen
diversas aplicaciones usando las diferentes estructuras condicionales que soporta VBA;
las aplicaciones que se encuentran en esta sección podrán dar solución a las reglas de
negocio en una determinada organización. En la sesión siete se abordan las diferentes
estructuras repe vas que soporta VBA; en esta parte la información toma un
enfoque dinámico, es decir, se podrá reu lizar objetos, de tal forma que el código de
programación se reduzca. En la sesión ocho se implementan aplicaciones de manejo
de datos tomando como fuente a Excel; aquí usted podrá desarrollar aplicaciones
que permitan buscar información y exponerla en un Userform. Finalmente, en la
sesión nueve se desarrolla el uso de las bases de datos de Access para implementar
aplicaciones complejas con datos masivos.
Es importante, además, señalar que este material presenta los temas de manera
prác ca, sencilla y resumida. Por ende, resulta muy ú l e imprescindible para
estudiantes de Informá ca y para todos aquellos que deseen iniciarse en programación
y posean conocimientos de Excel básico o avanzado; también para quienes busquen
soluciones empresariales mediante el entorno Excel.
Conceptos básicos Sesión
1
1.1 Introducción al VBA
Excel es una aplicación desarrollada y bajo ese sen do todas las fórmulas, funciones y
demás acciones que realice bajo Excel en realidad son ejecutadas mediante un código que
no es visible por el usuario, este se realiza en un entorno de programación llamada VBA.
Finalmente, podríamos decir que «VBA permite automa zar las tareas que usted realiza
en Excel», convir endo así una tarea simple en una tarea dinámica e interac va.
Subtitulo()
Range("B4:J4").Select
With wwSelection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Selection.Font.Size = 20
With Selection.Font
.Name = "Tahoma"
9
Macros - Aplicaciones VBA con Excel
.Size = 20
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Font
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0.799981688894314
End With
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
End Sub
Para iniciar el trabajo de VBA necesitamos ac var la ficha Desarrollador, para lo cual
debemos realizar los siguientes pasos:
10
Se
sió
1
n
Conceptos básicos
Para que no realice dicha pregunta, se debe deshabilitar las no ficaciones en Excel,
realizando los siguientes pasos:
12
Se
sió
1
n
Conceptos básicos
Botón de ejecución
El cual permite ejecutar un procedimiento o visu- <F5>
alizar el empo de ejecución de un UserForm.
Botón de parar
El cual permite salir de una ejecución como un proce- <ALT+F4>
dimiento o un UserForm.
14
Se
sió
1
n
Conceptos básicos
15
Macros - Aplicaciones VBA con Excel
Para acceder a una ventana de código, solo debemos hacer doble clic sobre un objeto.
Por ejemplo, la siguiente imagen muestra la ventana editora del objeto ThisWorkbook al
hacer doble clic.
Toda función en VBA se inicia con la palabra reservada Func on, luego se especifica
el nombre de la función; aquí se debe tener especial cuidado pues un nombre
de función no puede tener espacios en blanco, también se pudo haber usado el
siguiente nombre muestra_fecha(). La sentencia As String define el po de salida
que tendrá la función.
17
Macros - Aplicaciones VBA con Excel
18
Se
sió
1
n
Conceptos básicos
La función calculaPromedio recibe como parámetro las dos notas del alumno estos
deben ser declarados como enteros y la salida de la función como Double porque
estos podrían resultar decimales al promediar ambas notas.
19
Macros - Aplicaciones VBA con Excel
20
Se
sió
1
n
Conceptos básicos
Dim hora As Integer, permite declarar la variable hora dentro de la función; aquí se
almacenará la hora a par r de los segundos enviados como parámetro. Asimismo,
la variable minutos y seg son declaradas como enteros; este úl mo se declaró como
seg para no confundirlo con el parámetro segundos.
21
Macros - Aplicaciones VBA con Excel
22
Modelo de objetos Sesión
2
2.1 Modelo de objetos de Excel en VBA
En Excel los objetos presentan la siguiente jerarquía:
• Todo objeto VBA ene «propiedades», es decir, un objeto puede presentar caracterís cas
idén cas a otros; y estos podrán ser modificados por el usuario, por ejemplo:
Application.ThisWorkbook.Sheets(1).Tab.Color = vbBlue
Application.ThisWorkbook.Sheets(2).Tab.Color = vbGreen
23
Macros - Aplicaciones VBA con Excel
• Todo objeto también ene «métodos», estos se caracterizan por realizar una ac vidad
directamente, por ejemplo:
Range("A2").Select
Sheets(1).Cells(2,1).Select
Range("A1:A1000").Select
Propiedades
• Ac veCell
Representa la celda ac va dentro de una hoja de Excel.
Sub celdaActiva()
Dim celda As String
celda = Application.ActiveCell.Address
MsgBox "La dirección de la celda activa es: " & celda
End Sub
• Ac veSheet
Representa la hoja ac va dentro de un libro de Excel. Veamos cómo ac var la celda
A5 de la hoja ac va:
Application.ActiveSheet.Range("A5").Select
• Ac veWindow
Representa la ventana ac va dentro del entorno Excel. Veamos cómo mostrar el
nombre del libro ac vo:
MsgBox Application.ActiveWindow.Caption
24
Se
sió
2
n
Modelo de objetos
• Ac veWorkbook
Representa al libro ac vo dentro del entorno Excel. Veamos cómo mostrar el nombre
completo del libro ac vo:
MsgBox Application.ActiveWorkbook.Name
• Cap on
Representa el contenido de la barra de tulo de la ventana principal de Excel. Veamos
cómo mostrar el tulo de la ventana ac va:
MsgBox Application.Caption
• Selec on
Representa una o más celdas seleccionadas a par r de una hoja ac va. Veamos cómo
mostrar el rango de un conjunto de celdas seleccionadas:
MsgBox Application.Selection.Address
• ThisWorkbook
Representa el libro ac vo en la cual nos encontramos implementando el código VBA.
Veamos cómo mostrar el nombre del libro actual:
MsgBox Application.ThisWorkbook.Name
Métodos
• Quit
Método que permite salir de la aplicación Excel. Veamos cómo salir de la aplicación
Excel:
Application.Quit
Propiedades
• Name
Representa el nombre del libro actual de Excel. Veamos cómo mostrar el nombre del
libro actual:
MsgBox ThisWorkbook.Name
25
Macros - Aplicaciones VBA con Excel
• Path
Representa la ubicación del archivo de Excel a par r de las unidades de almacenamiento.
Veamos cómo mostrar la ruta de donde se guardó el libro:
MsgBox ThisWorkbook.Path
Métodos
• Open
Permite abrir un archivo de Excel. Veamos cómo abrir el archivo Listado.xlsx almacenado
en la unidad C:\.
Workbooks.Open "C:\Listado.xlsx"
• Add
Permite crear un nuevo Libro de Excel. Veamos cómo agregar un nuevo libro:
Workbooks.Add
• Ac vate
Permite ac var un determinado libro siempre y cuando se encuentre abierto. Veamos
cómo ac var el libro ReporteVentas.xlsx abierto como segundo libro.
Workbooks("ReporteVentas.xlsx").Activate
Workbooks(2).Activate
• Close
Permite cerrar un determinado libro. Veamos cómo cerrar el libro actual:
ThisWorkbook.Close
Otra posibilidad de salir de un libro es guardando los cambios realizados, para lo cual
podríamos usar el siguiente código:
Workbooks(1).Close SaveChanges:=False
• Save
Permite guardar los cambios en un determinado libro. Veamos cómo guardar el libro
ac vo:
ThisWorkbook.Save
26
Se
sió
2
n
Modelo de objetos
Workbooks("Save - miLibro.xlsm").Save
Workbooks(1).Save
• Save As
Permite crear un nuevo archivo a par r del archivo de Excel actual. Veamos cómo crear
una copia del archivo actual y registrarlo en la unidad C:\
ActiveWorkbook.SaveAs "C:\reporte2016.xlsx"
Workbooks(1).SaveAs "C:\reporte2016.xlsx"
• SaveCopyAs
Permite crear una copia del libro actual. Veamos cómo crear una copia de seguridad
del libro actual:
ActiveWorkbook.SaveCopyAs "C:\reporte2016.xlsx"
Propiedades
• Count
Representa el número total de hojas por libro. Veamos cómo mostrar el número total
de hojas del libro actual:
MsgBox WorkSheets.Count
• Name
Representa el nombre de la hoja actual. Veamos cómo mostrar el nombre de la primera
hoja:
MsgBox Worksheets(1).Name
27
Macros - Aplicaciones VBA con Excel
MsgBox Hoja1.Name
Métodos
• Ac vate
Permite ac var una hoja de un conjunto de hojas en un determinado libro. Veamos
cómo ac var la hoja 2 de un libro ac vo.
WorkSheets(2).Activate
O también podríamos hacer referencia por medio de su nombre. Así, por ejemplo:
WorkSheets("Hoja2").Activate
• Add
Permite agregar un determinado número de hojas a un libro. Veamos cómo agregar
una hoja al final de todas:
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name="Nueva Hoja"
• Delete
Permite eliminar una determinada hoja. Veamos el código para eliminar la segunda
hoja del libro actual:
Worksheets(2).Delete
Propiedades
• Cells
Permite hacer referencia a un conjunto de celdas en una determinada hoja. Veamos
cómo seleccionar las celdas A1 hasta A10:
28
Se
sió
2
n
Modelo de objetos
• End
Devuelve una ubicación al inicio o al final de un bloque de celdas seleccionadas.
Veamos cuatro procedimientos que permitan mover la celda ac va por los extremos
de un determinado conjunto de datos, sabiendo que la celda B5 ene un conjunto de
registros:
Sub primeraFila()
Range("B5").End(xlUp).Offset(1, 0).Select
End Sub
Sub ultimaFila()
Range("B5").End(xlDown).Select
End Sub
Sub primeraColumna()
Range("B5").End(xlToLeft).Offset(0, 1).Select
End Sub
Sub ultimaColumna()
Range("B5").End(xlToRight).Select
End Sub
• Formula
Permite implementar una fórmula de Excel desde VBA. Veamos cómo sumar las celdas
A1 hasta A10 en la celda A11:
Range("A11").Formula = "=sum(A1:A10)"
• FormulaLocal
Debemos considerar que en VBA para hacer referencia a la funciones de Excel se debe
especificar dicha función en el formato VBA. Veamos cómo sumar el rango A1 hasta
A10 en la celda A11:
Range("A11").FormulaLocal = "=SUMA(A1:A10)"
• Value
Tiene un trabajo de asignación y recuperación de valor sobre una celda, es decir,
podemos enviar un valor o especificar una fórmula tal como se realiza con la propiedad
Formula; así también podemos obtener un valor desde las celdas de la hoja de Excel
hacia VBA. Veamos cómo limpiar el contenido de las celdas A1 y A2:
Range("A1").Value = ""
Range("A2").Value = ""
29
Macros - Aplicaciones VBA con Excel
Métodos
• Ac vate
Método que permite conver r una celda seleccionada en una celda ac va mediante el
objeto Range. Veamos algunos casos:
Range("A1").Activate
Range("A1").Activate
Range("A1").FormulaLocal = "=Hoy()"
• ClearContents
Método que permite limpiar el contenido de un determinado rango de celdas
especificadas en el objeto Range. Veamos cómo limpiar el contenido de las celdas A1
hasta A100:
Range("A1:A100").ClearContents
• Delete
Método que elimina un determinado número de celdas. Veamos cómo eliminar las
celdas A1 hasta A10:
Range("A1:A10").Delete
Range("A1").Activate
Selection.EntireRow.Delete
Range("A1").Activate
Selection.EntireColumn.Delete
30
Se
sió
2
n
Modelo de objetos
Al respecto, podemos decir que Cells ofrece la ventaja de recorrer por varias celdas
haciendo referencia a las filas y columnas por medio de una estructura repe va. Veamos,
algunos ejemplos del objeto Cells:
Procedimiento que permita seleccionar todas las celdas de una determinada hoja:
Sub seleccionarTodo()
Cells.Select
End Sub
Sub seleccionarRango()
Cells(2,4).ClearContents
End Sub
Sub modificaFuente()
Cells.Font.Name = "Arial"
Cells.Font.Size = 10
End Sub
31
Macros - Aplicaciones VBA con Excel
Pasos:
Sub muestraConversion1()
metros = Range("C4").Value
Range("C6").Value = centimetros
Range("C7").Value = Format(pulgadas, "0.00")
Range("C8").Value = Format(pies, "0.00")
Range("C9").Value = Format(yardas, "0.00")
End Sub
32
Se
sió
2
n
Modelo de objetos
Pasos:
Sub muestraReparticion01()
mSocio1 = Range("C4").Value
mSocio2 = Range("C5").Value
mSocio3 = Range("C6").Value
Range("C8").Value = capital
Range("C9").Value = Format(pSocio1, "0.00")
Range("C10").Value = Format(pSocio2, "0.00")
Range("C11").Value = Format(pSocio3, "0.00")
End Sub
34
Se
sió
2
n
Modelo de objetos
Iniciamos capturando cada monto registrado por los socios con la sentencia mSocio1
= Range("C4").Value de la misma forma se realizará para los demás socios, luego
se calcula el monto capital sumando todos los montos, seguidamente calculamos
el porcentaje que le corresponde a cada socio usando regla básica de tres simples.
35
Macros - Aplicaciones VBA con Excel
Pasos:
36
Se
sió
2
n
Modelo de objetos
Sub calculaPago()
precio = Range("C5").Value
cantidad = Range("C6").Value
37
Macros - Aplicaciones VBA con Excel
38
Fundamentos de Sesión
programación
3
3.1 Fases para la solución de un programa
La idea de programar en VBA es tener claro el obje vo de la aplicación, solo así podremos
determinar las variables o sentencias que necesita para su aplicación. Por tal mo vo,
primero debe realizar las siguientes fases:
AcƟvidades Fases
Determinar cuál es el obje vo del problema. Análisis del problema
Plantear una solución adecuada. Diseño del algoritmo
Implementar las funciones o procedimientos
Codificación del problema
que den solución al problema.
Ejecutar la aplicación VBA. Ejecución del programa
Comprobar que el resultado sea adecuado. Verificación y depuración
Veamos algunos casos para entender mejor cómo debemos analizar un problema antes
de codificarlo en VBA.
39
Macros - Aplicaciones VBA con Excel
Problema 1:
En una empresa inmobiliaria necesitan tener el control del empo que se demoran en
realizar una obra. Si doce obreros, trabajando 8 horas diarias, terminan un proyecto en
25 días, ¿cuánto tardarán en hacer ese mismo proyecto N obreros trabajando T horas
diarias?
Ahora organizaremos los valores encontrados de tal forma que sa sfaga el patrón de
valores Entrada-Proceso-Salida.
Problema 2:
Una casa de cambio en el centro de la ciudad necesita conocer el monto total en euros
a par r de tres can dades de dinero: soles, dólares y marcos. La casa considera los
siguientes pos de cambio:
40
Se
sió
3
n
Fundamentos de programación
Ahora organizaremos los valores encontrados de tal forma que sa sfaga el patrón de
valores Entrada-Proceso-Salida.
Problema 3:
Implemente una aplicación que permita leer una temperatura en grados cen grados
(ºC) y la convierta a sus equivalentes en grados Fahrenheit (ºF), grados Kelvin (K) y grados
Rankine(R). Use las siguientes fórmulas:
F = 9C/5 + 32
K = R – 187
R = C + 460
Ahora organizaremos los valores encontrados de tal forma que sa sfaga el patrón de
valores Entrada-Proceso-Salida.
41
Macros - Aplicaciones VBA con Excel
Problema 1:
En una empresa inmobiliaria necesitan tener el control del empo que se demoran en
realizar una obra. Si doce obreros, trabajando 8 horas diarias, terminan un proyecto en
25 días, ¿cuánto tardarán en hacer ese mismo proyecto N obreros trabajando T horas
diarias?
Pseudocódigo:
Inicio
Leer obreros, horas
Días = 25 * (12/obreros) * (8/horas)
Escribir Días
Fin
Problema 2:
Una casa de cambio en el centro de la ciudad necesita conocer el monto total en euros
a par r de tres can dades de dinero: soles, dólares y marcos. La casa considera los
siguientes pos de cambio:
Pseudocódigo:
Inicio
Leer soles, dólares, marcos
euros = (soles/3.51 + dólares + marcos/2.12) * 1.09
Escribir euros
Fin
42
Se
sió
3
n
Fundamentos de programación
Problema 3:
Implemente una aplicación que permita leer una temperatura en grados cen grados
(ºC) y la convierta a sus equivalentes en grados Fahrenheit (ºF), grados Kelvin (K) y grados
Rankine(R). Use las siguientes fórmulas:
F = 9C/5 + 32
K = R – 187
R = C + 460
Pseudocódigo:
Inicio
Leer centígrados
Fahrenheit = (9 * Centigrados) / 5 +32
rankine = Centigrados + 460
kelvin = Rankine - 187
Escribir Fahrenheit, rankine, kelvin
Fin
Problema 1:
En una empresa inmobiliaria necesitan tener el control del empo que se demoran en
realizar una obra. Si doce obreros, trabajando 8 horas diarias, terminan un proyecto
en 25 días, ¿cuánto tardarán en hacer ese mismo proyecto N obreros trabajando T
horas diarias?
43
Macros - Aplicaciones VBA con Excel
Pseudocódigo:
Inicio
Leer obreros, horas
Días = 25 * (12/obreros) * (8/horas)
Escribir Días
Fin
Problema 2:
Una casa de cambio en el centro de la ciudad necesita conocer el monto total en euros
a par r de tres can dades de dinero: soles, dólares y marcos. La casa considera los
siguientes pos de cambio:
Pseudocódigo:
Inicio
Leer soles, dólares, marcos
euros = (soles/3.51 + dólares + marcos/2.12) * 1.09
Escribir euros
Fin
44
Se
sió
3
n
Fundamentos de programación
Problema 3:
Implemente una aplicación que permita leer una temperatura en grados cen grados
(ºC) y la convierta a sus equivalentes en grados Fahrenheit (ºF), grados Kelvin (K) y grados
Rankine(R). Use las siguientes fórmulas:
F = 9C/5 + 32
K = R – 187
R = C + 460
Pseudocódigo:
Inicio
Leer centígrados
Fahrenheit = (9 * Centigrados) / 5 +32
rankine = Centigrados + 460
kelvin = Rankine -187
Escribir Fahrenheit, rankine, kelvin
Fin
45
Macros - Aplicaciones VBA con Excel
Problema 1:
En una empresa inmobiliaria necesitan tener el control del empo que se demoran en
realizar una obra. Si doce obreros, trabajando 8 horas diarias, terminan un proyecto
en 25 días, ¿cuánto tardarán en hacer ese mismo proyecto N obreros trabajando T
horas diarias?
Pseudocódigo:
Inicio
Leer obreros, horas
Días = 25 * (12/obreros) * (8/horas)
Escribir Días
Fin
Función en VBA:
En Excel podemos contar con el siguiente entorno, no se olvide que la función debe
ser implementada en un módulo:
46
Se
sió
3
n
Fundamentos de programación
Problema 2:
Una casa de cambio en el centro de la ciudad necesita conocer el monto total en euros
a par r de tres can dades de dinero: soles, dólares y marcos. La casa considera los
siguientes pos de cambio:
Pseudocódigo:
Inicio
Leer soles, dólares, marcos
euros = (soles/3.51 + dólares + marcos/2.12) * 1.09
Escribir euros
Fin
En Excel podemos contar con el siguiente entorno, no se olvide que la función debe ser
implementada en un módulo:
47
Macros - Aplicaciones VBA con Excel
Elementos Descripción
Iden ficador Es el nombre que se le da a todos los
elementos que componen el modelo
de objetos de VBA, por ejemplo:
Válidos:
• nota1
• aPaterno
• a_paterno
• fechaNac
No válidos:
• nota 1
• apellido paterno
• a@paterno
• fecha nacimiento
Comentario Un comentario permite definir un
mensaje simple dentro del código de
programación, los símbolos a usar son:
3.3.1 Enteros
-2.147.483.648 a
Long !
+2.147.483.647
48
Se
sió
3
n
Fundamentos de programación
3.3.2 Reales
-922.337.000.000.000 a
Currency @
+922.337.000.000.000
3.3.4 Lógicos
3.3.5 Fechas
3.3.6 Variante
49
Macros - Aplicaciones VBA con Excel
3.4 Variables
Una variable representa un espacio de la memoria que puede ser ocupado por cualquier
valor. Su formato de declaración en VBA es:
Donde:
• Dim: Es la palabra reservada que indica el inicio de la declaración de una o más variables;
por línea de declaración solo puede haber un DIM.
• Variable: Es el nombre que el programador asignara a la variable.
• As poDatos: Es el po de datos asignado a la variable los cuales pueden ser Integer,
Double, Currency, etc.
3.5 Operadores
Los operadores son elementos que pueden ser usados en una expresión que especifican
un cálculo, así como una expresión matemá ca, financiera, etc.
3.5.1 Asignación
Un operador de asignación permita asignar un valor a una variable. Su formato es:
Variable = valor
50
Se
sió
3
n
Fundamentos de programación
3.5.2 Aritméticos
Son operadores usados en expresiones aritmé cas:
3.5.3 Relacionales
Son operadores que permiten comparar dos valores, es a par r de aquí que podemos
obtener un resultado verdadero o falso según la condición.
3.5.4 Lógicos
Son operadores que permiten unir dos o más expresiones relacionales. Podemos
dis nguir los siguientes operadores:
51
Macros - Aplicaciones VBA con Excel
52
Se
sió
3
n
Fundamentos de programación
Título
Ícono Mensaje
Botón
Formato:
53
Macros - Aplicaciones VBA con Excel
54
Se
sió
3
n
Fundamentos de programación
Ejemplos:
Ejemplos:
55
Macros - Aplicaciones VBA con Excel
3.10 Procedimientos
Los procedimientos son bloques de código que pueden recibir datos por medio de
parámetros o a través de variables pero que no devuelven ningún resultado a quien los
invoque. Su formato es:
• Sin parámetros:
SUB NOMBRE()
SENTENCIAS
END SUB
• Con parámetros:
SUB NOMBRE(PARAMETROS)
SENTENCIAS
END SUB
Ejemplos:
56
Se
sió
3
n
Fundamentos de programación
Pasos:
57
Macros - Aplicaciones VBA con Excel
Range("D10").Value = iCompra
Range("D11").Value = iDescuento
Range("D12").Value = iNeto
Range("D13").Value = agendas
Range("D8").Select
End Sub
Sub limpiarCeldas()
Range("D8").ClearContents
Range("D10").ClearContents
Range("D11").ClearContents
Range("D12").ClearContents
Range("D13").ClearContents
Range("D8").Select
End Sub
5. Agregue un botón desde la ficha Desarrollador el cual tenga por tulo «CALCULA
IMPORTES» y que se encuentre asociado al procedimiento calculaImportes.
6. Agregue un botón desde la ficha Desarrollador el cual tenga por tulo «LIMPIAR
CELDAS» y que se encuentre asociado al procedimiento limpiarCeldas.
7. Pruebe la aplicación ingresando una can dad comprada en la celda D8, luego haga
clic en el botón CALCULA IMPORTES.
58
UserForm y objetos Sesión
visuales
4
4.1 UserForm
Proporciona un mecanismo para implementar aplicaciones VBA de forma gráfica. Para
integrar un UserForm con la hoja de Excel debemos seguir los siguientes pasos:
59
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Finalmente, debemos hacer la invocación del UserForm por medio de código VBA, el
cual se muestra en la siguiente imagen:
61
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
63
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
64
Se
sió
4
n
UserForm y objetos visuales
65
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Pasos:
codigo = lblCodigo.Caption
apellidos = txtApellidos.Text
nombres = txtNombres.Text
fechaNac = CDate(txtFechaNac.Text)
66
Se
sió
4
n
UserForm y objetos visuales
direccion = txtDireccion.Text
• El sueldo bruto se calcula mul plicando el número de horas trabajadas por una tarifa
horaria.
• El descuento por EsSalud es igual al 8.5% del sueldo bruto.
• El descuento por AFP es igual al 11.5% del sueldo bruto.
• El sueldo neto es la diferencia entre el sueldo bruto y el descuento total.
67
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
68
Se
sió
4
n
UserForm y objetos visuales
Pasos:
69
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Sub limpiarControles()
txtVendedor.Text = ""
txtHoras.Text = ""
txtTarifa.Text = ""
lstR.Clear
txtVendedor.SetFocus
End Sub
70
Se
sió
4
n
UserForm y objetos visuales
71
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Pasos:
72
Se
sió
4
n
UserForm y objetos visuales
End Sub
73
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
End Sub
74
Funciones VBA Sesión
5
5.1 Introducción a las funciones
En los capítulos anteriores se implementaron funciones definidas por el usuario, estos
tenían la caracterís ca principal de realizar una tarea específica según el criterio del
programador. De la misma manera, VBA ofrece un conjunto de funciones que podrán
ser usadas en cualquier aplicación que use el código VBA, estos se dividen en categorías
como funciones de texto, fecha, numéricos, etc.
Función Descripción
ASC Devuelve el código ASCII de un determinado carácter.
75
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Función Descripción
Función que permite devolver el valor absoluto de un número
Abs
posi vo o nega vo. Su formato es Abs(Numero).
Función que permite devolver el seno de un número entero o real.
Sin
Su formato es Sin(Numero).
Función que permite devolver el coseno de un número entero o
Cos
real. Su formato es Cos(Numero).
Función que permite devolver la tangente de un número entero o
Tan
real. Su formato es Tan(Numero).
Función que permite devolver la raíz cuadrada de un número
Sqr
entero. Su formato es Sqr(Numero).
Función que permite devolver el valor entero redondeando al
Fix
exceso a un número real. Su formato es Fix(Numero).
Función que permite devolver un valor entero en un valor hexade-
Hex
cimal. Su formato es Hex(Numero).
Función que permite devolver solo la parte entera de una
Int operación, expresión o número. Tenga en cuenta que esta función
no redondea el valor solo captura la parte entera.
Función que permite devolver el logaritmo natural de un número
Log
entero en base e.
Rnd Función que permite devolver un número aleatorio entre 0 y 1.
Función Descripción
Date Función que permite devolver la fecha actual del sistema.
DateAdd Función que permite devolver una fecha añadiéndole un intervalo
de empo. Estos intervalos se basan en el siguiente formato:
"d" Día
"y" Año
"h" Hora
"n" Minuto
"m" Mes
"q" Trimestre
"s" Segundo
"w" Semana
"ww" Semana del calendario
"yyyy" Año
76
Se
sió
5
n
Funciones VBA
• El código del personal está formado por los dos primeros caracteres del apellido
paterno, los dos úl mos caracteres del apellido materno, un guion bajo y la can dad
total de caracteres del apellido paterno expresado en dos cifras, además el código debe
representarse en mayúsculas.
• El correo electrónico del personal está formado por la primera letra de su nombre, las
cuatro primeras letras de su apellido paterno y los caracteres «@miempresa.com.pe»
además de expresarlo en minúsculas.
• Cuando se digite el apellido paterno, materno y nombres estos deberán aceptar solo
letras en mayúsculas además de no permi r el registro de valores numéricos.
• Implemente un procedimiento para limpiar los controles colocados dentro del
UserForm.
• Implemente una función que permita determinar la úl ma fila registrada en Excel, esto
hará que se pueda agregar personal uno debajo de otro como un listado.
Pasos:
(Name) frmRegistro
UserForm1
Cap on Registro de personal
Label1 Cap on REGISTRO DE PERSONAL
Label2 Cap on PATERNO
Label3 Cap on MATERNO
paterno = txtPaterno.Text
materno = txtMaterno.Text
nombres = txtNombres.Text
fechaNac = CDate(txtFechaNac.Text)
distrito = cboDistrito.Text
'Enviando a la impresión
Call imprimir(codigo, correo)
End Sub
79
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Largo = Len(txtNombres.Value)
For i = 1 To Largo
Caracter = CInt(Mid(Texto, i, 1))
If Caracter <> "" Then
If Not Application.WorksheetFunction
.IsText(Caracter) Then
txtPaterno.Value = Replace(Texto, Caracter, "")
Else
End If
End If
Next i
On Error GoTo 0
End Sub
80
Se
sió
5
n
Funciones VBA
Sub limpiarControles()
txtPaterno.Text = ""
txtMaterno.Text = ""
txtNombres.Text = ""
txtFechaNac.Text = ""
cboDistrito.Text = "(Seleccione distrito)"
txtPaterno.SetFocus
End Sub
Sub Botón1_Haga_clic_en()
frmRegistro.Show
End Sub
• Al iniciar la aplicación, la opción Decimal debe encontrarse ac vada como una opción
predeterminada.
• Al seleccionar una opción del sistema de conversión, se debe limpiar el control
de ingreso de valor, asimismo solo debe permi r el ingreso de valores numéricos
correspondientes a su sistema. Por ejemplo, si el usuario selecciona la opción Binario
la caja de texto, solo permi rá el ingreso de valores entre 1 y 0 bloqueando los
demás caracteres; de la misma forma si se selecciona la opción Hexadecimal, Octal
y Decimal.
82
Se
sió
5
n
Funciones VBA
Pasos:
(Name) frmConversion
UserForm1
Cap on Funciones matemá cas
Label1 Cap on Sistema de conversión
Label2 Cap on Ingrese valor numérico
Frame1 Cap on Sistema de conversión
Op on1 Cap on Hexadecimal
Op on2 Cap on Decimal
Op on3 Cap on Octal
Op on4 Cap on Binario
(Name) btnProcesar
CommandBu on1 Cap on PROCESAR
Default True
(Name) btnLimpiar
CommandBu on2
Cap on LIMPIAR
(Name) btnSalir
CommandBu on3 Cap on SALIR
Cancel True
TextBox1 (Name) txtValor
ListBox1 (Name) lstR
83
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Range("B5").Value = valor
Range("C5").Value = base
Range("E5").Value = respuesta
Exit Sub
Imprevisto:
txtValor.Text = Empty
txtValor.SetFocus
MsgBox "Error en la aplicación"
End Sub
84
Se
sió
5
n
Funciones VBA
Unload Me
End Sub
85
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Caracter1 = 0
ElseIf optOctal.Value = True Then
On Error Resume Next
Texto = txtValor.Value
Largo = Len(txtValor.Value)
For i = 1 To Largo
Caracter = Mid(Texto, i, 1)
If Caracter <> "" Then
If Caracter < Chr(48) Or Caracter > Chr(55) Then
txtValor.Value = Replace(Texto, Caracter, "")
Else
End If
End If
Next i
On Error GoTo 0
Caracter = 0
Caracter1 = 0
ElseIf optHexadecimal.Value = True Then
On Error Resume Next
Texto = txtValor.Value
Largo = Len(txtValor.Value)
For i = 1 To Largo
Caracter = Mid(Texto, i, 1)
If Caracter <> "" Then
If (Caracter >= Chr(48) And Caracter <= Chr(57)) Or
(Caracter >= Chr(65) And Caracter <= Chr(69)) Then
Else
txtValor.Value = Replace(Texto, Caracter, "")
End If
End If
Next i
On Error GoTo 0
Caracter = 0
Caracter1 = 0
End If
End Sub
Sub Botón1_Haga_clic_en()
frmConversion.Show
End Sub
87
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Pasos:
(Name) frmGeneraFechas
UserForm1
Cap on Funciones de fecha
(Name) opt3
Op on1
Cap on 3
(Name) opt6
Op on2
Cap on 6
(Name) opt9
Op on3
Cap on 9
(Name) btnMostrar
CommandBu on1 Cap on MOSTRAR FECHAS
Default True
(Name) btnLimpiar
CommandBu on2
Cap on LIMPIAR
(Name) btnExcel
CommandBu on3
Cap on ENVIAR A EXCEL
88
Se
sió
5
n
Funciones VBA
Case 9:
Range("B9:C17").ClearContents
Range("B9").Value = 1
Range("B10").Value = 2
Range("B11").Value = 3
Range("B12").Value = 4
Range("B13").Value = 5
Range("B14").Value = 6
Range("B15").Value = 7
Range("B16").Value = 8
Range("B17").Value = 9
89
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Sub limpiar()
cboCurso.Text = "(Seleccione curso)"
cboCurso.SetFocus
End Sub
Sub llenaCursos()
cboCurso.AddItem "Visual Basic"
cboCurso.AddItem "Java"
cboCurso.AddItem "VBA"
cboCurso.AddItem "PHP"
cboCurso.AddItem "Power Builder"
End Sub
90
Se
sió
5
n
Funciones VBA
Sub Botón1_Haga_clic_en()
frmGeneraFechas.Show
End Sub
91
Estructuras Sesión
condicionales
6
6.1 Introducción
La estructura condicional permite cambiar el sen do de la programación, es decir, la
programación secuencial tomará caminos dis ntos según la condición que el desarrollador
implemente.
Existen diferentes estructuras condicionales para VBA los cuales veremos en este capítulo,
esto permi rá al desarrollador tener múl ples opciones para el uso de esta estructura,
esto mayormente dependerá de la situación que se presente en el problema.
Operador Descripción
Operadores lógicos:
Permiten unir dos o más expresiones condicionales de tal forma que devuelve True o
False en cada bloque de comparaciones.
93
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Operador Descripción
And Y lógica.
P Q P AND Q
True True True
True False False
False True False
False False False
Or O lógica.
P Q P OR Q
True True True
True False True
False True True
False False True
Primera forma:
If condición Then Acción
Segunda forma:
If condición Then
Acción o acciones
End If
94
Se
sió
6
n
Estructuras condicionales
Donde:
Primera forma:
Segunda forma:
If condición Then
Accion_True
Else
Accion_False
End If
Donde:
95
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
If condición Then
Accion1
ElseIf condicion Then
Accion2
Else
Accion_False
End If
Donde:
96
Se
sió
6
n
Estructuras condicionales
Donde:
• Variable: Es el valor que evalúa la sentencia, según esto se tomará una acción
especificada, hay que tener en cuenta que dicho valor puede ser de cualquier po de
datos.
• Valor: Es el valor que puede tomar una variable.
• Acción: Representa a las sentencias que se ejecutarán cuando se acceda a una opción
del Case.
• AccionFalsa: Representa a las sentencias que se ejecutarán cuando el valor no coincida
con la especificación Case.
Operador Ejemplo
Case Valor Case 1
Case Valor1, Valor2 Case 1,2
Case ValorInicio To ValorFinal Case 1 To 5
Case Is>Valor Case Is>1000
Case Is<1000
97
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
98
Se
sió
6
n
Estructuras condicionales
Pasos:
(Name) frmRegistro
UserForm1
Cap on Registro de alumno
Label1 Cap on REGISTRO DE ALUMNOS
Label2 Cap on CÓDIGO AUTOGENERADO
Label3 Cap on NOMBRES
Label4 Cap on PATERNO
Label5 Cap on MATERNO
Label6 Cap on SEXO
Label7 Cap on FECHA NAC.
Label8 Cap on COLEGIO DE PROC.
Label9 (Name) lblCodigo
TextBox1 (Name) txtNombres
TextBox2 (Name) txtPaterno
TextBox3 (Name) txtMaterno
TextBox4 (Name) txtFechaNac
ComboBox1 (Name) cboSexo
ComboBox2 (Name) cboColegio
(Name) btnRegistrar
CommandBu on1 Cap on REGISTRAR Y ENVIAR
Default True
(Name) btnAnular
CommandBu on2
Cap on ANULAR
(Name) btnSalir
CommandBu on3
Cap on SALIR
codigo = lblCodigo.Caption
paterno = txtPaterno.Text
materno = txtMaterno.Text
nombres = txtNombres.Text
sexo = cboSexo.Text
99
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
colegio = cboColegio.Text
fechaNac = CDate(txtFechaNac.Text)
Call generaCodigo
Call limpiarControles
Else
MsgBox "El error se encuentra en " & valida
End If
End Sub
100
Se
sió
6
n
Estructuras condicionales
4. Agregue un botón desde la ficha Desarrollador, seleccione Insertar > botón y asigne
el siguiente código:
Sub Botón1_Haga_clic_en()
frmRegistro.Show
End Sub
101
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Producto Precio
Diccionario Español $ 10.50
Diccionario Ingles-Español $ 11.00
Diccionario Sinónimos-Antónimos $ 9.90
Pasos:
(Name) frmVenta
UserForm1
Cap on Registro de compra de productos
Label1 Cap on REGISTRO DE COMPRA DE PRODUCTOS
Label2 Cap on Nº
Label3 Cap on PRODUCTO
Label4 Cap on CANTIDAD
Label5 Cap on SUBTOTAL
Label6 Cap on DESCUENTO
Label7 Cap on NETO A PAGAR
Label8 (Name) lblNumero
Label9 (Name) lblPrecio
Label10 (Name) lblSubtotal
Label11 (Name) lblDescuento
Label12 (Name) lblNeto
TextBox1 (Name) txtCan dad
Combobox1 (Name) cboProducto
(Name) btnProcesar
CommandBu on1 Cap on PROCESAR
Default True
(Name) btnCancelar
CommandBu on2
Cap on CANCELAR
(Name) btnSalir
CommandBu on3
Cap on SALIR
(Name) btnExcel
CommandBu on4
Cap on ENVIAR A EXCEL
103
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
'Variables globales
Dim precio As Currency, iCompra As Currency
Dim descuento As Currency, iPagar As Currency
'Calculando el descuento
descuento = calculaDescuento(iCompra)
104
Se
sió
6
n
Estructuras condicionales
End If
If subtotal>150 Then calculaDescuento = 0.15 * subtotal
End Function
Sub limpiaControles()
105
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Call generaNumero
cboProducto.Text = "(Seleccione producto)"
txtCantidad.Text = ""
lblPrecio.Caption = ""
lblSubtotal.Caption = ""
lblDescuento.Caption = ""
lblNeto.Caption = ""
End Sub
4. Agregue un botón desde la ficha Desarrollador, seleccione Insertar > botón y asigne
el siguiente código:
Sub Botón1_Haga_clic_en()
frmCompra.Show
End Sub
106
Se
sió
6
n
Estructuras condicionales
Producto Precio
Diccionario Español $ 10.50
Diccionario Ingles-Español $ 11.00
Diccionario Sinónimos-Antónimos $ 9.90
107
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Pasos:
(Name) frmBoleta
UserForm1
Cap on boleta de venta
Label1 Cap on GENERACIÓN DE BOLETA
Label2 Cap on CLIENTE
Label3 Cap on RUC
Label4 Cap on PRODUCTO
Label5 Cap on CANTIDAD
Label6 Cap on PRECIO
Label7 (Name) lblPrecio
TextBox1 (Name) txtCliente
TextBox1 (Name) txtRuc
TextBox1 (Name) txtCan dad
Combobox1 (Name) cboProducto
(Name) btnAgregar
CommandBu on1 Cap on AGREGAR A LA BOLETA
Default True
(Name) btnAnular
CommandBu on2
Cap on ANULAR BOLETA
(Name) btnSalir
CommandBu on3
Cap on SALIR
108
Se
sió
6
n
Estructuras condicionales
cliente = UCase(txtCliente.Text)
ruc = txtRUC.Text
producto = cboProducto.ListIndex
cantidad = CInt(txtCantidad.Text)
109
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Call generaNumero
Call llenaProductos
Call limpiaControles
End Sub
110
Se
sió
6
n
Estructuras condicionales
If cboProducto.ListIndex = -1 Then
cboProducto.SetFocus
valida = "producto"
ElseIf Trim(txtCantidad.Text) = 0
Or Not IsNumeric(txtCantidad.Text) Then
txtCantidad.Text = ""
txtCantidad.SetFocus
valida = "cantidad del producto"
ElseIf Trim(txtCliente.Text) = 0 Then
txtCliente.Text = ""
txtCliente.SetFocus
valida = "nombre del cliente"
ElseIf Trim(txtRUC.Text) = 0 Then
txtRUC.Text = ""
txtRUC.SetFocus
valida = "RUc del cliente"
Else
valida = ""
End If
End Function
Sub limpiaControles()
txtCliente.Text = Empty
txtRUC.Text = Empty
txtCantidad.Text = Empty
cboProducto.Text = "(Seleccione producto)"
lblPrecio.Caption = ""
Range("D10").Value = ""
Range("D11").Value = ""
Range("I11").Value = ""
Range("C14:I16").Value = ""
Range("I18:I20").Value = ""
txtCliente.SetFocus
End Sub
Sub Botón1_Haga_clic_en()
frmBoleta.Show
End Sub
Sub enviarRegistro()
Dim uFila As Integer
uFila = determinaUltimaFila
Sheets(2).Cells(uFila, 2).Value = Sheets(1).Range("I6").Value
Sheets(2).Cells(uFila, 3).Value = Sheets(1).Range("I11").Value
Sheets(2).Cells(uFila, 4).Value = Sheets(1).Range("D10").Value
111
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Sub limpiaCeldas()
Range("D10").Value = ""
Range("D11").Value = ""
Range("I11").Value = ""
Range("C14:I16").Value = ""
Range("I18:I20").Value = ""
End Sub
Sub Botón1_Haga_clic_en()
frmBoleta.Show
End Sub
6. Agregue un botón desde la ficha Desarrollador, seleccione Insertar > botón y asocie
el botón al procedimiento enviarRegistro.
7. Pruebe la aplicación presionando sobre el botón FORMULARIO DE VENTA.
113
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Pasos:
(Name) frmSeguros
UserForm1
Cap on Seguros
Label1 Cap on COMPAÑÍA DE SEGUROS
Label2 Cap on SEGURO DE SEPELIO
Label3 Cap on CLIENTE
Label4 Cap on TIPO DE SEGURO
Label5 (Name) lblMensaje
Label6 Cap on N°
TextBox1 (Name) txtCliente
TextBox2 (Name) txtCan dad
Combobox1 (Name) cboTipo
(Name) btnMostrar
CommandBu on1 Cap on MOSTRAR MONTOS
Default True
(Name) btnCancelar
CommandBu on2
Cap on CANCELAR
(Name) btnSalir
CommandBu on3
Cap on SALIR
(Name) btnRegistrar
CommandBu on4
Cap on REGISTRAR
ListBox1 (Name) lstR
CheckBox1 (Name) chkAdiciona
'Variables globales
Dim Cobertura As Integer, pago As Currency
Dim cliente As String, tipo As String
'Imprimir resultados
lstR.Clear
lstR.AddItem "**RESUMEN DE VENTA DE SEGUROS**"
lstR.AddItem "CLIENTE:" & cliente
114
Se
sió
6
n
Estructuras condicionales
115
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
txtCantidad.Text = ""
txtCantidad.SetFocus
Else
Call activaCantidad(False)
txtCantidad.Text = "0"
End If
End Sub
116
Se
sió
6
n
Estructuras condicionales
4. Agregue un botón desde la ficha Desarrollador, seleccione Insertar > botón y asigne
el siguiente código:
Sub Botón1_Haga_clic_en()
frmSeguros.Show
End Sub
Por polí ca de los socios fundadores, el club realiza mensualmente un evento como,
por ejemplo, almuerzos, baile social, etc.; de esta manera, todos los socios están en la
obligación de recibir una can dad de boletos según la categorización que se les asignó al
asociarlos. Por otro lado, si un determinado socio vende más boletos de los asignados,
se le descuenta $2.00 por cada boleto vendido a su pago mensual. La aplicación deberá
calcular el descuento que ene el socio y monto del mes, de acuerdo a la siguiente
tabla, la cual muestra la can dad de boletos asignados, así como el pago mensual y el
descuento que se le realiza al socio según su categoría.
Pasos:
(Name) frmClub
UserForm1
Cap on Club Social
Label1 Cap on CLUB SOCIAL – Registro de Eventos
Label2 Cap on NOMBRE DEL SOCIO
Label3 Cap on CATEGORIA
CheckBox1 (Name) chkBoletos
TextBox1 (Name) txtSocio
TextBox2 (Name) txtBoletos
Combobox1 (Name) cboCategoria
118
Se
sió
6
n
Estructuras condicionales
(Name) btnRegistrar
CommandBu on1 Cap on REGISTRAR
Default True
(Name) btnCancelar
CommandBu on2
Cap on CANCELAR
(Name) btnSalir
CommandBu on3
Cap on SALIR
(Name) btnRegistrar
CommandBu on4
Cap on REGISTRAR
(Name) btnEnviar
CommandBu on5
Cap on ENVIAR A EXCEL
ListBox1 (Name) LstR
'Variables globales
Dim Boletos As Integer, pagoMensual As Currency
Dim Descuento As Currency
socio = txtSocio.Text
categoria = cboCategoria.Text
Boletos = CInt(txtBoletos.Text)
Call AsignacionxTipo
lstR.Clear
lstR.AddItem "**REGISTRO DE EVENTOS**"
lstR.AddItem "SOCIO: " & txtSocio.Text
lstR.AddItem "CATEGORIA: " & cboCategoria.Text
lstR.AddItem "BOLETOS: " & Boletos
119
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
lstR.AddItem "-----------------------------------"
lstR.AddItem "DESCUENTO POR CATEGORIA: $"
& Format(Descuento, "0.00")
lstR.AddItem "DESCUENTO POR ADICIONAL DE BOLETOS: $"
& Format(calculaDescuentoAdicional, "0.00")
lstR.AddItem "MONTO MENSUAL: $" &
Format(pagoMensual-Descuento-calculaDescuentoAdicional,"0.00")
Else
MsgBox "El error se encuentra en " & valida
End If
End Sub
120
Se
sió
6
n
Estructuras condicionales
End Select
End Sub
'Función que calcula el descuento por boletos adicionales
'a su categoría
Function calculaDescuentoAdicional() As Double
Call AsignacionxTipo
Dim categoria As String
categoria = cboCategoria.Text
If categoria = "A" And CInt(txtBoletos.Text) > 25 Then
calculaDescuentoAdicional = 2 * (CInt(txtBoletos.Text) - 25)
ElseIf categoria = "B" And CInt(txtBoletos.Text) > 20 Then
calculaDescuentoAdicional = 2 * (CInt(txtBoletos.Text) - 20)
ElseIf categoria = "C" And CInt(txtBoletos.Text) > 15 Then
calculaDescuentoAdicional = 2 * (CInt(txtBoletos.Text) - 15)
Else
calculaDescuentoAdicional = 0
End If
End Function
121
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
4. Agregue un botón desde la ficha Desarrollador, seleccione Insertar > botón y asigne
el siguiente código:
Sub Botón1_Haga_clic_en()
frmClub.Show
End Sub
122
Estructuras repetitivas Sesión
7
7.1 Introducción
En este capítulo, haremos uso de las estructuras repe vas, los cuales permiten reu lizar
una variable de tal forma que se ahorra en el uso de la memoria y op miza el trabajo que
se realiza en el desarrollo de una aplicación.
Contador = Contador + 1
Los acumuladores permiten realizar sumas sucesivas de tal forma que al final se ob ene un
único resultado, el cual también es llamado totalizador. El formato de un acumulador es:
123
Macros - Aplicaciones VBA con Excel
Donde:
• Variable: Es una variable declarada de po entero el cual actúa como contador del ciclo
de repe ciones.
• ValorInicial: Aquí se asigna el punto de inicio del ciclo de repe ciones el cual será un
valor numérico inferior a su valor final.
• ValorFinal: Aquí se asigna el punto final del ciclo de repe ciones, es decir hasta donde
debe recorrer el For; este valor debe ser mayor al valor inicial.
• Step Valor: Indica cual será la dirección del ciclo de repe ciones los cuales pueden ser
ascendente o descendente.
• Cuerpo del bucle: Son las sentencias que se ejecutarán mientras se encuentre en el
rango del ciclo de repe ciones.
Dim i%
For i = 1 To 10
lstN.AddItem "Valor >" & i
Next
Do While condición
'Cuerpo del Bucle
Loop
Do Until condición
'Cuerpo del Bucle
Loop
Do
'Cuerpo del Bucle
Loop While condición
Do
'Cuerpo del Bucle
Loop Until Condición
124
Se
sió
7
n
Estructuras repe vas
125
Macros - Aplicaciones VBA con Excel
• Implemente una función que permita asignar los precios a los productos tal como se
muestra en el siguiente cuadro:
Producto Precio
PROCESADOR INTEL CORE I5 - 3.00GHZ LGA 1155 $ 180.00
• Implemente un botón de «Enviar a Excel», que permi rá enviar los datos a la hoja
de Excel mostrando el número de registro, nombre del cliente, descripción de los
productos, can dad de cada producto, precio de cada producto, importe de cada
producto, subtotal, descuento y neto.
Pasos:
126
Se
sió
7
n
Estructuras repe vas
(Name) FrmVenta
UserForm1
Cap on Control de ventas
Label1 Cap on VENTA DE PRODUCTOS
Label2 Cap on Cliente o razón social
Label3 Cap on Producto
Label4 Cap on Can dad
Label5 Cap on Listado de productos
Label6 Cap on Can dad
Label7 Cap on Precio $
Label8 Cap on Importe $
Label9 Cap on Subtotal
Label10 Cap on Descuento
Label11 Cap on Neto
Label12 (Name) lblSubtotal
Label13 (Name) lblDescuento
Label14 (Name) lblNeto
TextBox1 (Name) txtCliente
TextBox2 (Name) txtCan dad
ComboBox1 (Name) cboProducto
(Name) btnAñadir
CommandBu on1 Cap on AÑADIR
Default True
(Name) btnEliminar
CommandBu on2
Cap on ELIMINAR
(Name) BtnBorrar
CommandBu on3
Cap on BORRAR TODO
(Name) BtnExcel
CommandBu on4
Cap on ENVIAR A EXCEL
Dim i As Integer
For i = 0 To lstProductos.ListCount - 1
Sheets(1).Cells(uFila,4).Value=Sheets(1).Cells(uFila, 4).Value & _
(lstProductos.List(i) & Chr(10))
Sheets(1).Cells(uFila,5).Value=Sheets(1).Cells(uFila, 5).Value & _
127
Macros - Aplicaciones VBA con Excel
128
Se
sió
7
n
Estructuras repe vas
End Sub
129
Macros - Aplicaciones VBA con Excel
Call LimpiaListas
End Sub
130
Se
sió
7
n
Estructuras repe vas
4. Agregue un botón desde la ficha Desarrollador, seleccione Insertar > botón y asigne
el siguiente código:
Sub Botón1_Haga_clic_en()
frmVenta.Show
End Sub
• El usuario deberá ingresar el nombre del alumno y sus cinco notas de manera
obligatoria; en caso el alumno no rinda algún examen, asignar cero; esto se debe a
que la aplicación cuenta con validación en todos sus controles.
• El promedio del alumno se determina basándose en la siguiente fórmula:
15% de EX1 +20% de EX2 +25% de EX3 +10% de EP1 +30% de EF1
131
Macros - Aplicaciones VBA con Excel
• Implemente el botón «Registrar» para enviar la información del alumno a las listas
correspondientes, además de una condición que indique la caracterís cas del alumno,
tal como se muestra en la siguiente tabla:
Promedio Condición
Menor o igual a 10 Desaprobado
Entre 10.1 y 12 Recuperación
Entre 12.1 y 18 Aprobado
Mayor a 18.1 Excelente
• Implemente el botón «Generar lista», que permita enviar los datos a la hoja de Excel
mostrando el número, nombre del alumno, sus cinco notas, promedio y la condición
según su promedio.
• Implemente el botón «Distribuir listas» que permita enviar información de los
alumnos según su condición en hojas dis ntas.
• Finalmente, las hojas de excel tendrían los siguientes formatos después de registrar
cierta can dad de alumnos:
132
Se
sió
7
n
Estructuras repe vas
Pasos:
(Name) FrmNotas
UserForm1
Cap on Control de notas
Label1 Cap on CONTROL DE NOTAS
Label2 Cap on Apellidos y nombres
Label3 Cap on (EX1)
Label4 Cap on (EX2)
Label5 Cap on (EX3)
Label6 Cap on (EP1)
Label7 Cap on (EF1)
Label8 Cap on N°
Label9 Cap on ALUMNO
Label10 Cap on EX1
Label11 Cap on EX2
Label12 Cap on EX3
Label13 Cap on EP1
Label14 Cap on EF1
Label15 Cap on Promedio
Label16 Cap on Condición
TextBox1 (Name) txtAlumno
TextBox2 (Name) txtEx1
TextBox3 (Name) txtEx2
TextBox4 (Name) txtEx3
TextBox5 (Name) txtEp1
TextBox6 (Name) txtEf1
Frame1 Cap on Datos del alumno
Frame2 Cap on Notas del alumno
134
Se
sió
7
n
Estructuras repe vas
(Name) btnRegistrar
CommandBu on1 Cap on REGISTRAR
Default True
(Name) btnLimpiar
CommandBu on2
Cap on LIMPIAR
(Name) btnSalir
CommandBu on3
Cap on SALIR
(Name) btnGenerar
CommandBu on4
Cap on GENERAR LISTA
(Name) btnDistribuir
CommandBu on5
Cap on DISTRIBUIR
ListBox1 (Name) lstNumero
ListBox2 (Name) lstAlumno
ListBox3 (Name) lstEx1
ListBox4 (Name) lstEx2
ListBox5 (Name) lstEx3
ListBox6 (Name) lstEp1
ListBox7 (Name) lstEf1
ListBox8 (Name) lstPromedio
ListBox9 (Name) lstCondicion
'Variables globales
Dim total As Integer, n As Integer
135
Macros - Aplicaciones VBA con Excel
For i = 0 To lstNumero.ListCount - 1
Sheets(1).Cells(uFila + i, 2).Value = lstNumero.List(i)
Sheets(1).Cells(uFila + i, 3).Value = lstAlumno.List(i)
Sheets(1).Cells(uFila + i, 4).Value = lstEx1.List(i)
Sheets(1).Cells(uFila + i, 5).Value = lstEx2.List(i)
Sheets(1).Cells(uFila + i, 6).Value = lstEx3.List(i)
Sheets(1).Cells(uFila + i, 7).Value = lstEp1.List(i)
Sheets(1).Cells(uFila + i, 8).Value = lstEf1.List(i)
Sheets(1).Cells(uFila + i, 9).Value = lstPromedio.List(i)
136
Se
sió
7
n
Estructuras repe vas
'Calculando el promedio
promedio = 0.15*ex1 + 0.2*ex2 + 0.25*ex3 + 0.1*ep1 + 0.3*ef1
'Determinar la condición
Dim condicion As String
condicion = determinaCondicion(promedio)
137
Macros - Aplicaciones VBA con Excel
If Len(Trim(txtAlumno.Text)) = 0 Then
mensaje = "Nombre del alumno"
txtAlumno.SetFocus
ElseIf Not IsNumeric(txtEx1.Text)
Or CInt(txtEx1.Text) > 20 Or CInt(txtEx1.Text) < 0 Then
mensaje = "Examen 1"
txtEx1.SetFocus
ElseIf Not IsNumeric(txtEx2.Text)
Or CInt(txtEx2.Text) > 20 Or CInt(txtEx2.Text) < 0 Then
mensaje = "Examen 2"
txtEx2.SetFocus
ElseIf Not IsNumeric(txtEx3.Text)
Or CInt(txtEx3.Text) > 20 Or CInt(txtEx3.Text) < 0 Then
mensaje = "Examen 3"
txtEx3.SetFocus
ElseIf Not IsNumeric(txtEp1.Text)
Or CInt(txtEp1.Text) > 20 Or CInt(txtEp1.Text) < 0 Then
mensaje = "Examen parcial"
txtEp1.SetFocus
ElseIf Not IsNumeric(txtEf1.Text)
Or CInt(txtEf1.Text) > 20 Or CInt(txtEf1.Text) < 0 Then
mensaje = "Examen final"
txtEf1.SetFocus
Else
mensaje = ""
End If
valida = mensaje
End Function
4. Agregue un botón desde la ficha Desarrollador, seleccione Insertar > botón y asigne
el siguiente código:
Sub Botón1_Haga_clic_en()
frmNotas.Show
End Sub
• Implemente el botón «Mostrar 100 números aleatorios» para enviar dichos números
a la lista correspondiente.
• Implemente el botón «Mostrar conteos» para enviar un informe de los números
mostrados de tal forma que cumpla con las siguientes especificaciones:
• Implemente el botón «Enviar a Excel» el cual permi rá enviar los números aleatorios
en grupo de 20 tal como se muestra en la siguiente imagen:
139
Macros - Aplicaciones VBA con Excel
Pasos:
(Name) frmAleatorios
UserForm1
Cap on Conteos con VBA
Label1 Cap on NUMEROS ALEATORIOS
(Name) btnMostrar
CommandBu on1 Cap on MOSTRAR 100 NUMEROS ALEATORIOS
Default True
(Name) btnConteos
CommandBu on2
Cap on MOSTRAR CONTEOS
(Name) btnExcel
CommandBu on3
Cap on Enviar a Excel
ListBox1 (Name) lstA
ListBox2 (Name) lstR
140
Se
sió
7
n
Estructuras repe vas
141
Macros - Aplicaciones VBA con Excel
4. Agregue un botón desde la ficha Desarrollador, seleccione Insertar > botón y asigne
el siguiente código:
Sub Botón1_Haga_clic_en()
frmAleatorios.Show
End Sub
142
Se
sió
7
n
Estructuras repe vas
• Implemente el botón «Enviar a Excel» el cual permi rá enviar los datos de las listas,
tal como se muestra en la siguiente imagen:
Pasos:
(Name) FrmLibro
UserForm1
Cap on Control de libros
Label1 Cap on CONTROL DE LIBROS
Label2 Cap on Nombre del libro
Label3 Cap on Tipo de editorial
Label4 Cap on Especialidad
Label5 Cap on Año de edición
Label6 Cap on Nº páginas
Label7 Cap on Costo $
Label8 Cap on Nombre del libro
Label9 Cap on Tipo
Label10 Cap on Especialidad
Label11 Cap on Año Edic.
Label12 Cap on Páginas
Label13 Cap on Costo $
(Name) btnRegistrar
CommandBu on1 Cap on REGISTRAR
Default True
(Name) BtnLimpiar
CommandBu on2
Cap on Limpiar
(Name) btnMostrar
CommandBu on3
Cap on Mostrar estadís cas
(Name) btnSalir
CommandBu on4
Cap on Salir
(Name) btnExcel
CommandBu on5
Cap on Enviar a Excel
ListBox1 (Name) lstA
ListBox2 (Name) lstR
143
Macros - Aplicaciones VBA con Excel
144
Se
sió
7
n
Estructuras repe vas
4. Agregar un botón desde la ficha Desarrollador, seleccione Insertar > botón y asigne
el siguiente código:
Sub Botón1_Haga_clic_en()
frmAleatorios.Show
End Sub
145
Base de datos I Sesión
8
8.1 Introducción
Siempre va exis r la necesidad de manipular de la mejor manera los datos de Excel, es
así, que en este capítulo nos concentraremos en la forma de administrar la información
desde Excel; haciendo consultas en las hojas de Excel mediante un UserForm.
Esto facilitará la tarea del programador en Excel ya que la información lo podrá manipular
directamente desde UserForm quitando la dependencia que existe sobre las hojas de
Excel.
Veremos varios casos desarrollados demostrando cómo administrar los datos registrados
en una hoja de Excel.
147
Macros - Aplicaciones VBA con Excel
Pasos:
(Name) frmProveedores
UserForm1
Cap on Formulario de búsqueda de datos
Label1 Cap on CONSULTA DE DATOS – PROVEEDORES
Label2 Cap on Código
Label3 Cap on Razón social
Label4 Cap on Dirección
Label5 Cap on Distrito
Label6 Cap on Teléfono
Label7 (Name) lblCodigo
TextBox1 (Name) txtCodigo
TextBox2 (Name) txtRazon
TextBox3 (Name) txtDireccion
TextBox4 (Name) txtDistrito
TextBox5 (Name) txtTelefono
(Name) btnBuscar
CommandBu on1 Cap on BUSCAR
Default True
(Name) btnLimpiar
CommandBu on2
Cap on LIMPIAR
(Name) btnSalir
CommandBu on3
Cap on SALIR
Frame1 Cap on Datos de la persona
148
Se
sió
8
n
Base de datos I
149
Macros - Aplicaciones VBA con Excel
4. Agregue un botón desde la ficha Desarrollador, seleccione Insertar > botón y asigne
el siguiente código:
Sub Botón1_Haga_clic_en()
frmProveedor.Show
End Sub
150
Se
sió
8
n
Base de datos I
Pasos:
(Name) frmProveedor
UserForm1
Cap on Formulario de búsqueda de datos
Label1 Cap on CONSULTA DE DATOS – PROVEEDORES
Label2 Cap on Seleccione proveedor
Label3 Cap on Código
Label4 Cap on Razón social
Label5 Cap on Dirección
Label6 Cap on Distrito
Label7 Cap on Teléfono
Label8 (Name) lblCodigo
TextBox1 (Name) txtRazon
TextBox2 (Name) txtDireccion
TextBox3 (Name) txtDistrito
TextBox4 (Name) txtTelefono
(Name) btnBuscar
CommandBu on1 Cap on BUSCAR
Default True
(Name) btnLimpiar
CommandBu on2
Cap on LIMPIAR
(Name) btnSalir
CommandBu on3
Cap on SALIR
Frame1 Cap on Datos del proveedor
151
Macros - Aplicaciones VBA con Excel
txtRazon.Text = ActiveCell.Value
Sheets("proveedores").Range("C5").Select
End Sub
152
Se
sió
8
n
Base de datos I
Do
cboProveedor.AddItem ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.Value <> ""
Range("C5").Select
End Sub
4. Agregue un botón desde la ficha Desarrollador, seleccione Insertar > botón y asigne
el siguiente código:
Sub Botón1_Haga_clic_en()
frmProveedor.Show
End Sub
Pasos:
(Name) frmAlumnos
UserForm1
Cap on Listado de ins tuciones educa vas
154
Se
sió
8
n
Base de datos I
(Name) btnBuscar
CommandBu on1 Cap on BÚSQUEDA
Default True
(Name) btnLimpiar
CommandBu on2
Cap on LIMPIAR
(Name) btnSalir
CommandBu on3
Cap on SALIR
ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.Value <> ""
Range("B5").Activate
Else
MsgBox "El error se encuentra en " & valida
End If
End Sub
155
Macros - Aplicaciones VBA con Excel
Call buscaModalidad(cboNombre.Text)
End Sub
ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.Value <> ""
Range("B5").Activate
cboModalidad.Text = "(Seleccione la modalidad)"
End Sub
Sub llenaColegios()
'Ubicando en el inicio de los colegios
Sheets("Instituciones").Range("B5").Select
E = ActiveCell.Value
ActiveCell.Offset(1, 0).Select
With ActiveWorkbook.Worksheets("Instituciones").Sort
.SetRange Range("B5:G10278")
156
Se
sió
8
n
Base de datos I
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
4. Agregue un botón desde la ficha Desarrollador, seleccione Insertar > botón y asigne
el siguiente código:
Sub Botón1_Haga_clic_en()
frmAlumnos.Show
End Sub
157
Macros - Aplicaciones VBA con Excel
Fig. 8.8 Userform de consulta de datos según la letra inicial del nombre de la ins tución.
• Al seleccionar una letra desde el control se deberán mostrar todos los datos en las
listas correspondientes; por cada búsqueda que se realice las listas deben encontrarse
limpias para no sobrecargar de información.
• Implemente una función que valide la selección de la letra inicial del nombre de la
ins tución educa va emi endo un mensaje correspondiente.
Pasos:
(Name) frmAlumnos
UserForm1
Cap on Listado de ins tuciones educa vas
Label1 Cap on LISTADO DE INSTITUCIONES EDUCATIVAS
Label2 Cap on SELECCIONE LETRA O NÚMERO INICIAL
ListBox1 (Name) lstIns tucion
ListBox2 (Name) lstNivel
ListBox3 (Name) lstGes on
ListBox4 (Name) lstDirector
ListBox5 (Name) lstTelefono
ListBox6 (Name) lstCorreo
ComboBox1 (Name) cboLetra
(Name) btnLimpiar
CommandBu on1
Cap on LIMPIAR
(Name) btnSalir
CommandBu on2
Cap on SALIR
Frame1 Cap on Datos de la ins tución
158
Se
sió
8
n
Base de datos I
ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.Value <> ""
Range("B5").Activate
Else
MsgBox "El error se encuentra en " & valida
End If
End Sub
159
Macros - Aplicaciones VBA con Excel
lstNivel.Clear
lstDirector.Clear
lstTelefono.Clear
lstGestion.Clear
End Sub
4. Agregue un botón desde la ficha Desarrollador, seleccione Insertar > botón y asigne
el siguiente código:
Sub Botón1_Haga_clic_en()
frmAlumnos.Show
End Sub
160
Base de datos II Sesión
9
9.1 Introducción
En este capítulo veremos el manejo de información cuya fuente de datos sea Microso
Access el cual será usado como sistema de ges ón de base de datos. Para lograr obtener
información desde Access debemos integrarlo con Excel mediante una cadena de
conexión.
Desarrollaremos casos prác cos que permitan ampliar los conocimientos que tenemos
de la obtención de información, ya que hasta el capítulo anterior estudiamos cómo
obtener información de la misma hoja de Excel; el cual presentaba algunas limitaciones
con respecto a los empos de búsqueda de información.
161
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
Tabla: TB_BARCO
Tabla: TB_EMPLEADO
162
Se
sió
9
n
Base de datos II
Tabla: TB_FAENA
SELECT ListaCampos
[ FROM Tabla ]
[ WHERE Condición ]
[ ORDER BY [ASC|DESC]]
Donde:
163
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
• Liste los años obtenidos desde la fecha de inicio de la faena, ordenados de formar
descendente y sin repe rse.
164
Se
sió
9
n
Base de datos II
• Liste los cinco primeros barcos que enen la menor capacidad de pasajeros.
• Liste todas las faenas cuya zona marí ma sea sur(S) o norte(N).
• Liste todas las faenas cuyo año obtenido desde la fecha de inicio sea 1997.
• Liste todas las faenas cuyo código de barco sea B03 de la zona marí ma sur.
• Debemos contar con una carpeta que contenga la base de datos de Access llamada
Pesca2016.accdb y el propio archivo de Excel, de tal forma que tenga el siguiente
aspecto:
• Agregue la referencia MicrosoŌ AcƟveX Data Objects 2.7 Library al proyecto, desde
el entorno VBA.
• Implemente el siguiente modelo de hoja de Excel:
166
Se
sió
9
n
Base de datos II
167
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
• Agregue la referencia MicrosoŌ AcƟveX Data Objects 2.7 Library al proyecto, desde
el entorno VBA.
• Implemente el siguiente modelo de hoja de Excel:
'Variables globales
Dim cn As New ADODB.Connection
168
Se
sió
9
n
Base de datos II
FEC_NAC,FEC_ING,LIB_ELE,EST_CIVIL,HAB_BAS,COD_BAR
FROM TB_EMPLEADO", cn
Worksheets(1).Cells(7, 2).CopyFromRecordset rs
rs.Close
cn.Close
End Sub
169
Retoque
Macros
fotográfico
- Aplicaciones
con Photoshop
VBA con Excel
• Agregue la referencia MicrosoŌ AcƟveX Data Objects 2.7 Library al proyecto, desde
el entorno VBA.
• Implemente el siguiente UserForm:
170
Se
sió
9
n
Base de datos II
'Variables globales
Dim cn As New ADODB.Connection
EDITORIAL