Excel VBA 编程 -- 再谈保护知识产权
- 2026-11-06 19:54:44
Excel VBA 编程 -- 再谈保护知识产权传统上,Excel 是通过给 VBAProject 设置密码从而阻止别人查看你的 VBA 源代码来保护你的知识产权的。但通过上篇文章,我们知道 Excel 的密码保护措施非常脆弱,密码极易被破解,从而使得密码保护基本上失去了意义。 但又有很多人确实在 Excel 的 VBA 开发上投入了很大的精力,自然不愿意轻易就被别人非法窃取。这个需求催生了另外的一些保护措施。我们今天介绍一个编译工具。 VBA Padlock 是 G.D.G Software 公司推出的 Excel VBA 代码编译与保护工具。理论上,VBA Padlock 是将 Excel VBAProject 中的代码编译为 DLL,然后将对原来 VBA 代码的调用转换为对桥接过程 VBAPL_Execute 的调用,再由桥接过程调用已经编译为字节码的原 VBA 过程。这样,就有效地保护了我们的 VBA 代码。 VBA Padlock 的启动界面如图: 
VBA Padlock 可以编译所有 Office 组件的 VBA 代码,包括 Word、Excel、PowerPoint、Access 等。点击 Open Office File,选择一个包含 VBA 代码的 Office 文件,譬如 MyExcelPad.xlsm,如图: 
VBA Padlock 还很不完善,譬如不支持 Excel VBA 的类模块,对 VBA 的某些语法也不支持,如: 
最要命的是,测试时,VBA Padlock 总是报告如下错误: 
这是在初始化 DLL 时报告的错误。经过一晚上再加一上午的反复折腾,终于弄明白:VBA Padlock 的 VBA Scripts 中的每一个 Script 文件只能有一个 Sub 或 Function!任何一个 Script 只要含有两个或多个 Sub 或 Function,就会出现上述错误。 这使得 VBA Padlock 只具有演示价值(至少就目前来讲),而且 VBA Padlock 是一个商业软件工具,需要付费购买。 虽然 VBA Padlock 目前只具有演示价值,但其思路却极有价值: VBA Padlock 是 2026 年才出现的工具,所以比较初级。G.D.G. Software 有一个比较成熟的 Excel 编译工具——XLS Padlock,这个工具可以将 Excel 的工作簿编译为 .exe 文件,还有各种其他功能。 VBA Padlock 注入 VBAProject 中的桥接过程由若干 Sub/Function 组成,其中的主函数代码如下: 
对原来 VBA 过程的调用转而为对 VBAPL_Execute 函数的调用,以原来 VBA 过程的Sub/Function 名称作为参数,如: 
CalcSquareRoot 是由 CalcSQRT 调用的原 VBA 过程,该过程不带参数。VBAPL_Execute 函数将原来对 CalcSquareRoot 的直接调用桥接到 DLL 中的 CalcSquareRoot。VBAProject 中不再含有 CalcSquareRoot 的代码。这就有效地保护了 CalcSquareRoot 的代码。 VBA Padlock 编译后的结果如下(CalcSQRT.xlsm 为例): 
由于 XLS Padlock 以及 VBA Padlock 是一个需要付费购买的工具,我们就不再详细介绍了。有兴趣进一步了解的朋友可以自己下载试用版玩玩。 相关阅读 Excel VBA 编程 -- 保护知识产权




不改变 Excel 的工作簿及工作表; 只将 VBAProject 中的 VBA 代码编译为 DLL; 删除 VBAProject 中的 VBA 代码; 在 VBAProject 中注入桥接过程; 在原来调用 VBA 代码的地方,修改为对桥接过程的调用,由桥接过程转而去调用原来的 VBA 过程; 由于是将 VBA 代码编译为 DLL,而 DLL 与 VBA 的主过程之间不能传递对象,所以 VBA Padlock 不支持类模块。这是目前 VBA Padlock 唯一比较重大的缺陷。



本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。