Non sono un programmatore VBA quindi mi scuso in anticipo se alcuni dei miei termini in questa domanda non sono corretti. Un mio collega ha voluto cancellare la selezione da una casella di riepilogo non appena è stata selezionata. Dopo alcune ricerche su google abbiamo trovato un modo per farlo tramite l'evento Change. Inizialmente abbiamo provato:VBA (Excel) ActiveX ListBox Change Event comportamento ricorsivo evento
Private Sub ListBox1_Change()
For i = 0 To ListBox1.ListCount - 1
ListBox1.Selected(i) = False
Next i
End Sub
Tuttavia, sembrava che l'impostazione della proprietà Selected False innesca una Change evento sulla casella di riepilogo e questa diventa effettivamente un ciclo infinito e provoca Excel (2007) il crash. Dato che sapevamo che c'erano anche due voci che abbiamo provato:
Private Sub ListBox1_Change()
ListBox1.Selected(0) = False
ListBox1.Selected(1) = False
End Sub
E funziona! Anche se ci aspetteremmo lo stesso comportamento - per l'impostazione della proprietà selezionata per far sì che l'evento Modifica si inneschi nuovamente e ottenga un ciclo infinito.
Tuttavia sembra che una volta per es. ListBox1.Selected (0) = false l'evento Change viene ri-attivato ma in quel iterazione non retriggera su questa linea - credo perché si sa che questo selezionati proprietà è già stata impostata a False per questo articolo, quindi non sta cambiando nulla.
Ma se questo è il caso allora avremmo aspettiamo anche che il comportamento nella prima soluzione .. così sembra che ci sia qualche differenza nel dire ListBox1.Selected (i) = False contro specificando l'oggetto reale indicizzare direttamente (piuttosto che tramite la variabile i).
Qualcuno conosce il motivo di questo comportamento? Spero che la domanda abbia senso, ho cercato di spiegarlo nel modo migliore possibile.
Grazie Amit
Per interrompere gli eventi di reinnesco, leggere [this] (http://www.jkp-ads.com/Articles/NoEvents00.asp). –
Grazie Cool Blue - in effetti abbiamo risolto il problema del loop usando qualcosa di simile a quanto discusso nel link che hai postato .. ma la mia domanda sopra (probabilmente non molto chiara!) È cercare di capire perché il comportamento differisce nei due casi (il primo dà un ciclo infinito il secondo no) – user555265
Ci sono letteralmente solo 2 elementi disponibili da selezionare nella lista? O vuoi dire che sono stati selezionati solo 2 oggetti? –