【问题标题】:How to make multi-selection drop down and search a subform in MS Access 2016如何在 MS Access 2016 中进行多选下拉和搜索子表单
【发布时间】:2020-01-10 20:14:21
【问题描述】:

所以我有一个多选下拉菜单。我想在子表单中过滤我的搜索条件。在我的父表单上,我有一个名为 [cboTicketStatus] 的组合框。我的子表单是 [SubHelpdeskTickets],源对象是 [sfrm_Helpdesk_Ticket_Filter_Search]。 在我的名为 [cboTicketStatus] 的组合框中,我有几个项目可供选择:打开、关闭、正在进行的工作、保留、需要批准、已批准。我希望能够选择多个项目,然后通过 [cboTicketStatus] 中选择的项目过滤子表单。然后,如果没有选择任何项目,我希望它显示表 [tbl_Helpdesk_Ticket_Tracker] 中的所有项目。我不确定如何编写代码来更改记录源以执行此操作。

Function SearchCriteria()
Dim strDepartment As String
Dim strTicketNumber As String
Dim strTicketStatus As String
Dim strStartDate As String
Dim strEndDate As String
Dim task As String
Dim strCriteria As String

If IsNull(Me.cboDepartments) Then
    strDepartment = "[Comptroller Department] like '*'"
Else
    strDepartment = "[Comptroller Department] = '" & Me.cboDepartments.Column(1) & "'"
End If
If IsNull(Me.cboTicketNumber) Then
    strTicketNumber = "[Helpdesk Ticket Number] like '*'"
Else
    strTicketNumber = "[Helpdesk Ticket Number] = '" & Me.cboTicketNumber.Column(1) & "'"
End If
If IsNull(Me.cboTicketStatus) Then
    strTicketStatus = "[Status of Ticket] like '*'"
Else
    strTicketStatus = "[Status of Ticket] = '" & Me.cboTicketStatus.Column(1) & "'"
End If
If IsNull(Me.txtStartDate) Then
    strStartDate = "[Date Opened] like '*'"
Else
    strStartDate = "([Date Opened] >= #" & Me.txtStartDate & "#)"
End If
If IsNull(Me.txtEndDate) Then
    strEndDate = "[Date Opened] like '*'"
Else
    strEndDate = "([Date Opened] <= #" & Me.txtEndDate & "#)"
End If
strCriteria = strDepartment & "And" & strTicketNumber & "And" & strStartDate & "And" & strEndDate & "And" & strTicketStatus
    task = "Select * from tbl_Helpdesk_Ticket_Tracker where " & strCriteria
    Me.SubHelpdeskTickets.Form.RecordSource = task
    Me.SubHelpdeskTickets.Form.Requery
End Function

我现在使用的代码仅适用于单个选择。

为您编辑的内容更新了代码。 我得到另一个错误。 我把它放在一起正确吗?

    strTicketStatus = "[TicketStatus] like '*'"
Else
    strTicketStatus = "[TicketStatus] = "
    Dim i As Long
    'Dim selectedStatus As String
    Dim firstCondition As Boolean: firstCondition = True
    For i = 0 To Me.cboTicketStatus.ListCount - 1
        If Me.cboTicketStatus.Selected(i) = True Then
             selectedStatus = Me.cboTicketStatus.ItemData(i)
             strTicketStatus = strTicketStatus & IIf(Not firstCondition, " OR ", "") & _
                "'" & selectedStatus & "'"
        firstCondition = False
    End If
Next i
End If```

[![First View of All tickets][1]][1]


[![after selecting an option in the dropdown][2]][2]


[![view after event is fired][3]][3]


  [1]: https://i.stack.imgur.com/1vXqT.jpg
  [2]: https://i.stack.imgur.com/i079f.jpg
  [3]: https://i.stack.imgur.com/egUj8.jpg

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    类似这样的:

    strTicketStatus = "[Status of Ticket] IN ("
    Dim i as Long
    Dim firstCondition as boolean: firstCondition = true
    For i = 0 to Me.cboTicketStatus.ListCount - 1
        if Me.cboTicketStatus.Selected(i) = True then
            selectedStatus = Me.cboTicketStatus.ItemData(i) 
            strTicketStatus = strTicketStatus  & iif(not firstCondition, ", ", "") & "'" & selectdStatus & "'"
            firstCondition = false
        End If
    Next i
    strTicketStatus = strTicketStatus & ")"
    

    【讨论】:

    • 所以当我把它放在我的代码中时,我得到一个错误变量“i”未定义?对此有任何想法。我的编码是有限的,任何帮助都非常感谢..
    • 如果我这样做: Dim i As String ;我收到类型不匹配错误。
    • 所以我将 Dim i As String 更改为 Dim i As Long ,现在我没有收到任何错误。但是,当我测试选择下拉并在子表单请求时选择多个项目时,它是空白的。所以我只是尝试从下拉列表中选择一项,当子表单要求它为空白时。我删除了选择,并在我的子表单中看到了我的查询中的所有内容。
    • 进行选择时出现的另一个错误是:运行时错误 '3075' 查询表达式中的语法错误(缺少运算符) '[DepartmentForm] like ''And[ticketNumber] like ''And[DateEntered] like''And[DateEntered] like''And[TicketeStatus]=OR'?".
    • 是的,代码中存在错误。我已经编辑过了。祝你好运。
    猜你喜欢
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多