Workbook_Open 链接到 xlsm 工作簿时错误地触发了事件

Workbook_Open event erroneously triggered when linking to xlsm workbook

我运行宁[编辑]只读(第3方!)[/编辑] SQL数据库,一个xlsm,一个xls(xlsm的保存副本,只是没有宏)和一个 mdb(Access 数据库)。

它们 link 编辑如下:

这个序列在办公时间 运行s 和下午 5 点后的第一个 运行 设置一个计时器,在早上再次启动该过程。

我的问题是,每当我打开一个带有 xlsm 连接或 link 的文件时,Workbook_Open 事件似乎会触发,我最终会在 [=39] 上打开 2003 xls =] 计算机。我知道这不仅仅是我的剩余 Application.OnTime(我最初在其上创建文件的 PC),因为现在它正在使用中,而其他从未打开过 xlsm 的客户在使用时随机弹出 2003 文件Excel.

如果这还不足以让某人知道发生了什么,我会很乐意 post 编写代码 - 但我希望有人以前看过这个或知道这个菜鸟错误并且可以简单地给我一个我缺少的行。

非常感谢您的帮助!

我认为 XLS 在您的客户端上弹出的原因是因为 Excel 必须打开链接的 XLSM 才能访问数据,因此 Workbook_Open 被触发。

您在评论中提出的建议的一些替代方案;

  • 在执行Application.OnTime之前检查Environ("Username"),这样它只会运行如果文件被特定用户打开。
  • 使用启动文件打开 "admin mode" 中的 XLSM - 您可以通过使用启动文件设置 Global-scope 变量来完成此操作,然后让 XLSM 检查它运行ning Application.OnTime.
  • 之前的变量
  • 在本地计算机上对一些虚拟文件进行 XLSM 测试 - 您可以轻松地在需要定期访问 XLSM 的计算机上手动创建的文件。例如,XLSM 可以寻找 C:\Data\xlsm-enabler.txt 或任何有效的东西,如果文件存在,则只 运行 相关的宏。
  • 与上述类似,使用 SaveSetting 在 "admin" 台机器上设置注册表项并在 XLSM 中对此进行检查。
  • 将您的 XLSM 设置为 accept parameters, and use such parameters to open the file in "admin mode". This method is outlined several other places @ SO, like
  • 这更像是一种预感 - 您可以利用 XLSM 中的 Workbook.ReadOnly 属性 作为条件。这假设 Excel 在通过数据连接访问 XLSM 时以只读模式打开它,我不知道是否确实如此。

一个简单的解决方案是将所有其他文件 link 添加到 .xls 文件,而不是 .xlsm 启用宏的文件。这种方法的缺点是您必须(手动)更新所有引用。

在 Access 中做所有事情会更容易。然后,如果您需要在 Excel 中表示数据,您可以使用带有 link 的工作簿访问 table。这会删除一个步骤,并使用正确的工具来完成工作。访问权限用于 linking 数据库 tables。 Excel 用于处理数据视图。

SQL > Access > Excel