当子窗体绑定到表时,是否有可能在子窗体的表单上引发事件?

Eri*_*k A 6 events ms-access vba access-vba

我有一个带有子窗体的窗体,该窗体绑定到临时表。临时表包含数据透视表的结果,但是我希望用户能够编辑该数据透视表,然后将更改推送到源表。

要做到这一点,我想着火事件AfterInsertAfterUpdateDelete这样我就可以改变作用。据我了解,子窗体的form属性是在子窗体绑定到表时引用的临时数据表窗体。但是,我无法获得此临时表格来引发任何事件。

MCVE:

我有一个数据库,其中有一个表Table1,一个表单Form1,并且该表单具有一个未绑定的子表单控件。

我有一个带有以下代码的类Class1

Private WithEvents subformForm As Access.Form

Public Sub Init(subformControl As Access.SubForm)
    Set subformForm = subformControl.Form
    subformForm.OnCurrent = "[Event Procedure]"
End Sub

Private Sub subformForm_Current()
    MsgBox "Current!"
End Sub
Run Code Online (Sandbox Code Playgroud)

表单Form1包含以下代码:

Private c1 As Class1

Private Sub Form_Load()
    sub1.SourceObject = "Table.Table1"
    Set c1 = New Class1
    c1.Init sub1
End Sub
Run Code Online (Sandbox Code Playgroud)

但是,当我移动记录,添加记录以及在该子窗体中执行任何操作时,该subformForm_Current事件永远不会触发。

Gus*_*tav 3

这是因为子表单对象不是具有代码模块的表单。因此,事件过程无处可运行。

因此,使用表作为源在 datasheetview 中创建一个没有代码模块的表单,并将其用作子表单:

  • 您的代码将被忽略。

现在,调整表单以具有代码模块:

  • 您的代码按预期运行。

不管怎样,这就是我在 Access 2016 中的工作方式。