【问题标题】:Microsoft Access Form with multiselect listbox带有多选列表框的 Microsoft Access 表单
【发布时间】:2020-10-26 19:44:34
【问题描述】:

我在 Microsoft Access 中有一个表单,其中有一个包含县的组合框。根据县的选择,有一个列表框将显示该县的金额。当我从列表框中选择一个金额并单击查找按钮时,它将生成两个子窗体,一个子窗体显示该金额中存在的行项目的最低价格,并带有查询:

SELECT Data.Item, Min(Data.[Unit Price]) AS Minimum
FROM Data
WHERE (((Data.[Bid Amount])=Forms![Report]![List2]))
GROUP BY Data.Item;

另一个子表单显示该数量的订单项的平均价格,并带有查询:

SELECT Data.Item, Avg(Data.[Unit Price]) AS Average
FROM Data
WHERE (((Data.[Bid Amount])=[Forms]![Report]![List2]))
GROUP BY Data.Item;

现在从列表框中选择单个数量可以正常工作,但是如果我需要从列表框中多选数量,那么我需要在“查找”按钮中编写什么代码?我尝试使用下面的代码,但它不起作用。

Dim varItem As Variant
Dim strFind As String
Dim Task As String

For Each varItem In Me!List2.itemselected
    strFind = srtFind & "," & Me!List2.ItemData(varItem)
Next varItem
If Len(strFind) = 0 Then
    Task = "Select Amount(s)"
Else
    strFind = Right(strFind, Len(strFind) - 1)
    Task = "select * from Data where ([Bid Amount] in (" & strFind & "))"
End If
DoCmd.ApplyFilter Task

另外,如果有帮助,我会附上我的表单截图。 Access Form

【问题讨论】:

    标签: ms-access-2010 listboxitem


    【解决方案1】:

    过滤器只是 where 子句,我猜它是您要过滤的子表单,所以试试这样的:

    Dim varItem     As Variant
    Dim strFind     As String
    Dim Filter      As String
    Dim FilterOn    As Boolean
    
    For Each varItem In Me!List2.ItemSelected
        strFind = srtFind & "," & Me!List2.ItemData(varItem)
    Next varItem
    If Len(strFind) > 0 Then
        strFind = Right(strFind, Len(strFind) - 1)
        Filter = "[Bid Amount] In (" & strFind & ")"
        FilterOn = True
    End If
    
    Me!NameOfSubformControl1.Form.Filter = Filter
    Me!NameOfSubformControl2.Form.Filter = Filter
    Me!NameOfSubformControl1.Form.FilterOn = FilterOn
    Me!NameOfSubformControl2.Form.FilterOn = FilterOn
    

    【讨论】:

    • Private Sub Find_Click() Dim varItem As Variant Dim strFind As String Dim Filter As String Dim FilterOn As Boolean For Me.List2.ItemsSelected strFind = srtFind & "," & Me.List2. ItemData(varItem) Next varItem If Len(strFind) > 0 Then strFind = Right(strFind, Len(strFind) - 1) Filter = "[Bid Amount] In (" & strFind & ")" FilterOn = True End If Me. Min.Form.Filter = "过滤器" Me.Avg.Form.Filter = "过滤器" Me.Min.Form.FilterOn = True Me.Avg.Form.FilterOn = True End Sub
    • 尝试使用Me!Min.Form.Filter 并仔细检查strFilter 和您的子表单记录源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2014-10-06
    相关资源
    最近更新 更多