限制 Microsoft Excel 宏的使用

27

我花了一些时间编写了一个可能对很多公司有商业价值的Excel宏。

我该如何锁定这个宏,以防止人们查看源代码/将其转发给其他人?

谢谢

6个回答

25

保护/锁定Excel VBA代码

当我们编写VBA代码时,通常希望将VBA宏代码对最终用户隐藏。这是为了保护您的知识产权和/或防止用户搞乱您的代码。只需注意,Excel的保护能力远不能被认为是安全的。 还有许多出售VBA密码恢复工具的网站存在

为了保护您的代码,请打开Excel工作簿,然后转到“工具”>“宏”>“Visual Basic编辑器”(Alt + F11)。现在,从VBE中转到“工具”>“VBA项目属性”,然后单击“保护”选项卡,然后勾选“锁定项目以防查看”,接着输入密码并再次确认密码。完成此操作后,您必须保存、关闭并重新打开工作簿,才能使保护生效。

(Emphasis mine)

看起来这是最佳选择。它无法阻止那些决心窃取您代码的人,但足以阻止一般盗版行为。

请记住,即使您能够分发编译后的代码副本,也无法阻止人们反编译它。


20
"Just like you can password protect workbooks and worksheets, you can password protect a macro in Excel from being viewed (and executed).
Place a command button on your worksheet and add the following code lines:
1. First, create a simple macro that you want to protect. Range("A1").Value = "This is secret code"
2. Next, click Tools, Then VBAProject Properties..."

enter image description here

点击工具,选择VBA项目属性...
保护选项卡中,勾选"锁定项目以供查看",并输入两次密码。

enter image description here

输入两次密码

  1. 点击确定

  2. 保存关闭并重新打开Excel文件。尝试查看代码。

enter image description here

以下对话框将出现:

密码保护,无法查看

您仍然可以通过单击命令按钮来执行代码,但是您不能再查看或编辑代码(除非您知道密码)。可下载的Excel文件的密码为“easy”。

  1. 如果您想要对宏进行密码保护以防止执行,请添加以下代码行:
Dim password As Variant
password = Application.InputBox("Enter Password", "Password Protected")

Select Case password
    Case Is = False
        'do nothing
    Case Is = "easy"
        Range("A1").Value = "This is secret code"
    Case Else
        MsgBox "Incorrect Password"
End Select
在工作表上单击命令按钮后的结果:

enter image description here

密码保护不被执行

说明:此宏使用Application对象的InputBox方法。如果用户单击取消,则该方法返回False并且什么也不会发生(InputBox消失)。只有当用户知道密码(再次是“easy”)时,才会执行秘密代码。如果输入的密码不正确,则显示一个MsgBox。请注意,用户无法在Visual Basic编辑器中查看密码,因为该项目受到保护以防止被查看。


尽管这些信息是准确的,但项目的内在VBA保护非常容易被绕过。因此,对于那些有严重安全顾虑的人来说,这并不是一个可行的解决方案,尤其是在处理可能涉及大量资金的项目时。 - Infrequent Coder
虽然这些信息是准确的,但项目的内在VBA保护非常容易被绕过。因此,对于那些有严重安全顾虑的人来说,这并不是一个可行的解决方案,尤其是在处理可能涉及大量资金的项目时。 - undefined

10
你可以在http://hivelink.io查看这款新产品,它可以让你有效保护敏感的宏。

Excel密码系统极其薄弱 - 只需要使用基本的HEX编辑器即可在2分钟内破解。我不建议仅凭此来保护任何内容。

我在这个主题上写了一篇广泛的帖子:如何保护Excel工作簿中的代码?


这不是一个答案,链接到外部网站也不是一个答案。 - GoWiser

1

你可以设置一个密码来保护你的VBA代码,但这种方式很容易被破解。

你也可以创建一个插件并将其编译成DLL。请参阅此处获取更多信息。这至少是保护你的代码最安全的方法。

敬礼,


1
现代方法是放弃使用VBA编写重要代码,而是使用c#或vb.net编写.NET托管的Add-In。在www上有很多相关资源,您可以使用MS Visual Studio的Express版本。

1
.NET代码没有编译成机器码,容易被反向工程。使用C API会更好。 - Sancarn

0
使用OfficeProtect,通过AppProtect或QuickLicense/AddLicense从您的Excel电子表格生成Mac或Windows的受保护应用程序。在www.excelsoftware.com/videos上有一个名为“Protect Excel Spreedsheet”的演示视频。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接