投稿日 | : 2006/12/20(Wed) 20:47 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re^3: DBからエクセルへデータをセットする時のエラー |
> rs(1) を rs(1).Value にすると回避できるので、
「既定のプロパティは省略しない方が安全」という教訓ということで…。
> 誰か同様の現象になるか、実行していただけますでしょうか・・・
なりますねぇ。「!」経由でも同様でした。
With xlBook.Worksheets(1)
.Cells(3, 1).Value = rs(0)
.Cells(3, 2).Value = rs!f2 '下記のエラーが発生。rs("f2") でも同様。
End With
|
| 実行時エラー '-2147417851 (80010105)':
| 'Value' メソッドは失敗しました: 'Range' オブジェクト
|
さらに検証。
<追加実験 1> Field.Value プロパティだけでなく、Recordset.Collect プロパティでも OK。
With xlBook.Worksheets(1)
.Cells(3, 1).Value = rs(0)
.Cells(3, 2).Value = rs.Collect(1) ' エラーにならない
End With
<追加実験 2> というより、一度成功した後なら大丈夫らしい……。
With xlBook.Worksheets(1)
.Cells(3, 1).Value = rs(0)
.Cells(3, 2).Value = rs.Collect(1) ' エラーにならない
.Cells(3, 3).Value = rs(1) ' エラーにならない
End With
<追加実験 3> その上、エラーになるのは最初の 1 回だけということが発覚。
With xlBook.Worksheets(1)
.Cells(3, 1).Value = rs(0)
On Error Resume Next
.Cells(3, 2).Value = rs(1) 'エラーを読み飛ばしてから
On Error GoTo 0
.Cells(3, 2).Value = rs(1) 'もう一度同じことをすると、今度は成功
End With
<追加実験 4> ちなみに、括弧で囲っただけでも動作する模様。
With xlBook.Worksheets(1)
.Cells(3, 1).Value = rs(0)
.Cells(3, 2).Value = (rs(1)) '括弧で囲むと、エラーにならない
End With