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
<追加補足です>
テスト用Excelファイルは(1行×任意の列数)のテストデータをVBプロジェクトと同じディレクトリに置いています。
DB接続時に"HDR=YES"として一行目を列見出しとして読み込むと、FieldCount値が置き換わる事はなくなるのですが、今度はセルに文字列として書き込まれてしまいます。
# 回答に非ず
> 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 形式ブックを作って
試してみましたが、こちらでは現象を再現できませんでした。
環境の違いのせいなのか、元のブック自体の問題なのか…。
魔界の仮面弁士様 一応正解のようです。
ご指摘の内容通りにExcelファイルの一行目を文字”A,B,C ”にして
それ以下の行を数値にしたテストファイルにしたら、問題なく書き込まれ
るようになりました。
Excelブックの一行目が数値だと上手く行かないようです
有難うございました。
これは、データセットからファイルへUploadする場合なのですがヘッダー名に半角数字やNOという特定の文字列だと同時実行違反エラーというのが出ます。
それと似たようなものなのかなぁ・・・。うーん。
半角数字ではなく、全角数字だとうまく行ったりして。