Vba 正在传递记录集类型错误

Vba 正在传递记录集类型错误,vba,excel,adodb,recordset,Vba,Excel,Adodb,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").CopyFromRec

试图将记录集传递给我的一个类的方法时,我遇到了一个类型错误。 我的代码如下所示:

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
,一切都正常)

有什么想法吗?谢谢

去掉括号。这些都迫使
rs
被计算并传递
ByVal
,而不管
write
的签名是什么:基本上你传递的是记录集的默认属性值(这是它的
Fields
属性getter,所以是
ADODB.Fields
对象)输入一个参数,该参数需要一个
ADODB.Recordset
,因此会出现类型不匹配错误

将传递记录集引用。。。实际上应该通过val
Write
传递,因为
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”)
隐式引用的是活动工作表,这是草率的。您应该在此处显式使用
目标
参数:

Sub Write(ByVal record As ADODB.Recordset, ByVal target As Excel.Worksheet)
    target.Range("A1").CopyFromRecordset record
End Sub

您是否尝试过通过val传递它?给了我同样的信息,运行时错误13:类型不匹配
?TypeName(New ADODB.Recordset)
 Recordset

?TypeName((New ADODB.Recordset))
 Fields
Sub Write(ByVal record As ADODB.Recordset, ByVal target As Excel.Worksheet)
    target.Range("A1").CopyFromRecordset record
End Sub