1

我正在尝试创建一个过滤器,以便用户可以选择 40 多个字段中的任何一个来显示在通过 VBA 动态创建的查询结果中。

这是我在很多程序中看到的标准,所以我认为必须有人有代码可以做到这一点,而无需我重新发明轮子。不幸的是,我无法在网上找到它。

基本上,当它启动时,所有字段名称都列在左侧框中,右侧框为空。用户可以单击右箭头按钮将字段移动到右侧框中,或者单击左箭头将它们删除并放回左侧框中。此外,用户可以使用向上和向下箭头按钮来更改右侧列表框中所选字段的顺序。

一旦我填充了正确的列表框并正确排序,我就知道如何正确执行查询。

4

1 回答 1

0

如果您无法找到完整的示例,那么您需要自己一步一步地完成它。这是控件的MSDN链接ListBox。页面底部有指向此控件的各种方法和属性的链接。

本质上,单击按钮(您的箭头)会触发 Click 事件;在这种情况下,您可能需要循环查找该Selected项目;如果列表框是多选的,那么您可以检查ItemsSelected集合;然后您将使用AddItemandRemoveItem方法将它们从右到左或从左到右移动。

我目前不记得字段列表选项是否绑定到表,或者它是否只是在加载表单时填充列表一次。如果它已绑定,那么您将需要使用 Value List 选项并使用 VBA 检索所有字段名称,并使用它们来设置RowSource(您可能已经这样做了)。

在任何一种情况下(字段或值列表)我都不相信列表可以保持自动排序(与 VB.NET 不同)。您可能需要将 RowSource 拆分为(动态)数组,找到一个简单的排序例程来对数组进行排序,并将排序后的项目重新分配为RowSource.

另一种方法是创建两个临时表并使用 ADO(或 DAO)在它们之间插入和删除行,然后每次使用 SELECT 语句重新填充列表。这样做的好处是 SELECT 可以包含一个 ORDER BY 子句来每次对列表进行排序。但是,它可能需要更多的努力(维护和删除临时表)。

但是,您可能希望继续搜索,因为我怀疑某处有一个示例。祝你好运。

于 2013-06-19T23:32:26.073 回答