【问题标题】:Access listbox non bound column as criteria for query访问列表框非绑定列作为查询条件
【发布时间】:2016-03-23 21:29:51
【问题描述】:

我正在尝试根据除绑定列之外的特定列中的列表框中项目的值来过滤查询

这是我目前所拥有的。

我有一个包含 2 列 inv_idprod_id 的列表框 listbox is lst_MainList 的名称。 inv_id 是绑定列(第 1 列) 列表位于名为Projects的表单上

我正在尝试创建 2 个查询。

First 旨在根据 inv_id 过滤查询 这很容易,因为 inv_id 是我的绑定列

为了获取第二列的值,我尝试创建一个函数

Public Function GetColumnValue(col As Integer, ByRef lst As Access.ListBox)
    GetColumnValue = lst.Column(col)
End Function

想法是将列号和列表框名称传递给函数,函数将返回该列的值

功能似乎还可以。问题是当我将此函数作为条件输入到我的查询中时

=GetColumnValue(2,[Forms]![Projects]![lst_MainList])

希望根据当前活动项目的第 2 列过滤我的查询,查询运行时出现此错误。

This expression is typed incorrectly or is too complex

我知道我在这里的最后一个选择是添加一个绑定到列表框第 2 列的不可见文本框,但我想尝试函数方法,因为它看起来更干净且可重用

知道我的函数有什么问题吗?

【问题讨论】:

    标签: ms-access listbox vba


    【解决方案1】:

    这是因为,在查询中,[Forms]![Projects]![lst_MainList] 将返回控件的 Value 属性,而不是对控件的引用。

    您可能必须这样做:

    Public Function GetColumnValue(col As Integer, FormName As String, ControlName As String)
        GetColumnValue = Forms(FormName).Controls(ControlName).Column(col)
    End Function
    

    然后:

    =GetColumnValue(2,"Projects","lst_MainList")
    

    【讨论】:

    • 这行得通。谢谢。虽然有一点小的修正。应该有“s”(复数控制)...control(ControlName)...应该是...controls(ControlName)...
    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多