I controlli (Controls) possono essere utilizzati anche all'esterno dei moduli. Nell'esempio seguente utilizzeremo i controlli direttamente sul foglio di lavoro.
Tieni presente che la "Modalità Designer" ("Design mode") deve essere attivata per modificare un particolare controllo situato nel foglio di lavoro (e deve anche essere disattivata per poter utilizzare questo controllo).
Prima di passare all'esempio successivo, diamo un'occhiata a questo:
Ora vogliamo aggiungere un colore di sfondo alle celle e selezionarle in base alla posizione del cursore in un'area definita di 30 righe per 10 colonne.
Le proprietà dello slider verticale per lo scorrimento dello schermo sono le seguenti:
Il cursore orizzontale è lo stesso, tranne Max : 10.
Quello che segue è il codice che verrà eseguito ogni volta che cambia il valore del cursore verticale (Value):
'Sfondo grigio nelle celle Cells.Interior.Color = RGB(240, 240, 240) 'Applichiamo il colore e selezioniamo una cella With Cells(ScrollBar_vertical.Value, ActiveCell.Column) 'Definisci la cella utilizzando Valore (Value) .Interior.Color = RGB(255, 220, 100) 'Usiamo il colore arancione .Select 'Selezioniamo una cella End With
Questo codice viene attivato quando si verificano gli eventi Change e Scroll ed esegue le istruzioni indipendentemente da quale parte dello slider abbiamo cliccato.
Quello che segue è il codice per il cursore verticale:
Private Sub vertical_bar() 'Applica uno sfondo grigio per le celle Cells.Interior.Color = RGB(240, 240, 240) 'Applica lo sfondo e seleziona la cella With Cells(ScrollBar_vertical.Value, ActiveCell.Column) .Interior.Color = RGB(255, 220, 100) 'Arancia .Select 'Selezioniamo una cella End With End Sub Private Sub ScrollBar_vertical_Change() vertical_bar End Sub Private Sub ScrollBar_vertical_Scroll() vertical_bar End Sub
Ed ecco, a sua volta, il codice per il cursore orizzontale:
Private Sub horizontal_bar() 'Applica uno sfondo grigio per le celle Cells.Interior.Color = RGB(240, 240, 240) 'Applica lo sfondo e seleziona la cella With Cells(ActiveCell.Row, ScrollBar_horizontal.Value) .Interior.Color = RGB(255, 220, 100) 'Arancia .Select 'Selezioniamo una cella End With End Sub Private Sub ScrollBar_horizontal_Change() horizontal_bar End Sub Private Sub ScrollBar_horizontal_Scroll() horizontal_bar End Sub
Questo è il punto di partenza per il nostro prossimo esempio:
Puoi scaricare il file di esempio Excel: userform4.xls
Quando eseguiamo il modulo, vogliamo che i 4 paesi vengano caricati nell'elenco a discesa (utilizzando il metodo AddItem):
Private Sub UserForm_Initialize() For i = 1 To 4 '=> per riempire 4 paesi ComboBox_Country.AddItem Cells(1, i) 'Aggiungiamo i valori delle celle da A1 a A4 utilizzando un loop Next End Sub
Quando cambia il valore del menu a discesa, vogliamo aggiungere le città del paese selezionato utilizzando un ciclo simile al precedente.
Per fare ciò, dobbiamo conoscere il numero della colonna e il numero di città (righe) in questa colonna.
La proprietà ListIndex contiene il numero di sequenza dell'elemento selezionato nell'elenco a discesa (a differenza di Value, che contiene il valore dell'elemento dell'elenco). Tieni presente che ListIndex inizia con il numero 0.
Il numero di colonna si ottiene tramite:
column_number = ComboBox_Country.ListIndex + 1
Per ottenere il numero di righe nella colonna selezionata per un paese specifico, possiamo trovare il numero dell'ultima cella non vuota:
rows_number = Cells(1, column_number).End(xlDown).Row
Utilizzando queste informazioni è ora possibile creare un loop per aggiungere le città all'elenco:
Private Sub ComboBox_Country_Change() 'Cancellazione dell'elenco (altrimenti le città verranno aggiunte immediatamente) ListBox_Cities.Clear Dim column_number As Integer, rows_number As Integer 'Il numero di sequenza dell'elemento selezionato (ListIndex inizia con 0): column_number = ComboBox_Country.ListIndex + 1 'Numero di righe nella colonna selezionata con i paesi: rows_number = Cells(1, column_number).End(xlDown).Row For i = 2 To rows_number '=> riempiendo l'elenco con le città ListBox_Cities.AddItem Cells(i, column_number) Next End Sub
Nota: potremmo abbreviare il codice, ma ciò lo renderebbe meno leggibile:
Private Sub ComboBox_Country_Change() ListBox_Cities.Clear For i = 2 To Cells(1, ComboBox_Country.ListIndex + 1).End(xlDown).Row ListBox_Cities.AddItem Cells(i, ComboBox_Country.ListIndex + 1) Next End Sub
La città che sceglieremo verrà inserita nel campo di testo “Scelta” (“Choice”):
Private Sub ListBox_Cities_Click() TextBox_Choice.Value = ListBox_Cities.Value End Sub
Puoi vedere un esempio finito in questo file Excel: userform4b.xls