2017-03-08 72 views
0

我想創建一個使用3個文本框(tbLastNameFilter,tbFirstNameFilter和tbCompanyFilter的過濾器,我已經成功地設法使它與一個工作,但是,我不知道我會怎麼做去得到它異口同聲地工作與其他兩個。我已經嘗試了幾種方法。VBA過濾器連續形式 - 多重文本框

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 

我曾試圖改變strFilter的到

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

如果我離開這個框爲空的任何一個我得到一個無效的使用null,如果我把信放在每個我t語法錯誤(缺少運算符)。

我希望能夠在一個或所有框中輸入任何內容,單擊搜索並查看匹配的條件。

+0

你需要這個詞AND我也相信。 –

+0

@Nathan_Sav AND而不是&或&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傳遞給例程,並檢查它是否爲空...問題是,在訪問vba中,一個空texbox不會產生空字符串,而是一個空變量。現在,例程正確地處理了那個...... –

+0

,它工作的非常好!非常感謝你和關於這個文本框的信息,並沒有意識到這一點。 –