Strano comportamento in combobox

Ho una combobox con dei dati caricati nel TEXT e nel ROWTAG,
e quando intercetto l’evento TEXTCHANGED con il codice che vedete sotto,
mi si presenta un errore di runtime che non riesco a identificare
alla riga:

dato = Split(tf2.RowTag(tf2.listindex),";")

Se invece attivo le due righe MSGBOX che mi fanno prima vedere il
contenuto, tutto funziona come dovrebbe e la matrice DATO() viene
caricata assegnando i contenuti alle textfields.
Quale sar il motivo dell’errore?

Dim dato(-1) As String if len(me.text)<4 then exit 'considera voci solo oltre 3 caratteri //msgbox tf2.Text //msgbox tf2.RowTag(tf2.listindex) dato = Split(tf2.RowTag(tf2.listindex),";") tf3.Text=dato(0) 'prezzo di riferimento tf4.Text=dato(1) 'IVA" tf9.Text=dato(2) 'voce End If

Aggiornamento!
Mi sono scordato di dire che la combo Autocomplete=TRUE, pertanto al primo carattere digitato si posiziona sulla prima ricorrenza. Inoltre se lo stesso codice di cui sopra lo eseguo nell’evento CHANGE, tutto funziona regolarmente.
Come dicevo, la cosa strana o perlomeno non trasparente.

un po’ pi complicato…
Su win
Changed viene richiamato solo se selezioni la voce dal menu
TextChanged viene richiamato man mano che scrivi, ma ListIndex il valore precedente (quindi potenzialmente anche -1)
Se -1 non stata selezionata una voce dal menu precedentemente.
se selezioni una voce da quelle che corrispondono (il menu che appare man mano che scrivi) ListIndex ha il valore della voce
Per cui dovresti verificare prima che il testo corrisponda al valore previsto per il listIndex (sempre controllando che non sia -1)
Se selezioni una voce dal menu (come se fosse un popup) allora hai textchanged con il listindex giusto e changed (in questa sequenza)
Quando esci dal controllo (LostFocus) TextChanged viene richiamato ancora se c’ una corrispondenza, no se non c’
Su Mac
Textchanged viene chiamato man mano che scrivi, e listIndex non corrisponde a quello che scrivi (generalmente)
Changed viene chiamato quando completi l’editing (ma il list index potrebbe non corrispondere)
Se selezioni dal menu tutto ok (listindex, changed etc.)

Per farla breve se dipendi dal valore di rowtag non affidabilissimo come controllo
Ma c’ un motivo:
il controllo sbagliato.

Se dipendi dal rowtag probabilmente hai una lista di valori predefinita e chiusa per cui il popup il controllo giusto (e su win puoi usare la tastiera per identificare la voce)

Se la lista non chiusa (ovvero puoi avere altri valori oltre quelli previsti) utilizza il lostfocus per capire se la voce appartiene alla lista e quindi il suo indice per ottenerne il valore o il textchanged verificando se l’index corrisponde al testo e altrimenti cerca il valore per ottenere l’indice giusto (ma non cambiare il listindex altrimenti non ne esci)

Grazie infinite Antonio! In effetti mi sono scontrato con qualcosa di nebuloso, ma la tua spiegazione mi permette ora di risolvere il problema. Obbligato!