Ovviamente non puoi usare uno scrollbar esterno per manipolare la visualizzazione del listbox (senza modificare il contenuto del listbox).
Per quel che ne so, il listbox mostra automaticamente una scrollbar orizzontale quando la ColumnWidth (o la somma delle C.W., se hai piu' colonne) e' superiore alla proprieta' Width del Listbox; quello che e' incasinato calcolare e' la larghezza che un certo testo occupa, per impostare poi di conseguenza la ColumnWidth della colonne del ListBox.
Quindi il mio suggerimento e' che usi lo scrollbar aggiuntivo per questo aggiustamento; cosa che si ottiene con questo codice:
- Codice: Seleziona tutto
Private Sub UserForm_Initialize()
Me.ScrollBar1.Value = Me.ListBox1.Width
Me.ScrollBar1.Min = 10
Me.ScrollBar1.Max = 2200
Me.ScrollBar1.LargeChange = 50
End Sub
Private Sub ScrollBar1_Change()
Me.ListBox1.ColumnWidths = Me.ScrollBar1.Value
End Sub
Il lato negativo e' che ci saranno due scrollbar: quella da te aggiunta nella form, che serve solo a impostare la larghezza della colonna della listbox; e quella aggiunta nella listbox quando si imposta una larghezza maggiore di quella del listbox.
Una semplificazione si potrebbe fare usando per il listbox un font a spaziatura fissa, es Courier, nel qual caso la larghezza della colonna si puo' impostare pari a (N° max di caratteri)*(Coefficiente)
Il Coefficiente dipende pero' dalla dimensione del carattere ed eventuali formattazioni (es grassetto); per un size 11 punti senza Bold puo' calcolarsi pari a 6,2 (punti/caratteri).
Ciao