传递记录集类型错误
Passing Recordset Type Error
我在尝试将 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
,它工作正常)。
有什么想法吗?谢谢
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
我在尝试将 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
,它工作正常)。
有什么想法吗?谢谢
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