Rieccomi... e con buone notizie.
Ovvero: non sono riuscito a "scrollare" la listbox, però sono riuscito ugualmente a fare quello che volevo... ed anche meglio di quanto desiderassi!
Al posto della Listbox ho usato un controllo
ListView, che non è elencato tra quelli disponibili di default in Excel... ma è prodotto da Microsoft e quindi dovrebbe essere incluso in (quasi) ogni installazione di Office.
Oltre alle funzioni della ListBox,
ListView ne ha molte altre e... reagisce anche al movimento della rotella senza bisogno di nessun codice aggiuntivo!
Come trovarlo:- Da Editor di Visual Basic, far comparire la Casella degli Strumenti, cliccarla col destro e selezionare l'opzione "Controlli aggiuntivi..."
- Scorrere la lista dei controlli disponibili fino a trovare la voce "Microsoft
ListView Control 6.0" ; spuntare la casella e tornare alla casella degli strumenti: ora dovrebbe esserci un'icona in più. Non resta che inserire in
ListView in un form ed applicare alcuni settaggi.
Come configurare la ListView:I settaggi si fanno da elenco Proprietà, come se fosse un normale controllo (nome, titolo, allineamento del testo, colori di sfondo & primo Piano, ecc.)
Parametri sono rilevanti:
AllowColumnReorder .... Permette di spostare le colonne a piacimento (se sono più di una)
CheckBoxes .............. Mostra delle caselle di spunta alla sinistra delle voci... che possono essere usate
FullRowSelect ............ Se =true, cliccando su una qualunque colonna si selezionerà tutta la riga
Gridlines ................. (!!!) E' incredibile quanto la lista diventi più leggibile se ci sono delle linee-guida...
Multiselect ............... Permette di fare scelte multiple o limitare la selezione alla sola riga evidenziata
Sorted .................... Riordina le voci senza bisogno di scrivere una routine che lo faccia!
SortKey ................... Specifica la colonna da usare per l'ordinamento (0 è la prima a sinistra)
View ...................... Per visualizzare il controllo come un listbox, specificare "lvwReport"
Supponendo che il controllo si chiami LVIEW_COMANDI ed i dati da inserire siano disposti su 2 colonne (nel mio caso: un comando da inviare ad un server remoto ed una breve descrizione), da C3 a D8, per caricare dei valori nelle voci del controllo, si usa questo codice:
- Codice: Seleziona tutto
LVIEW_COMANDI.ListItems.Clear
Dim COMANDO as ListItem
For RIGA = 3 to 8
Set COMANDO = LVIEW_COMANDI.ListItems.Add(, , Cells (RIGA,3).Value)
'carica la voce che si trova in colonna C.
COMANDO.SubItems(1) = Cells (RIGA,4)
' Carica la corrispondente descrizione da colonna D.
' Se le colonne sono più di 2, basta indirizzare di conseguenza
' gli altri SubItems con gli indici 2, 3, 4 ecc.
Next
Funziona, non richiede all'utente di interagire con le API di sistema, reagisce alla rotella ed è pure gradevole da vedere. Che si può volere di più?
Ciao!
MAx