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