- ベストアンサー
ACCESS Excelの出力について
stressmanといいます。 実は、ACCESSでクエリをExcelへ出力をしたいのですが、 ここで、既存のExcelのファイルのセルを指定して出力 というこはできるのでしょうか? 選択クエリで必要な情報を抜き出し、そのクエリを 「営業報告書.xls」というファイルのあらかじめ記載して ある「顧客名」「住所」のセルに格納していきたいのです。 マクロで「コマンド実行」-「Excel出力」を使って みたのですが、新しくファイルを開き、クエリのデザイン そのままで出力されます。 宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
たぶんSQL文に間違いがあります。抽出条件で、テーブルの項目名が違ってませんか? それと、項目の数値タイプか文字タイプかもチェックしてください。 例えば、文字項目でしたら「項目A=”条件”」とダブルクォテーションでくくらなければなりません。 100%作成されたSQL文に誤りがありますので、チェックされてくださいね。
その他の回答 (4)
- PAPA0427
- ベストアンサー率22% (559/2488)
動作しないと言うことは、VBA画面を開いて「ツール」→「参照設定」という項目があります。そこでExcelの「Micorsoft Excel 9.0 Library」というのにチェックを入れてください。 Access2000なら「Micorsoft Excel 9.0 Library」ですが、バージョンによってライブラリィのバージョンが違いますので「9.0」の所はお使いのAccessバージョンで変わりますので注意してください。 それから、このプログラムはフォームのVBAに書いてください。別の独立したモジュールでも構いません。 で、フォームのボタンの「クリック時」でこのプログラムがキックされるようにコーディングされてください。
- PAPA0427
- ベストアンサー率22% (559/2488)
すみません。MoveNextが抜けてました。 Private Sub Excel_Out() Dim oRs As Recordset Dim strSQL As String Dim Ex As Excel.Application 'エクセルリンク用変数(App) Dim Wb As Excel.Workbook 'エクセルリンク用変数(App) Dim Ws As Excel.Worksheet 'エクセルリンク用変数(App) Dim FileName as string Dim X As Long Dim Y As Long FileName = "×××××.xls" 'エクセルファイルの指定 Set Ex = New Excel.Application 'エクセルとのセッション開始 Set Wb = Ex.Workbooks.Open(FileName) 'ワークブックの指定 Set Ws = Wb.Worksheets("Sheet1") 'ワークシートの指定 strSQL = "SELECT 顧客名,フリガナ,郵便番号 strSQL = strSQL & vbCrLf & " FROM テーブル名" strSQL = strSQL & vbCrLf & " WHERE ○○" '抽出条件を設定。無ければ行そのもの削除 strSQL = strSQL & vbCrLf & " ORDER BY △△△△" '並び替え設定。しなくて良い場合は行そのもの削除 '出力用レコードセット Set oRs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) Y=1 X=0 '--ここで任意のセルに任意のデータを設定する。-- Do Until oRs.Eof Ws.Cells(Y, X + 1) = oRs("顧客名") Ws.Cells(Y, X + 2) = oRs("フリガナ") Ws.Cells(Y, X + 3) = oRs("郵便番号") oRs.MoveNext Y = Y + 1 Loop oRs.close Wb.SaveAs FileName 'ファイルの保存 Wb.Close 'ワークブックのクローズ Ex.Quit 'エクセルセッションをクローズする。 Set Ws = Nothing '変数の初期化 Set Wb = Nothing '変数の初期化 Set Ex = Nothing '変数の初期化 Set oRs = Nothing End Sub
補足
PAPA0427さん、詳しく説明していただきありがとうございます。 早速コマンドボタンのクリックイベントのところに 教えて頂いたコードを書いてみました。 時間がかかりつつも、書き終わり、試しにボタンを押して みたのですが、動作しません…(TT) おそらく書く場所が間違っているのだとおもうのですが、 …すいません。 お手数をおかけして申し訳ないのですが、 アドバイスお願いします
- PAPA0427
- ベストアンサー率22% (559/2488)
そのまんまの回答です。 Private Sub Excel_Out() Dim oRs As Recordset Dim strSQL As String Dim Ex As Excel.Application 'エクセルリンク用変数(App) Dim Wb As Excel.Workbook 'エクセルリンク用変数(App) Dim Ws As Excel.Worksheet 'エクセルリンク用変数(App) Dim FileName as string Dim X As Long Dim Y As Long FileName = "×××××.xls" 'エクセルファイルの指定 Set Ex = New Excel.Application 'エクセルとのセッション開始 Set Wb = Ex.Workbooks.Open(FileName) 'ワークブックの指定 Set Ws = Wb.Worksheets("Sheet1") 'ワークシートの指定 strSQL = "SELECT 顧客名,フリガナ,郵便番号 strSQL = strSQL & vbCrLf & " FROM テーブル名" strSQL = strSQL & vbCrLf & " WHERE ○○" '抽出条件を設定。無ければ行そのもの削除 strSQL = strSQL & vbCrLf & " ORDER BY △△△△" '並び替え設定。しなくて良い場合は行そのもの削除 '出力用レコードセット Set oRs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) Y=1 X=0 '--ここで任意のセルに任意のデータを設定する。-- Do Until oRs.Eof Ws.Cells(Y, X + 1) = oRs("顧客名") Ws.Cells(Y, X + 2) = oRs("フリガナ") Ws.Cells(Y, X + 3) = oRs("郵便番号") Y = Y + 1 Loop Wb.SaveAs FileName 'ファイルの保存 Wb.Close 'ワークブックのクローズ Ex.Quit 'エクセルセッションをクローズする。 Set Ws = Nothing '変数の初期化 Set Wb = Nothing '変数の初期化 Set Ex = Nothing '変数の初期化 End Sub
- PAPA0427
- ベストアンサー率22% (559/2488)
VBAを使用すれば、出来ますよ。参考までに以下のソースをモデファイしてご利用下さい。 Private Sub Excel_Out() Dim Ex As Excel.Application 'エクセルリンク用変数(App) Dim Wb As Excel.Workbook 'エクセルリンク用変数(App) Dim Ws As Excel.Worksheet 'エクセルリンク用変数(App) Dim FileName as string FileName = "×××××.xls" 'エクセルファイルの指定 Set Ex = New Excel.Application 'エクセルとのセッション開始 Set Wb = Ex.Workbooks.Open(FileName) 'ワークブックの指定 Set Ws = Wb.Worksheets("Sheet1") 'ワークシートの指定 '--ここで任意のセルに任意のデータを設定する。-- Ws.Cells(Y, X) = Data 'Y=セルのY位置、X=セルのX位置 ・ ・ ・ '--終わり-- Wb.SaveAs FileName 'ファイルの保存 Wb.Close 'ワークブックのクローズ Ex.Quit 'エクセルセッションをクローズする。 Set Ws = Nothing '変数の初期化 Set Wb = Nothing '変数の初期化 Set Ex = Nothing '変数の初期化 End Sub
補足
PAPA0427さん、分かりやすい説明ありがとうございます。 少し質問なのですが、 '--ここで任意のセルに任意のデータを設定する。-- Ws.Cells(Y, X) = Data 'Y=セルのY位置、X=セルのX位置 の部分の書き方なのですが、 YとXはセルの位置なので、Aと1みたいに指定すればいいと おもうのですが、「Data」の書き方はどうすればいいので しょうか? クエリには何十件という顧客のデータが一覧表示されます 例えば、A1に顧客名、A2にフリガナ、B1に郵便番号、 B2に住所という感じの場合、どういう書き方になるので しょうか? あつかしくもお願いします。m(__)m
補足
ありがとうございます。 早速、Micorsoft Excel 8.0 Libraryを設定しました。 そして、コマンドボタンを押すと、カーソルが砂時計に なり、なにやら処理をはじめまして。 …が、今度はエラーが、 「実行時エラー 3061 パラメーターが少なすぎます。1を指定してください」 と表示されました。 デバッグの画面を見ると、 Set oRs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) の部分に黄色いマーカーが付いています。 どこをどう修正すればいいのか、分かりません(^^; お手数おかけしますが宜しくお願いします。