如何将VBA代码保存到DLL库?

问题描述 投票:6回答:5

出于安全性考虑,我想将Excel工作簿中的VBA中的宏保存到稍后从文件中调用的DLL库文件。

这样就可以将我的宏的任何版本部署到公司的PC上,但是没人能看到其背后的真实代码。

这怎么可能?我已经阅读了转换为C ++和创建DLL的内容。是否有任何分步解决方案?

excel-vba dllexport source-code-protection vba excel
5个回答
4
投票

您可以通过将VBA转换为受密码保护的XLA并对其进行混淆来保护其代码。但是密码安全性较弱。使XLA与所有Excel版本一起使用很容易。

一种简单的替代方法是转换为已编译的VB6 Automation插件。安全性好,易于转换,可以处理UDF和Command插件。但是它不适用于Excel 2010-64或XL 2000等早期版本的Excel。您将需要一个VB6编译器,这很难找到。

更难的选择是转换为.NET。如果使用众多混淆器之一,则安全性是合理的。除非您使用允许通过XLL接口访问.NET的工具之一,例如Excel DNA或Addin Express,否则性能将很差。还提供64位功能。

如果性能和安全性至关重要,则需要转换为C ++ XLL,但这在来自VBA的情况下很难完成。


5
投票

首先,让我警告您一般情况下。我们使用企业应用程序进行过一次,移植所需的时间与最初编写应用程序所需的时间大致相同。为此,不存在分步指南,因为您基本上是从头开始重写应用程序。

第二,并不是您的Excel VBA可以做的所有事情都不一定可以在COM或XLL中使用。可用的事件有所不同;对于XLL,有全新的结构可用于所有数据类型。在COM中没有UDF。在XLL中,没有宏操作。您将不再能够将代码附加到工作表(仅Excel会话),并且安装过程要复杂得多。在踏上一条特定的道路之前,我会花很长时间研究您的VBA的确切功能。

这取决于您的应用程序的大小,但是我鼓励您花钱购买水密许可证并进行一些基本的代码混淆处理(按照原始注释),而不是从头开始采用其他体系结构。


2
投票

a)您可以将宏保存在单独的文件中,并用密码进行保护,但是,存在用于“恢复密码”的程序,它可能会破坏这种保护。

b)虽然可以执行c ++ dll,但明智的做法是使用Visual Basic 6,因为其语法与vba非常相似。在vb6中,您可以创建一个COM组件,进行注册,然后再添加到Excel表中。


2
投票

您没有提到您的目标Excel版本,但我将给出一个概括的看法。

  1. 请确保您的代码适合于插件。例如:使用ActiveWorkbook代替ThisWorkBook。
  2. 还决定是否需要创建菜单或使用快捷键,并相应地修改代码并加以保护。
  3. 在VBE中,将IsAddin属性更改为True。
  4. “另存为”文件,然后选择Excel加载项。或者,只需保存它,并将扩展名从.xls重命名为.xla
  5. 现在通知您的用户“打开” .xla,或在您的项目中引用它,或将其放在自动启动文件夹中,或....
  6. 您完成了

http://www.ozgrid.com/VBA/excel-add-in-create.htmhttp://excel.tips.net/Pages/T002927_Creating_AddIns.htmlhttp://msdn.microsoft.com/en-us/library/aa140936(v=office.10).aspx


0
投票

将VBA代码转换为C ++是一个非常艰巨的过程,因为C ++和VBA是非常不同的语言,但是这种通过编译成DLL文件的转换确实确实提供了最好的VBA代码保护。

如果您想要一个能够做到这一点的工具,我建议您使用VBA Compiler for Excel。它将VBA代码转换为C,并将该C代码编译为DLL文件。

比手动将VBA代码转换为C更容易,更快。VBA编译器网站上有一个简单的10步骤指南,介绍如何将VBA代码编译到Windows DLL文件https://vbacompiler.com/how-to-compile/中,它甚至不需要任何C或C ++知识。

© www.soinside.com 2019 - 2024. All rights reserved.