2017-05-30 103 views
3

我試圖創建一個excel程序,可以使用VBA在同一個文件中從sheet1到sheet2中獲取數據。但是當我聲明ADODB時,它不會出現在下拉列表中。當我嘗試運行子我得到'用戶定義類型未定義'的錯誤。任何人都可以請與我分享任何修復?Excel VBA用戶定義類型未定義 -

的代碼如下:

Sub testsql() 

'declare variable 
Dim objMyConn As ADODB.Connection 
Dim objMyCmd As ADODB.Command 
Dim objMyRecordSet As ADODB.Recordset 

Set objMyConn = New ADODB.Connection 
Set objMyCmd = New ADODB.Command 
Set objMyRecordSet = New ADODB.Recordset 

'open connection 
objMyConn.connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & wbWorkBook & ";Extended Properties=Excel 8.0;" 
objMyConn.Open 

'set and execute command 
Set objMyCmd.activeconnection = objMyConn 
objMyCmd.CommandText = "select top 10000 [Die No], Description from DieMaintenanceEntry" 
objMyCmd.CommandType = adcmdtext 


'open recordset 
Set objMyRecordSet.Source = objMyCmd 
objMyRecordSet.Open 

'copy data to excel 
ActiveWorkbook.Sheets("Display-Die Maintenance Summary").ActiveSheet.Range("A5").CopyFromRecordset (objMyRecordSet) 

End Sub 
+0

你參考過Activex庫嗎? –

+0

如何?在這裏完成初學者如此不確定。 – hjh93

+1

工具 - >參考 - > Microsoft ActiveX Data object 2.0庫檢查框點擊確定 –

回答

4

您可以通過兩種方式解決這個問題:

  1. 早期綁定(由您的代碼暗示)
    你需要做的是參考正確Microsoft ActiveX Data Object。對於我的版本,它是6.1

    References Library

  2. 使用後期綁定(無需引用庫)

    Dim objMyConn As Object '/* Declare object type variable */ 
    Dim objMyCmd As Object 
    Dim objMyRecordset As Object 
    
    '/* Set using create object */ 
    Set objMyConn = CreateObject("ADODB.Connection") 
    Set objMyCmd = CreateObject("ADODB.Command") 
    Set objMyRecordset = CreateObject("ADODB.Recordset") 
    

至於使用哪個,我只能給建議。在開發過程中,請使用Early Binding來充分利用Intellisense。部署時,請更改爲Late Binding以解決版本兼容性問題。

+0

感謝您的輸入。但現在改變代碼後,我得到一個新的錯誤。 – hjh93

+0

運行時錯誤'-2147467259(80004005)' – hjh93

+0

來自代碼 – hjh93

相關問題