TOP

VBA-Lección 12.4. Elementos de control (Ejercicios)

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:

  • La lista de países se basa en la lista de la segunda hoja;
  • Comprobación de los valores de los elementos de control antes de agregar un nuevo contacto;
  • Después de ingresar los valores, devolver los valores iniciales de los controles sin cerrar el formulario.
  • Una de las formas de resolver el problema.

    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.

    botón cerrar

    Private Sub CommandButton_Close_Click()
         Unload Me
    End Sub
    

    El contenido de la lista desplegable.

    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
    

    Comprobación de los elementos de control

    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
    

    Insertar datos

    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
    

    Apariencia general

    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