VBA私人脚本

我知道甚至私人的vba脚本也可以被用户调用,使得“私有”实际上只隐藏它的名字。

但是,是否有设置macros的方法,因此只有在特定的VBA项目中才能运行? 不是从Excel而是从任何VBScript或类似的。

如果你想locking你可以的代码

  • 使代码私人,所以macros名不被暴露
  • locking保护,然后在让代码运行之前testing项目是否实际解锁

下面的示例代码检查主机工作簿中的VBA在运行之前未受到保护

这是否符合您的需求?

Private Sub TestMe() Dim objVB As Object Set objVB = ThisWorkbook.VBProject If objVB.Protection = 0 Then Call TestSub Else MsgBox "Sorry sport - unauthorised", vbCritical End If End Sub Private Sub TestSub() MsgBox "Project unprotected - i've been run", vbOK End Sub 

在这里输入图像说明

老实说,围绕它没有万无一失的方法。 你可以进行一定的检查,但这是你所能做的。

如果您确定用户无法访问VBA代码,那么brettdjbuild议的是最好的方法。 保护你的项目。 如果不知道macros名称,则无法从Excel或Excel外部运行macros;)

制作一个macrosPrivate的基本目的不是阻止它运行,而是使其对用户不可见。 大多数情况下,Excel中唯一需要私有的macros是内置的工作表或工作簿事件或由其他macros引用的macros,这些macros必须不需要由用户访问 。 如果用户愿意,用户仍然可以从外部访问VBA。

话虽如此,您可以限制( 但不是停止 – 不是指停用macros安全 )运行的macros。 通过授权标志。 只有当它收到“授权”,它才会运行。

例如

 Option Explicit Private Sub Sample(Auth As Boolean) If Auth = True Then '~~> Your macro code goes here End If End Sub 

现在如果你想从VBA调用这个macros,那么你必须这样调用它

 Sample True 

要么

 Call Sample(True) 

这将确保上面的macros只有在允许的情况下才会运行。

这种方法会阻止用户从VBS运行这个?

没有。 它不会。 但是,直到用户指定或授予“授权”时才会运行,

HTH