- 締切済み
ACCESS VBA テーブルデータをEXCELに
こんにちは、表題のような内容で行き詰ってしまい質問させてもらいます。 現在、商品在庫のデータベースをACCESS2010を使用してなんとか完成させました。 といっても売上管理等しているわけではなく、単に商品のデータベースです。 【テーブル構成】 T_商品 T_ブランド T_ジャンル T_商品を基本にし、T_ブランド、T_ジャンルはルックアップ用です。 T_商品をデータソースとして、入力、検索用に「F_商品」 というフォームを作ってあります。 入力、検索作業ともに問題なく行えており、現在レコード数は400程度ですが今後5000程度までは増えると思います。 表題のようにEXCELを併用するのは、今回WEBショップをはじめ、利用しているECシステムではCSVで掲載商品データをインポートできるので、それを利用しようと思っております。 理想の動作的には、 上記「商品フォーム」でショップに掲載したい(CSVファイルに転記したい)商品を検索し、 「ショップ掲載リスト」などのボタンを作って押すことで「掲載用.xls」などのエクセルファイルにテーブルのフィールドから必要な「商品名」「ブランド」「価格」などを抜粋して転記、 ショップに掲載したい商品、複数をすべて転記したらエクセルファイルをCSVファイルとして保存し、ECシステムにアップロードです。 現在フォームにエクセルファイルに転記用のボタンを作り、VBAで指定のエクセルファイルを起動するところまででき、コードはネットで探して、以下のようになっております。 Private Sub 転記ボタン_Click() Dim objExcel Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True objExcel.Workbooks.Open "エクセルファイルのパス.xlsx" End sub エクセルファイルはテーブルの定義がしてあり名前を「商品テーブル」としてあります。 ACCESS側のVBAでエクセルシート上の商品テーブル内の上から順に転記していくにはどういうACCESS VBAを書けばいいのでしょうか? 上からというのは新しく転記する商品を次の行、次の行にということです。 http://okwave.jp/qa/q356182.html こちらの質問も参考にしてみましたが、「.Cells(i, 1) = RS.Fields("フィールド1")」のところでエラーになりました。。。 長々と的を得てない質問文になってしまいましたが、よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- oka_me
- ベストアンサー率86% (26/30)
一例ですがこのような感じではどうでしょうか。。 但し出力用のエクセルデータが既に開いていることが前提なので、転記用のボタンとは別にエクセルファイルを開くボタンを設置するか、または手動で開く等しておく必要があります。。 Dim db As DAO.Database Dim rs As DAO.Recordset Dim objBook As Object Dim objSheet As Object Dim i As Long Dim iname As String Set db = CurrentDb iname = [Forms]![F_商品]![テキスト0] Set rs = db.OpenRecordset("select 商品名,ブランド,価格 from T_商品 where 商品名='" & iname & "'") 'テキスト0→商品名入力用のテキストボックス 'フィールド名は必要に応じてカンマ区切りで追加 Set objBook = GetObject("エクセルファイルのパス.xlsx") Set objSheet = objBook.Worksheets("シート名") i = objSheet.range("A" & objSheet.rows.Count).End(xlup).row + 1 '既存データの最終行を取得 objSheet.range("A" & i).CopyFromRecordset rs '出力 rs.Close db.Close
お礼
ご回答ありがとうございます。 あれからだいぶ期間がたっていたので、回答いただいたのに気づくのが送れて、お礼が遅くなりすみません。 何とか新規のシートには転記ができるようになったのですが、 = objSheet.range("A" & objSheet.rows.Count).End(xlup).row + 1 '既存データの最終行を取得 この部分で行き詰っているところでした。 参考にさせていただき完成させたいと思います。 ありがとうございました。