【问题标题】:Protect VBA Project using Excel Add-in使用 Excel 插件保护 VBA 项目
【发布时间】:2025-12-17 20:55:01
【问题描述】:

要求是使用 Excel-Add-in 以密码保护工作簿的 VBA 项目

这可能吗?

目前我们有一个 Excel 插件 (xlam),它对打开的每个工作簿执行所有操作。 我们通过插件实现了工作表的锁定。 现在我们还想保护那些打开的工作簿的 VBA。下面是我们从各个论坛找到的代码

With Application
'execute the controls to lock the project
.VBE.CommandBars("Menu Bar").Controls("Tools") _
    .Controls("VBAProject Properties...").Execute
'activate protection
.SendKeys "^{TAB}"
'CAUTION: this either checks OR UNchecks the
'Lock Project for Viewing checkbox, if it's already
'been locked for viewing, then this will UNlock it\
.SendKeys "{ }"
'enter password
.SendKeys "{TAB}" & VBAProjectPassword
'confirm password
.SendKeys "{TAB}" & VBAProjectPassword
'scroll down to OK key
.SendKeys "{TAB}"
'click OK key
.SendKeys "{ENTER}"
'the project is now locked - this takes effect
'the very next time the book's opened...
End With

但此代码的问题是它保护加载项本身的 VBA 而不是工作簿。我们需要一些代码或解决方法来通过将在 Excel 插件中编写的代码来保护工作簿的 VBA。

【问题讨论】:

    标签: vba excel excel-addins vbe


    【解决方案1】:

    SendKeys 方法只会在 VBE 中处于活动状态的任何项目上运行...可能是也可能不是插件项目。

    VBIDE API 不会公开任何以编程方式保护 VBProject,因此SendKeys 唯一的方法 - 但是您应该关闭所有打开的代码窗口并激活主机工作簿以确保如this ozgrid post 中所述,您正在命中正确的目标项目。

    请注意,VBA 宏保护是easily defeated,因此对于需要维护项目的 VBA 开发人员来说,这比对于想要破解它的人来说更令人烦恼:这是一种相当象征性的保护, 最重要的是.. 然而,解析和处理 VBE 中的代码的 VBE 加载项,例如 Rubberduck(免责声明:我与该项目密切相关)不会解析受保护的 VBA 项目,因此项目保护可以用于提高静态代码分析性能。

    【讨论】: