Access中如何触发ComboBox的Requery以响应表记录更新或新增?
解决Access窗体ComboBox自动重新查询的问题
别担心,我来一步步帮你搞定这个问题!你已经开启了窗体的模块,只差把代码绑定到正确的事件上,而且要纠正一下之前的代码写法——直接用表名调用控件是不对的,窗体控件要用Me(代表当前窗体)来引用才对。
针对两种场景的事件选择与代码实现
场景B:创建新记录后更新ComboBox
当你在窗体上新建一条记录并保存后,需要触发ComboBox重新查询,这时候用窗体的AfterInsert事件:
- 打开窗体的设计视图,右键窗体的空白区域(别点控件),选择「属性」打开属性窗口。
- 切换到「事件」选项卡,找到「插入后」这一项。
- 点击右侧的下拉箭头,选择「事件过程」,再点击旁边的「...」按钮,自动打开VBA编辑器。
- 在生成的事件过程框架里,写入以下代码:
Private Sub Form_AfterInsert() ' 重新查询ComboBox Me.ContainerCombo.Requery End Sub
场景A:表中任意记录被更新后更新ComboBox
分两种情况处理:
情况1:在当前窗体里修改记录导致表更新
用窗体的AfterUpdate事件,操作步骤和上面类似:
- 在窗体属性的「事件」选项卡找到「更新后」。
- 选择「事件过程」并打开VBA编辑器,写入代码:
Private Sub Form_AfterUpdate() Me.ContainerCombo.Requery End Sub
这个事件会在当前窗体的任何记录被修改并保存后触发,刚好满足你“表中任意记录被更新”的需求(如果更新操作是在这个窗体里做的)。
情况2:从其他窗体/直接修改表数据导致的更新
如果是外部操作修改了Item表的数据,上面的窗体事件就捕捉不到了,这时候需要用表的数据宏:
- 打开
Item表的设计视图,点击顶部「表格工具」选项卡中的「创建数据宏」。 - 分别创建「更新后」和「插入后」的数据宏:
- 选择「添加新操作」,找到「RunCode」。
- 在「函数名称」里输入一个公共函数名,比如
RefreshContainerCombo。
- 回到VBA编辑器,在一个标准模块(不是窗体模块)里创建这个公共函数:
Public Function RefreshContainerCombo() ' 确保窗体是打开的才刷新 If CurrentProject.AllForms("你的窗体名称").IsLoaded Then Forms("你的窗体名称").ContainerCombo.Requery End If End Function
这样不管从哪里修改Item表,都会触发这个函数刷新ComboBox。
小提示
- 把「你的窗体名称」替换成你实际的窗体名字,别写错哦!
Me是窗体模块里的专属引用,代表当前窗体,比直接写窗体名称更灵活可靠。
内容的提问来源于stack exchange,提问作者Lou
相关产品推荐
相关产品推荐

