TOP

VBA-Lezione 12.3. Controlli (Controls)

YouLibreCalc for Excel logo

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).


Barra di scorrimento (barra di scorrimento)

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:

  • Min: 1
  • Max: 30 (30 righe)
  • Value: posizione del cursore (in questo caso, tra 1 e 30)
  • 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
    

    Elenco a discesa e ListBox (ComboBox e ListBox)

    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