"类型不匹配"迭代ADODB记录集的字段时出错

时间:2016-05-23 01:37:51

标签: excel vba excel-vba adodb

工作簿的

Sheet1在单元格A1:C2中具有以下值:

abc  def  ghi
123  456  789

我在ADODB记录集中打开此工作表并使用以下代码读取字段:

Public Sub printColumnHeaders()

Dim fld As field

'class for handling ADODB operations
Dim ac As ADOConnector

Dim rs As ADODB.Recordset

Set ac = New ADOConnector

'establish ADODB.Connection
ac.connect "T:\test\testADO.xlsx"

'open recordset of Sheet1
Set rs = ac.selectSQL("select * from [Sheet1$]")

rs.MoveFirst

'test if recordset has been successfully opened
'by checking individual value
Debug.Print rs.Fields(0).Name
Debug.Print rs.Fields(0).value

For Each fld In rs.Fields
    Debug.Print fld.value
Next

End Sub

成功打印:

abc
123

但随后在For Each fld In rs.Fields

上抛出错误
Type mismatch

当我右键点击field并选择"定义"时,我收到此消息:

Identifier under cursor is not recognized

我启用了以下相关参考:

Microsoft Scripting Runtime
Microsoft Office 14.0 Access database engine Object Library
Microsoft ActiveX Data Objects 6.1 Library
Microsoft ActiveX Data Objects Recordset 6.0 Library
Microsoft Forms 2.0 Object Library

当我通过键入fld语句声明变量Dim时,当我输入As时,我会收到包含单词Field的智能感知,所以对象在那个级别是已知的。

特别奇怪的是,我从另一个包含相同ADOConnector次迭代的VBA应用程序复制了For each fld in rs.Fields的代码,而另一个应用程序启用了所有相同的引用,并显示了相同的Identifier under cursor is not recognized消息,但成功迭代通过Fields集合。我还没有弄清楚这两个应用程序之间有什么区别(如果有的话)。

1 个答案:

答案 0 :(得分:0)

似乎field未被解析为ADODB.Field

类型的对象

所以改变这个:

Dim fld As field

到此:

Dim fld As ADODB.Field

这可能与引用两个库都有关,这两个库都有“field”对象:

  
    

Microsoft Office 14.0 Access数据库引擎对象库

         

Microsoft ActiveX数据对象6.1库