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:
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.
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
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
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
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
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