2017-05-30 255 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