5

我知道即使是私有的 vba 脚本也可以被用户调用,这样使它“私有”实际上只是隐藏了它的名字。

但是,有没有办法设置一个宏,所以它只有在你在那个特定的 VBA 项目中时才能运行?不是来自 Excel,也不是来自任何 VBScript 等。

4

2 回答 2

3

如果你想锁定代码,你可以

  • 将代码设为私有,以免暴露宏名称
  • 锁定保护,然后在让代码运行之前测试项目是否真正解锁

下面的示例代码在运行之前检查主机工作簿中的 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

在此处输入图像描述

于 2012-06-02T10:40:14.480 回答
1

老实说,没有万无一失的方法。您可以进行某些检查,但这就是您所能做的。

如果您确定用户将无法访问 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 运行它吗?

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

高温高压

于 2012-06-02T13:45:38.787 回答