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

관련 문제