Programación de Formularios en VBA: Validación de Controles y Eventos en Excel

Informática9,16 KB

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 Sub

Validació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 Sub

Programació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 Sub

Programació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 Sub

Gestió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 Sub

El 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 Sub

El 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 Sub

Cá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 Sub

Programació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 Sub

Programació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

Descargar

PDF Word HTML