我正在尝试在Access中的窗体中重新查询组合框,以便每次A)表B中的任何记录都被更新)B)创建新记录时就更新。
我从this question那里了解到我需要使用requery方法,但是我不了解的是如何使用事件来触发它。
到目前为止,我已经打开表单并将“具有模块”属性更改为“是”。然后,我打开VBA编辑器,找到我的表单,然后双击以打开我认为连接到表单的模块。然后在“选项比较数据库”下,我键入“ Item.ContainerCombo.Requery”(表名,组合框名,重新查询方法。)
我知道这不会做任何事情,因为它没有连接到事件,但是我不知道要使用哪个事件。有人可以帮忙吗?
请耐心等待,因为我没有在Microsoft Access中使用VBA的经验。
答案 0 :(得分:1)
通常,在事件触发代码中,通常将VBA(不要与VB,VB.Net或VBS混合使用,而是MS Office应用程序代码)。
在MS Access中,这些事件通常发生在表单和报表上,通常是由于用户交互所致。您无需直接跳入VBA编辑器即可编写需要处理的代码,而可以找到事件(AfterUpdate
,BeforeInsert
,OnClick
,OnCurrent
,OnOpen
,在{em>事件标签下的属性表中需要OnClose
),然后启用代码,该代码将自动为您编写子例程外壳,然后添加.Requery
行。实际上,甚至可以使用macros处理诸如.Requery
之类的简单行(不要与Excel宏混淆)。访问方法不会在子例程或函数(例如您的尝试)之外运行。
具体来说,您提到:
以便[combobox]每次更新A)表B中的任何记录都被更新)创建新记录
对于所需的重新查询调用的时间和位置,这还不太清楚。因此,您需要回答:
该表B何时更新或插入?通过用户,通过自动代码还是通过外部事件?这样可以确定触发事件的类型(即AfterUpdate
与OnClick
)。
此表B在哪里更新或插入?您使用的是表格还是其他表格?表格B绑定的是表格吗?这样可以确定触发器的位置(即表单A的AfterUpdate
而不是表单B的AfterUpdate
)。
myCombboxName.Requery
或Me.myCombboxName.Requery
)更改为绝对引用:Forms!myFormName!myCombboxName.Requery
。一旦确定了触发器的类型和位置,您就可以将光标放在相应表单对应事件的“属性表”下,然后启用诸如以下子例程之一之类的代码:
Private Sub Form_AfterUpdate()
Forms!myFormName!myCombboxName.Requery
End Sub
Private Sub Form_AfterInsert()
Forms!myFormName!myCombboxName.Requery
End Sub
Private Sub myButton_OnClick()
Forms!myFormName!myCombboxName.Requery
End Sub