VBA保护拼图

时间:2015-05-22 04:37:08

标签: excel vba excel-vba

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"

1 个答案:

答案 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

此外,我还要添加一条保护热线,否则在首次取消保护后再没有任何意义。