Baseado no artigo Aprenda sobre filtragens do nosso amigo Avelino e no seu programa Maestro, eu queria saber como eu faço para localizar e filtrar os dados em três campos ao mesmo tempo.
Ou seja, tenho os campos NOrc (número do orçamento), Cliente e Obra. Eu queria ter apenas um campo de busca, onde eu pudesse digitar qualquer coisa (número ou texto) e ele filtrasse nos 3 campos ao mesmo tempo. Entenderam? No Maestro eu tenho um filtro para cada campo, mas eu quero um filtro só para 3 campos.
Segue o código no Maestro:
Ou seja, tenho os campos NOrc (número do orçamento), Cliente e Obra. Eu queria ter apenas um campo de busca, onde eu pudesse digitar qualquer coisa (número ou texto) e ele filtrasse nos 3 campos ao mesmo tempo. Entenderam? No Maestro eu tenho um filtro para cada campo, mas eu quero um filtro só para 3 campos.
Segue o código no Maestro:
- Código:
Private 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
Dim strCliente As String
On Error Resume Next
x = Me(NomeCampoFoco).Text: p = 0
For p = 0 To 2
cp(p) = IIf(InStr(NomeCampoFoco, "tx" & p + 1) > 0, x, Me("tx" & p + 1))
Next
If intAno = 10 Then
f(0) = "Orc Like '" & cp(0) & "*'"
f(1) = IIf(cp(1) = Chr(32), "NomeDoCliente is null", "NomeDoCliente Like '*" & cp(1) & "*'")
f(2) = IIf(cp(2) = Chr(32), "NomeDaObra is null", "NomeDaObra Like '*" & cp(2) & "*'")
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
On Error Resume Next
If booFiltro Then
Me(NomeCampoFoco).SelStart = Len(x & "")
Else
Me(NomeCampoFoco).SetFocus
End If
End Function