&引用;对象库无效或包含引用…”;在Excel VBA中使用日期选择器

&引用;对象库无效或包含引用…”;在Excel VBA中使用日期选择器,vba,excel,activex,registry,Vba,Excel,Activex,Registry,我已经在一个Excel工作簿上工作了一段时间,其中有很多VBA代码,现在我已经将此文件发送给一些同事进行测试,但它在他们的计算机中不起作用。 我们都在同一家公司工作,在Office 2003中安装了Windows XP SP2 工作簿有一个窗体,单击形状时会打开,其中包含一些控件。 当他们单击窗体的形状以显示以下错误时: “对象库无效或包含 对对象定义的引用 找不到“ 表单中有一个日期选择器,我认为问题就在这里。如果我从表单中删除日期选择器并再次向他们发送文件,他们不会收到此错误消息 我已经尝试

我已经在一个Excel工作簿上工作了一段时间,其中有很多VBA代码,现在我已经将此文件发送给一些同事进行测试,但它在他们的计算机中不起作用。 我们都在同一家公司工作,在Office 2003中安装了Windows XP SP2

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

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

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

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

其他一些信息:

  • 我检查了他们的系统,他们的文件mscomct2.ocx确实位于正确的位置(c:\Winxp\System32)
  • 如果打开空Excel文件,请转到VBA编辑器转到工具->参考,我看不到注册“Microsoft Common Control-2 6.0(SP6)”的选项(mscomct2.ocx)。相反,我看到的是“MicrosoftWindowsCommonControlsSatellite-36.2”(cmct3de.dll)
  • 我用日期选择器向同事发送文件,但没有引用“Microsoft Common Control-2 6.0(SP6)”。在单击形状并打开表单之前,我尝试使用以下代码以友好方式引用MSCOMCT2.ocx库。它引用了“Microsoft Common Control-2 6.0(SP6)”,但仍然会弹出错误
  • 子寄存器CTL()

    端接头

  • 如果我在VBE编辑器中转到表单并右键单击 然后去工具箱 要添加的其他控件 “Microsoft日期和时间选择器” 控件,我看到该选项已列出 两次。不幸的是没有君王 不管我怎么说,行为 相同:日期选择器符号 已添加到工具箱中,但当 将控件拖到窗体上,然后单击 msgBox弹出消息说控件 不可用
  • 有人知道怎么回事吗?我能做些什么使它在他们的计算机上运行

    谢谢你的帮助

    编辑:

    有这个问题的电脑已经升级了,所以我无法找到具体的解决方案。我选择Archers解决方案,因为它帮助了最多的人(最多的投票)。

    我认为#2是问题的根源。如果您可以让mscomct2.ocx显示在新工作簿的工具引用中,它可能会解决您的其余问题。你试过注册ocx吗?Start-Run-cmd打开DOS窗口。导航到system32文件夹。类型

    regsvr32 mscomct2.ocx
    
    我认为这将把ocx放在工具参考框中,并希望能够修复它。这里有一个在Windows7上安装ocx的链接

    不是你的情况,但可能有帮助。另外,请参见MS关于regsvr32的页面


    我有这个问题。我不记得原因是什么,但是在你的userform中有日期/时间选择器,把它放在userform\u 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
    
    Dim dtP作为对象
    Dim HasdPicker作为布尔值
    出错时继续下一步
    Set dtP=frmSearch.Frame24.Controls.Add(“MSComCtl2.DTPicker”,“DTPicker1”,True)
    如果错误号0或dtP为空,则
    hasDtPicker=False
    '将“frmsearch.Frame24”更改为您希望日期和时间选择器所在的区域。
    Set dtP=frmSearch.Frame24.Controls.Add(“Forms.TextBox.1”,“DTPicker1”,True)
    dtP.Text=[todays\u date].Value
    其他的
    hasDtPicker=True
    如果结束
    '
    '文本框和DTPicker的格式化属性
    '
    使用dtP
    .宽度=67.5
    .身高=18
    .Left=lblNextActionDate.Left
    .Top=lblNextActionDate.Top+lblNextActionDate.height+5
    以
    
    我也有同样的问题。删除所有.exd文件使我的程序工作

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

    代码:

    CD\文档和设置

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


    我最近也有类似的问题。大约两天后,下载了新的mscomct2.ocx文件: 取消注册以前的一个,手动删除其中一个字段中带有“mscomct2”的奇怪MRU密钥(仅供参考),注册新密钥(使用Access ActiveX菜单)。 从那时起,mscomct2.ocx中的所有控件只列出一次

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

    我发送到另一个组的文件也有同样的问题。我在用户表单中有一个日期选择器,该文件与Excel(2007和2010)配合良好,但这一组中的机器除外。错误消息与原始发布中的消息相同

    答案似乎是这样的,正如一位调查此事的支持人员所描述的:

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

    修复他的计算机的过程如下:

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

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


  • 此指令可能特定于组的计算机,但
    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
    
    C:\Program Files\Microsoft Office\OFFICE12\XLSTART\
    
    **32-bit OS** C:\Windows\System32\MSCOMCTL.OCX
    
    **64-Bit OS** C:\Windows\SySWOW64\MSCOMCTL.OCX