MS-Access报告VBA代码何时运行

时间:2017-03-24 19:27:46

标签: vba ms-access report access

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

当报表在预览模式下打开并隐藏时,报表后面/中的VBA代码是否会运行?

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

从包含以下行的表单调用报告:

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

然后我用以下行关闭表单

DoCmd.Close acReport, "Fertigungszettel", acSaveNo

问题是报告中/后面/附加的代码似乎没有运行。我想也许我需要延迟关闭以便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)

但它没有任何区别。

任何人都可以向我解释这一点,或者指出一些可以用简单的方式解释这一点的地方。我要求一个简单的方法,因为我必须向那些不是Dev的高层管理人员解释这一点。 (甚至没有关闭)。

提前致谢。

1 个答案:

答案 0 :(得分:1)

在MS Access中,报表和其他对象具有一组属性。如果您进入报表的设计视图并选择整个报表的属性,则会在右侧显示一个列表。顶部将是格式,数据,事件等。在事件下,您将看到触发代码运行的“On ...”列表。如“On Current”,“On Load”,“On No Data”等。

VBA代码可以附加到其中一个或多个。因此,您的代码可能附加到某些事件,如“On Mouse Up”,因此如果以编程方式打开报表,则无法运行。

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

更新:您指出后面的代码附加到“点击”。我认为这意味着背后的代码看起来像

Private Sub Report_Click()
...
End Sub

所以我认为在您的代码中,您可以强制执行后面的现有代码

DoCmd.OpenReport "Fertigungszettel",acPreview, , , acHidden
Call Forms("Your form name").Report_Click()