【问题标题】:Best way to protect Excel VBA code?保护 Excel VBA 代码的最佳方法?
【发布时间】:2021-01-30 08:35:04
【问题描述】:

我已经建立了一个简单的 Excel 数据库,它执行一些宏功能,我需要将这个数据库分发给几个人 - 但他们看不到宏功能实际上是如何工作的(我必须遵循愚蠢的规则!)。实现这一目标的最佳方法是什么?

我做了一些研究,发现了两种方法:

  • 密码保护 VBA 项目;但这显然很容易使用现成的在线工具来破解(这对我发送此邮件的人来说是最有利的,以了解宏和功能是如何工作的;所以我几乎 100% 肯定他们会尝试进入它..因此密码保护似乎不够。

  • 改用完全编译的语言,如 C++;我的技能仅限于 Excel 和 Access 上的 VBA,因此这是理想的解决方案;对我来说不是解决方案:(

还有其他方法吗?我想拥有一个包含所有宏的“主 excel 文档”,然后将“子”数据库发送给最终用户,并让“子”数据库连接到“主”——这样的事情可能吗?通过在线托管 master 或什至将 master 发送给最终用户,但使其完全无法访问,除非“子”数据库访问?

【问题讨论】:

  • 聘请律师制定 EULA 的执行并提供指导。一个足够聪明的人可以打开他们收到的任何个盒子——只是需要时间和精力。 (混淆器之类的只是增加时间/精力,目的是大大超过收益..)
  • 检查 VSTO 以创建加载项,然后使用 ClickOnce 部署它们
  • 查看hivelink.io,它允许您创建无需计算的用户界面电子表格,并轻松定义输入/输出以通过身份验证等将它们与您的数据库连接。我在这里写了一篇详尽的帖子: stackoverflow.com/questions/16363621/…

标签: excel vba password-protection


【解决方案1】:

您可以创建自动化插件。

自动化插件提供多种优势

  • 执行速度:一个自动化插件用VB6编写被编译成 运行速度比解释的 VBA 快得多的本机机器代码 语言。

  • 安全性:与 XLA 插件不同,您永远不会将源代码分发给最终用户。如果您的代码包含专有信息或 知识产权价值,仍然安全地保护在您的 自己的电脑。它永远不会分发给用户。你的代码可以 永不妥协。

http://www.cpearson.com/excel/automationaddins.aspx

【讨论】:

  • vb6 已过时。我会推荐 VSTO :)
  • 兼容性问题怎么办?我现在正在浏览 VSTO 的文档,但如果你有一个快速的答案,那就太棒了。 - VSTO 插件是否支持旧版本的 Office? - 支持MAC版Office/Open Office吗?
  • @Chronix3 我建议在 bcoz 中添加自动化,语法类似于 VBA,可以更快地完成。试试看。虽然 VB6 已经过时,但它仍然有效。
  • VB6 库不适用于使用 64 位 Excel 的任何人,但除此之外它们可能很好,您可以按照自己在 Excel 中熟悉的方式使用 VB。 VSTO 很好但很烦人,因为用户需要在他们的机器上拥有管理员权限才能安装您的插件。我在这里写了一个更广泛的帖子:stackoverflow.com/questions/16363621/…
【解决方案2】:

可靠地保护 Excel VBA 代码的方法并不多。

您可以尝试使用密码或 VBA 混淆器,但所有这些保护都是有限的。密码容易破解,混淆后的 VBA 代码仍然可以追溯和恢复。

此问题的另一个答案提到使用 VB6,但这会将您的代码限制为 32 位 Excel。 VB6也可以通过VB反编译器进行反编译。

将您的代码转换为编译语言确实是保护您的 VBA 代码的最佳方式,但请注意,在这种情况下,并非所有代码都是平等的。

将您的代码转换为 VBA.NET 是一个有缺陷的解决方案,因为 .NET 程序集的编译代码可以转换回原始源代码。

将您的 VBA 代码转换为 C 或 C++ 是最有效的保护形式,但这需要大量经验和努力,因为 C/C++ 和 VBA 是非常不同的语言。

我建议您查看一个名为 VBA Compiler for Excel (https://vbacompiler.com/how-to-compile/) 的工具。它通过单击将您的 Excel VBA 代码编译为 DLL 文件。您不需要任何 C 或 C++ 语言知识即可使用它。

【讨论】:

    【解决方案3】:

    如果您不熟悉 Visual Studio,那么 XlspadlockUnviewable+vbacompiler 等软件很容易配置,并且可以与 VBA6 和 VBA7、32 位或 64 位 Excel 一起使用。 它们允许您在分发之前将 Excel 工作簿另存为 EXE 文件,并有一些其他很酷的东西可以分发给最终用户。

    【讨论】:

      猜你喜欢
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      相关资源
      最近更新 更多