传递logging集types错误

试图将Recordset传递给我的某个类的某个方法时出现types错误。 我的代码如下所示:

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 

一切工作,除了types错误时,我试图将logging传递给write子(例如,如果我打电话range("A1").copyfromrecordset rs在第一个代码块工作正常)。

有什么想法吗? 谢谢。

 dataWriter.write (rs) 

删除括号。 这些强制rs评估并通过ByVal 无论签名write什么:基本上,你传递logging集的默认属性值(这是它的Fields属性getter,所以一个ADODB.Fields对象)到一个参数期望ADODB.Recordset ,因此types不匹配错误。

 dataWriter.Write rs 

将通过ByVal传递的logging集引用,因为Write完全不需要重新引用该引用。

 Sub Write(ByVal record As ADODB.Recordset) Range("A1").CopyFromRecordset record End Sub 

外带是括号评估expression式 – 在直接窗格中尝试:

 ?TypeName(New ADODB.Recordset) Recordset ?TypeName((New ADODB.Recordset)) Fields 

请注意, Range("A1")隐式引用活动工作表,这是sl。。 你应该在那里明确地采取一个target参数:

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