VBA保护难题

VBA保护难题,vba,excel,Vba,Excel,Excel VBA加载项在常规模块中运行以下代码,修改另一个引用为ActiveWorkBook的工作簿,该工作簿包含名为“主列表”的工作表 代码是否进入MsgBox“2”取决于是否在ActiveWorkBook(而不是加载项)中启用了宏!如果未启用宏,它将打印一个“0”,然后停止。我知道它是复制的,因为我把“主列表(2)”看作一张纸。但它不输出“1”。如果启用了宏(具有用户权限,或者ActiveWorkBook位于受信任的文件夹中),代码将通过MsgBox“2”或更高版本继续执行。发生什么事??

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"
这对我很有用:

Sub Whatever()
Dim wb As Workbook
Set wb = Application.Workbooks("Book 2.xlsm")
 Application.EnableEvents = False
 With wb
 .Worksheets("Overview").Unprotect "XXX"
 MsgBox "0"
 .Worksheets("Overview").Copy After:=.Worksheets(1)
 MsgBox "1"
 .ActiveSheet.Name = "OldMasterList"
 MsgBox "2"
.Worksheets("Overview").Protect "XXX"
MsgBox "3"
 End With
End Sub

另外,我还要添加一个保护行,否则在第一次之后再取消保护就没有意义了。

一般提示:请参阅如何避免使用
ActiveWorkbook
,这是导致错误的常见原因。@OlleSjögren感谢您提供的页面,它看起来很有用。在这种情况下,似乎并不能解决问题:我可以用“With Application.WorkBooks(1)”替换“With ActiveWorkBook”,并且有相同的问题。仍在处理此问题。我知道这与主列表中的事件代码无关。去掉它,同样的问题。