La routine inserita nell'evento change agisce sul filtro che viene applicato DOPO la Query che compone il recordset dei dati iniziali visualizzati nella griglia.
Il codice che vi riporto funziona se viene digitato il singolo carattere da tastiera ma non se incollo. Esso permette il filtraggio durante la digitazione, intercetta il change della casella di ricerca TxtFind, memorizza il valore e la posizione del cursore per poterlo riposizionare dopo il filtraggio anche nel caso il risultato sia zero record, ma in quella situazione si ferma prima di visualizzare la griglia vuota permettendo di correggere senza dover "mangiare" a ritroso i caratteri.
Pur arrivando alla riga "If TxtFind.Value <> "" Then" con un valore, il FilterOn non applicava perché nel caso del paste intercetta il .value come nullo, pertanto il mio errore era semplicemente che puntavo al .value invece che al .text
Credo di aver risolto, pensavo di raggirare il problema intercettando l'evento paste per poter impostare la procedura del barcode (che in realtà è pure un paste) aggiungendogli però l'invio che nella sparata è automatico, grazie comunque per le indicazioni che mi serviranno per altro, intanto magari a a chi legge può servire come spunto il codice.
Private Sub TxtFind_Change() 'Change:Manual/BarCode
'Cerca e riposiziona testo e cursore
If SwcBarcode = False Then
'Se bottone impostato per input manuale
On Error Resume Next
Dim MEMFindText As String
Dim MEMCursorPos As Integer
TxtFind.SetFocus
MEMFindText = Replace(TxtFind.Text, "'", "-")
MEMCursorPos = Len(MEMFindText)
'Applico il filtro sui campi correlati alla casella di ricerca
If TxtFind.Value <> "" Then 'ERRORE deve essere .text
Me.Filter = "Rsr1CodInt LIKE '*" & TxtFind.Text & "*' OR Rsr1CodProd LIKE '*" & TxtFind.Text & "*' OR Rsr1Descr LIKE '*" & TxtFind.Text & "*'"
Else
Me.Filter = ""
End If
Me.FilterOn = True
'Azioni in base ai record rimanenti nel filtraggio
If Me.Recordset.RecordCount > 0 Then
TxtFind.SetFocus
TxtFind.Value = MEMFindText
TxtFind.SelStart = MEMCursorPos + 1
Else
MsgBox "Non ci sono dati corrispondenti al testo digitato!", vbInformation, "No match"
TxtFind.Value = Left(MEMFindText, Len(MEMFindText) - 1)
TxtFind.SetFocus
TxtFind.SelStart = MEMCursorPos - 1
End If
End If
End Sub
(La variabile pubblica SwcBarcode viene impostata da una routine sul relativo bottone)