Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6050 / 13646 ツリー ←次へ | 前へ→

【47424】エクセルの列データをアクセスにレコードとしてテーブルに追加したい うななんこ 07/3/9(金) 16:14 質問[未読]
【47425】Re:エクセルの列データをアクセスにレコー... Kein 07/3/9(金) 16:34 回答[未読]
【47426】Re:エクセルの列データをアクセスにレコー... うななんこ 07/3/9(金) 16:39 お礼[未読]
【47491】Re:エクセルの列データをアクセスにレコー... うななんこ 07/3/12(月) 12:59 お礼[未読]

【47424】エクセルの列データをアクセスにレコード...
質問  うななんこ  - 07/3/9(金) 16:14 -

引用なし
パスワード
   初めて質問させていただきます。
よろしくお願いします。

エクセルの列データをアクセスの新規レコードとして追加しようと
VBAで悪戦苦闘しております。

Sub T_Mth()
 Dim rno As Excel.Range  
 Dim rng As Excel.Range  
 Dim dbs As DAO.Database 
 Dim rcs, rcs2 As DAO.Recordset

 Set dbs = OpenDatabase(Name:="D:\総括表.mdb")
 Set rcs = dbs.OpenRecordset(Name:="T_Mth上期")
 Set rcs2 = dbs.OpenRecordset(Name:="T_Mth下期")
 
 Worksheets("Mth").Select
   rcs.AddNew 'レコード追加データ記入
    rcs!1営業現金=Range("G2")
         ・
         ・
         ・
    rcs!842店舗数計=Range("G181")
   rcs.Update 'レコードデータ保存

   'rcs2でG182以降を処理。フィールド数が255を超えるため。

 
 rcs.Close
 rcs2.Close
 dbs.Close
 Set rcs = Nothing
 Set rcs2 = Nothing
 Set dbs = Nothing
 Set rno = Nothing
End Sub

と、やってみましたが、
    rcs!1営業現金=Range("G2")
         ・
         ・
         ・
    rcs!842店舗数計=Range("G181")
が、赤字でコンパイルエラー、構文エラーが出ます。
このG列のデータは期間で変化します。
どのように設定すればレコードとして追加できますでしょうか?
よろしくご回答いただきますようお願いいたします。

【47425】Re:エクセルの列データをアクセスにレコ...
回答  Kein  - 07/3/9(金) 16:34 -

引用なし
パスワード
   そんなにたくさんのフィールドがあるなら、ループで追加していく方が
すっきりすると思います。こんな感じで

Sub T_Mth()
 Dim i As Long  
 Dim dbs As DAO.Database 
 Dim rcs As DAO.Recordset, rcs2 As DAO.Recordset

 Set dbs = OpenDatabase("D:\総括表.mdb")
 Set rcs = dbs.OpenRecordset("T_Mth上期")
 Set rcs2 = dbs.OpenRecordset("T_Mth下期")
 With Worksheets("Mth")
   rcs.AddNew
   For i = 0 To rcs.Fields.Count - 1
    rcs(i) = .Cells(i + 2, 7).Value
   Next i
  rcs.Update
   rcs2.AddNew
   For i = 0 To rcs2.Fields.Count - 1
    rcs2(i) = .Cells(i + 182, 7).Value
   Next i
  rcs2.Update 
 End With
 rcs.Close: rcs2.Close: dbs.Close
 Set rcs = Nothing: Set rcs2 = Nothing: Set dbs = Nothing
End Sub

【47426】Re:エクセルの列データをアクセスにレコ...
お礼  うななんこ  - 07/3/9(金) 16:39 -

引用なし
パスワード
   ▼Kein さん:
>そんなにたくさんのフィールドがあるなら、ループで追加していく方が
>すっきりすると思います。こんな感じで
>
>Sub T_Mth()
> Dim i As Long  
> Dim dbs As DAO.Database 
> Dim rcs As DAO.Recordset, rcs2 As DAO.Recordset
>
> Set dbs = OpenDatabase("D:\総括表.mdb")
> Set rcs = dbs.OpenRecordset("T_Mth上期")
> Set rcs2 = dbs.OpenRecordset("T_Mth下期")
> With Worksheets("Mth")
>   rcs.AddNew
>   For i = 0 To rcs.Fields.Count - 1
>    rcs(i) = .Cells(i + 2, 7).Value
>   Next i
>   rcs.Update
>   rcs2.AddNew
>   For i = 0 To rcs2.Fields.Count - 1
>    rcs2(i) = .Cells(i + 182, 7).Value
>   Next i
>   rcs2.Update 
> End With
> rcs.Close: rcs2.Close: dbs.Close
> Set rcs = Nothing: Set rcs2 = Nothing: Set dbs = Nothing
>End Sub

早速、ご回答頂きましてありがとうございます。
なるほどです。
すごい行数の記述になってしまっていたのですが、
すばらしくすっきりです(感動)
また、ご報告させていただきます。

【47491】Re:エクセルの列データをアクセスにレコ...
お礼  うななんこ  - 07/3/12(月) 12:59 -

引用なし
パスワード
   Kein さん、
ご報告が遅くなり、申し訳ございません。
教えていただいたコードでテーブルにデータを追加することが出来ました。
ありがとうございました。

6050 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free