安全的VBA Excel插件代码

8
我有一个Excel插件,使用VBA开发,并在网络上部署。
该插件从Oracle数据库读取数据,并将表格粘贴到新的工作表中,其中还包含一个按钮(三角形形状),用于刷新表格。
所有东西都很好,但我必须用密码保护代码。
当我这样做时,在某些机器上会出现以下错误:
“隐藏模块中的编译错误:Main。当代码与此应用程序的版本、平台或架构不兼容时,通常会出现此错误。”
尽管解锁后它可以完美编译。
在其他机器上,即使我在关闭事件下没有定义任何类似的内容,它也需要VBA密码。
我希望安全地保护我的代码,而不会遇到以上问题。欢迎提出任何建议。

1
虽然我知道这很痛苦,而且我是从经验中说的,但你尝试过VSTO和ClickOnce吗?还有给你的代码签名吗? - Miguel
这是哪个版本的Office?我用纯VBA代码编写了一些插件,并对源代码进行了密码保护,之前从未见过这种错误。 - Josh
你在所有机器上都遇到了这个错误吗,包括你开发它的那台机器?这可能是32位/64位的差异引起的吗? - CLR
你尝试过在信任中心中将网络位置添加为受信任位置吗? - EEM
1
你需要更好的代码错误处理。 - 0m3r
显示剩余12条评论
1个回答

3
我知道这个错误发生的两种情况:
1: 32位和64位之间的问题(在评论中已经提到)。如果你开发了一个32位的插件,并尝试在64位Excel中部署/使用它,那么你引用的错误信息就会出现。
2: 缺失引用。
我认为第二种情况更可能是问题的原因,因为通常公司的所有客户机都将安装相同版本的MS Office,而这个错误只出现在一些机器上。
所以我建议检查你的引用。在VBA编辑器(Alt+F11)中,转到工具 --> 引用,并记录下任何被选中的模块。然后将其与出现错误的客户端进行比较(前往客户端并重复该过程)。
如果开发和客户端PC之间的勾选模块不匹配,这很可能是此问题的原因。你还可能会在客户端PC上看到一个名字前面写着“MISSING”的模块。在这种情况下,取消缺失模块的勾选,并尝试执行你的插件。
如果一切顺利,你应该可以去做其他事情了,否则你将不得不在客户端PC上手动安装缺失的模块。
希望这能对你有所帮助。

谢谢您的帮助。我确认所有都是64位的。我在安装Oracle客户端时确保了这一点。没有缺失的引用。出于这个原因,我通常避免添加引用。 - Kelaref
好的。您尝试在其中一个出现错误的机器上本地运行插件了吗?只是为了确认这不是网络/防火墙/...问题。 - daZza
@Kelaref 关于32位/64位 - 我指的是Office的版本,而不是Windows的版本。你提到Oracle让我想到你可能在指Windows?只是想澄清一下,以防我们有什么假设。 - CLR
我支持这个答案,无论它在哪个版本上运行,我总是会编译为32位,很少会出现类似的问题。 - Danny James

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