Código VBA para UserForm en Excel: ComboBox, validación de datos y botones
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 SubEvento 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 SubProgramació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 SubProgramació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 SubProgramació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 SubProgramació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 SubBotó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 SubBotó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 SubBotó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