2017-03-08 6 views
0

3 개의 텍스트 상자 (tbLastNameFilter, tbFirstNameFilter 및 tbCompanyFilter)를 사용하는 필터를 만들려고합니다. 하나와 작업 할 수 있도록 성공적으로 관리했습니다. 그러나 어떻게하면 좋을지 모르겠습니다. 다른 두 사람과 함께 한마음으로 작동하도록 것에 대해 이동합니다. 나는 방법 중 몇 가지를 시도했다. 내가VBA 필터 Contious Form - Multple Textboxes

strFilter = "LastName Like '*" & Replace(Me.tbLastNameFilter, "'", "''") & "*'" & _ 
"FirstName Like '*" & Replace(Me.tbFirstNameFilter, "'", "''") & "*'" & _ 
"Company Like '*" & Replace(Me.tbCompanyFilter, "'", "''") & "*'" 

에 strFilter을 변경 시도

Private Sub bttnSearch_Click() 
Dim strFilter As String 

If IsNull(Me.tbLastNameFilter & Me.tbFirstNameFilter & Me.tbCompanyFilter) Then 
MsgBox ("No Search Information Entered") 
Me.FilterOn = False 
Else 
strFilter = "LastName Like '*" & Replace(Me.tbLastNameFilter, "'", "''") & "*'" 
Me.Filter = strFilter 
Me.FilterOn = True 
End If 

나는 빈 상자 중 하나를두면 나는 널을 무효로 사용하고 각 문자에 문자를 넣으면 t 구문 오류 (누락 된 연산자).

상자 하나 또는 모두에 아무 것도 입력하고 검색을 클릭하고 일치하는 기준을 볼 수 있기를 바랍니다.

+0

단어가 필요하고 또한 내가 믿어야합니다. –

+0

@Nathan_Sav 대신 & 및 & AND &? –

답변

1

쿼리에 AND이 누락되었습니다. 그러나 텍스트 상자가 필터에 추가되기 전에 비어 있는지 확인해야합니다. 나는 두 개의 잠수함으로 이것을 할 것을 제안한다.

첫 번째 컨트롤 addToFilter은 컨트롤을 조작하고 비어 있지 않은 경우 필터에 추가하고 필요한 경우에만 AND을 추가합니다. 이 접근법은 일반적인 문자열 조작을 인수 분해하여 코드를 단순화합니다.

Sub addToFilter(ByRef sFilter As String, ctrl As Object, fieldName As String) 
    If IsNull(ctrl.Value) Then Exit Sub 
    If Len(Trim(ctrl.Value)) = 0 Then Exit Sub 
    If Len(sFilter) <> 0 Then sFilter = sFilter & " AND " 
    sFilter = sFilter & fieldName & " Like '*" & Replace(Trim(ctrl.Value), "'", "''") & "*'" 
End Sub 

Private Sub bttnSearch_Click() 
    Dim strFilter As String 
    addToFilter strFilter, Me.tbLastNameFilter, "LastName" 
    addToFilter strFilter, Me.tbFirstNameFilter, "FirstName" 
    addToFilter strFilter, Me.tbCompanyFilter, "Company" 

    If Len(strFilter) = 0 Then 
     MsgBox ("No Search Information Entered") 
     Me.FilterOn = False 
    Else 
     Me.filter = strFilter 
     Me.FilterOn = True 
    End If 
End Sub 
+0

그러나이 상자는 비어있는 채로두면 여전히 유효하지 않은 Null이 사용됩니다. 상자가 비어 있거나없는 경우에만 특정 addToFilter를 호출 할 수있는 방법이 있습니까? –

+0

@MatthewKelsay이 편집을 시도하십시오. 이제는 객체 texbox를 루틴에 전달하고 null인지 확인합니다 ... 문제는 액세스 vba에서 빈 texbox는 빈 문자열이지만 null variant를 생성한다는 것입니다. 이제 루틴은 그걸 제대로 처리합니다 ... –

+0

그 아름답게 작동합니다! 고맙습니다. 텍스트 상자에 대한 정보도 알고 있지 않았습니다. –