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