TOP

VBA-Lezione 12.4. Elementi di controllo (Esercizi)

Vediamo ora un piccolo esercizio per esercitarsi nell'uso dei controlli (Controls).


C'è un file con un modulo già pronto ed elementi di controllo. Dobbiamo scrivere codice che faccia funzionare tutti gli elementi in modo che l'utente possa popolare il nostro database improvvisato attraverso l'interazione con il modulo.

Ecco il file Excel da scaricare: controls_exercise.xls

Dovrebbe ora essere chiaro che l'obiettivo qui è popolare la tabella utilizzando il modulo.

Alcuni punti da considerare:

  • L'elenco dei paesi si basa sull'elenco del secondo foglio;
  • Controllare i valori degli elementi di controllo prima di aggiungere un nuovo contatto;
  • Dopo aver inserito i valori, restituiscono i valori iniziali dei controlli senza chiudere il modulo.
  • Uno dei modi per risolvere il problema

    Per prima cosa dobbiamo aumentare la proprietà Zoom del nostro modulo a 120 per renderlo più facile da usare:

    Abbiamo già trattato il controllo dei pulsanti di opzione (nella prima lezione sui controlli), quindi qui utilizziamo una soluzione semplice.

    Per impostazione predefinita è selezionata "Signora" (proprietà Value: True), ovvero non controlleremo l'indirizzo quando lo selezioniamo.

    Pulsante Chiudi

    Private Sub CommandButton_Close_Click()
         Unload Me
    End Sub
    

    Il contenuto dell'elenco a discesa

    Private Sub UserForm_Initialize() 'Caricamento dell'elenco quando il modulo è aperto
        For i = 1 To 252 'Generazione di un elenco di 252 paesi dal foglio di lavoro Paese
           ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
        Next
    End Sub
    

    Controllo degli elementi di controllo

    Una soluzione semplice sarebbe visualizzare una finestra di dialogo se uno qualsiasi dei controlli è vuoto.

    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
             'Istruzioni per inserire un contatto qui...
         End If
    End Sub
    

    Ma per rendere le cose un po' più complicate, ogni elemento dovrebbe essere controllato separatamente, e se qualcuno di essi è vuoto, il colore del suo nome () dovrebbe cambiare in rosso:

    Private Sub CommandButton_Add_Click()
         'Imposta il colore del titolo su nero
         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)
    
         'Controlli dei contenuti
         If TextBox_Last_Name.Value = "" Then 'SE non è specificato nulla...
             Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Imposta il colore del titolo su rosso
         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
             'Istruzioni per inserire un contatto qui...
         End If
    End Sub
    

    Inserimento dati

    Il seguente codice va inserito nel luogo indicato nel codice sopra (vedi commenti):

     Dim row_number As Integer, salutation As String
    
     'Scelta del ricorso
     For Each salutation_button In Frame_Salutation.Controls
         If salutation_button.Value Then
             salutation = salutation_button.Caption 'Ricorso selezionato
         End If
     Next
    
     'row_number = numero di riga dell'ultima cella non vuota nella colonna +1
     row_number = Range("A65536").End(xlUp).Row + 1
    
     'Inserimento di valori in un foglio di lavoro
     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
    
     'Dopo aver incollato, vengono restituiti i valori originali
     OptionButton1.Value = True
     TextBox_Last_Name.Value  = ""
     TextBox_First_Name.Value = ""
     TextBox_Address.Value    = ""
     TextBox_Place.Value      = ""
     ComboBox_Country.ListIndex = -1
    

    Aspetto generale

    Fatto, ecco il codice completo dell'esercizio e il file da scaricare:

    Private Sub CommandButton_Close_Click()
         Unload Me
    End Sub
    
    Private Sub UserForm_Initialize() 'Elenco di 252 paesi nella scheda "Paese".
        For i = 1 To 252
            ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
        Next
    End Sub
    
    Private Sub CommandButton_Add_Click()
         'Imposta il colore del nome su nero
         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)
    
         'Controlli dei contenuti
         If TextBox_Last_Name.Value = "" Then 'SE non è specificato nulla...
             Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Imposta il colore del titolo su rosso
         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
             'Se il modulo è compilato, i valori verranno incollati nel foglio di lavoro
             Dim row_number As Integer, salutation As String
             
             'Scelta del ricorso
             For Each salutation_button In Frame_Salutation.Controls
                 If salutation_button.Value Then
                     salutation = salutation_button.Caption
                 End If
             Next
    
             'row_number = numero di riga dell'ultima cella non vuota nella colonna +1
             row_number = Range("A65536").End(xlUp).Row + 1
    
             'Inserimento di valori in un foglio di lavoro
             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
             
             'Dopo aver inserito i dati, restituiamo i valori iniziali
             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
    

    Ecco il file Excel da scaricare: controls_exercise2.xls