Condividi:        

copiare da listbox a foglio

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

copiare da listbox a foglio

Postdi martin » 17/02/11 18:44

salve a tutti
vorrei un aiuto su un piccolo problema .
devo stampare da una listform alcuni dati utilizzando qursto comando:
Private Sub CommandButton6_Click()
Set Fogliostampa = Worksheets("Foglio2") 'impostiamo con la variabile "Fogliostampa" il foglio 2
Fogliostampa.Cells.ClearContents 'e puliamo tutte le celle del foglio

n = UserForm1.ListBox1.ListCount - 1 'con "n" prendiamo il numero di quanti dati sono presenti ora nella 'ListBox
Dim X As Long 'la variabile X ora diventa il vettore del numero indice scorso dal ciclo, dal 'numero zero (che corrisponde al primo dato, non scordiamocelo) fino al valore numerico 'rappresentato da "n" ed iniziamo il ciclo
For X = 0 To n
'sotto: rendiamo la cella del foglio 2, colonna A, riga corrispondente al numero rappresentarto da X + 1 (infatti all'inizio X sarebbe zero, e su un foglio la riga zero non esiste) uguale al dato 'rappresentato da List(X), mentre nella ListBox X inizialmente corrisponde al valore "gunny", cioè 'all'indice riga zero. Ovviamente ad ogni Next X si imcrementa di un valore, scalando così di uno 'sia i nomi nella listbox, sia le righe sul Fogliostampa nelle quali celle verrà copiato il nome stesso.

Fogliostampa.Range("A" & X + 1).Value = UserForm1.ListBox1.List(X, 0) 'la prima colonna
Fogliostampa.Range("B" & X + 1).Value = UserForm1.ListBox1.List(X, 1) 'la seconda colonna
Fogliostampa.Range("C" & X + 1).Value = UserForm1.ListBox1.List(X, 2) 'la terza colonna
Fogliostampa.Range("D" & X + 1).Value = UserForm1.ListBox1.List(X, 3) 'la quarta colonna
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))
Next
Fogliostampa.PrintOut 'quindi 'quindi si stampa il Fogliostampa con i dati copiati

End Sub

tutto è ok però
le ultime tre colonne che portano valori decimali di importi euro me li stampa e/o li inserisce nel foglio2 con errore di formato testo , quindi senza il simbplo euro ma con decimali giusti.
ho provato a mettere val
Fogliostampa.Range("D" & X + 1).Value =val UserForm1.ListBox1.List(X, 3) 'la quarta colonna
e va ok con il simbolo dell'euro però mi da l'importo con due zeri decimali anzi che i valori decimali esatti.
qualcuno può aiutarmi grazie martin
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Sponsor
 

Re: copiare da listbox a foglio

Postdi Anthony47 » 18/02/11 00:02

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
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copiare da listbox a foglio

Postdi martin » 18/02/11 01:34

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

ok hai perfettamente ragione dipenderà dal carico
vedi:
Private Sub UserForm_Activate()
'calcolo la data di sistema e la salvo su una variabile
Dim totale1
Dim totale2
Dim totale3
totale1 = 0
totale2 = 0
totale3 = 0

'creo la riga descrizioni della ListBox
UserForm1.ListBox1.AddItem "n.reg"
UserForm1.ListBox1.List(RigaLista, 1) = "codice"
UserForm1.ListBox1.List(RigaLista, 2) = "articolo"
UserForm1.ListBox1.List(RigaLista, 3) = "data"
UserForm1.ListBox1.List(RigaLista, 4) = "banconote"
UserForm1.ListBox1.List(RigaLista, 5) = "monete"
UserForm1.ListBox1.List(RigaLista, 6) = "ticket "
RigaLista = 0
ActiveSheet.UsedRange.Select
riga = Range("a65536").End(xlUp).Row + 1

For indi = 3 To riga

RigaLista = RigaLista + 1
UserForm1.ListBox1.AddItem Range("a" & indi)
UserForm1.ListBox1.List(RigaLista, 1) = _
Range("b" & indi)
UserForm1.ListBox1.List(RigaLista, 2) = _
Range("c" & indi)
UserForm1.ListBox1.List(RigaLista, 3) = _
Range("d" & indi)
UserForm1.ListBox1.List(RigaLista, 4) = _
Range("e" & indi)
UserForm1.ListBox1.List(RigaLista, 5) = _
Range("f" & indi)
UserForm1.ListBox1.List(RigaLista, 6) = _
Range("g" & indi)
totale1 = totale1 + Range("e" & indi)
totale2 = totale2 + Range("f" & indi)
totale3 = totale3 + Range("g" & indi)
UserForm1.ListBox1.List(1, 4) = _
totale1
UserForm1.ListBox1.List(1, 5) = _
totale2
UserForm1.ListBox1.List(1, 6) = _
totale3

Next

End Sub


questo come si vede su listbox

1 125 29/12/2010 440,20 96,3 231,25 (valori decimali)
2 122 29/12/2010 390 59 230 (valori interi)

questo come su foglio 2 si copia con ' Fogliostampa.Range("g" & X + 1).Value = Val(UserForm1.ListBox1.List(X, 6))

1 125 29/12/2010 € 440,00 € 96,00 € 231,00 (manca il valore dei decimi)
2 122 29/12/2010 € 390,00 € 59,00 € 230,00 (ok)


questo senza "val"

1 125 29/12/2010 440,20 96,30 231,25 (non da il simbolo € e segnala form)
2 122 29/12/2010 €390,00 € 59,00 € 230,00
nelle celle con decimali da :
valori dati con attenzione "il numero di questa cella è formattato come testo o è preceduto da apostrofo"

nelle celle dei valori interi scrive €....normale.

sai che io non sono una cima ma di tanto in tanto mi do aiuto con qualche notizia e/o codice preso dal ns forum,
avro fatto sicuramente qualche errore nel carico della listbox che come puoi notare non mi da ne il simbolo € davanti al valore ne decimali. ( 145 anzi che € 145,00 come vorrei).
penso di essere stato chiaro se vuoi cmq ti mando il file
grazie martin
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: copiare da listbox a foglio

Postdi ricky53 » 18/02/11 01:47

Ciao,
non devi utilizzare "Val" ma "CDbl"
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: copiare da listbox a foglio

Postdi martin » 18/02/11 02:11

ricky53 ha scritto:Ciao,
non devi utilizzare "Val" ma "CDbl"

gia fatto in precedenza ma mi va in errore: :(
'Fogliostampa.Range("g" & X + 1).Value = CDbl(UserForm1.ListBox1.List(X, 6))
ciao grazie
martin :(
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: copiare da listbox a foglio

Postdi ricky53 » 18/02/11 10:24

Quale errore?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: copiare da listbox a foglio

Postdi martin » 18/02/11 12:23

ricky53 ha scritto:Quale errore?

errore run time '13!
tipo non corispondente

Fogliostampa.Range("g" & X + 1).Value = CDbl(UserForm1.ListBox1.List(X, 6))
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: copiare da listbox a foglio

Postdi ricky53 » 18/02/11 12:50

Ciao,
vuol dire che il dato contenuto non è un numero ma una stringa.

Controlla con quale formato imposti la ListBox.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: copiare da listbox a foglio

Postdi martin » 18/02/11 12:59

ricky53 ha scritto:Ciao,
vuol dire che il dato contenuto non è un numero ma una stringa.

Controlla con quale formato imposti la ListBox.

come?
sono un piccolo autodidatta dammi un modo
grazie martin
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: copiare da listbox a foglio

Postdi ricky53 » 18/02/11 13:12

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.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: copiare da listbox a foglio

Postdi martin » 18/02/11 14:53

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.

no non ho capito ho provato come hai detto con f9 e f5 ma non appare nulla
forse per me il problema sta nel copiare da foglio 1 a listbox con valori esatti
riga = Range("a65536").End(xlUp).Row + 1

For indi = 3 To riga

RigaLista = RigaLista + 1
UserForm1.ListBox1.AddItem Range("a" & indi)
UserForm1.ListBox1.List(RigaLista, 1) = _
Range("b" & indi)
UserForm1.ListBox1.List(RigaLista, 2) = _
Range("c" & indi)
UserForm1.ListBox1.List(RigaLista, 3) = _
Range("d" & indi)
UserForm1.ListBox1.List(RigaLista, 4) = _
Range("e" & indi)
UserForm1.ListBox1.List(RigaLista, 5) = _
Range("f" & indi)
UserForm1.ListBox1.List(RigaLista, 6) = _
Range("g" & indi)
totale1 = totale1 + Range("e" & indi)
totale2 = totale2 + Range("f" & indi)
totale3 = totale3 + Range("g" & indi)
UserForm1.ListBox1.List(1, 4) = _
totale1
UserForm1.ListBox1.List(1, 5) = _
totale2
UserForm1.ListBox1.List(1, 6) = _
totale3

Next
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: copiare da listbox a foglio

Postdi ricky53 » 18/02/11 16:25

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
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: copiare da listbox a foglio

Postdi martin » 18/02/11 17:20

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

ti mando il file
http://rapidshare.com/files/448625942/riky.xlsm
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: copiare da listbox a foglio

Postdi Anthony47 » 18/02/11 19:59

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
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copiare da listbox a foglio

Postdi martin » 18/02/11 21:04

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

ciao anthony
risolto come volevo :lol:
non so se hai scaricato il file il progr in costruzione, prevede dalla listbox la selezione , con ricerca ,modifica ed è stata una soluzione più idonea per chi deve lavorarci per facilitare l'uso, io cmq
sono del tuo parere meglio lavorare sui fogli.
un'ultima cosa c'è la possibilità di vedere lul listato della listbox gli importi con accanto i valori euro (€ 415.20)?)
grazie sempre per la tua disponibilità ciaoooooo martin
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: copiare da listbox a foglio

Postdi ricky53 » 19/02/11 03:18

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")
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: copiare da listbox a foglio

Postdi martin » 19/02/11 11:25

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?
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: copiare da listbox a foglio

Postdi martin » 20/02/11 11:30

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?

ciao ricky
hai trovato qualche correzione alla tua formula per il problma?
grazie martin
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: copiare da listbox a foglio

Postdi martin » 20/02/11 12:55

Niente scusami ricky sbagliavo io a scrivere il codice tutto ok funziona grazie di tutto martin
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: copiare da listbox a foglio

Postdi ricky53 » 20/02/11 19:33

Ciao,
bene.

Alla prossima
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia


Torna a Applicazioni Office Windows


Topic correlati a "copiare da listbox a foglio":


Chi c’è in linea

Visitano il forum: Nessuno e 43 ospiti