Somma in Listbox
Hai un problema con Excel? 
Somma in Listbox
di Germano (utente non iscritto) data: 30/10/2012 14:47:08
Buongiorno Luca,
mi chiamo Germano e sto scopiazzanndo un pò di codice per effettuare un mio programmino, le chiedevo
come posso ottenere la somma nella mia listBox di piu colonne (15) con la proprietà ColumnCount (che ne permette solo da 0 - 9)
di Vecchio Frac data: 30/10/2012 15:39:47
Luca se ci sei... batti un colpo e interpretaci la domanda di Germano ^_^
Scherzi a parte (non sono Luca... spero vada bene lo stesso), scopiazzare va bene ma bisogna sapere quel che si copia per adattarlo alle proprie esigenze.
Cosa intendi per "ottenere la somma nella mia listBox di più colonne" ? cosa c'entra ColumnCount?
In pratica: esponi il problema, dicci quel che sai fare, se hai fatto qualcosa e non sai andare avanti, magari allega un esempio di quel che ti serve.
Aiutateci ad aiutarvi ^_^
di Germano data: 31/10/2012 01:09:20
Ciao Vecchio Frac,
scusa se ti rispondo in ritardo ma sono andato al lavoro.
Di seguito inserisco il listato dal quale ho copiato.
'------------------------------------------
'evento eseguito alla creazione della UserForm
Private Sub UserForm_Initialize()
'dichiaro le variabili
Dim col As Collection
Dim c As Range
Dim v As Variant
Dim lUltRiga As Long
'creo la Collection
Set col = New Collection
'metto un riferimento al workbook
'che contiene il codice
Set wk = ThisWorkbook
'metto un riferimento al foglio
'che contiene la tabella
'(qui Foglio1)
With wk
Set sh = .Worksheets("Foglio1")
End With
'alcuni settaggi della ListBox
With Me.ListBox1
'larghezza ListBox
.Width = 140
'numero colonne ListBox
.ColumnCount = 4
'larghezza colonne ListBox
.ColumnWidths = "50;25;25;25"
End With
With sh
'trovo l'ultima riga con
'un valore nella tabella
'in Foglio1, colonna A
lUltRiga = .Range("A" & _
Rows.Count).End(xlUp).Row
'metto un riferimento al Range
Set rng = .Range("A2:A" & lUltRiga)
End With
'carico la Collection e la ComboBox
'dei valori presenti in colonna A
'in modo univoco
On Error Resume Next
For Each c In rng
col.Add c.Value, CStr(c.Value)
Next
For Each v In col
Me.ComboBox1.AddItem v
Next
'Set a Nothing delle variabili oggetto
Set c = Nothing
Set col = Nothing
End Sub
'al click sul pulsante carico nella
'ListBox solo i dati della tabella
'che in colonna A hanno quanto ho
'inserito nella TextBox
Private Sub CommandButton1_Click()
'richiamo la sub che carica la ListBox
'passando il valore di ricerca
Call mCaricaListBox(Me.TextBox1.Text)
End Sub
Private Sub mCaricaListBox(ByVal sRicerca As String)
'dichiaro le variabili
Dim c As Range
Dim lCont As Long
Dim lng As Long
Dim d1 As Double
Dim d2 As Double
Dim d3 As Double
'valorizzo la variabile
lCont = 0
With Me.ListBox1
'pulisto la ListBox
.Clear
'carico la ListBox
For Each c In rng
'se il valore della cella
'è uguale a quello di ricerca
If c.Value = sRicerca Then
'aggiungo una riga alla
'ListBox e le passo i
'valori delle celle
.AddItem
.List(lCont, 0) = _
c.Value
.List(lCont, 1) = _
c.Offset(0, 1).Value
.List(lCont, 2) = _
c.Offset(0, 2).Value
.List(lCont, 3) = _
c.Offset(0, 3).Value
lCont = lCont + 1
End If
Next
'eseguo le somme colonna per colonna
For lng = 0 To Me.ListBox1.ListCount - 1
d1 = d1 + Me.ListBox1.List(lng, 1)
d2 = d2 + Me.ListBox1.List(lng, 2)
d3 = d3 + Me.ListBox1.List(lng, 3)
Next
'aggiungo la riga con i separatori
.AddItem
.List(.ListCount - 1, 0) = ""
.List(.ListCount - 1, 1) = "----"
.List(.ListCount - 1, 2) = "----"
.List(.ListCount - 1, 3) = "----"
'aggiungo la riga con i totali
.AddItem
.List(.ListCount - 1, 0) = "Totale"
.List(.ListCount - 1, 1) = d1
.List(.ListCount - 1, 2) = d2
.List(.ListCount - 1, 3) = d3
End With
'Set a Nothing delle variabili oggetto
Set c = Nothing
End Sub
'evento click per caricare i dati
'di un nominativo scelto nella ComboBox
Private Sub ComboBox1_Change()
'richiamo la sub che carica la ListBox
'passando il valore di ricerca
Call mCaricaListBox(Me.ComboBox1.Text)
End Sub
'pulsante che pulisce la ListBox
Private Sub CommandButton2_Click()
Me.ListBox1.Clear
End Sub
'evento eseguito alla distruzione della UserForm
Private Sub UserForm_Terminate()
'Set a Nothing delle variabili oggetto
Set rng = Nothing
Set sh = Nothing
Set wk = Nothing
End Sub
Ciao Germano
di HarryBosch data: 31/10/2012 08:50:29
Ciao Germano
per capire bene, perché hai allegato il file, ma manca un passaggio:
- vorresti portare le attuali quattro colonne della lista, a 15 colonne in visualizzazione, giusto? ovviamente con le relative somme?
di Germano data: 31/10/2012 11:25:15
Si esatto
di HarryBosch data: 31/10/2012 12:03:45
Che io sappia la versione Excel 2007 permette di caricare con
.Additem fino a 9 colonne, altrimenti va in errore
no so se nella verione 2010 è stato aumentato questo limite, o se non si tratta di un limite ma manca un'istruzione che ora mi sfugge.
In ogni caso, se invece carichi la Listbox prendendo i riferimenti sul foglio non c'è limite al caricamento delle colonne, una cosa del tipo:
ListBox1.List = Sheets("Foglio1").Range("A1:O20").Value
Pertanto ho modificato una piccola parte del tuo codice, eliminado le aggiunte con .AddItem e ricopiando invece i dati della collection su un foglio di appoggio. Quindi recupero questi dati con l'istruzione sopra detta e carico la listbox.
Vedi l'allegato "sommalistbox -1"
di Vecchio Frac data: 31/10/2012 14:25:54
Il limite di nove colonne oltre la prima è tipico del controllo ListBox (e ComboBox) non associato.
Per ovviare all'inconveniente basta associarlo ad una matrice (che sia da codice o che sia facendo riferimento ad un range nel foglio, credo sia indifferente).
Non mi risulta che questo inconveniente sia fixato in Excel 2010 (ma sai com'è... it's a feature, not a bug e così ti fregano ^_^).
di germano (utente non iscritto) data: 31/10/2012 17:05:42
Ciao HarryBosch
e proprio quello che mi serviva
Grazie
a presto
Vuoi Approfondire?