• ベストアンサー

アクセス2003でレポート印刷について。

いつもいつもお世話になっています。 アクセス2003で月間の抽出結果一覧がある帳票フォーム(選択クエリがレコードソースです)があり、印刷ボタンでその一覧のレポートを印刷したいと考えています。 そのフォームを開く時に、抽出条件として西暦と月を入力するのですが、そのレポート(同じ選択クエリがレコードソース)を印刷するときも再度西暦と月を指定しなければいけません。この年、月の入力を一度ですませるにはどのようにしたらよいでしょうか? どなたかよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

No.2です。 > 「全てが埋まった場合のみ抽出を行うような制御」の組み方を教えて それでは、『年』『月』『日』の抽出条件を指定するテキストボックスを、 それぞれ『抽出年』『抽出月』『抽出日』とした場合で説明します。 【VBAの場合】 '『抽出年』の更新後処理 Private Sub 抽出年_AfterUpdate   Call ExtractRecords End Sub '『抽出月』の更新後処理 Private Sub 抽出月_AfterUpdate   Call ExtractRecords End Sub '『抽出日』の更新後処理 Private Sub 抽出日_AfterUpdate   Call ExtractRecords End Sub '各テキストボックスから呼び出す共通処理 '(上記の更新後処理と同じフォームに転記して下さい) Private Sub ExtractRecords() 'エラー発生時には「エラー処理:」の行に飛ばすための宣言 On Error Goto エラー処理   '変数の宣言   Dim sYr As String, sMn As String, sDy As String   '各テキストボックスの値を変数に記録   '(Nz関数を使用して、Nullは空文字に変換)   sYr = Nz(抽出年, "")   sMn = Nz(抽出月, "")   sDy = Nz(抽出日, "")   'どれかひとつでも空白(Nullまたは空文字)だった場合は処理を中止   If sYr = "" Or sMn = "" Or sDy = "" Then Goto 終了処理   '再クエリを実行   Me.Requery 終了処理:   '「ExtractRecord」Subを抜ける   '(これを入れないと「エラー処理」と無限ループになるので注意)   Exit Sub エラー処理:   'エラー内容をメッセージで表示し、処理を中止   MsgBox Err.Number & ":" & Err.Description, , Me.Name & " ExtractRecords"   Resume 終了処理   End Sub 【マクロの場合】 1)新規マクロをデザインビューで開き、名前を「M1_月間抽出」として保存  (現在作成済みのマクロでもOk) 2)『条件』列が表示されていない場合は、『マクロ』ツールバーの『条件』ボタンを  クリックするか、メニューで「表示(V)→条件(C)」を選択してひょうじさせる 3)『条件』欄に以下の式を入力(フォーム名を仮に「F1_月間抽出」とします):  Nz(Forms!F1_月間抽出!抽出年,"")="" Or Nz(Forms!F1_月間抽出!抽出月,"")="" Or Nz(Forms!F1_月間抽出!抽出日,"")="" 4)上記の条件を指定した行の『アクション』欄に、「マクロの中止」を指定 5)次の行の『アクション』欄に、「再クエリ」を指定  (引数の『コントロール名』は空白のままでOk) 6)マクロを保存して閉じる 7)当該フォームをデザインビューで開き、各テキストボックスの更新後処理に、  上記マクロ(M1_月間抽出)を指定して保存  (上記マクロは、各テキストボックス(抽出年・抽出月・抽出日)で共通で使えます)  ※普段サブマクロ名(→「2」で『条件』に行ったのと同様の処理で表示できる   『マクロ名』で指定する名前)を使用している場合は、上記のマクロにサブマクロ   名をつけてもOkです。その場合は、各テキストボックスでもサブマクロ名まで   指定して下さい。 ・・・長くなりましたが(汗)、以上です。

ayanohina
質問者

お礼

おかげさまでやっとうまくできました!大変丁寧に教えていただいて勉強になり、本当にありがとうございました。またこれからもよろしくお願いいたします。ありがとうございました!!!

その他の回答 (2)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

No.1です。 > 単に非連結のテキストボックスを置いたほうがよいのでしょうか。 > それともフィールドリストからもってきたほうがよいのでしょうか。 今回のように、抽出条件を指定する場合は、フィールドリストから ではなく、非連結のテキストボックスを使用します。 <連結コントロール(=フィールドリストからの場合)>  プロパティシートの『データ』タブの『コントロールソース』に、選択  したフィールドが設定されます。  これは、テーブルに記録したデータを直接表示したい時に使用します。 <非連結コントロール>  『コントロールソース』が空白のコントロール(=フィールドに連結して  いないコントロール)になります。  これは、例えば今回の『抽出条件』のように、テーブルに保存しない  値を一時的に入力したりするのに使用します。 ※『コントロールソース』に式を指定したものは「演算コントロール」と   呼ばれます(例えば合計値を表示させたいときなどに使用)。 > 現在のクエリでは日付を年と月と日に分けて、選択クエリでひとつずつ > 指定して抽出 この場合は、ヘッダまたはフッタに、『年』『月』『日』を指定するための テキストボックス(又は月なら1~12のみ指定可能にしたコンボボックス やリストボックスでも可)を設置した上で、クエリの『抽出条件』欄に、 No.1の時と同様に、今指定しているパラメータを、対応するコントロール のアドレスに置き換えてやればOkです。 (抽出条件欄の「[西暦年は?]」を「Forms!フォーム名!抽出年」に、  「[月は?]」を「Forms!フォーム名![抽出月]」に、といった感じ) なお、この場合は、『年』『月』『日』の各コントロールの更新後処理で それぞれ再クエリを行うのと、コマンドボタンを設置してやるのと、どちらが いいかは、ちょっと微妙です(汗) (前者では、どれか1個を指定した段階で検索が掛かってしまいますし、  後者では、前回言ったように、フォームとレポートで異なる結果が  表示される可能性が出てしまいます:  前者は、全てが埋まった場合のみ抽出を行うような制御を組む、  後者は、フォームでの抽出時の値を別に記録しておいて、レポートでも  その値を使用するようにする(→非表示の非連結テキストボックスを  用意するなどして、抽出時にはそちらに転記&クエリはそちらを参照、  など)、といった回避策は立てられますが、ちょっと面倒かも、と(汗)) 【余談】 「年のみ」、「年月のみ」でも抽出できるようにすることもできますが、 この場合、空白(Null)の扱いによっては、クエリを複数用意しておき、 フォームレコードソースを切り替える、といった制御が必要になります。 一応、参考まで。

ayanohina
質問者

補足

度々申し訳ありません。「全てが埋まった場合のみ抽出を行うような制御」の組み方を教えていただけないでしょうか? あと少しなのですが。よろしくお願いいたします。

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> この年、月の入力を一度ですませるにはどのようにしたらよいでしょうか? フォームを開くときに年月指定する代わりに、フォーム上に年月を指定するため のテキストボックスを設置してやるのが、比較的簡単かと思います。 【フォームに対して行う変更】  ・ヘッダ(又はフッタ)に、年月を指定するためのテキストボックスを設置  ・このテキストボックスの『更新後処理』に、フォームの再クエリを実行する   マクロ(またはVBA)を設置 【クエリに対して行う変更】  ・年月を指定するためのパラメータ指定を、上記テキストボックスのアドレスに   変更(実際には、その値がNullの場合への対応も実施) 具体的な手順は以下の通り: 【フォーム】 1)フォームをデザインビューで開く 2)ヘッダが未表示の場合は、メニューで「表示(V)→フォーム ヘッダ/フッタ(H)」を  選択して表示させる  (ヘッダ/フッタの一方を非表示にする場合は、不要な方をダブルクリックする等   してプロパティシートを表示させ、『書式』タブの『可視』を「いいえ」にするか、   同じく『書式』タブの『高さ』を「0cm」にします) 3)ヘッダ(又はフッタ)にテキストボックスを設置 4)上記テキストボックスをダブルクリックするなどしてプロパティシートを開いたら、  『イベント』タブの『更新後イベント』にマクロまたはVBAを設定  (マクロなら「再クエリ」アクション(引数は空)、VBAなら「Me.Requery」でOk) 5)保存して閉じる <参考>  再クエリをコマンドボタンに割り当ててもOkですが、その場合、テキストボックス  の値を変更後、再クエリを実行せずにレポートを開くと、フォームとレポートで  異なる結果(レポートではテキストボックスの変更が反映される)になるので、  注意してください。 【クエリ】 1)クエリをデザインビューで開く 2)現在の抽出条件の式(「[年月を指定して下さい]」等)を、以下のように変更  Nz(Forms!上記フォーム名!上記テキストボックス名, "")  <注意・備考>   ・「上記フォーム名」等には、上の【フォーム】及び新設テキストボックス名を    指定します。   ・「Forms」などは、自動で「[ ]」で括られます。   ・保存データの年月に「""」(空文字)がある場合、最初にフォームを開いた    時点でそのデータが抽出されてしまいます。    (一応、そういうデータがない前提で、上記の式としました) 3)保存して閉じる ・・・以上です。 これで、レポートを開くときには年月を指定しないで済むようになると思います。 (但し、上記フォームを開いた状態でないと、従来と同様にパラメータを要求する  ダイアログ(パラメータとしては、上記「Forms!~」の式が表示される)が開きます)

ayanohina
質問者

補足

丁寧にありがとうございます。一番初めのテキストボックスとあるのですが、現在のクエリでは日付を年と月と日に分けて、選択クエリでひとつずつ指定して抽出するようにしてあるのですが、この場合はどのようにしたらよいのでしょうか?単に非連結のテキストボックスを置いたほうがよいのでしょうか。それともフィールドリストからもってきたほうがよいのでしょうか。初歩的なことで申し訳ありません。よろしくお願いいたします。

関連するQ&A

  • access2010のレポート印刷について質問です

    選択クエリにて日付で抽出しています。 選択クエリを実行すると、パラメーターの入力画面が表示され、日付を入力すると抽出されます。 その選択クエリをそのままレポートとしてあります。 そのレポートを印刷するにあたり、現在の流れは、フォームの印刷ボタンを押す→パラメーターの入力→レポート表示→ファイルタブから印刷を選択→印刷をクリック→プリンター選択等のプロパティー画面→印刷となっていますが、この手順を、フォームの印刷ボタンを押す→パラメーターの入力→プリンター選択等のプロパティー画面→印刷としたいのですが。 分かる方、是非教えて下さい。 宜しくお願いします。

  • アクセス2003のカレンダー使用について教えてください。

    アクセス2003のカレンダー使用について教えてください。 選択クエリがレコードソースの帳票フォームがあります。日付を入力して、その日付のレコードのみ抽出するようにいているのですが、これをカレンダーの日付と連動させて、そのフォームを開いたら自動でその日付のレコードのみ抽出できるようにしたいです。マクロを使って(値代入)ためしてみたのですが、うまくできませんでした。カレンダーはメインフォーム上にあり、別フォームでは簡単に値代入できています。ただ、選択クエリのように、抽出条件のところには代入は無理なのでしょうか?どなたかよろしくお願いいたします。。。

  • Accessで月ごとのレポートを出したい

    Access2003で以下のような販売管理のデータベースを作成しているのですがクエリとレポートが思うように動いてくれずに困っております。 売上の管理のために顧客情報をメインフォームに明細をサブフォームで作成、明細テーブルからクエリで該当月を抜きだして請求書の印刷に使いたいと思っています。 レポートはフォームと同じようにメインレポートに顧客情報を表示してサブレポートとしてその月に販売した商品を一覧させたものを考えています。 サブレポートには明細のクエリを指定しています。そこでクエリの抽出条件に[月]としてキーボードから数字を入れるようにしたのですがそうするとレポートの印刷時にも顧客の数だけ月の入力を促す画面が出てきます。イメージとして「何月分の請求書を出しますか」みたいな画面(フォーム?)に数字を入力するとクエリの抽出条件が書き換わってくれるようにできないかと考えております。 うまく説明できていないと思いますが対処法をご存知の方おられましたらご教示お願いします。 他に情報が必要であれば言ってください。よろしくお願いします

  • Accessのレポート印刷について教えて下さい。

    Accessのフォームでフィルタを使い絞り込んだデータをレポートで 印刷する場合について教えて下さい。 DoCmd.OpenReport "レポート名", acViewPreview, , Me.Filter では、フォームとレポートが同じレコードソースだと使えるという事ですが、 フォームとレポートのレコードソースが別の場合はどのようにすると フィルタで絞り込んだ条件のレポートを印刷できますか? 教えて下さい。よろしくお願いします。

  • ACCESS2000で入力中のレコードを印刷したい

    初心者ですみません。現在入力中の情報だけを印刷したいので、フォームのキーを抽出条件にて設定したクエリーでレポートを作成したのですが、単票、表形式共に#Errorが出ます。クエリーを見ると抽出条件でのレコードが無いのであたりまえかとも思いますが..過去に入力したレコードや、アクティブ状態?(レコードセレクタをクリックした状態)の表形式のレコードは正常に印刷されます。OS=WIN98です。宜しくお願いします。

  • アクセス2000でレポート印刷

    アクセス2000でレポート印刷 レポートを印刷するとき、フォームで表示しているレコードだけを印刷したいのですが・・・ フォーム上でコマンドボタンを作ってレポートを印刷すると、関連するレコードが全て印刷されてしまいます。 フォームでレコードを指定して、そのレコードだけを印刷・・・ 教えてください!!!!

  • accessレポートの抽出条件

    こんにちわ。 いまaccess2000で, フォームからレポートを出力する処理をしています。 そのレポートは[コントロールソース]としてあるクエリを設定しています。 そこで, DoCmd.OpenReport "r_帳票", acPreview, , "[番号] = 'a100'" とコーディングしました。 なおレポートの[フィルタ]プロパティは"はい"にしています。 ところが,出力されたレポートには条件で抽出されずに 全件が出力されてしまいました。 抽出条件を効かせるためにはどうすれば良いでしょうか? 教えてください。お願いします。

  • 【Access2003】

    お世話になります。 検索フォーム(帳票フォーム)にて各レコードにチェックボックスを設けています。 クエリにて抽出した全レコードのチェックボックスを選択(Yes)したいのですが うまくいません。 宜しくお願い致します。

  • アクセスで特定のレコードのみのレポートを印刷したいのですが。

    アクセス2003である特定のレコードのみのレポートを印刷したいと思っています。現在開いているフォームのレコードのみを印刷(レポートとして)印刷するには、ファイル→印刷→ページ指定で現在印刷しているのですが、他に方法はないでしょうか?単に「レポートの印刷」とすると全てのレコードが印刷されてしまいます。今のところ特定のレコードのみ印刷するには、まずページ数を調べなければいけないので不便です。せっかくパラメータクエリなどで、そのレコードのフォーム画面を表示させても、レポート印刷につながらないので、どなたか良い方法を教えていただけないでしょうか?よろしくお願いいたします。

  • 【Access2003 日付表示について(2)】

    検索フォーム(帳票フォーム)にて、任意で期間を入力してレコードを抽出しています。 例) 『日付1~日付2』 そして、この抽出したレコードをレポートとして印刷してるのですが レポートの表題(レポートヘッダー)の部分(添付画像赤枠部)にその任意で入力した日付も反映させて表示したいのですが可能でしょうか? 可能であれば、お知恵を拝借させて頂きたいです。 宜しくお願い致します。

専門家に質問してみよう