【发布时间】:2015-05-22 04:37:08
【问题描述】:
Excel VBA 插件在常规模块中运行以下代码,修改引用为 ActiveWorkBook 的另一个工作簿,其中包含一个名为“主列表”的工作表。
代码是否进入 MsgBox "2" 取决于是否在 ActiveWorkBook(而不是插件)中启用了宏!如果未启用宏,它会打印一个“0”然后停止。我知道它是复制的,因为我将“主列表 (2)”视为一张纸。但它不输出“1”。如果启用了宏(具有用户权限,或者 ActiveWorkBook 可能位于受信任的文件夹中),则代码将通过 MsgBox "2" 及以后继续。这是怎么回事???如果有帮助,工作表主列表确实包含事件代码。另一方面,我关闭了事件。
Application.EnableEvents = False
With ActiveWorkbook
.Worksheets("Master List").Unprotect "XXX"
MsgBox "0"
.Worksheets("Master List").Copy After:=.Worksheets(1)
MsgBox "1"
.ActiveSheet.Name = "OldMasterList"
MsgBox "2"
【问题讨论】:
-
一般提示:请参阅this SO Q+A,了解如何避免使用
ActiveWorkbook,这是导致错误的常见原因。 -
@OlleSjögren 感谢该页面,它看起来很有用。在这种情况下似乎无法解决问题:我可以将“With ActiveWorkBook”替换为“With Application.WorkBooks(1)”并遇到同样的问题。
-
仍在努力。我知道它与主列表中的事件代码无关。去掉它,同样的问题。