Excel VBA Addin在常规模块中运行以下代码,修改另一个引用为ActiveWorkBook的工作簿,其中包含一个名为“Master List”的工作表。
代码是否使其成为MsgBox“2”取决于是否在ActiveWorkBook中启用了宏(而不是Addin)!如果未启用宏,则会打印“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"
答案 0 :(得分:0)
这对我有用:
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
此外,我还要添加一条保护热线,否则在首次取消保护后再没有任何意义。