【问题标题】:VBA protection puzzleVBA 保护拼图
【发布时间】: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)”并遇到同样的问题。
  • 仍在努力。我知道它与主列表中的事件代码无关。去掉它,同样的问题。

标签: vba excel


【解决方案1】:

这对我有用:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2014-04-16
    相关资源
    最近更新 更多