使用排序列表框选择列表中的第一个记录,而不是数据库中

时间:2014-06-11 21:03:51

标签: vba ms-access access-vba

在Access窗体中,我使用列表框选择我想要查看的记录(手动工作正常)。列表框中填充了查询中的名称,按字母顺序对它们进行排序,并且工作正常。

使用VBA,我在列表框中首先加载表单时选择框中的第一个项目,以及当用户单击按钮重新查询时(用户可以在表单上按年龄缩小名称列表)本身。

首次加载表单时,加载列表框中第一个项目的记录没有问题。按下“搜索”按钮时,表单会加载数据库中与条件匹配的第一条记录,即使它与列表框中的第一项不匹配。

这是我的两个事件的代码:

Private Sub btnSearch_Click()
  DoCmd.RunMacro "Requery", 1

  Me.listControl.SetFocus
  Me.listControl.Selected(0) = True
  Me.listControl = Me.listControl.ItemData(0)
End Sub


Private Sub Form_Load()
  DoCmd.RunMacro "Requery", 1

  Me.listControl.SetFocus
  Me.listControl.Selected(0) = True
  Me.listControl = Me.listControl.ItemData(0)
End Sub

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我不知道这个功能,今天在工作中尝试过。它生成一个嵌入式宏。它也只是单向切换,即列表框控制表单但反之亦然。我想这就是你的问题首先出现的地方。

您必须执行以下操作:

  1. 保持ListBox和Form记录集等效,即如果过滤一个,也过滤另一个。如果没有,你会遇到疯狂的情况。
  2. 丢弃嵌入式宏并在AfterUpdate事件中使用FindFirst method(最好在表单模块中,而不是在列表框道具中)
  3. 连接ListBox,使其始终通过选择表格的Form_Current事件中的相关行来显示表格中的选定记录
  4. 只有当两者的ID不相同时才通过执行2和3来捕获无限循环
  5. 如果你无法使用它,请将代码发布到你正在进行过滤的地方(并解释如何),明天我会看看。