ลองดูตัวอย่างนี้ครับ ทำงานแยกกันได้ ทำงานด้วยกันได้ ไม่รู้แบบที่ต้องการหรือเปล่าอยากได้ส่วนไหนเพิ่มก็บอกได้ครับ
แบบที่ 1
checkbox ถ้าติ๊กถูก คือการเลือกเฉพาะที่ถูก และถ้าติ๊กออก คือแสดงข้อมูลทั้งหมด
Sub Search()
Dim StrWhere1, StrWhere2, GroupFilter As String
If Not IsNull(Me.combonamesearch) Then
StrWhere1 = "(((Qsaleh_cusprof.cus_name)=[forms]![frmhistoryh]![combonamesearch])"
End If
If Me.acculatesearch = True Then
StrWhere2 = "(((Qsaleh_cusprof.acculate)=[forms]![frmhistoryh]![acculatesearch])"
End If
GroupFilter = IIf(StrWhere1 = "", "", StrWhere1) & IIf(StrWhere2 = "", "", StrWhere2)
GroupFilter = Replace(GroupFilter, ")(((", ") and ((")
If IsNull(Me.combonamesearch) And Me.acculatesearch = False Then
Forms!frmhistoryh!frmhistorylist.Form.RecordSource = "Select * from Qsaleh_cusprof;"
ElseIf IsNull(Me.combonamesearch) And Me.acculatesearch = True Then
Forms!frmhistoryh!frmhistorylist.Form.RecordSource = "Select * from Qsaleh_cusprof where " & GroupFilter & ");"
ElseIf Not IsNull(Me.combonamesearch) And Me.acculatesearch = True Then
Forms!frmhistoryh!frmhistorylist.Form.RecordSource = "Select * from Qsaleh_cusprof where " & GroupFilter & ");"
ElseIf Not IsNull(Me.combonamesearch) And Me.acculatesearch = False Then
Forms!frmhistoryh!frmhistorylist.Form.RecordSource = "Select * from Qsaleh_cusprof where " & GroupFilter & ");"
End If
If Forms!frmhistoryh!frmhistorylist.Form.Recordset.RecordCount = 0 Then
MsgBox "ไม่พบข้อมูลที่ค้นหา", vbInformation, "สถานะการค้นหา"
End If
End Sub
Private Sub acculatesearch_AfterUpdate()
Call Search
End Sub
Private Sub combonamesearch_AfterUpdate()
Call Search
End Sub
แบบที่ 2
คือเงื่อนไขจะมาจากทั้ง 2 Control เช่นถ้าไม่ติ๊กถูก ข้อมูลที่ติ๊กถูกจะหายไป แบบนี้คือ Fix เงื่อนไขที่ตัว checkbox และ combobox ไว้ตลอด ตัวอย่างโค้ด
Sub Search()
Dim StrWhere1, StrWhere2, GroupFilter As String
If Not IsNull(Me.combonamesearch) Then
StrWhere1 = "(((Qsaleh_cusprof.cus_name)=[forms]![frmhistoryh]![combonamesearch])"
End If
StrWhere2 = "(((Qsaleh_cusprof.acculate)=[forms]![frmhistoryh]![acculatesearch])"
GroupFilter = IIf(StrWhere1 = "", "", StrWhere1) & IIf(StrWhere2 = "", "", StrWhere2)
GroupFilter = Replace(GroupFilter, ")(((", ") and ((")
If IsNull(Me.combonamesearch) And Me.acculatesearch = False Then
Forms!frmhistoryh!frmhistorylist.Form.RecordSource = "Select * from Qsaleh_cusprof;"
Else
Forms!frmhistoryh!frmhistorylist.Form.RecordSource = "Select * from Qsaleh_cusprof where " & GroupFilter & ");"
End If
If Forms!frmhistoryh!frmhistorylist.Form.Recordset.RecordCount = 0 Then
MsgBox "ไม่พบข้อมูล", vbInformation, "การค้นหา"
End If
End Sub
Private Sub acculatesearch_AfterUpdate()
Call Search
End Sub
Private Sub combonamesearch_AfterUpdate()
Call Search
End Sub
ลองดูครับ ผิดตรงไหนแจ้งได้นะคับ