在 Excel 2003 VBA 项目中,我使用的是 MSCOMCTL.OCX 中的控件。那就是 VBA 项目有对 System32\MSCOMCTL.OCX 的引用。
当我在 64 位 Windows 7 系统上的 Excel 2003 中打开该项目时,Excel 会自动更改对 SysWOW64\MSCOMCTL.OCX 的引用(这是正确的位置)。
但是,当我将该项目发送给使用 32 位 Windows XP 的客户时,该项目在打开过程中会报错,因为他的系统上不存在 SysWOW64\MSCOMCTL.OCX。
以下是我到目前为止提出的(不令人满意的)解决方案:
指示客户端手动将引用更改回其系统上的正确位置 (System32\MSCOMCTL.OCX)。
- 这实际上不起作用,原因如下:
- 当 Excel 2003 32 位打开工作表并且找不到对 MSCOMCTL 的引用时,它会从表单中删除来自库(例如 TreeCtrl)的所有控件:-(
- 客户正在为这个程序而苦苦挣扎,这对他来说非常麻烦。
- 这实际上不起作用,原因如下:
- 使用 VBA 的 VBProject.References.AddFromFile/AddFromGuid 自动更正引用。
- 与上述相同的问题:当打开工作簿时编译 VBA 失败时,Excel 将删除从表单中找不到的所有控件。
- 自动添加引用(如 2.)并在运行时使用动态绑定添加所有相关控件。
- 这实际上可以工作,但是目前我正在努力将事件处理程序绑定到控件(但这将是一个单独的问题;-)
方法 1. 和 2. 并没有真正解决任何问题,解决方案 3 需要大量工作。
任何想法将不胜感激。