プロが教える店舗&オフィスのセキュリティ対策術

stressmanといいます。

実は、ACCESSでクエリをExcelへ出力をしたいのですが、
ここで、既存のExcelのファイルのセルを指定して出力
というこはできるのでしょうか?

選択クエリで必要な情報を抜き出し、そのクエリを
「営業報告書.xls」というファイルのあらかじめ記載して
ある「顧客名」「住所」のセルに格納していきたいのです。

マクロで「コマンド実行」-「Excel出力」を使って
みたのですが、新しくファイルを開き、クエリのデザイン
そのままで出力されます。

宜しくお願いします。

A 回答 (5件)

たぶんSQL文に間違いがあります。

抽出条件で、テーブルの項目名が違ってませんか?

それと、項目の数値タイプか文字タイプかもチェックしてください。

例えば、文字項目でしたら「項目A=”条件”」とダブルクォテーションでくくらなければなりません。

100%作成されたSQL文に誤りがありますので、チェックされてくださいね。
    • good
    • 0

動作しないと言うことは、VBA画面を開いて「ツール」→「参照設定」という項目があります。

そこでExcelの「Micorsoft Excel 9.0 Library」というのにチェックを入れてください。

Access2000なら「Micorsoft Excel 9.0 Library」ですが、バージョンによってライブラリィのバージョンが違いますので「9.0」の所はお使いのAccessバージョンで変わりますので注意してください。

それから、このプログラムはフォームのVBAに書いてください。別の独立したモジュールでも構いません。

で、フォームのボタンの「クリック時」でこのプログラムがキックされるようにコーディングされてください。

この回答への補足

ありがとうございます。

早速、Micorsoft Excel 8.0 Libraryを設定しました。
そして、コマンドボタンを押すと、カーソルが砂時計に
なり、なにやら処理をはじめまして。

…が、今度はエラーが、
「実行時エラー 3061
 パラメーターが少なすぎます。1を指定してください」

と表示されました。
デバッグの画面を見ると、

Set oRs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)

の部分に黄色いマーカーが付いています。
どこをどう修正すればいいのか、分かりません(^^;

お手数おかけしますが宜しくお願いします。

補足日時:2003/12/04 19:06
    • good
    • 0

すみません。

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)

おそらく書く場所が間違っているのだとおもうのですが、
…すいません。

お手数をおかけして申し訳ないのですが、
アドバイスお願いします

補足日時:2003/12/04 08:55
    • good
    • 0

そのまんまの回答です。


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
    • good
    • 0

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

補足日時:2003/12/02 16:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!