要求是使用Excel-Add-in保护工作簿的 VBA Project 。
这可能吗?
目前我们有一个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 :(得分:0)
SendKeys
方法只会对VBE中活动的项目进行操作...这可能是也可能不是加载项目。
VBIDE API没有公开任何内容以编程方式保护VBProject,因此SendKeys
是唯一的方法 - 但是你应该关闭所有打开的代码窗口并激活主机工作簿以确保您按照this ozgrid post中的说明进入正确的目标项目。
请注意,VBA宏保护是easily defeated,因此对于需要维护项目的VBA开发人员来说,这比想要破解它的人更烦恼。 :它是一种相当具有象征意义的保护,而不是其他任何东西..然而,VBE插件可以解析和处理VBE中的代码,例如Rubberduck(免责声明:我大量参与其中) project)不会解析受保护的VBA项目,因此可以使用项目保护来提高静态代码分析性能。