2016-06-22 5 views
1

私のクラスの1つのメソッドにレコードセットを渡そうとすると、タイプエラーが発生します。 私のコードは次のようになります。合格レコードセットタイプエラー

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と呼んでいます)。

どのような考えですか?ありがとう。

+0

byValを渡してみましたか? – Kyle

+0

同じこと、実行時エラー13:型の不一致 – nick

答えて

1
dataWriter.write (rs) 

括弧を削除します。基本的に、あなたはそのパラメータにレコードセットのデフォルトのプロパティ(そのFieldsプロパティのゲッターであるので、ADODB.Fieldsオブジェクト)の値を渡している:これらはに関係なくwriteの署名が言うのをを評価し、ByValを渡すことがrsを余儀なくされていますADODB.Recordsetとなるため、タイプの不一致エラーが発生します。 Writeが全くその参照を再割り当てする必要がないので

dataWriter.Write rs 

は、本当にByValを渡す必要があるレコードの参照を...渡します。

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 
関連する問題