我正在运行一个[Edit]只读(第三方!)[/ Edit] SQL数据库,一个xlsm,一个xls(保存的xlsm副本,没有宏)和一个mdb(Access数据库)。
它们的链接如下:
由于那时代码模块仍然存在(工作簿尚未关闭),因此我可以打开Access mdb并刷新到2003数据表中的Excel链接,然后关闭Access。
然后我重新打开xlsm,触发一个新的Application.Ontime实例。
此序列在办公时间内运行,在下午5点之后的第一次运行中设置了一个计时器,以在早上再次开始该过程。
我的问题是,每当我打开与xlsm的连接或链接的文件时,Workbook_Open事件似乎都会触发,最后我在“客户端”计算机上打开了2003 xls。我知道这不仅仅是我剩下的Application.OnTime(我最初在上面创建文件的PC),因为现在它正在使用中,而其他从未打开过xlsm的客户端在使用Excel时会随机弹出2003文件。
如果这还不足以触发某人知道发生了什么,我会很高兴地发布代码-但我希望有人以前见过这个,或者知道这个菜鸟错误,并且可以简单地给我一行我所缺少的信息。
非常感谢您的帮助!
答案 0 :(得分:2)
我认为XLS在您的客户端上弹出的原因是Excel必须打开链接的XLSM才能访问数据,并因此触发Workbook_Open
。
您在评论中的建议的几种替代方法;
Environ("Username")
之前检查Application.OnTime
,以使其仅在特定用户打开文件时运行。Global
范围变量来执行此操作,然后让XLSM在运行之前检查此变量Application.OnTime
。C:\Data\xlsm-enabler.txt
或任何可行的方法,并且仅在文件存在时运行相关的宏。SaveSetting
在“ admin”计算机上设置注册表项,并在XLSM内部进行检查。答案 1 :(得分:1)
一个简单的解决方案是让所有其他文件链接到.xls
文件,而不是启用了.xlsm
宏的文件。这种方法的缺点是您必须(手动)更新所有参考。
答案 2 :(得分:1)
在Access中执行所有操作会更容易。然后,如果您需要在Excel中表示数据,则可以有一个带有访问表链接的工作簿。这消除了一个步骤,并且使用了正确的工具进行作业。访问用于链接到数据库表。 Excel用于处理数据视图。
SQL > Access > Excel