Boa tarde a todos.
Estou com um problema em um filtro de múltiplos campos que baixei na internet. Não tenho certeza, porque aho que o código estava funcionando bem, mas devo ter feito alguma alteração indevida e meu conhecimento não permite descobrir onde.
O filtro continua funcionando bem exceto se o critério a filtrar for um dado inexistente na base de dados.
Aí dá um erro na linha onde tem o comando Me(NomeCampoFoco).SelStart = Len(x & "") (destaquei abaixo.
A Função é executada no evento ao alterar dos quatro campos 'CmpNomePotreiro, CmpNumBrinco, CmpDescriçãoPelagem e CmpDescrição.
Public Function fncFiltrar(NomeCampoFoco As String)
Dim x As String, filtro As String, strSplit As String
Dim f(4) As String, cp(4) As Variant
Dim k As Variant, p As Byte
Dim booFiltro As Boolean, booPos As Boolean
x = Me(NomeCampoFoco).Text: p = 0
For p = 0 To 3
cp(p) = IIf(InStr(NomeCampoFoco, "tx" & p + 1) > 0, x, Me("tx" & p + 1))
Next
f(0) = IIf(cp(0) = Chr(32), "CmpNomePotreiro is null", "CmpNomePotreiro Like '*" & cp(0) & "*'")
f(1) = IIf(cp(1) = Chr(32), "CmpNumbrinco is null", "CmpNumbrinco Like '*" & cp(1) & "*'")
f(2) = IIf(cp(2) = Chr(32), "CmpDescriçãoPelagem is null", "CmpDescriçãoPelagem Like '*" & cp(2) & "*'")
f(3) = IIf(cp(3) = Chr(32), "CmpDescrição is null", "CmpDescrição Like '*" & cp(3) & "*'")
strSplit = Len(cp(0) & "") & "|" & Len(cp(1) & "") & "|" & Len(cp(2) & "") & "|" & Len(cp(3) & "")
k = Split(strSplit, "|")
filtro = "": p = 0
For p = 0 To UBound(k)
If Val(k(p)) > 0 Then
If booPos = False Then
filtro = f(p): booPos = True
Else
filtro = filtro & " AND " & f(p)
End If
booFiltro = True
End If
Next p
Me.Filter = filtro
Me.FilterOn = booFiltro
Me(NomeCampoFoco) = x
If booFiltro Then
'----------------aqui dá o erro
Me(NomeCampoFoco).SelStart = Len(x & "")
'------------------
Else
Me(NomeCampoFoco).SetFocus
End If
End Function
Agradeço pela ajuda.
Estou com um problema em um filtro de múltiplos campos que baixei na internet. Não tenho certeza, porque aho que o código estava funcionando bem, mas devo ter feito alguma alteração indevida e meu conhecimento não permite descobrir onde.
O filtro continua funcionando bem exceto se o critério a filtrar for um dado inexistente na base de dados.
Aí dá um erro na linha onde tem o comando Me(NomeCampoFoco).SelStart = Len(x & "") (destaquei abaixo.
A Função é executada no evento ao alterar dos quatro campos 'CmpNomePotreiro, CmpNumBrinco, CmpDescriçãoPelagem e CmpDescrição.
Public Function fncFiltrar(NomeCampoFoco As String)
Dim x As String, filtro As String, strSplit As String
Dim f(4) As String, cp(4) As Variant
Dim k As Variant, p As Byte
Dim booFiltro As Boolean, booPos As Boolean
x = Me(NomeCampoFoco).Text: p = 0
For p = 0 To 3
cp(p) = IIf(InStr(NomeCampoFoco, "tx" & p + 1) > 0, x, Me("tx" & p + 1))
Next
f(0) = IIf(cp(0) = Chr(32), "CmpNomePotreiro is null", "CmpNomePotreiro Like '*" & cp(0) & "*'")
f(1) = IIf(cp(1) = Chr(32), "CmpNumbrinco is null", "CmpNumbrinco Like '*" & cp(1) & "*'")
f(2) = IIf(cp(2) = Chr(32), "CmpDescriçãoPelagem is null", "CmpDescriçãoPelagem Like '*" & cp(2) & "*'")
f(3) = IIf(cp(3) = Chr(32), "CmpDescrição is null", "CmpDescrição Like '*" & cp(3) & "*'")
strSplit = Len(cp(0) & "") & "|" & Len(cp(1) & "") & "|" & Len(cp(2) & "") & "|" & Len(cp(3) & "")
k = Split(strSplit, "|")
filtro = "": p = 0
For p = 0 To UBound(k)
If Val(k(p)) > 0 Then
If booPos = False Then
filtro = f(p): booPos = True
Else
filtro = filtro & " AND " & f(p)
End If
booFiltro = True
End If
Next p
Me.Filter = filtro
Me.FilterOn = booFiltro
Me(NomeCampoFoco) = x
If booFiltro Then
'----------------aqui dá o erro
Me(NomeCampoFoco).SelStart = Len(x & "")
'------------------
Else
Me(NomeCampoFoco).SetFocus
End If
End Function
Agradeço pela ajuda.