gpt4 book ai didi

64 位 Windows 7 上的 Excel 2003 自动更改对 SysWOW64\MSCOMCTL.OCX 的引用,因此 32 位 Excel 会提示

转载 作者:行者123 更新时间:2023-12-02 22:09:50 27 4
gpt4 key购买 nike

在 Excel 2003 VBA 项目中,我使用 MSCOMCTL.OCX 中的控件。也就是说,VBA 项目引用了 System32\MSCOMCTL.OCX。

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

但是,当我将该项目发送给使用 32 位 Windows XP 的客户时,该项目在打开过程中出现提示,因为他的系统上不存在 SysWOW64\MSCOMCTL.OCX。

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

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

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

方法 1. 和 2. 并不能真正解决任何问题,而解决方案 3 则需要大量工作。

任何想法将不胜感激。

最佳答案

如果工作簿关闭时自动关闭引用会怎样?这样,当工作簿打开时,引用就不会被“破坏”,并且您的所有控制应该仍然良好。

即:

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 进行了快速测试,它似乎可以工作,但我不确定您具体是如何使用该 DLL 的;不过,请告诉我这是否有效!当然比选项 3 好很多!

关于64 位 Windows 7 上的 Excel 2003 自动更改对 SysWOW64\MSCOMCTL.OCX 的引用,因此 32 位 Excel 会提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14054371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com