这个question引用了VBIDE引发的一些事件。我正在寻找一个可以挂钩的事件,无论何时保存Access对象(form,querydef,module,class module等)都会引发。
如果此类活动不可用,我正在寻找解决方法。项目范围的保存事件或代码模块更改事件将是可接受的替代方案。也许有一些创造性的方式可以在其中一个" msys"更新系统表,理想情况下,更新哪一行。
最糟糕的情况,看起来我可以遍历CurrentDb.QueryDefs
.LastUpdated
或CurrentProject.AllForms
/ .AllModules
/ .AllReports
.DateModified
属性并且只是在某个时间间隔内进行轮询,但我想尽可能避免这种情况。
答案 0 :(得分:0)
没有任何事件可以捕获,但可能有一个比轮询数据库对象更好的解决方案。
数据库窗口(包含所有表,查询和其他对象)将在用户界面中发生某些事情时收到Windows消息。使用Spy ++快速查看显示,在保存对象时,数据库窗口似乎会收到WM_ENABLE消息。如果您可以使用Win32捕获该消息,那么您可能已经开始了可靠的“事件”。
请注意,VBA UserForms可以在Access Projects中使用,但它们不会出现在数据库窗口中,因此可能会出现问题。
此外,以编程方式更改/添加/删除数据库对象的任何内容都可能不会触发自动数据库窗口刷新或消息。