【问题标题】:"Object Library invalid or contains references..." in Excel VBA with DatePicker带有 DatePicker 的 Excel VBA 中的“对象库无效或包含引用...”
【发布时间】:2010-12-20 23:27:31
【问题描述】:

一段时间以来,我一直在使用包含大量 VBA 代码的 Excel 工作簿,现在我已将此文件发送给一些同事进行测试,但它在他们的计算机上不起作用。 我们都在同一家公司工作,并且拥有 Windows XP SP2 和 Office 2003。

工作簿有一个在单击形状时打开的表单,其中包含一些控件。 当他们单击表单的形状以显示以下错误时:

"对象库无效或包含 对对象定义的引用 找不到”

在表单中有一个 DatePicker,我认为这就是问题所在。如果我从表单中删除 datePicker 并再次向他们发送文件,他们不会收到此错误消息。

我已经尝试删除这两个站点“Microsoft”和“lessanvaezi”中提到的 mscomct2.exd 文件,但错误仍然弹出。我检查并生成了新的 .exd 文件。

一些附加信息:

  1. 我检查了他们的系统,他们确实在正确的位置 (c:\Winxp\System32) 有文件 mscomct2.ocx。
  2. 如果我打开一个空的 Excel 文件,转至 VBA 编辑器,转至工具 -> 参考,我看不到注册“Microsoft Common Control-2 6.0 (SP6)”(mscomct2.ocx) 的选项。相反,我看到的是“Microsoft Windows Common Controls Satellite-3 6.2)”(cmct3de.dll)。
  3. 我将带有 datePicker 的文件发送给我的同事,但没有提及“Microsoft Common Control-2 6.0 (SP6)”。在单击形状并打开表单之前,我尝试使用以下代码动态引用 MSCOMCT2.ocx 库。它引用了“Microsoft Common Control-2 6.0 (SP6)”,但仍然弹出错误。

Sub RegisterCtl()

'MSComCt2.ocx
strGUID = "{86CF1D34-0C5F-11D2-A9FC-0000F8754DA1}"
ThisWorkbook.VBProject.References.AddFromGuid guid:=strGUID, Major:=1, Minor:=0

结束子

  1. 如果我随后转到 VBE 编辑器中的表单并右键单击 工具箱,然后转到 用于添加的附加控件 “微软日期和时间选择器” 控制,我看到列出的选项 两次。不幸无视 我选择的其中一个,行为 是一样的:日期选择器符号 在工具箱中添加了,但是当我 将控件拖到窗体中,a msgBox 弹出说该控件 不可用。

有人知道出了什么问题吗?我该怎么做才能让它在他们的计算机上运行?

感谢您的帮助。

编辑:

出现此问题的计算机已升级,因此我无法找到适合我的情况的具体解决方案。我选择 Archers 解决方案,因为它帮助了大多数人(Most Upvotes)。

【问题讨论】:

    标签: vba excel activex registry


    【解决方案1】:

    我也有同样的问题。 http://support.microsoft.com/kb/957924/en-us 删除所有 .exd 文件让我的程序正常运行!

    进入命令提示符并键入以下 DOS 命令:

    代码:

    CD \文档和设置

    DEL /S /A:H /A:-H *.EXD

    【讨论】:

    • 我运行了 dos 命令(它删除了“MSComCtl2.exd”),但仍然弹出错误消息。
    • 我正在为KB2598041(2012 年 4 月 10 日)使用此解决方案,并且效果很好。谢谢。
    • C:\Documents and Settings>DEL /S /A:H /A:-H *.EXD 已删除文件 - C:\Documents and Settings*****\Application Data\Microsoft\ Forms \MSComctlLib.exd 已删除文件 - C:\Documents and Settings****\Local Settings\Temp\Excel8.0\MSF orms.exd 已删除文件 - C:\Documents and Settings*****\Local Settings\ Temp\VBE\MSComctl Lib.exd 已删除文件 - C:\Documents and Settings*****\Local Settings\Temp\VBE\MSComDlg .exd 已删除文件 - C:\Documents and Settings*****\Local Settings \Temp\VBE\MSForms。 exd 在此之后错误消失了
    【解决方案2】:

    我遇到了这个问题。我不记得原因是什么,但是在您拥有日期/时间选择器的用户表单中,将其放入 userform_initialize。如果没有正确的引用,该代码只会添加一个文本框。我知道它不是最好的解决方案,但它是一种解决方法。由于我们的系统管理员,我无法在任何机器上运行 regsvr32。

    Dim dtP As Object
    Dim hasDtPicker As Boolean
    On Error Resume Next
    Set dtP = frmSearch.Frame24.Controls.Add("MSComCtl2.DTPicker", "DTPicker1", True)
    If Err.Number <> 0 Or dtP Is Nothing Then
         hasDtPicker = False
         'change "frmsearch.Frame24" to the area where you want the date and time picker to be.
         Set dtP = frmSearch.Frame24.Controls.Add("Forms.TextBox.1", "DTPicker1", True)
         dtP.Text = [todays_date].Value
    Else
         hasDtPicker = True
    End If
    '
    ' formatting properties for both TextBox and DTPicker
    '
    With dtP
         .Width = 67.5
         .height = 18
         .Left = lblNextActionDate.Left
         .Top = lblNextActionDate.Top + lblNextActionDate.height + 5
    End With
    

    【讨论】:

    • 嗨@Patrick。谢谢(你的)信息。由于我的工作簿的复杂性,我选择免费使用 DatePicker。但我仍然想了解发生了什么以及如何解决它。
    【解决方案3】:

    我认为#2 是问题的根源。如果您可以让 mscomct2.ocx 显示在新工作簿上的工具 - 参考中,它可能会解决您的其余问题。您是否尝试注册ocx?开始 - 运行 - cmd 打开一个 DOS 窗口。导航到 system32 文件夹。类型

    regsvr32 mscomct2.ocx
    

    我认为这会将 ocx 放入“工具 - 参考”框中,并希望能够修复它。这是在 Windows 7 上安装 ocx 的链接

    http://www.dailydoseofexcel.com/archives/2010/05/28/calendar-control-dll-on-windows-7-64-bit/

    不是你的情况,但也许有帮助。另外,请参阅 regsvr32 上的 MS 页面

    http://support.microsoft.com/kb/249873

    【讨论】:

    • 感谢迪克的帖子。我尝试注册,但错误仍然弹出。注册 mscomct2.ocx 后,我检查了他的 Tool->Reference 并且“Microsoft Common Control-2 6.0 (SP6)”仍然不可用。
    • 我也再次删除了.exd。有趣的是,新的 .exd 文件是今天创建的,修改日期是今天,但创建日期是几个月前。非常感谢任何进一步的建议。
    【解决方案4】:

    我最近遇到了类似的问题。大约两天后下载新的 mscomct2.ocx 文件: http://support.microsoft.com/kb/297381 未注册的前一个,手动删除一个奇怪的 MRU 密钥,其中一个字段带有“mscomct2”(以防万一),注册新的(使用 Access ActiveX 菜单)。 从那时起,mscomct2.ocx 中的所有控件仅列出一次!

    但不幸的是,这并没有删除错误消息。但是在两次连续导入到新容器后: original_file.mdb --> db1.mdb --> db2.mdb 不再出现错误消息(在 db2.mdb 文件中)。但是在 original_file.mdb 和 db1.mdb 之间的传输过程中它们仍然可见。

    【讨论】:

      【解决方案5】:

      我在发送给另一个组的文件时遇到了同样的问题。我在用户表单中有一个日期选择器,该文件在 Excel(2007 和 2010)中运行良好,除了这一组中的机器。错误信息与原始帖子中的相同。

      正如一位调查过的支持人员所描述的那样,答案似乎如下:

      结果表明用户计算机中缺少 MSCOMCT2.OCX 文件。此文件是 Microsoft Windows Common Controls-2 6.0 (MSCOMCT2.OCX)。看来此控件提供了模型中使用日期选择器的功能。

      修复他的电脑的过程如下:

      1. 将 mscomct2.ocx 文件复制到 c:\windows\system32

      2. 通过在他的计算机上运行以下命令来注册 ocx 文件。在命令提示符下键入 regsvr32.exe c:\windows\system32\mscomct2.ocx 然后按 Enter。


      此指令可能特定于该组的计算机,但将 mscomct2.ocx 识别为罪魁祸首只是一个开始。我没有关于从何处获取此文件的具体建议,只是它似乎可以在 Internet 上找到。

      【讨论】:

        【解决方案6】:

        尝试从这里删除启动插件(注意 Office 版本):

        C:\Program Files\Microsoft Office\OFFICE12\XLSTART\
        

        【讨论】:

        • Office 不是唯一使用 VBA 的程序
        • 问题是关于 Excel,不是吗?
        【解决方案7】:

        只需取消注册MSCOMCTL.OCX,然后再注册即可。

        **32-bit OS** C:\Windows\System32\MSCOMCTL.OCX
        
        **64-Bit OS** C:\Windows\SySWOW64\MSCOMCTL.OCX
        

        【讨论】:

          【解决方案8】:

          检查 DatePicker ActiveX 控件上的 (Name) 字段是否没有递增。我有一个带有 ComboBox 的 Excel 表,每次打开时名称都会更改,并且在代码中引用它的地方会引发同样的错误。

          我引用了 ComboBox1,但奇怪的是它现在是 ComboBox17。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-09-22
            • 2014-06-03
            • 1970-01-01
            • 2015-10-09
            • 1970-01-01
            • 2017-08-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多