2017-03-08 5 views
0

3つのテキストボックス(tbLastNameFilter、tbFirstNameFilter、およびtbCompanyFilter)を使用するフィルタを作成しようとしていますが、これをうまく処理できませんでした。それは他の二つと一体的に動作するようになって行く。私はいくつかの方法を試してみました。VBAフィルタContributeフォーム - マルチテキストボックス

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 = "LastName Like '*" & Replace(Me.tbLastNameFilter, "'", "''") & "*'" & _ 
"FirstName Like '*" & Replace(Me.tbFirstNameFilter, "'", "''") & "*'" & _ 
"Company Like '*" & Replace(Me.tbCompanyFilter, "'", "''") & "*'" 

にstrFilterを変更しようとしています私はヌルの無効な使用を取得し、私は私がそれぞれに文字を入れた場合t構文エラー(演算子がありません)。

私はボックスの1つまたはすべてに何かを入力し、検索をクリックして一致する条件を参照したいと考えています。

+0

あなたは単語が必要であり、また私は信じています。 –

+0

@ Nathan_Sav ANDの代わりに&&&&&? –

答えて

1

クエリにANDがありません。しかし、フィルタにテキストボックスを追加する前に、テキストボックスが空であるかどうかを確認する必要もあります。私は2つのサブとこれを行うことをお勧めします。

最初のコントロール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では、空の文字列が空の文字列を生成しないことです。今、ルーチンはそれを正しく扱います... –

+0

それは美しく動作します!それと、テキストボックスについての情報もありがとう、それを知らなかった。 –

関連する問題