MACROS EXCEL
Profesor: Yuri Iván Cáceres Hernández
Semestre: Primavera de 2019
Tabla de Contenidos
• Preparando el Ambiente de Desarrollo
• Los Controles y sus Usos
• Para Captura de Datos
• Para el Procesamiento de Datos
• Para Despliegue de Resultados
• Asignación de Nombres a Controles Programables
• Diseño de Soluciones y Formularios
• DAP y Variables de Trabajo
• Programación de Controles para Captura de Datos
• Programación de Controles para el Procesamiento de Datos
• Programación de Controles para Despliegue de Resultados
• Patrón de Validación de Ingreso de Datos por el Usuario
• Grabar Resultados en Planillas Excel
• Un Ejemplo Completo
Preparando el Ambiente de Trabajo
• Destino del archivo: disco D, pendrive
u otro (almacenamiento permanente)
• Extensión del archivo: .xlsm (libro
Excel habilitado para macros)
• Macros: Habilita la pestaña
Desarrollador:
• Archivo
• Opciones
• Personalizar cinta de opciones
• Check en Desarrollador (o Programador,
según versión Excel)
• ACEPTAR
Los Controles y sus Usos
Captura de Datos (los más utilizados)
Digitados por el usuario
Cuadro de TextBox txt Para digitar datos: Nombre,
Texto edad, cantidades u otros.
Seleccionados por el usuario
Botón de OptionButton opt Para seleccionar una entre un
Opción conjunto de opciones.
Cuadro ComboBox cbo Para seleccionar una entre varias
Combinado opciones de una lista.
Casilla de CheckBox chk Para seleccionar entre un
Verificación conjunto de opciones, desde
ninguna hasta todas ellas.
Los Controles y sus Usos
Procesamiento de Datos
Cliqueado por el usuario
Botón de CommandButton cmd Para hacer clic sobre él: Esto desencadena la ejecución de
Comando una serie de instrucciones asociadas al evento click del
botón.
Los Controles y sus Usos
Despliegue de Resultados
No recomendable (son editables en tiempo de ejecución)
Cuadro de Texto TextBox txt Es posible usar para salida de
resultados, pero el usuario los puede
modificarlos por error (peligroso)
Recomendados (NO son editables en tiempo de ejecución)
Etiqueta Label lbl Para mostrar resultados de procesos.
Es posible formatearlas para darles
aspecto 3D.
Cuadro de lista ListBox lst Permite mostrar listado de
resultados de procesos.
Asignación de Nombres a Controles Programables
• Para asignar nombres a los objetos
de un formulario: ENTRADAS y
SALIDAS
• Identifique prefijo según control.
• Dé un nombre al dato capturado o ETIQUETA
INFORMATIVA CUADRO
desplegado. DE TEXTO
• Junte prefijo y nombre (sin espacios)
y ya tiene lo que busca.
• Ej. Para un cuadro de texto que se
usará para capturar dirección:
• Prefijo: txt
NOMBRE
• Nombre: Direccion (obvio, ¿no?) DEL
• Nombre control: txtDireccion CONTROL
• Evite acentos (por si acaso)
Asignación de Nombres a Controles Programables
• Para asignar nombres a los objetos
de un formulario: CÁLCULOS (o
PROCESAMIENTOS)
• Control: CommandButton o botón de BOTÓN DE
comando. COMANDO
• Nombre del proceso: Verbo en
infinitivo según el caso.
• Junte prefijo y nombre (sin espacios) NOMBRE DEL
y nuevamente tiene lo buscado. CONTROL
• Ej. Para un proceso de venta:
• Prefijo: cmd PERSONALIZACIÓN
TEXTO BOTÓN
• Nombre: Vender
• Nombre control: cmdVender
Diseño de Soluciones y Formularios
• Diagrama de abstracción de procesos (DAP) y Variables de Trabajo
DAP GENÉRICO
Dato 1
Dato 2 Procesar Resultados
Entradas
Dato n
• Ej: DAP para reajustar precio según IPC
DAP: Reajustar Precio
Precio
Actual
Reajustar Precio
Precio Reajustado
IPC
Diseño de Soluciones y Formularios
• En el ejemplo Reajustar DAP: Reajustar Precio
Precio
Precio, identificamos las Actual
siguientes variables: Reajustar Precio
• Independientes: precio actual e Precio Reajustado
IPC IPC
• Dependientes: precio
reajustado
¿Qué nombres usamos para estas
variables?
• Todas numéricas de tipo real: • Siga su intuición: PrecioActual,
2 de tipo $ y una de tipo % PActual o Actual, PrecioReajustado,
PReajustado o Reajustado.
• De paso, la fórmula es: • IPC: aquí no hay elección, ¡siglas en
• Reajustado=Actual*(1+IPC) MAYÚSCULAS!
Diseño de Soluciones y Formularios
• En nuestro ejemplo de
reajuste de precio
según IPC, el formulario Cuadros
debería verse más o de Textos
menos así:
• El aspecto definitivo Etiqueta
Botones de
tendrá que ver con Comando
gustos personales
(colores, distribución,
orientación, etc.)
Diseño de Soluciones y Formularios
• Lo primero es insertar un formulario y darle un nombre
• Pestaña Programador o Desarrollador
(según versión Excel)
• Visual Basic
• Insertar: UserForm
• Prefijo: usf
• Nombre según uso: Actualizacion
• Nombre formulario: usfActualizacion
Diseño de Soluciones y Formularios
HACER DOBLE CLIC
• Programación de Controles
para Captura de Información
• Hacemos doble clic sobre el
control TextBox.
• Con ello se abre el espacio de
programación de dicho
control, en este caso para el
evento change. Esta línea de código
captura dirección desde
• Escribimos el código necesario el control txtDireccion
según el caso.
• En este caso vamos a capturar
dirección del cliente.
Y lo almacena en la
variable Direccion
Diseño de Soluciones y Formularios Hacemos doble clic sobre
el option FRECUENTE y
• Programación de Controles programamos descuento
del 10%
para Captura de Información
• Hacemos doble clic sobre el
control OptionButton. Después doble clic
sobre OCASIONAL
• Con ello se abre el espacio de y programamos
programación de dicho descuento del 0%
control, en este caso para el
evento click.
• Escribimos el código necesario
según el caso.
• En este caso vamos a capturar
descuento según tipo de
cliente. A la misma variable
le asignamos uno u
otro valor, según
fueron escogidos
Diseño de Soluciones y Formularios
HACER DOBLE CLIC
• Programación de Controles
para Captura de Información
• Hacemos doble clic sobre el
control CheckBox.
• Se abre el espacio de
VERIFICAMOS SI
programación del chkAerobica, FUE ACTIVADO
para el evento click.
• El código debe verificar si el ASIGNAMOS 25.000
control se activó o desactivó, SI FUE ACTIVADO
verificando el estado de la
propiedad Value (usamos If). ASIGNAMOS 0 SI
• Repetimos esta acción para FUE DESACTIVADO
cada CheckBox de nuestro
formulario, con sus distintas
variables relacionadas.
Diseño de Soluciones y Formularios
• Programación de Controles para el Procesamiento de Datos
Supondremos que nos estamos inscribiendo en un gimnasio en el que se pueden
agregar al plan general actividades que se pagan adicionalmente. El valor del plan
general es de $60.000 mensuales.
ETIQUETA DE
DOBLE CLIC EN
SALIDA 3D lblTotal
cmdCalcularCosto
Se suman valores ($60.000)
constantes y variables y se
dejan en Total
Una vez calculado Total, éste
se FORMATEA y se muestra
en la etiqueta lblTotal
Diseño de Soluciones y Formularios
• Programación de Controles para Despliegue de Datos
Tanto etiquetas como cuadros de lista NO SE PROGRAMAN DIRECTAMENTE,
sino que se les asignan valores de salida a partir de otros controles
programables, como por ejemplo un botón de comando (lámina anterior,
etiqueta lblTotal)
Una vez calculado Total, éste
se FORMATEA y se muestra
en la etiqueta lblTotal
(propiedad Caption)
Diseño de Soluciones y Formularios
• Programación de Controles para Despliegue de Datos
Para cuadros de lista usamos propiedad AddItem para agregar resultados a
nuestra lista, como lo indica el código.
DOBLE CLIC
PARA
PROGRAMAR
BARRA DE
DESPLAZAMIENTO
PARA VER EL RESTO
DE RESULTADOS. SE
ASÍ SE AGREGAN GENERA
RESULTADOS A AUTOMÁTICAMENTE
LA LISTA
ASÍ SE VEN LOS
RESULTADOS
EN LA LISTA
Grabar Resultados en Planillas Excel
• Si deseamos grabar estos resultados a nuestra planilla Excel
procedemos de la siguiente manera:
DOBLE CLIC
PARA
PROGRAMAR
Las variables capturadas
o calculadas se grabaran
en la Hoja2 del Excel, en
las posiciones indicadas
(fila 2, columnas 1 a 6)
Grabar Resultados en Planillas Excel
• El problema con este código es que siempre grabará los datos en el
mismo sitio, borrando los datos anteriores. Para resolver este
inconveniente, introduciremos el siguiente truco:
Reemplazamos la constante 2, por
la variable i, que contiene un 2,
pero que una vez que termina el
proceso de guardado se
incrementa en 1 y se almacena de
vuelta en Hoja1.Cells(1,1). Con
esto, las próxima veces que
hagamos clic sobre cmdGuardar, i
tomará el valor actualizado (3,
Aprovechamos de dar luego 4, 5, …)
formato de salida (planilla
Excel) a la celda que
contendrá el valor Total.
Patrón de Validación de Ingreso de Datos por el Usuario
• Se deben validar los ingresos de Private Function DatosValidos() As Boolean
Dim OK As Boolean
OK = False
algunos datos (los ingresados ObtenerDatos
If Dato1 = "" Then
directamente por el usuario en MsgBox "Debe ingresar dato 1"
txtDato1.SetFocus
cuadros de texto) por dos ElseIf Not IsNumeric(Dato1) Then
MsgBox "El dato 1 debe ser numérico"
motivos: txtDato1.Text = ""
txtDato1.SetFocus
• Aquellos datos que intervendrán ElseIf Val(Dato1) < Min Or Val(Dato1) > Max Then
MsgBox "El dato 1 debe estar en el rango Min-Max"
txtDato1.Text = ""
en cálculos (Existencia del dato, txtDato1.SetFocus
tipo de dato, rangos de validez). 'ElseIf ... repetir para el reto de datos
'...
• Datos necesarios para el Else
OK = True
End If
posterior registro de alguna DatosValidos = OK
transacción (nombre, RUT, e- End Function
mail, etc.) Private Sub ObtenerDatos()
Dato1 = txtDato1.Text
• Los datos capturados desde
Dato2 = txtDato2.Text
Dato3 = txtDato3.Text
Dato4 = txtDato4.Text
chk, opt u otro preprogramado, 'y así todos los datos a validar
End Sub
no requieren validación.
Patrón de Validación de Ingreso de Datos por el Usuario
Private Function DatosValidos() As Boolean
• En nuestro ejemplo original Dim OK As Boolean
OK = False
(Reajustar precio, según IPC) ObtenerDatos
If Precio = "" Then
debemos validar los datos de MsgBox "Debe ingresar Precio"
txtPrecio.SetFocus
Precio e IPC, que son los que ElseIf Not IsNumeric(Precio) Then
MsgBox "El Precio debe ser numérico"
ingresa manualmente el txtPrecio.Text = ""
txtPrecio.SetFocus
usuario. ElseIf Val(Precio) < 1000 Then
MsgBox "El Precio debe ser 1.00 o mayor"
• Pongamos las siguientes
txtPrecio.Text = ""
txtPrecio.SetFocus
ElseIf IPC = "" Then
restricciones: MsgBox "Debe ingresar IPC"
txtIPC.SetFocus
• Variación IPC: entre 0% y 4%. ElseIf Not IsNumeric(IPC) Then
MsgBox "El IPC debe ser numérico"
• Precio: Cualquier precio debe txtIPC.Text = ""
txtIPC.SetFocus
ser superior a $1.000 (por ElseIf Val(IPC) < 0 Or Val(IPC)>0.04 Then
poner una cifra cualquiera) MsgBox "El IPC debe estar entre el 0% y el 4%"
txtIPC.Text = ""
Private Sub ObtenerDatos() txtIPC.SetFocus
Else
Precio = txtPrecio.Text OK = True
IPC = txtIPC.Text End If
End Sub DatosValidos = OK
End Function
Un Ejemplo Completo
• Terminando el ejemplo del
registro de socios del gimnasio.
• En la plataforma se encuentra
el proyecto completo
terminado
• Contiene comentarios que
explican el funcionamiento y
lógica de las instrucciones.
• En la Hoja1 del archivo Excel,
está el botón de comando que
abre el formulario.
• En la Hoja2 se graban los datos
de los socios (en secuencia)