Veamos ahora un pequeño ejercicio para practicar el uso de controles (Controls).
Hay un archivo con un formulario listo para usar y elementos de control. Necesitamos escribir un código que haga que todos los elementos funcionen para que el usuario pueda completar nuestra base de datos improvisada a través de la interacción con el formulario.
Aquí está el archivo Excel para descargar:controls_ejerciciose.xls
Ahora debería quedar claro que el objetivo aquí es llenar la tabla usando el formulario.
Algunos puntos a considerar:
Primero, necesitamos aumentar la propiedad Zoom de nuestro formulario a 120 para que sea más fácil de usar:
Ya hemos cubierto la verificación de los botones de opción (en la primera lección sobre controles), así que aquí usamos una solución simple.
"Mrs" está seleccionada por defecto (propiedad Value: True), es decir, no comprobaremos la dirección al seleccionarla.
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() 'Cargando la lista cuando el formulario está abierto
For i = 1 To 252 'Generación de una lista de 252 países a partir de la hoja de trabajo País
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
Una solución simple sería mostrar un cuadro de diálogo si alguno de los controles está vacío.
Private Sub CommandButton_Add_Click()
If TextBox_Last_Name.Value = "" Or TextBox_First_Name.Value = "" Or TextBox_Address.Value = "" Or TextBox_Place.Value = "" Or ComboBox_Country.Value = "" Then
MsgBox "Form incomplete"
Else
'Instrucciones para ingresar un contacto aquí...
End If
End Sub
Pero para hacerlo un poco más complicado, se debe revisar cada elemento por separado, y si alguno de ellos está vacío, el color de su nombre () debe cambiar a rojo:
Private Sub CommandButton_Add_Click()
'Establecer el color del título en negro
Label_Last_Name.ForeColor = RGB(0, 0, 0)
Label_First_Name.ForeColor = RGB(0, 0, 0)
Label_Address.ForeColor = RGB(0, 0, 0)
Label_Place.ForeColor = RGB(0, 0, 0)
Label_Country.ForeColor = RGB(0, 0, 0)
'Controles de contenido
If TextBox_Last_Name.Value = "" Then 'SI no se especifica nada...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Establecer el color del título en rojo
ElseIf TextBox_First_Name.Value = "" Then
Label_First_Name.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Address.Value = "" Then
Label_Address.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Place.Value = "" Then
Label_Place.ForeColor = RGB(255, 0, 0)
ElseIf ComboBox_Country.Value = "" Then
Label_Country.ForeColor = RGB(255, 0, 0)
Else
'Instrucciones para ingresar un contacto aquí...
End If
End Sub
Se debe insertar el siguiente código en el lugar indicado en el código anterior (ver comentarios):
Dim row_number As Integer, salutation As String
'Selección de apelación
For Each salutation_button In Frame_Salutation.Controls
If salutation_button.Value Then
salutation = salutation_button.Caption 'Apelación seleccionada
End If
Next
'número_fila = número de fila de la última celda no vacía en la columna +1
row_number = Range("A65536").End(xlUp).Row + 1
'Insertar valores en una hoja de cálculo
Cells(row_number, 1) = salutation
Cells(row_number, 2) = TextBox_Last_Name.Value
Cells(row_number, 3) = TextBox_First_Name.Value
Cells(row_number, 4) = TextBox_Address.Value
Cells(row_number, 5) = TextBox_Place.Value
Cells(row_number, 6) = ComboBox_Country.Value
'Después de pegar, se devuelven los valores originales.
OptionButton1.Value = True
TextBox_Last_Name.Value = ""
TextBox_First_Name.Value = ""
TextBox_Address.Value = ""
TextBox_Place.Value = ""
ComboBox_Country.ListIndex = -1
Eso es todo, aquí tienes el código completo del ejercicio y el archivo para descargar:
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() 'Lista de 252 países en la hoja "País"
For i = 1 To 252
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
Private Sub CommandButton_Add_Click()
'Establezca el color del nombre en negro
Label_Last_Name.ForeColor = RGB(0, 0, 0)
Label_First_Name.ForeColor = RGB(0, 0, 0)
Label_Address.ForeColor = RGB(0, 0, 0)
Label_Place.ForeColor = RGB(0, 0, 0)
Label_Country.ForeColor = RGB(0, 0, 0)
'Controles de contenido
If TextBox_Last_Name.Value = "" Then 'SI no se especifica nada...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Establecer el color del título en rojo
ElseIf TextBox_First_Name.Value = "" Then
Label_First_Name.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Address.Value = "" Then
Label_Address.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Place.Value = "" Then
Label_Place.ForeColor = RGB(255, 0, 0)
ElseIf ComboBox_Country.Value = "" Then
Label_Country.ForeColor = RGB(255, 0, 0)
Else
'Si se completa el formulario, los valores se pegarán en la hoja de trabajo
Dim row_number As Integer, salutation As String
'Selección de apelación
For Each salutation_button In Frame_Salutation.Controls
If salutation_button.Value Then
salutation = salutation_button.Caption
End If
Next
'número_fila = número de fila de la última celda no vacía en la columna +1
row_number = Range("A65536").End(xlUp).Row + 1
'Insertar valores en una hoja de cálculo
Cells(row_number, 1) = salutation
Cells(row_number, 2) = TextBox_Last_Name.Value
Cells(row_number, 3) = TextBox_First_Name.Value
Cells(row_number, 4) = TextBox_Address.Value
Cells(row_number, 5) = TextBox_Place.Value
Cells(row_number, 6) = ComboBox_Country.Value
'Después de insertar los datos, devolvemos los valores iniciales.
OptionButton1.Value = True
TextBox_Last_Name.Value = ""
TextBox_First_Name.Value = ""
TextBox_Address.Value = ""
TextBox_Place.Value = ""
ComboBox_Country.ListIndex = -1
End If
End Sub
Aquí está el archivo Excel para descargar:controls_ejercicio2.xls