"Type mismatch" 遍历 ADODB 记录集的字段时出错

"Type mismatch" error when iterating through fields of ADODB recordset

工作簿的

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

abc  def  ghi
123  456  789

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

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 和 select "Definition" 时,我收到此消息:

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

当我通过键入 Dim 语句声明变量 fld 时,当我键入 As 时,我得到包含单词 Field 的 Intellisense,因此对象在该级别是已知的。

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

似乎 field 没有解析为 ADODB.Field

类型的对象

所以改变这个:

Dim fld As field

对此:

Dim fld As ADODB.Field

这可能与引用两个库有关,这两个库中都有名为 'field' 的对象:

Microsoft Office 14.0 Access database engine Object Library

Microsoft ActiveX Data Objects 6.1 Library