尝试将Recordset传递给我的某个类的方法时出现类型错误。 我的代码如下所示:
Dim rs As ADODB.recordset
Set rs = New ADODB.recordset
'do some connection stuff
'create command
rs.Open cmd
dataWriter.write(rs)
方法如下:
sub write(byRef record as ADODB.recordset)
range("A1").CopyFromRecordset record
end sub
除了我在尝试将记录集传递给write
子句时遇到的类型错误(除非我在第一个代码块中调用range("A1").copyfromrecordset rs
它工作正常),所有工作都有效。
有什么想法?感谢。
答案 0 :(得分:1)
dataWriter.write (rs)
删除括号。这些都迫使rs
评估并传递ByVal
,无论 write
的签名是什么:基本上你是'将记录集的默认属性值(即Fields
属性getter,即ADODB.Fields
个对象)重新传递给期望ADODB.Recordset
的参数,因此类型不匹配错误。
dataWriter.Write rs
将传递记录集引用...应该真正传递ByVal
,因为Write
根本不需要重新分配该引用。
Sub Write(ByVal record As ADODB.Recordset)
Range("A1").CopyFromRecordset record
End Sub
摘要是括号评估表达式 - 在即时窗格中尝试:
?TypeName(New ADODB.Recordset)
Recordset
?TypeName((New ADODB.Recordset))
Fields
请注意,Range("A1")
隐含地指的是活动工作表,它是草率的。您应该在那里明确地使用target
参数:
Sub Write(ByVal record As ADODB.Recordset, ByVal target As Excel.Worksheet)
target.Range("A1").CopyFromRecordset record
End Sub