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
,因此会出现类型不匹配错误
将传递记录集引用。。。实际上应该通过valWrite
传递,因为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