2011-03-18 118 views
15

我得到这一行的编译时错误“未定义的用户定义类型”:编译器错误:用户定义类型没有定义

Dim cn As ADODB.Connection 

出了什么问题?

代码:

Sub test() 

    Dim cn As ADODB.Connection 

    'Not the best way to get the name, just convenient for notes 

    strFile = Workbooks(1).FullName 
    strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" 
    Set cn = CreateObject("ADODB.Connection") 
    'For this to work, you must create a DSN and use the name in place of 

    'DSNName 

    'strSQL = "INSERT INTO [ODBC;DSN=DSNName;].NameOfMySQLTable " & "Select AnyField As NameOfMySQLField FROM [Sheet1$];" 
    strSQL = "SELECT F1 FROM [Sheet1$];" 
    cn.Execute strSQL 
End Sub 
+0

的可能的复制[“用户定义类型未定义”错误(http://stackoverflow.com/questions/24261557/user-defined-type-not-defined-error) – 2016-12-29 08:35:33

回答

33

我忘了添加引用 “Microsoft ActiveX数据对象2.5库”:

工具>参考>选中该复选框中的“Microsoft ActiveX数据前方的物体2.5库”

10

您可以使用后期绑定:

Dim cn As Object 

将使问题消失。当执行Set cn = CreateObject("ADODB.Connection")语句时,VBA将自动生成参考。

+0

@让 - FrançoisCorbett似乎像我能得到这个工作的唯一方法是通过添加参考...可能我不明白你的解决方案。 – Shrout1 2013-09-06 18:26:18

+0

在这一端测试过'Dim cn As Object:Set cn = CreateObject(“ADODB.Connection”)',可以正常工作。你真的得到了和以前一样的错误吗? – 2015-04-19 18:28:39

-3

我试着添加Microsoft ActiveX Data Objects 2.5和2.8库,但没有成功。但是,当我尝试创建像下面这样的新对象时,它工作。

Set cn = CreateObject("ADODB.Connection") 
+0

这不提供任何新的解决方案。这已经在其他答案中说过了。这种方法称为后期绑定。 – ZygD 2015-09-26 14:52:11

相关问题