maurogsc.eu
|
![]() |
home ==> Excel: come fare per ==> ListBox: allineare le colonne in modo differente - VBA
ListBox: allineare le colonne in modo
differente
- VBA
NOTA. La soluzione ed il codice sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dal codice o dalla soluzione proposta se usati impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare il codice o la soluzione in files importanti.
1 - Abbiamo sul Foglio1 una tabella con tre colonne che vogliamo caricare in una ListBox sulla UserForm1. Ecco la tabella:
2 - Se carichiamo i dati nella ListBox con questo codice:
Private Sub UserForm_Initialize()
Dim sh As Worksheet
Dim lRiga As Long
Dim lCont As Long
Dim lng As Long
Set sh = ThisWorkbook.Worksheets("Foglio1")
lRiga = sh.Range("A" & Rows.Count).End(xlUp).Row
With Me.ListBox1
lCont = 0
.ColumnCount = 3
For lng = 2 To lRiga
.AddItem
.List(lCont, 0) = sh.Range("A" & lng).Value
.List(lCont, 1) = sh.Range("B" & lng).Value
.List(lCont, 2) = sh.Range("C" & lng).Value
lCont = lCont + 1
Next
End With
Set sh = Nothing
End Sub
Ecco cosa otteniamo lanciando la UserForm, tre colonne allineate a sinistra. I valori numerici della colonna 2 non sono allineati correttamente:
Se utilizzassimo la proprietà TextAlign della ListBox, potremmo allineare tutte le colonne a destra, ma a questo punto sarebbe il testo ad avere un allineamento sbagliato. Purtroppo la proprietà TextAlign non consente di allineare le singole colonne in modo differente.
3 - Il codice qui sotto(commentato):
Private Sub UserForm_Initialize()
'dichiaro le variabili
Dim sh As Worksheet
Dim lRiga As Long
Dim lCont As Long
Dim lng As Long
Dim lString As Long
Const lMAX As Long = 10
'metto un riferimento al foglio con la tabella
Set sh = ThisWorkbook.Worksheets("Foglio1")
'trovo l'ultima riga con dati nella tabella
lRiga = sh.Range("A" & Rows.Count).End(xlUp).Row
With Me.ListBox1
'imposto a 0(zero) la variabile;
'ricordo che il primo item(record/riga)
'della ListBox è 0
lCont = 0
'imposto il numero delle colonne della ListBox;
'la prima colonna sarà poi la colonna 0
.ColumnCount = 3
'imposto un carattere non proporzionale
'(a larghezza fissa) per avere un corretto
'allineamento
.Font = "Courier New"
'ciclo la tabella
For lng = 2 To lRiga
'aggiungo un item(record/riga) alla ListBox
.AddItem
'nella prima colonna della ListBox(colonna 0) metto il valore
'della cella della colonna A della tabella
.List(lCont, 0) = sh.Range("A" & lng).Value
'adesso sottraggo a 10(la mia costante)
'il numero di caratteri del valore presente nella cella della
'colonna B della tabella
lString = lMAX - Len(sh.Range("B" & lng).Value)
'vado ad concatenare quegli spazi
'con il valore presente nella cella della colonna A
'della tabella e inserisco tutto nella seconda colonna
'(colonna 1) della ListBox
.List(lCont, 1) = String(lString, " ") & sh.Range("B" & lng).Value
'nella terza colonna della ListBox(colonna 2) metto il valore
'della cella della colonna C della tabella
.List(lCont, 2) = sh.Range("C" & lng).Value
'aumento di 1 il valore della variabile
lCont = lCont + 1
Next
End With
'Set a Nothing della variabile oggetto
Set sh = Nothing
End Sub
Da come risultato:
4 - In pratica aggiungo n spazi davanti al valore numerico contenuto nella cella. Il numero di spazi necessari, lo ottengo sottraendo alla mia costante(nell'esempio 10) la lunghezza(intesa come numero di caratteri) del valore contenuto nella cella della tabella. E' obbligatorio utilizzare un carattere non proporzionale(a larghezza fissa, tipo Courier New) per ottenere il corretto allineamento.
Per ulteriori informazioni su Microsoft Excel ed il suo Visual Basic, utilizzate questo
forum:
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads
Ultimo aggiornamento di questa pagina: 12/01/2011 - mauro gamberini