编译器错误:未定义用户定义类型

32

我在这一行代码上得到了编译错误:"未定义用户定义的类型"

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

可能是重复的问题:'User Defined Type Not Defined' error - Zev Spitz
3个回答

60

我忘记添加 "Microsoft ActiveX Data Objects 2.5 Library" 的引用了:这个引用对于早期绑定是必需的。

如何获取该引用:

工具 > 引用 > 勾选 "Microsoft ActiveX Data Objects 2.5 Library" 前面的复选框

其他可用的库包括:

Microsoft ActiveX Data Objects 2.6 Library

Microsoft ActiveX Data Objects 2.7 Library

Microsoft ActiveX Data Objects 2.8 Library

Microsoft ActiveX Data Objects 6.1 Library


18

你可以使用后期绑定:

Dim cn As Object

使用 VBA 会自动创建引用,当执行 Set cn = CreateObject("ADODB.Connection") 语句时,这将解决问题。


@Jean-FrançoisCorbett 看起来我唯一能让它工作的方法是添加引用... 可能我没有理解你的解决方案。 - Shrout1
在这一端测试了 Dim cn As Object: Set cn = CreateObject("ADODB.Connection"),运行正常。你真的还是遇到之前的同样错误吗? - Jean-François Corbett

-3

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

Set cn = CreateObject("ADODB.Connection")

2
这并没有提供任何新的解决方案。其他答案中已经说过了。这种方法被称为后期绑定。 - ZygD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接