Programación de Formularios en VBA: Validación de Controles y Eventos en Excel
Inicialización del Formulario
En este evento Activate del formulario se utiliza solamente para llenar el o los ComboBox con sus elementos:
Private Sub UserForm_Activate()
' Llenado del ComboBox1 Est. Civil
ComboBox1.AddItem "Casado"
ComboBox1.AddItem "Separado"
ComboBox1.AddItem "Divorciado"
' Llenado del ComboBox2 Ciudad
ComboBox2.AddItem "Rancaguita"
ComboBox2.AddItem "Santiago"
ComboBox2.AddItem "Concepción"
ComboBox2.AddItem "La Serena"
ComboBox2.AddItem "Viña"
' Llenado del ComboBox3 AFP
ComboBox3.AddItem "Provida"
ComboBox3.AddItem "Cuprum"
ComboBox3.AddItem "Habitat"
ComboBox3.AddItem "ING"
ComboBox3.AddItem "Fusat"
End SubValidación de Campos de Texto
Programación del Nombre
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ' Pregunta si la tecla presionada es el Enter
If Not IsNumeric(TextBox1.Text) And TextBox1.Text <> "" Then
Dim RR As String
RR = MsgBox("Ingreso OK, pase al siguiente", vbInformation, "OK")
TextBox1.Enabled = False ' Se deshabilita el mismo
TextBox2.Enabled = True ' Habilita la Dirección antes que llegue el cursor
TextBox2.SetFocus ' Deja el cursor en la Dirección
Else
Dim AA As String
AA = MsgBox("Error, No ingrese solo números", vbCritical, "ERROR")
TextBox1.Text = " " ' Limpia el error ingresado por el usuario
TextBox1.SetFocus ' Deja el cursor nuevamente en el Nombre
End If
End If
End SubProgramación de la Dirección
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ' Pregunta si la tecla presionada es el Enter
If Not IsNumeric(TextBox2.Text) And TextBox2.Text <> "" Then
Dim ZZ As String
ZZ = MsgBox("Ingreso OK, pase al siguiente", vbInformation, "OK")
TextBox2.Enabled = False ' Se deshabilita el mismo
TextBox3.Enabled = True ' Habilita el Fono antes que llegue el cursor
TextBox3.SetFocus ' Deja el cursor en el Fono
Else
Dim CC As String
CC = MsgBox("Error, No ingrese solo números", vbCritical, "ERROR")
TextBox2.Text = " " ' Limpia el error ingresado por el usuario
TextBox2.SetFocus ' Deja el cursor nuevamente en la Dirección
End If
End If
End SubProgramación del Fono
Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ' Pregunta si la tecla presionada es el Enter
If IsNumeric(TextBox3.Text) Then
Dim RR As String
RR = MsgBox("Ingreso OK, pase al siguiente", vbInformation, "OK")
TextBox3.Enabled = False ' Se deshabilita el mismo
ComboBox1.Enabled = True ' Habilita la Est. Civil antes que llegue el cursor
ComboBox1.SetFocus ' Deja el cursor en Estado Civil
Else
Dim AA As String
AA = MsgBox("Error, Ingrese solo números", vbCritical, "ERROR")
TextBox3.Text = " " ' Limpia el error ingresado por el usuario
TextBox3.SetFocus ' Deja el cursor nuevamente en el Fono
End If
End If
End SubGestión de Listas Desplegables (ComboBox)
El ComboBox1 (Est. Civil) se programa solamente para que el cursor pase al siguiente control cuando el usuario seleccione un elemento.
Private Sub ComboBox1_Click()
ComboBox1.Enabled = False ' Se deshabilita el mismo
ComboBox2.Enabled = True ' Habilita Ciudad antes que llegue el cursor
ComboBox2.SetFocus ' Deja el cursor en Ciudad
End SubEl ComboBox2 (Ciudad) se programa solamente para que el cursor pase al siguiente control cuando el usuario seleccione un elemento.
Private Sub ComboBox2_Click()
ComboBox2.Enabled = False ' Se deshabilita el mismo
ComboBox3.Enabled = True ' Habilita AFP antes que llegue el cursor
ComboBox3.SetFocus ' Deja el cursor en AFP
End SubEl ComboBox3 (AFP) se programa solamente para que el cursor pase al siguiente control cuando el usuario seleccione un elemento.
Private Sub ComboBox3_Click()
ComboBox3.Enabled = False ' Se deshabilita el mismo
TextBox4.Enabled = True ' Habilita Edad antes que llegue el cursor
TextBox4.SetFocus ' Deja el cursor en Edad
End SubCálculos y Validaciones Numéricas Avanzadas
Programación de la Edad
Private Sub TextBox4_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ' Pregunta si la tecla presionada es el Enter
If IsNumeric(TextBox4.Text) Then
Dim RR As String
RR = MsgBox("Ingreso OK, pase al siguiente", vbInformation, "OK")
TextBox4.Enabled = False ' Se deshabilita el mismo
TextBox5.Enabled = True ' Habilita la SBase antes que llegue el cursor
TextBox5.SetFocus ' Deja el cursor en SBase
Else
Dim AA As String
AA = MsgBox("Error, Ingrese solo números", vbCritical, "ERROR")
TextBox4.Text = " " ' Limpia el error ingresado por el usuario
TextBox4.SetFocus ' Deja el cursor nuevamente en la Edad
End If
End If
End SubProgramación del Sueldo Base (SBase)
Debe validar 6 dígitos (100.000 - 999.999).
Private Sub TextBox5_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ' Pregunta si la tecla presionada es el Enter
If IsNumeric(TextBox5.Text) Then
If TextBox5.Text >= 100000 And TextBox5.Text < 999999 Then
If TextBox5.Text > 200000 Then ' Validación de la Gratificación
Dim BB As String
BB = MsgBox("Ingreso OK, pase al siguiente", vbInformation, "OK")
TextBox5.Enabled = False ' Se deshabilita el mismo
TextBox6.Text = 50000 ' Asigna el Aguinaldo
TextBox7.Text = (Val(TextBox5.Text) * 0.2) ' Calcula el Bono
TextBox8.Text = 30000 ' Asigna la Gratificación
TextBox9.Enabled = True ' Habilita el Anticipo antes que llegue el cursor
TextBox9.SetFocus ' Deja el cursor en Anticipo
Else
Dim BB1 As String
BB1 = MsgBox("Ingreso OK, pase al siguiente", vbInformation, "OK")
TextBox5.Enabled = False ' Se deshabilita el mismo
TextBox6.Text = 50000 ' Asigna el Aguinaldo
TextBox7.Text = (Val(TextBox5.Text) * 0.2) ' Calcula el Bono
TextBox8.Text = 50000 ' Asigna la Gratificación
TextBox9.Enabled = True ' Habilita el Anticipo antes que llegue el cursor
TextBox9.SetFocus ' Deja el cursor en Anticipo
End If
Else
Dim CC As String
CC = MsgBox("Error, SBase fuera del Rango", vbCritical, "ERROR")
TextBox5.Text = " " ' Limpia el error ingresado por el usuario
TextBox5.SetFocus ' Deja el cursor nuevamente en el SBase
End If
Else
Dim AA As String
AA = MsgBox("Error, Ingrese solo números", vbCritical, "ERROR")
TextBox5.Text = " " ' Limpia el error ingresado por el usuario
TextBox5.SetFocus ' Deja el cursor nuevamente en el SBase
End If
End If
End SubProgramación del Anticipo
Private Sub TextBox9_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ' Pregunta si la tecla presionada es el Enter
If IsNumeric(TextBox9.Text) Then
If TextBox9.Text <= (Val(TextBox5.Text) * 0.5) Then
Dim RR1 As String
RR1 = MsgBox("Ingreso OK, Calcule el Sueldo Líquido", vbInformation, "OK")
TextBox10.Text = (Val(TextBox5.Text) + Val(TextBox6.Text) + Val(TextBox7.Text) + Val(TextBox8.Text)) - (Val(TextBox9.Text))
TextBox9.Enabled = False ' Se deshabilita el mismo
CommandButton1.Enabled = True ' Habilita el Botón Grabar antes que llegue el cursor
CommandButton1.SetFocus ' Deja el cursor en el Botón Grabar Datos
Else
Dim CC As String
CC = MsgBox("Error, Anticipo fuera del Rango", vbCritical, "ERROR")
TextBox9.Text = " " ' Limpia el error ingresado por el usuario
TextBox9.SetFocus ' Deja el cursor nuevamente en el SBase
End If
Else
Dim AA As String
AA = MsgBox("Error, Ingrese solo números", vbCritical, "ERROR")
TextBox9.Text = " " ' Limpia el error ingresado por el usuario
TextBox9.SetFocus ' Deja el cursor nuevamente en el SBase
End If
End If
End Sub