我知道即使是私有的 vba 脚本也可以被用户调用,这样使它“私有”实际上只是隐藏了它的名字。
但是,有没有办法设置一个宏,所以它只有在你在那个特定的 VBA 项目中时才能运行?不是来自 Excel,也不是来自任何 VBScript 等。
如果你想锁定代码,你可以
下面的示例代码在运行之前检查主机工作簿中的 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 代码,那么 brettdj 建议的最佳方式是继续。保护您的项目。如果不知道宏名称,则无法从 Excel 或 Excel 外部运行宏;)
制作宏的基本目的Private
不是阻止它运行,而是让它对用户不可见。大多数情况下,Excel 中唯一需要私有的宏是内置的工作表或工作簿事件或由其他宏引用的宏,这些宏不一定需要用户访问。如果他或她愿意,用户仍然可以从外部 VBA 访问它们。
话虽如此,您可以限制(但不是 STOP - 不是指禁用宏安全性)宏运行。通过授权标志。只有当它收到“授权”时,它才会运行。
例如
Option Explicit
Private Sub Sample(Auth As Boolean)
If Auth = True Then
'~~> Your macro code goes here
End If
End Sub
现在,如果您希望从 VBA 调用此宏,那么您必须像这样调用它
Sample True
或者
Call Sample(True)
这将确保上述宏仅在您允许时运行。
这种方法会阻止用户从 VBS 运行它吗?
不。它不会。但是,直到用户指定或给予“授权”时它才会运行
高温高压