Código VBA para UserForm en Excel: ComboBox, validación de datos y botones

Informática y Telecomunicaciones7,88 KB

Código VBA para UserForm en Excel

A continuación se presenta el código VBA utilizado en un UserForm de Excel, que incluye la carga de elementos en un ComboBox, la validación de campos mediante la tecla Enter y el grabado de datos en una hoja de cálculo.

Evento Activate del UserForm

Este evento se utiliza únicamente para llenar los elementos que aparecerán en el ComboBox1.

Private Sub UserForm_Activate()
    ComboBox1.AddItem "Rancaguita"
    ComboBox1.AddItem "Santiaguitito"
    ComboBox1.AddItem "Viñitita"
    ComboBox1.AddItem "Concepcioncito"
    ComboBox1.AddItem "Chaitencitito"
    ComboBox1.AddItem "La Serena"
    ComboBox1.Text = "Seleccione una Opción"
End Sub

Evento Click del ComboBox

Este procedimiento permite que el cursor pase al siguiente control cuando el usuario seleccione un elemento del ComboBox.

Private Sub ComboBox1_Click()
    ComboBox1.Enabled = False 'Se deshabilita el mismo
    TextBox4.Enabled = True 'Habilita el TextBox4 (Edad) antes que llegue el cursor
    TextBox4.SetFocus 'Deja el cursor en Edad
End Sub

Programación del campo Nombre

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        If Not IsNumeric(TextBox1.Text) And (TextBox1.Text) <> "" Then
            Dim HH As String
            HH = MsgBox("Ing. OK, pase al siguiente control", vbInformation, "OK")
            TextBox1.Enabled = False 'Se deshabilita el mismo
            TextBox2.Enabled = True 'Habilita el TextBox2 (Dirección) antes que llegue el cursor
            TextBox2.SetFocus 'Deja el cursor en Dirección
        Else
            Dim RH As String
            RH = MsgBox("Error, no ingrese solo números", vbCritical, "Warning")
            TextBox1.Text = " " 'Limpia el error ingresado por el usuario
            TextBox1.SetFocus 'Deja el cursor en Nombre para que ingrese nuevamente
        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
        If Not IsNumeric(TextBox2.Text) Then
            Dim HH As String
            HH = MsgBox("Ing. OK, pase al siguiente control", vbInformation, "OK")
            TextBox2.Enabled = False 'Se deshabilita el mismo
            TextBox3.Enabled = True 'Habilita el TextBox3 (Fono) antes que llegue el cursor
            TextBox3.SetFocus 'Deja el cursor en Fono
        Else
            Dim RH As String
            RH = MsgBox("Error, no ingrese solo números", vbCritical, "Warning")
            TextBox2.Text = " " 'Limpia el error ingresado por el usuario
            TextBox2.SetFocus 'Deja el cursor en Dirección para que ingrese nuevamente
        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
        If IsNumeric(TextBox3.Text) Then
            Dim HH As String
            HH = MsgBox("Ing. OK, pase al siguiente control", vbInformation, "OK")
            TextBox3.Enabled = False 'Se deshabilita el mismo
            ComboBox1.Enabled = True 'Habilita el ComboBox1 (Ciudad) antes que llegue el cursor
            ComboBox1.SetFocus 'Deja el cursor en Ciudad
        Else
            Dim RH As String
            RH = MsgBox("Error, ingrese solo números", vbCritical, "Warning")
            TextBox3.Text = " " 'Limpia el error ingresado por el usuario
            TextBox3.SetFocus 'Deja el cursor en Fono para que ingrese nuevamente
        End If
    End If
End Sub

Programación de la Edad

Private Sub TextBox4_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        If IsNumeric(TextBox4.Text) Then
            Dim HH As String
            HH = MsgBox("OK, pase al siguiente", vbInformation, "OK")
            TextBox4.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
        Else
            Dim RH As String
            RH = MsgBox("ERROR, ingrese solo números", vbCritical, "Warning")
            TextBox4.Text = " " 'Limpia el error ingresado por el usuario
            TextBox4.SetFocus 'Deja el cursor en Edad para que ingrese nuevamente
        End If
    End If
End Sub

Botón Grabar

Este procedimiento diseña la planilla de grabado y guarda los datos en la hoja de cálculo.

Private Sub CommandButton1_Click()
    'Programación del diseño de la planilla de grabado
    Range("B4").Value = "Nombre" 'Asigna Nombre en el rango B4
    Range("C4").Value = "Dirección"
    Range("D4").Value = "Fono"
    Range("E4").Value = "Ciudad"
    Range("F4").Value = "Edad"
    Range("B4:F20").Borders.Value = 9 'Asigna borde doble al rango B4:F20
    Range("B4:F20").Font.Bold = True 'Asigna letra negrita al rango B4:F20
    Range("B4:F4").Font.Size = 12 'Asigna tamaño 12 a la letra del título
    Range("B4:F4").Interior.Color = vbBlue 'Asigna color azul al fondo del título
    Range("B4:F4").Font.Color = vbWhite 'Asigna color blanco a la letra del título
    Range("B4").ColumnWidth = 18 'Asigna ancho 18 a la columna B (Nombre)
    Range("C4").ColumnWidth = 18 'Asigna ancho 18 a la columna C (Dirección)
    Range("D4").ColumnWidth = 7 'Asigna ancho 7 a la columna D (Fono)
    Range("E4").ColumnWidth = 15 'Asigna ancho 15 a la columna E (Ciudad)
    Range("F4").ColumnWidth = 7 'Asigna ancho 7 a la columna F (Edad)
    Range("B5:F5").Font.Size = 10 'Asigna tamaño 10 a la letra del contenido de la planilla
    Range("B5:F20").Font.Color = vbRed 'Asigna color rojo a la letra del contenido de la planilla
    Range("B5:F20").Interior.Color = vbYellow 'Asigna color amarillo al fondo del contenido
    'Aquí se graban los datos propiamente tal
    Range("B5").Select 'Selecciona la celda B5
    Selection.EntireRow.Insert 'Inserta una fila
    Sheets("Hoja1").Range("B5").Value = TextBox1 'Graba el Nombre en la celda B5
    'Sheets("Hoja1").Range("C12").Value = TextBox2
    'Sheets("Hoja1").Range("D12").Value = TextBox3
    'Sheets("Hoja1").Range("E12").Value = TextBox4
    'Sheets("Hoja1").Range("F12").Value = ComboBox1
    Dim RR As String
    RR = MsgBox("Datos Grabados", vbInformation, "SAVE")
    CommandButton1.Enabled = False 'Se deshabilita el mismo
    CommandButton2.Enabled = True 'Se habilita el botón Otro Ingreso
    CommandButton3.Enabled = True 'Habilita el botón Salir
    CommandButton2.SetFocus 'Deja el cursor en Otro Ingreso
End Sub

Botón Otro Ingreso

Private Sub CommandButton2_Click()
    TextBox1.Text = " " 'Limpia el contenido del TextBox1 (Nombre)
    TextBox2.Text = " " 'Limpia el contenido del TextBox2 (Dirección)
    TextBox3.Text = " " 'Limpia el contenido del TextBox3 (Fono)
    TextBox4.Text = " " 'Limpia el contenido del TextBox4 (Edad)
    ComboBox1.Text = " " 'Limpia el ComboBox1 (Ciudad)
    CommandButton2.Enabled = False 'Se deshabilita el mismo
    TextBox1.Enabled = True 'Habilita el TextBox1 (Nombre) antes que llegue el cursor
    TextBox1.SetFocus 'Deja el cursor en el TextBox1 (Nombre)
End Sub

Botón Salir

Private Sub CommandButton3_Click()
    Dim AA As String
    Dim HH As String
    AA = "Juan Pérez"
    HH = MsgBox("¿Está seguro de salir?", vbYesNo + vbQuestion, "PREGUNTA")
    If HH = vbYes Then
        Dim AB As String
        AB = MsgBox("OK, hasta luego. El autor es: " & AA, vbInformation, "Hasta luego")
        End
    Else
        Dim AX As String
        AX = MsgBox("Regresará al programa", vbExclamation, "Regreso")
    End If
End Sub

Descargar

PDF Word HTML