访问列表框非绑定列作为查询

时间:2016-03-22 14:43:27

标签: vba ms-access listbox access-vba

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

这是我到目前为止所拥有的。

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

的表单上

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

首先是基于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列的不可见文本框但是我想尝试使用函数方法,因为它看起来更干净且可重复使用

知道我的功能有什么问题吗?

1 个答案:

答案 0 :(得分:3)

这是因为,在查询中,[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")