Moderatori: Anthony47, Flash30005
Anthony47 ha scritto:Mi sfugge il lavoro che si fa svolgere al Listbox; penso poi che l' origine del problema sia nella modalita' di caricamento dei valori nel controllo…
Per capire quale puo' essere la situazione vorrei vedere uno screenshot da cui si vede il contenuto del listbox (la colonna coi decimali), come viene reso dalla tua istruzione, e anche l' istruzione esatta che ora stai usando (con l' uso di Val).
Ciao
ricky53 ha scritto:Ciao,
non devi utilizzare "Val" ma "CDbl"
ricky53 ha scritto:Quale errore?
ricky53 ha scritto:Ciao,
vuol dire che il dato contenuto non è un numero ma una stringa.
Controlla con quale formato imposti la ListBox.
Fogliostampa.Range("g" & X + 1).Value = CDbl(UserForm1.ListBox1.List(X, 6))
UserForm1.ListBox1.List(RigaLista, 6) = Range("g" & indi)
ricky53 ha scritto:Ciao,
prima metti un blocco con "F9" sull'istruzione che ti va in errore poi in debug (iniziando ad eseguire il tuo codice con "F5") devi vedere il contenuto della variabile "X" dell'istruzione
- Codice: Seleziona tutto
Fogliostampa.Range("g" & X + 1).Value = CDbl(UserForm1.ListBox1.List(X, 6))
cercando di capire da quale riga della colonna "G" del tuo "Foglio" hai preso il dato (in base alla variabile "indi") in
- Codice: Seleziona tutto
UserForm1.ListBox1.List(RigaLista, 6) = Range("g" & indi)
E' complesso da scrivere ma eseguendolo, dopo un po' di prove, non avrai problemi a capire qual'è il dato "STRINGA" che dovrebbe essere un numero.
UserForm1.ListBox1.List(RigaLista, 6) = Range("g" & indi)
Range("g" & indi)
ricky53 ha scritto:Ciao,
il problema è in
- Codice: Seleziona tutto
UserForm1.ListBox1.List(RigaLista, 6) = Range("g" & indi)
cosa contiene
- Codice: Seleziona tutto
Range("g" & indi)
per saperlo si deve sapere quanto vale la variabile "indi"
Per questo motivo ti avevo detto si mettere un break (per farlo ti posizioni con il cursore sulla prima istruzione che ho riportato e "click" con il mouse) e d esegui con "F5" a questo punto vedi il contenuto della variabile "indi" nella "Finestra variabili locali" .
Se non sai come fare allora invia un file di esempio (senza dati RISERVATI) e vedo io il valore e ... dovremmo risolvere
riga = Range("a65536").End(xlUp).Row + 1 - 1 '<<<<< evidenziata la modifica
If X > 0 Then
Fogliostampa.Range("E" & X + 1).Value = CDbl(UserForm1.ListBox1.List(X, 4)) 'la quinta colonna
Fogliostampa.Range("F" & X + 1).Value = CDbl(UserForm1.ListBox1.List(X, 5))
Fogliostampa.Range("g" & X + 1).Value = CDbl(UserForm1.ListBox1.List(X, 6))
Else
Fogliostampa.Range("E" & X + 1).Value = (UserForm1.ListBox1.List(X, 4)) 'la quinta colonna
Fogliostampa.Range("F" & X + 1).Value = (UserForm1.ListBox1.List(X, 5))
Fogliostampa.Range("g" & X + 1).Value = (UserForm1.ListBox1.List(X, 6))
End If
Anthony47 ha scritto:Continua a sfuggirmi a quale fine si usa il Listbox, che e' un oggetto non semplice e che ha una sua complessita' di gestione anche legata alla natura testuale delle informazioni contenute in un listbox, mentre il formato delle celle excel e' ben piu' articolato.
Comunque queste considerazioni probabilmente potranno valere per "la prossima volta"…
Veniamo al file...
Inizializzi il listbox con una riga in piu' quindi l' ultima riga contiene solo "null" ed e' sull' ultima riga che CDBL ti restituisce errore, non sulle N righe precedenti correttamente importate su Foglio2.
Quindi nella macro Userform_Activate userai
- Codice: Seleziona tutto
riga = Range("a65536").End(xlUp).Row + 1 - 1 '<<<<< evidenziata la modifica
Inoltre se vuoi usare lo stesso loop per copiare anche le intestazioni (cosa che io avrei importato dal forglio di origine, e che sono inconpatibili con la CDbl), allora devi prevedere un If; per cui le ultime 3 iistruzioni le sdoppi come segue:
- Codice: Seleziona tutto
If X > 0 Then
Fogliostampa.Range("E" & X + 1).Value = CDbl(UserForm1.ListBox1.List(X, 4)) 'la quinta colonna
Fogliostampa.Range("F" & X + 1).Value = CDbl(UserForm1.ListBox1.List(X, 5))
Fogliostampa.Range("g" & X + 1).Value = CDbl(UserForm1.ListBox1.List(X, 6))
Else
Fogliostampa.Range("E" & X + 1).Value = (UserForm1.ListBox1.List(X, 4)) 'la quinta colonna
Fogliostampa.Range("F" & X + 1).Value = (UserForm1.ListBox1.List(X, 5))
Fogliostampa.Range("g" & X + 1).Value = (UserForm1.ListBox1.List(X, 6))
End If
Ciao
UserForm1.ListBox1.List(RigaLista, 1) = Format(Range("b" & indi), " € 0.00")
ricky53 ha scritto:Ciao,
per avere la valuta "Euro" prova in questo modo
- Codice: Seleziona tutto
UserForm1.ListBox1.List(RigaLista, 1) = Format(Range("b" & indi), " € 0.00")
da riportare nelle altre istruzioni (dalla "2" fino alla "6")
martin ha scritto:ricky53 ha scritto:Ciao,
per avere la valuta "Euro" prova in questo modo
- Codice: Seleziona tutto
UserForm1.ListBox1.List(RigaLista, 1) = Format(Range("b" & indi), " € 0.00")
da riportare nelle altre istruzioni (dalla "2" fino alla "6")
ok grazie ricky anche a te per la tua disponibilita, provato però....
UserForm1.ListBox1.List(RigaLista, 6) = _
Format(Range("g" & indi), " € 0.00")
come dici tu , ma da errore al rigo successivo
totale1 = totale1 + Range("e" & indi)
cancellando questi righi di totale funziona... pero quando vado per fare la stampa mi da errore sul rigo che anthony mi
ha modificato:
Fogliostampa.Range("E" & X + 1).Value = CDbl(UserForm1.ListBox1.List(X, 4))
sicuramente devo form anche il totale
pero cosi non va:
totale3 = totale3 + Format(Range("g" & indi), " € 0.00")
bisognera preparare anche il valore di totale ma come?
Torna a Applicazioni Office Windows
Come evidenziare aree separate di un foglio Autore: Ricky0185 |
Forum: Applicazioni Office Windows Risposte: 18 |
File batch per copiare file selezionato da menu contestuale Autore: valle1975 |
Forum: Programmazione Risposte: 3 |
Visitano il forum: Nessuno e 9 ospiti