使用Excel加载项保护VBA项目

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

这可能吗?

目前我们有一个Excel加载项(xlam),它可以打开每个工作簿的所有操作。 我们通过加载项实现了对工作表的locking。 现在我们也想保护那些打开的工作簿的VBA。 以下是我们从各种论坛find的代码

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而不是工作簿。 我们需要一些代码或解决方法来通过代码来保护工作簿的VBA,这些代码将被写入Excel加载项中。

SendKeys方法将只能在VBE中的任何项目处于活动状态…这可能是也可能不是插件项目。

VBIDE API不会公开任何以编程方式保护VBProject,所以SendKeys 唯一的方法 – 但是,您应该closures所有打开的代码窗口并激活主机工作簿,以确保您击中正确的目标项目,如这ozgrid后 。

请注意,VBAmacros保护很容易被打破 ,所以对于需要维护项目的VBA开发者来说,更多的是一个烦恼,而不是那些想要破解它的人:这是一个颇具象征意义的保护,否则..但VBE插件parsing和处理VBE中的代码,如Rubberduck (免责声明:我大量参与该项目)不会parsing受保护的VBA项目,因此项目保护可用于提高静态代码分析性能。