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集合。我还没有弄清楚这两个应用程序之间有什么区别(如果有的话)。
答案 0 :(得分:0)
似乎field
未被解析为ADODB.Field
所以改变这个:
Dim fld As field
到此:
Dim fld As ADODB.Field
这可能与引用两个库都有关,这两个库都有“field”对象:
Microsoft Office 14.0 Access数据库引擎对象库
Microsoft ActiveX数据对象6.1库