64位Windows 7上的Excel 2003自动更改对SysWOW64 \ MSCOMCTL.OCX的引用,以便32位Excel抱怨

在Excel 2003 VBA项目中,我使用的是MSCOMCTL.OCX的控件。 那就是VBA项目有一个对System32 \ MSCOMCTL.OCX的引用。

当我在64位Windows 7系统上的Excel 2003中打开该项目时,Excel会自动将引用更改为SysWOW64 \ MSCOMCTL.OCX(这是正确的位置)。

但是,当我将该项目发送给使用32位Windows XP的客户时,由于系统中不存在SysWOW64 \ MSCOMCTL.OCX,因此该项目在开启期间抱怨。

以下是我迄今为止提出的(不满意的)解决scheme:

  1. 指示客户端手动将引用更改回到其系统上的正确位置(System32 \ MSCOMCTL.OCX)。

    • 由于以下原因,这不起作用:
      1. 当Excel 2003 32位打开工作表并且无法find对MSCOMCTL的引用时,它将从库中删除所有来自库(例如TreeCtrl)的控件:-(
      2. 客户正在为这个程序挣扎,这对他来说是非常麻烦的。
  2. 使用VBA的VBProject.References.AddFromFile / AddFromGuid自动更正引用。
    • 与上面相同的问题:在打开工作簿期间编译VBA失败时,Excel将删除从表单中找不到的所有控件。
  3. 自动添加引用(如2.),并使用dynamic绑定在运行时添加所有相关的控件。
    • 这实际上可以工作,但是目前我正在努力将事件处理程序绑定到控件(但这将是单独的问题;-)

方法1.和2.不要真正解决任何问题,解决scheme3是很多工作。

任何想法将不胜感激。

如果在工作簿closures时自动closures参考,该怎么办? 这样,当工作簿打开时,引用不会被“破坏”,所有的控制都应该是好的。

即:

Private Sub Workbook_Open() 'use environ variable for folder locs If os = "64bit" Then Me.VBProject.References.AddFromFile ("C:\WINDOWS\SysWOW64\MSCOMCTL.OCX") Else Me.VBProject.References.AddFromFile ("C:\WINDOWS\system32\MSCOMCTL.OCX") End If End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) For Each ref In Me.VBProject.References If ref.Name = "MSComctlLib" Then Me.VBProject.References.Remove ref End If Next ref End Sub 

我用ADODB DLL做了一个快速testing,它似乎工作,但我不知道如何具体使用该DLL。 让我知道,如果这个作品,虽然! 当然比选项3好多了!