2011-08-10 17 views
0

私は会社情報を表示するフォームと、連絡先情報を表示する複数の連絡先サブフォーム(連絡先の職責(タブ))を分けて表示します。複数のチェックボックスを含むフォームのフィルタリング

私は仕事の責任を表示する会社のフォームにコンボボックスを持っています。責任を選択すると、選択した責任の連絡先の会社のレコードのみが表示されます。これはコードです。

Sub SetFilter() 

Dim ASQL As String 

If IsNull(Me.cboshowcat) Then 
' If the combo and all check boxes are Null, use the whole table as the RecordSource. 
Me.RecordSource = "SELECT company.* FROM company" 

Else 

ASQL = "SELECT company.* FROM company INNER JOIN Contacts ON company.company_id = Contacts.company_id WHERE Contacts.responsibility= '" & cboshowcat & "'" 
Form_Startup.RecordSource = ASQL 

End If 

End Sub 

会社テーブルは、唯一のメインフォーム上の重複企業を見せず、cboshowcatコンボボックスで指定されたタイプの接触を持つレコードを表示します。

次に、連絡先サブフォームのフィールドに関連するメインフォームのチェックボックスに基づいて、さらにフィルタを適用したいとします。これらは、上記のレコードソースコードと共にボタンによってアクティブ化されます。

Private Sub Command201_Click() 

If Nz(Me.cboshowcat) = "" And Me.Check194 = True Or Nz(Me.cboshowcat) = "" And Me.Check199 = True Or Nz(Me.cboshowcat) = "" And Me.Check205 = True Then 
    MsgBox "Please Select a Job Responsibility" 
    Cancel = True 
Else 

SetFilter 
If Me.Check194 = True Then 
Me.Filter = "cedit <=Date()-90" 
Me.FilterOn = True 
Else 
Me.Filter = "" 
Me.FilterOn = False 
If Me.Check199 = True Then 
Me.Filter = "((copt)='No')" 
Me.FilterOn = True 
Else 
Me.Filter = "" 
Me.FilterOn = False 
If Me.Check205 = True Then 
Me.Filter = "exsite is null" 
Me.FilterOn = True 
Else 
Me.Filter = "" 
Me.FilterOn = False 
End If 
End If 
End If 
End If 

End Sub 
ボタンはカテゴリ別に選択した連絡先をフィルタリングする瞬間

が、チェックボックスの1以上が確認されている場合にのみ、フィルタのいずれかを使用します。どの目盛りにチェックが入っているかに応じて、複数のフィルターを組み合わせて使用​​するにはどうすればよいですか?

答えて

0

複数の基準でフィルタリングする場合は、それを反映するフィルタ文字列値を作成する必要があります。例:

Me.Filter = "cedit <=Date()-90 AND exsite is null" 

空の文字列で開始し、必要に応じて文字列を構築し、チェックボックスを経る:フィルタ文字列があると、そのプロセスの最後であれば、それを適用します。

はここで効率的にこれを行う方法についての提案です:

Dim sFilter as String 
sFilter="" 

'... 
If Me.Check194 Then BuildFilter sFilter, "cedit <=Date()-90" 
If Me.Check205 Then BuildFilter sFilter, "exsite is null" 
If Me.Check199 Then BuildFilter sFilter, "((copt)='No')" 
'... more checkboxes... 


Me.FilterOn = Len(sFilter)>0 
Me.Filter = sFilter 
'.... 


Sub BuildFilter(byRef sFilt as string, sAdd as string) 
    If len(sFilt)>0 Then sFilt = sFilt & " AND " 
    sFilt = sFilt & sAdd 
End sub 
+0

おかげで答えを、私は周りにプレイしていたと私は一度だけ、フィルタを適用することができることを実現しています。例えば; "code" If Me.Check194 = TrueとMe.Check199 = TrueとMe.Check205 = True then Me.Filter = "cedit <= Date() - 90、copt = 'いいえ'、exsiteがNULL" FilterOn = True Else Me.Check194 = TrueおよびMe.Check199 = TrueおよびMe.Check205 = Falseの場合 Me.Filter = "cedit <= Date() - 90およびcopt = 'いいえ'" Me.FilterOn = True Else'code'アドバイスありがとう! – Adamcantvba

関連する問題