- 締切済み
Access 抽出したフォームをファイル出力
いつもお世話になっています。 フォームにボタンを作成して、指定したフォームをExcelファイルで保存しています。 これまではクエリに直接抽出条件を入力し、それをフォームにしていました。 条件が増えたので、読み込みのイベントで抽出(入社年度、部署名)を指定して フォームで抽出しています。そこからのレポートもフォームも抽出結果どおりです。 ただすべての内容がExcelファイルに出力されてしまいます。 抽出した内容だけをExcelファイルに出力するにはどうしたらいいでしょうか。 Private Sub Eccelで保存_Click() DoCmd.OutputTo acOutputForm, "活動記録", acSpreadsheetTypeExcel9 End Sub お力添えをお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hatena1989
- ベストアンサー率87% (378/433)
情報があいまいな部分があるので確認させてください。 > Private Sub to11_Click() > DoCmd.OpenForm "F_支所A" > Set Forms!F_支所1.Recordset = Me.Recordset この F_支所A と F_支所1 は別のフォームですか。 それとも、実際は同じフォームで、ここに書き写すとき書き間違えたのですか。 > DoCmd.close acForm, "F_支所一覧", acSaveYes F_支所一覧 というのは、「to11」ボタンの配置してあるフォームですか。 > Excelに出力したい情報はデータシート形式で、支所のフォームに > F_活動記録 サブフォームとして埋め込んでいます。 「支所のフォーム」とは「F_支所A」のことですか。 > Private Sub Eccelで保存_Click() > DoCmd.OutputTo acOutputForm, "F_活動記録", acSpreadsheetTypeExcel9 > End Sub 「Eccelで保存」ボタンは、F_支所A に配置してあるのですか。 > 教えていただいた「RecordSource に抽出条件を設定したSQL」は > Q_活動記録のレコードソースに記述するのでしょうか。 これは最初の質問の「読み込みのイベントで抽出」というから、読み込み時イベントで自分自身のFilterプロパティに抽出条件を設定するということを推測して回答したことですが、実際はそうではないようなので無視してください。 とりあえず、上記の質問に回答してください。 下手な推測でまた、間違った回答をしてしまっては無駄骨ですので。
- hatena1989
- ベストアンサー率87% (378/433)
> 条件が増えたので、読み込みのイベントで抽出(入社年度、部署名)を指定して > フォームで抽出しています。そこからのレポートもフォームも抽出結果どおりです。 具体的にどのようにしてますか。VBAでFilterプロパティに抽出条件を設定しているのでしょうか。 もし、そうなら、Filterプロパティで抽出するのではなく、RecordSource に抽出条件を設定したSQLを設定すればどうでしょうか。 現状が、 Me.Filter = 抽出条件式 Me.FilterOn = True としているなら、 Me.RecordSource = "SELECT * FROM テーブル名 WHERE " & 抽出条件式 もし、外しているのなら、現状のコードなりマクロなりをご提示ください。
補足
早々にお返事ありがとうございます。 はじめに選択クエリ Q_活動記録 を作成しています。 抽出条件は、何もつけていません。 フォームに支所名のついたボタンを並べて、クリックすると下記のフィルタがかかり、 目的の支所の情報が見れるフォームが開く仕組みです。 Private Sub to11_Click() DoCmd.ApplyFilter , "([入社年度] = 20 And [部署名] = 1 )" DoCmd.OpenForm "F_支所A" Set Forms!F_支所1.Recordset = Me.Recordset DoCmd.close acForm, "F_支所一覧", acSaveYes End Sub Excelに出力したい情報はデータシート形式で、支所のフォームに F_活動記録 サブフォームとして埋め込んでいます。 メインのフォームとは、リンク子フィールド、リンク親フィールドを 入社年度;部署名 でリンクしています。 そのサブフォームを抽出結果はそのままにExcelに出力したいのです。 そこで下記のクリックイベントでは、すべてのデータが出力されてしまいます。 Private Sub Eccelで保存_Click() DoCmd.OutputTo acOutputForm, "F_活動記録", acSpreadsheetTypeExcel9 End Sub (質問の部分ではF_活動記録のF_が抜けていました。申し訳ありません) 教えていただいた「RecordSource に抽出条件を設定したSQL」は Q_活動記録のレコードソースに記述するのでしょうか。 Accessは継ぎ接ぎ程度の知識しかないので、お恥ずかしいのですが もう少し具体的に教えてください。 よろしくお願いいたします。
お礼
お世話になっています。 あれこれ自分なりに操作してみたのですが、印刷用のフォームを作成、非表示で開き、 それをExcelへ出力したところ、カレントレコードだけが出力できました。 操作する人にはサブフォームが出力されているように見えます Private Sub Eccelで保存_Click() DoCmd.OpenForm "F_活動記録印刷", acFormDS, , "[入社年度] =" & Me.入社年度 & " And [部署名 ] =" & Me.部署名 , , acHidden DoCmd.OutputTo acOutputForm, "F_活動記録", acSpreadsheetTypeExcel9 DoCmd.close acForm, "活動記録印刷" End Sub。 もっとスマートに正しい解決方法があるのだと思うのですが、期限が迫っているので今回はこれで回避します。 このたびは、アドバイスをいただきまことにありがとうございました。 また機会がありましたらよろしくお願いいたします。
補足
回答いただきありがとうございます。 記載ミスがあり、情報があいまいなままで申し訳ありません。 どうぞよろしくお願いいたします。 >>Private Sub to11_Click() >> DoCmd.OpenForm "F_支所A" >> Set Forms!F_支所1.Recordset = Me.Recordset >この F_支所A と F_支所1 は別のフォームですか。 >それとも、実際は同じフォームで、ここに書き写すとき書き間違えたのですか。 申し訳ありません。記載間違いです。 F_支所A と F_支所1 は同じフォームです。 どちらも F_支所1 フォームです。 >> DoCmd.close acForm, "F_支所一覧", acSaveYes >F_支所一覧 というのは、「to11」ボタンの配置してあるフォームですか。 そうです。to11 to12 ・・・と支所ごとに登録したボタンを並べています。 > Excelに出力したい情報はデータシート形式で、支所のフォームに > F_活動記録 サブフォームとして埋め込んでいます。 >「支所のフォーム」とは「F_支所A」のことですか。 そうです。 F_支所1 フォームです。 >> Private Sub Eccelで保存_Click() >> DoCmd.OutputTo acOutputForm, "F_活動記録", acSpreadsheetTypeExcel9 >> End Sub >「Eccelで保存」ボタンは、F_支所A に配置してあるのですか。 そうです。 F_支所1 フォームです。