传递Recordset类型错误

时间:2016-06-22 15:26:27

标签: excel vba excel-vba adodb recordset

尝试将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它工作正常),所有工作都有效。

有什么想法?感谢。

1 个答案:

答案 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