› Excel e gli applicativi Microsoft Office › REFRESH ListBox
-
AutoreArticoli
-
@ ElleEsse: ho provato il file che hai allegato e a me (Excel 2010) funziona perfettamente (ho solo rimosso il riferimento alla libreria PDF Creator mancante da me): scrollando le righe sono tutte correttamente marcate e la marcatura cambia regolarmente ad ogni selezione di riga.
ciao Scossa
grazie per il tempo che hai perso
io lo uso su macchina 8.1 ed Excel 2007
l'ho provato su macchina con 10 ed Excel 2013
macchine entrambe a 64 bit ed Excel entrambi a 32 bit
il problema è lo stesso
tu hai fatto esattamente quanto descritto nell'esempio? ovvero sei andato su un conto della terza pagina hai clickato su un conto e tutti gli elementi delle pagine precedenti risultano correttamante marcati ?
sarebbe ancora peggio di quanto ipotizzato
Ciao,
io ho cliccato su Gioco, poi ho spostato il cursore della listbox in basso e fatto click sulla voce 0277 e tutte le voci (controllato agendo sul cursore) erano correttamente marcate; poi sempre col cursore sono salito e fatto click sulla voce 0057(altrimenti afacendo pagina su o giù viene selezionata la riga 0054, tutte le righe hanno cambiato marcatura. Se premo Pagina Su o Pagina Giù, viene selezionata la riga e, di nuovo, tutte le voci vengono marcate.
Excel 2010 su Win 7 64 bit, ris. grafica 1920 x 1080, visualizzazione su doppio monitor.
Ciao,
grazie ancora
non so che dire
quindi a te mai risulta la situazione in figura, dove parte dei conti presentano - correttamente - il # identificativo del secondo click - e quindi aggiornamento del listbox - ed altri l' * identificativo del primo aggiornamento del listbox
(lo stesso dopo il primo aggiornamento come nel caso dell'esempio quando alcuni presentano l' * e altri non hanno ancora alcuna segnatura)
sono basito
ps. perdonami se insisto, ma hai eseguito pedestremente quanto suggerito nell'esempio?
- scroll clickando sulla barra laterale per andare sulla terza pagina
- click su un conto della terza pagina
- scroll singolo verso l'alto (quindi clickando sulla freccetta in alto) per salire verso l'alto
boh.. sono duro di comprendonio e non capisco cosa vuoi farmi vedere
o forse non è ben chiaro qual'è il problema
che il tuo file , con il mio suggerimento ,funziona regolarmente
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )che il tuo file , con il mio suggerimento ,funziona regolarmente
ma.. avevi provato ad usarlo così com'è originariamente e avevi riscontrato gli stessi problemi che riscontro io?
la modifica che proponi tu non c'entra nulla - senza offesa e senza polemica
per far girare il tuo file,io ho excel 2010,ho dovuto levare la spunta a due librerie che io non ho,levando la spunta a queste librerie, e lanciando sul tasto gioco, la listbox si presentava senza alcun segno sulla parte Sx dei vari record.Apportando le modifiche suggerite la listbox al primo avvio, si presentava con gli asterischi.
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )per far girare il tuo file,io ho excel 2010,ho dovuto levare la spunta a due librerie che io non ho,levando la spunta a queste librerie, e lanciando sul tasto gioco, la listbox si presentava senza alcun segno sulla parte Sx dei vari record.Apportando le modifiche suggerite la listbox al primo avvio, si presentava con gli asterischi.
ma.. la prima volta è ovvio che si presenti senza * o altri simboli
ed è giusto che sia così - l'inizializzazione con la routine CaricaLBConti non prevede alcuna marcatura in quanto non è stato ancora effettuato alcun intervento
il problema è nella fase di refresh a video dopo l'aggiornamento della lista - successivo ad ogni click - attraverso la routine AggiornaLBConti()
la routine inserisce un carattere alla sinistra dei conti, ma quando il controllo ritorna all'interfaccia utente non tutti i conti presentano quello stesso carattere
"ps. perdonami se insisto, ma hai eseguito pedestremente quanto suggerito nell'esempio?
- scroll clickando sulla barra laterale per andare sulla terza pagina
- click su un conto della terza pagina
- scroll singolo verso l'alto (quindi clickando sulla freccetta in alto) per salire verso l'alto"
Scusa, hai ragone! se mi muovo di un singolo click ho dei vuoti, ma è chiaramente un problema di visualizzazione in qunto i dati nella list sono corretti, infatti se aggiungi queste righe prima della fine della sub LBConti_Click()
Dim vIdx As Variant For vIdx = 0 To LBConti.ListCount - 1 Debug.Print LBConti.List(vIdx, 3) & ": "; LBConti.List(vIdx, 0) If Trim(LBConti.List(vIdx, 0)) = "" Then MsgBox LBConti.List(vIdx, 3) & " vuoto!" Nextvedrai che tutte le righe sono valorizzate con il carattere di marcatura.
Scusa, hai ragone! se mi muovo di un singolo click ho dei vuoti, ma è chiaramente un problema di visualizzazione in qunto i dati nella list sono corretti, infatti se aggiungi queste righe prima della fine della sub LBConti_Click()
ciao Scossa
scusa ma anche aggiungendo quel codice alla fine della LBConti_Click() continuo ad avere lo stesso e medesimo problema
se aziono GIOCO, scendo di qualche pagina, clicko un conto, risalgo alla pagina precedente, continuo a trovare dei conti senza la marcatura
riallego il file con la modifica da te suggerita.. magari ho sbagliato qualcosa..
Allegati:
You must be logged in to view attached files.Scusa, hai ragone! se mi muovo di un singolo click ho dei vuoti, ma è chiaramente un problema di visualizzazione in qunto i dati nella list sono corretti
.. e quando affermi che dovrebbe trattarsi chiaramente di un problema di visualizzazione - affermazione su cui concordo pienamente visto che il codice non viene più eseguito e quindi il problema è tutto nella gestione automatica del list box fatta da VB - lo dici perchè hai già avuto modo di riscontrare anomalie del genere?
cit ElleEsse "scusa ma anche aggiungendo quel codice alla fine della LBConti_Click() continuo ad avere lo stesso e medesimo problema"
quell'aggiunta non era una patch al codice ma serviva solo per dimostrare che i valori della listbox vengono correttamente aggiornati.
Quindi nel tuo codice dovresti correggere
' modifica proposta da scossa per ovviare al problema di refreshin
' modifica proposta da scossa per mostrare che la list viene correttamente aggiornatacit "indi il problema è tutto nella gestione automatica del list box fatta da VB - lo dici perchè hai già avuto modo di riscontrare anomalie del genere?"
no, non mai riscontrato questo problema, tempo permettendo vedrò di approfondire la cosa.
quell'aggiunta non era una patch al codice ma serviva solo per dimostrare che i valori della listbox vengono correttamente aggiornati.
ah.. ok.. io che i valori del listbox fossero correttamente aggiornati lo davo per scontato dal momento che AggiornaLBConti() fa esattamente la stessa cosa per tutti i conti in elenco
così come il fatto che possa trattarsi di un problema di refresh del video
non conosco però approfonditamente VB e ignoro se esista qualche istruzione per rinfrescare anche le porzioni di schermo non immediatamente visualizzate (se poi aggiungo che nacqui col cics
)Quindi nel tuo codice dovresti correggere
' modifica proposta da scossa per ovviare al problema di refreshin
' modifica proposta da scossa per mostrare che la list viene correttamente aggiornataah ah ah
appurato che non si tratta di una patch, la tolgo proprio completamente
Comunque dovresti risolvere con queste 3 righe
indLBConti = LBConti.TopIndexLBConti.TopIndex = LBConti.ListCount - 10LBConti.TopIndex = indLBContida aggiungere in fondo alla tua routine, che riporto completa:
Private Sub LBConti_Click() Dim indLBConti As Long If flPopUp Then Call PopUpEvento("LBConti_Click()") If hdNoDevFl Then Exit Sub hdNoDevFl = True indLBConti = LBConti.ListIndex hdCVCtoVceSel = "C" hdRiCtoVceSel = LBConti.List(indLBConti, 1) hdIdCtoVceSel = LBConti.List(indLBConti, 2) If hdRiCtoVceSel = 0 Then ' E' STATA SELEZIONATA UNA RIGA DI RAGGRUPPAMENTO LBConti.ListIndex = -1 Else ' E' STATO SELEZIONATA UNA RIGA CORRISPONDENTE AD UN CONTO: SI INCREMENTA IL SALDO DI 10 ' si verifica dapprima che alla riga i-esima ci sia effettivamente il conto indicato sul movimento If Sheets(shCto).Cells(hdRiCtoVceSel, 1) <> hdIdCtoVceSel Then Call OrroreCtoVce(shCto, hdRiCtoVceSel, hdIdCtoVceSel) End End If ' SI INCREMENTA NTA IL SALDO DI 10 Sheets(shCto).Cells(hdRiCtoVceSel, 15) = Sheets(shCto).Cells(hdRiCtoVceSel, 15) + 10 ' SI PROCEDE CON L'AGGIORNAMENTO DI LBConti AggiornaLBConti LBConti.ListIndex = LBConti.ListIndex End If hdNoDevFl = False indLBConti = LBConti.TopIndex LBConti.TopIndex = LBConti.ListCount - 10 LBConti.TopIndex = indLBConti End SubComunque dovresti risolvere con queste 3 righe
indLBConti = LBConti.TopIndexLBConti.TopIndex = LBConti.ListCount - 10LBConti.TopIndex = indLBContida aggiungere in fondo alla tua routine, che riporto completa:
avevo già provato qualcosa del genere - se non ricordo male impostavo temporanemante il TopIndex a (ListCount-1) e comunque il problema si presentava clickando su uno degli ultimi conti
però.. non funziona
se vai a modificare uno dei conti dell'ultima porzione - io per esempio ho clickato sullo 0342 - scrollando poi verso l'alto si ripresenta il solito problema

cit:
se vai a modificare uno dei conti dell'ultima porzione - io per esempio ho clickato sullo 0342 - scrollando poi verso l'alto si ripresenta il solito problema
vero, però ci vuole poco a sistemare: aggiungi un scroll up con
LBConti.TopIndex = 1:indLBConti = LBConti.TopIndexLBConti.TopIndex = LBConti.ListCount - 10LBConti.TopIndex = 1LBConti.TopIndex = indLBConti.. forse però alla fine ho trovato l'artifizio lavorando sul suggerimento di scossa
indLBConti = LBConti.TopIndexLBConti.TopIndex = 0LBConti.TopIndex = LBConti.ListCountLBConti.TopIndex = indLBConticosì parrebbe risolvere (ed avrebbe anche un minimo senso
)approfitterei ancora di Te per un'altra curiosità
se volessi deselezionare l'elemento appena clickato una volta fatto l'incremento e ricaricato il listbox.. cosa suggerisci?

se volessi deselezionare l'elemento appena clickato una volta fatto l'incremento e ricaricato il listbox.. cosa suggerisci?
per "deselezionarlo" puoi usare la proprietà .Selected o .Value, ma la riga resterà comunque "evidenziata".
per "deselezionarlo" puoi usare la proprietà .Selected o .Value, ma la riga resterà comunque "evidenziata".
effettivamente con "deselezionarlo" intendevo togliere l'evidenza a video
non sai se c'è qualche artifizio - senza svuotare e ricaricare exnovo il listbox ?
Non credo si possa nelle listbox a selezione singola, solo in quelle a selezione multipla.
Non credo si possa nelle listbox a selezione singola, solo in quelle a selezione multipla.
dovessi trovare il modo.. fammelo sapere
non avevo classificato come Risolto in quanto in ogni caso il problema del mancato refresh a video da parte di VB rimaneva...
purtroppo però anche il suggerimento implementato grazie a scossa talvolta non sortisce completamente l'effetto sperato: accade che proprio l'elemento click-ato - che quindi poi rimane evidenziato - non venga rinfrescato
bah.. ribadisco che non si tratta di problema vitale
però è comunque fastidioso -
AutoreArticoli
