Caso práctico – Registro con cálculos
Publicaciones anteriores hemos hablado de la capacidad del USERFORM o FORMULARIO la cual consiste en recolectar de manera sencilla la información y reducir las tareas repetitivas.
CASO REGISTRO DEL PRECIO DE CAPACITACIÓN PARA EMPLEADOS
En esta ocasión se requiere un registro para las capacitaciones de cada empleado por área de trabajo, además podremos calcular el costo y elegir entre tres horarios para llevar a cabo dicha capacitación. Hay que recordar que para este ejercicio la tarifa única es de dos dólares por minuto.
El diseño del formulario será el siguiente:
Con el cuadro de herramientas insertamos 5 Label, 1 Combobox, 4 CommandButton, 1 Frame, 2 TextBox, 3 OptionButton y un listbox.
A continuación, vamos a mostrar las propiedades de los 17 objetos insertados en el formulario:
CÓDIGO TOTAL DEL FORMULARIO
Para empezar, nombramos nuestra variable general:
Dim Precio As Double
CÓDIGO USERFORM – EVENTO INITIALIZE
Private Sub UserForm_Initialize()
‘Calcular la última fila de la hoja2(«BD»)
ultfila = Hoja2.Range(«A» & Rows.Count).End(xlUp).Row
‘Bucle para cargar los datos al combobox
For i = 2 To ultfila
cboArea.AddItem Hoja2.Cells(i, «A»).Text
Next i
End Sub
CÓDIGO BOTÓN “MOSTRAR RESUMEN”
Private Sub btnMostrar_Click()
‘Bucle para corregir errores en los campos
‘De nombre, DNI, destino y hora de capacitación
If Trim(txtNombre.Text) = Empty Then
MsgBox «Ingresar el nombre»
Exit Sub
End If
If txtDni.Text = Empty Then
MsgBox «Ingresar DNI»
Exit Sub
End If
If Not IsNumeric(txtDni.Text) Then
MsgBox «El DNI debe ser un número»
Exit Sub
End If
If cboArea.ListIndex = -1 Then
MsgBox «Escoger Área»
Exit Sub
End If
If opt9.Value = False And opt2.Value = False And opt7.Value = False Then
MsgBox «Escoger la hora de capacitación»
Exit Sub
End If
‘Capturando el área, nombre y DNI seleccionado
Nombre = txtNombre.Text
DNI = txtDni.Text
Area = cboArea.Text
‘Determinar la duración de la capacitación por área
Select Case Area
Case «Marketing»: Minutos = 30
Case «R.R.H.H.»: Minutos = 40
Case «Ventas»: Minutos = 50
Case «Finanzas»: Minutos = 60
End Select
‘Calcular el precio de las capacitaciones
Tarifa = 2
Precio = Minutos * Tarifa
‘Evaluar la hora de capacitación
If opt9.Value = True Then
HC = opt9.Caption
ElseIf opt2.Value = True Then
HC = opt2.Caption
ElseIf opt7.Value = True Then
HC = opt7.Caption
End If
‘Imprimir en la lista (resumen de capacitación)
lstR.Clear
lstR.AddItem «***RESUMEN CAPACITACIÓN***»
lstR.AddItem «NOMBRE: » & Nombre
lstR.AddItem «DNI: » & DNI
lstR.AddItem «ÁREA: » & Area
lstR.AddItem «HORA DE CAPACITACIÓN: » & HC
lstR.AddItem «MINUTOS: » & Format(Minutos, «0»)
lstR.AddItem «TARIFA POR MINUTO: » & Format(Tarifa, «$#,##0.00»)
lstR.AddItem «PRECIO: » & Format(Precio, «$#,##0.00»)
End Sub
CÓDIGO BOTÓN “ANULAR REGISTRO”
Private Sub btnAnular_Click()
‘Limpiar los cuadros de texto
txtNombre.Text = Empty
txtDni.Text = Empty
‘Limpiando el combobox
cboArea.ListIndex = -1
‘Deshabilitar los botones de opción
opt9.Value = False
opt2.Value = False
opt7.Value = False
‘Limpiar el resumen de la lista
lstR.Clear
End Sub
CÓDIGO BOTON “SALIR”
Private Sub btnSalir_Click()
‘Salir del formulario
Unload Me
End Sub
CÓDIGO BOTÓN “ENVIAR A EXCEL”
Private Sub btnEnviarExcel_Click()
‘Calcular la última fila de la hoja1(registro)
ultfila = Hoja1.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
‘Bucle para corregir errores en los campos
‘De nombre, dni, destino y hora de capacitación
If Trim(txtNombre.Text) = Empty Then
MsgBox «Ingresar el nombre»
Exit Sub
End If
If txtDni.Text = Empty Then
MsgBox «Ingresar DNI»
Exit Sub
End If
If Not IsNumeric(txtDni.Text) Then
MsgBox «El DNI debe ser un número»
Exit Sub
End If
If cboArea.ListIndex = -1 Then
MsgBox «Escoger Área»
Exit Sub
End If
If opt9.Value = False And opt2.Value = False And opt7.Value = False Then
MsgBox «Escoger la hora de capacitación»
Exit Sub
End If
‘Enviar los valores del listbox a la hoja
Hoja1.Cells(ultfila, 2).Value = ultfila – 5
Hoja1.Cells(ultfila, 3).Value = txtNombre.Text
Hoja1.Cells(ultfila, 4).Value = txtDni.Text
Hoja1.Cells(ultfila, 5).Value = cboArea.Text
Hoja1.Cells(ultfila, 7).Value = Format(Precio, «$#,##0.00»)
If opt9.Value = True Then Hoja1.Cells(ultfila, 6).Value = opt9.Caption
If opt2.Value = True Then Hoja1.Cells(ultfila, 6).Value = opt2.Caption
If opt7.Value = True Then Hoja1.Cells(ultfila, 6).Value = opt7.Caption
‘Alinear al centro
Hoja1.Cells(ultfila, 2).HorizontalAlignment = xlCenter
Hoja1.Cells(ultfila, 3).HorizontalAlignment = xlCenter
Hoja1.Cells(ultfila, 4).HorizontalAlignment = xlCenter
Hoja1.Cells(ultfila, 5).HorizontalAlignment = xlCenter
Hoja1.Cells(ultfila, 6).HorizontalAlignment = xlCenter
Hoja1.Cells(ultfila, 7).HorizontalAlignment = xlCenter
‘Aplicar bordes a los valores ya insertados en la hoja
Range(Cells(ultfila, 2), Cells(ultfila, 7)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlcontinous
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
End With
End Sub
MACRO PARA EJECUTAR EL FORMULARIO
Sub ABRIR_FORM()
‘Mostrar el formulario en pantalla
frmCapacitacion.Show
End Sub
Para ejecutar esta macro vamos a insertar un botón – Control de formulario como este:
Para aprender como insertar un botón – Control de Formulario te dejo aquí el enlace.
Hemos logrado crear una herramienta que logre facilitar la tarea de registrar y calcular con ayuda del Userform.
Deja una respuesta