带有DatePicker的Excel VBA中的“对象库无效或包含引用...”

时间:2010-12-20 23:27:31

标签: excel vba excel-vba activex registry

我一直在研究一个包含大量VBA代码的Excel工作簿,现在我已将此文件发送给一些同事进行测试,但它不能在他们的计算机上运行。 我们都在同一家公司工作,并将Windows XP SP2与Office 2003配合使用。

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

  

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

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

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

一些其他信息:

  1. 我检查了他们的系统,他们确实将文件mscomct2.ocx放在正确的位置(c:\ Winxp \ System32)。
  2. 如果我打开一个空的Excel文件,请转到VBA编辑器转到Tools-> Reference,我没有看到注册“Microsoft Common Control-2 6.0(SP6)”(mscomct2.ocx)的选项。相反,我看到“Microsoft Windows公共控件Satellite-3 6.2)”(cmct3de.dll)。
  3. 我使用datePicker发送我的同事文件,但没有引用“Microsoft Common Control-2 6.0(SP6)”。在单击形状并打开表单之前,我尝试使用以下代码以语音方式引用MSCOMCT2.ocx库。它引用了“Microsoft Common Control-2 6.0(SP6)”,但错误仍然存​​在。
  4.   

    Sub RegisterCtl()

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

    结束Sub

    1. 如果我然后转到VBE编辑器中的表单并右键单击 工具箱,然后去 添加的附加控件 “Microsoft Date and TimePicker” 控制,我看到列出的选项 两次。不幸的是,不顾一切 这个行为让我感到高兴 是相同的:datepicker符号 在工具箱中添加,但是当我 将控件拖到窗体中,a msgBox pops说控件 没有。
    2. 有谁知道出了什么问题?我该怎么做才能让它在电脑上运行?

      我感谢任何帮助。

      修改

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

8 个答案:

答案 0 :(得分:11)

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

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

代码:

  

CD \ Documents and Settings

     

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

答案 1 :(得分:3)

我有这个问题。我不记得是什么原因,但在你的userform中你有日期/时间选择器,把它放在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

答案 2 :(得分:2)

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

regsvr32 mscomct2.ocx

我认为这会将ocx放在Tools - References框中,并希望能修复它。这是在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

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

我发送给另一个组的文件遇到同样的问题。我在用户表单中有一个日期选择器,除了这一组中的计算机外,该文件在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键。


  3. 该指令可能特定于该组的计算机,但mscomct2.ocx的标识是罪魁祸首。我没有具体建议在哪里获取此文件,除了它似乎可以在互联网上获得。

答案 5 :(得分:1)

尝试从此处删除启动插件(介意Office版本):

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

答案 6 :(得分:1)

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

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

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

答案 7 :(得分:1)

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

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