2011-03-18 119 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

相關問題