我一直在寻找这个问题的简单答案:
当报表在预览模式下打开并隐藏时,报表后面/中的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的高层管理人员解释这一点。 (甚至没有关闭)。
提前致谢。
答案 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()