我正在尝试创建一个过滤器,以便用户可以选择40个字段中的任何一个显示在通过VBA动态创建的查询结果中 .
这是我在许多程序中看到的标准,所以我认为有人必须有代码才能完成,而不用重新发明轮子 . 不幸的是我无法在网上找到它 .
基本上,当它启动时,左侧框中列出了所有字段名称,右侧框为空 . 用户可以单击右箭头按钮将字段移动到右侧框中,或单击左箭头将其移除并将它们放回左侧框中 . 用户还可以使用向上和向下箭头按钮来更改右侧列表框中所选字段的顺序 .
一旦我填充了正确的列表框并正确排序,我就知道如何正确执行查询 .
1 回答
如果您无法找到完整的示例,那么您需要自己一步一步地完成它 . 这是
ListBox
控件的MSDN link . 页面底部有指向此控件的各种方法和属性的链接 .基本上,单击按钮(您的箭头)会触发Click事件;在这种情况下,您可能需要循环查找
Selected
项目;如果列表框是多选的,那么你可以检查ItemsSelected
集合;然后,您将使用AddItem
和RemoveItem
方法将它们从右向左或从左向右移动 .我现在无法回想起Field List选项是否绑定到表,或者它是否只是在加载表单时填充列表一次 . 如果它被绑定,那么您将需要使用值列表选项并使用VBA来检索所有字段名称,并使用它们来设置
RowSource
(您可能已经这样做了) .在任何一个事件(字段或值列表)中,我不相信列表可以自动保持排序(与VB.NET不同) . 您可能需要将RowSource拆分为(动态)数组,找到一个简单的排序例程来对数组进行排序,并将已排序的项重新分配为
RowSource
.另一种方法是创建两个临时表并使用ADO(或DAO)在它们之间插入和删除行,然后每次使用SELECT语句重新填充列表 . 这样做的好处是SELECT可以包含一个ORDER BY子句来每次对列表进行排序 . 但是,它可能需要更多的努力(维护和删除临时表) .
但是,您可能希望继续搜索,因为我怀疑某个地方有一个例子 . 祝好运 .