【问题标题】:Compiler Error: User-defined types not defined编译器错误:未定义用户定义的类型
【发布时间】:2018-08-15 03:46:33
【问题描述】:

我在这一行收到编译时错误“未定义用户定义的类型”:

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

【问题讨论】:

标签: vba excel


【解决方案1】:

我忘记添加对“Microsoft ActiveX 数据对象 2.5 库”的引用:early binding 需要此引用。

如何获得该参考资料:

Tools > References > 勾选“Microsoft ActiveX Data Objects 2.5 Library”前面的复选框

其他可用的库包括:

Microsoft ActiveX 数据对象 2.6 库

Microsoft ActiveX 数据对象 2.7 库

Microsoft ActiveX 数据对象 2.8 库

Microsoft ActiveX 数据对象 6.1 库

【讨论】:

    【解决方案2】:

    您可以使用后期绑定:

    Dim cn As Object
    

    会让问题消失。在执行Set cn = CreateObject("ADODB.Connection") 语句时,VBA 会自动进行引用。

    【讨论】:

    • @Jean-FrançoisCorbett 似乎我能让这个工作的唯一方法是添加参考......可能我不明白你的解决方案。
    • 在此测试Dim cn As Object: Set cn = CreateObject("ADODB.Connection"),工作正常。你真的遇到和以前一样的错误吗?
    【解决方案3】:

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

    Set cn = CreateObject("ADODB.Connection")
    

    【讨论】:

    • 这不提供任何新的解决方案。这已经在另一个答案中说了。这种方法称为后期绑定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多