2017-06-02 122 views
1

要求是使用Excel加载项保护带有密码的工作簿的VBA项目使用Excel加载项保护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。

回答

0

SendKeys方法只能在VBE中的任何项目处于活动状态时执行......这可能是也可能不是外接程序项目。

的VBIDE API不公开任何编程保护VBProject,所以SendKeys的唯一途径 - 然而,你应该关闭所有打开的窗口代码,为了激活宿主的工作簿,以确保你打的正确目标项目,如this ozgrid post中所述。

请注意,VBA宏保护是easily defeated,所以对于需要维护项目的VBA开发人员而言,这比对那些希望破解项目的人更烦恼:这是一种颇具象征意义的保护,更重要的是......但是VBE插件可以解析和处理VBE中的代码,如Rubberduck(免责声明:我大量参与该项目)不会分析受保护的VBA项目,因此项目保护可用于提高静态代码分析性能。