2011-08-10 36 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

如果你想過濾多個條件,那麼你需要構造Filter字符串值來反映這一點。例如:

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'如果Me.Check194 = True且Me.Check199 = True且Me.Check205 = True然後 Me.Filter =「cedit <= Date() - 90和copt ='No'且exsite爲null」 Me。 FilterOn = True Else 如果Me.Check194 = True並且Me.Check199 = True並且Me.Check205 = False然後 Me.Filter =「cedit <= Date() - 90和copt ='No'」 Me.FilterOn = True Else'code'感謝您的建議! – Adamcantvba