1

要求是使用 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。

4

1 回答 1

0

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

VBIDE API 不会公开任何以编程方式保护 VBProject 的内容,因此这SendKeys 唯一的方法 - 但是您应该关闭所有打开的代码窗口并激活主机工作簿,以确保您击中正确的目标项目,如本文所述奥兹格邮政

请注意,VBA 宏保护很容易被击败,因此对于需要维护项目的 VBA 开发人员来说,这比对于想要破解它的人来说更令人烦恼:这是一个相当象征性的保护,比什么都重要否则.. 但是,解析和处理 VBE 中的代码的 VBE 插件,例如Rubberduck(免责声明:我积极参与该项目)将不会解析受保护的 VBA 项目,因此可以使用项目保护来提升静态代码分析性能。

于 2017-06-02T17:04:33.373 回答