MS-Access 什么时候报告 VBA 代码 运行

When does MS-Access Report VBA Code run

几天来我一直在寻找这个问题的简单答案:

当报表在预览模式下打开并隐藏时,VBA 代码 behind/in 是否为报表 运行?

我继承了一个 P-O-S(非销售点)Access 2003 数据库(主要用德语编写),其中有一份报告,其中附有一个非常长且复杂的 VBA 模块。我需要代码在预览模式下 运行 时执行,但它没有。

报表是从具有以下行的表单中调用的:

DoCmd.OpenReport "Fertigungszettel",acPreview, , , acHidden

然后我用下面一行关闭表单

DoCmd.Close acReport, "Fertigungszettel", acSaveNo

问题是报告的代码in/behind/attached似乎没有运行。我想也许我需要延迟关闭,以便 Access 有时间处理 运行 代码,所以我将以下内容添加到报告 vba

Private Declare Sub Sleep Lib "kernel32" (ByVal dwmilliseconds As Long)

Public SleepPls(ByVal ISecs As Long)
  Sleep(ISecs * 1000)
End Sub

我添加了这样的行来调用它:

SleepPls(10)

但这没有什么区别。

任何人都可以向我解释一下这个问题,或者给我指出可以用简单的方式解释这个问题的地方。我要求一个简单的方法,因为我将不得不向不是开发人员的高层管理人员解释这一点。 (甚至不接近)。

提前致谢。

在 MS Access 中,报表和其他对象具有一组属性。如果您进入报告的设计视图和整个报告的 select 属性,右侧将出现一个列表。最上面是格式、数据、事件等。在事件下,您将看到 "On...'s" 的列表,触发代码为 运行。如"On Current"、"On Load"、"On No Data"等。

VBA 代码可以附加到其中一个或多个。因此,如果您以编程方式打开报告,您的代码可能会附加到 "On Mouse Up" 等事件,因此不会 运行。

了解代码如何附加到事件,这应该会引导您朝着正确的方向前进。也许您可以将代码附加到不同的事件,或者您的代码可能会直接调用您想要 运行 背后的代码。

更新:您指出后面的代码已附加到"On click"。我认为这意味着后面的代码看起来像

Private Sub Report_Click()
...
End Sub

所以我认为在您的代码中您可以通过

将现有代码强制为 运行
DoCmd.OpenReport "Fertigungszettel",acPreview, , , acHidden
Call Forms("Your form name").Report_Click()