VB6のADO使用でExcelブックへデータを書込むには?


きーさま  2010-01-19 17:54:30  No: 143085  IP: 192.*.*.*

VB6でADOを使ってExcelファイルに新規行を追加してデータを書込たいのですが、以下のコードを動かすと1回目は問題ないですが、2度目はFieldCount値がゼロになってしまい、ブックをExcel本体でシートの最下行の次の空白行を削除しないと本来のFieldCount値に戻らなくなってしまいます。
列見出しを使わないことに問題があるのでしょうか?よろしくお願いしす

WinXP(SP3) VB6(SP6)  Excel2002(SP3) を使用
テストファイル名"Test.xls"でシート名"Sheet1"です
−−−−−−−−−−−−−−−−−−−−−−−−

Dim DB As ADODB.Connection
Dim RS As ADODB.Recordset
Set DB = New ADODB.Connection
DB.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source = Test.xls;" & _
        "Extended Properties=""Excel 8.0;HDR=NO;"""
Set RS = New ADODB.Recordset
RS.Open "[Sheet1$]", DB, adOpenStatic, adLockOptimistic

MsgBox "レコード数=" & RS.RecordCount & "  フィールド数=" &_
RS.Fields.Count, , "現在"

RS.AddNew
For L = 0 To RS.Fields.Count - 1
    RS.Fields(L).Value = L '<- L は仮の書き込みデータ
Next L
RS.Update

MsgBox "レコード数=" & RS.RecordCount & "  フィールド数=" &_
RS.Fields.Count, , "終了"

RS.Close: Set RS = Nothing
DB.Close: Set DB = Nothing  
End

編集 削除
きーさま  2010-01-19 18:07:53  No: 143086  IP: 192.*.*.*

<追加補足です>
テスト用Excelファイルは(1行×任意の列数)のテストデータをVBプロジェクトと同じディレクトリに置いています。
DB接続時に"HDR=YES"として一行目を列見出しとして読み込むと、FieldCount値が置き換わる事はなくなるのですが、今度はセルに文字列として書き込まれてしまいます。

編集 削除
魔界の仮面弁士  2010-01-19 18:26:39  No: 143087  IP: 192.*.*.*

# 回答に非ず

> 2度目はFieldCount値がゼロになってしまい

A1:C6 の範囲に、
  a,b,c
  1,2,3
  4,5,6
  7,8,9
  10,11,12
  13,14,15
というデータを記録した『Excel 2007』製の 2003 形式ブックを作って
試してみましたが、こちらでは現象を再現できませんでした。

環境の違いのせいなのか、元のブック自体の問題なのか…。

編集 削除
きーさま  2010-01-19 19:06:23  No: 143088  IP: 192.*.*.*

魔界の仮面弁士様 一応正解のようです。

ご指摘の内容通りにExcelファイルの一行目を文字”A,B,C ”にして
それ以下の行を数値にしたテストファイルにしたら、問題なく書き込まれ
るようになりました。

Excelブックの一行目が数値だと上手く行かないようです
有難うございました。

編集 削除
しげ  2010-01-24 11:51:41  No: 143089  IP: 192.*.*.*

これは、データセットからファイルへUploadする場合なのですがヘッダー名に半角数字やNOという特定の文字列だと同時実行違反エラーというのが出ます。
それと似たようなものなのかなぁ・・・。うーん。

半角数字ではなく、全角数字だとうまく行ったりして。

編集 削除