• ベストアンサー

MS-Accessでのレポート印刷について

MS-Access97を使用しております。早速質問させていただきます。 売上データから請求書を発行するシステムを作っているのですが、たとえば 請求書をページプリンタへ印刷する場合、1枚目を「請求書」2枚目を「同控え」3枚目を「納品書」としたいのですが・・・。それぞれ3種類のレポートを作成し、請求書を発行するフォームから発行する条件をあたえ、コマンドボタンに3枚を順に印刷するコードを書いたのですが、これでは最初に1枚目をすべて印刷し、次に2枚目、次に3枚目という順序で印刷されてしまいます。 発行する客先が多くなるほど、印刷された用紙を手作業で並べかえなければならず大変不便です。 そこで、最初の1件目(お客)を1、2、3枚印刷し、続けて2件目(次のお客)を1、2、3と印刷(以後繰り返し)できるようにするにはどうしたらよいのでしょうか?

  • aikun
  • お礼率77% (114/147)

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

こんにちは。 yoishoさんのおっしゃる通り、ADOは97では使えません。 質問文を見落としてました。 次のようにDAO版に修正して下さい。 まず、VBEの参照設定で「Microsoft DAO 3.6 Object Library」にチェックがなければ、チェックします。 cnとrsのかわりに、dbとrsを使います。 宣言を入れかえます。 Dim db As DAO.Database Dim rs As DAO.Recordset レコードセットの作成を入れかえます。 Set db = CurrentDb() Set rs = db.OpenRecordset("顧客テーブル", dbOpenDynaset) 抽出条件はそのままでいいです。 検索部分を次のようにします。 '1回目の検索 rs.FindFirst criteria If rs.NoMatch Then   '終了   Exit Sub Else   Do Until rs.NoMatch     *** ここに印刷処理を書く(Forループの中身だけ) ****     Filterの抽出条件は、"顧客ID = " & rs!顧客ID     (印刷処理)     ************************************************     '2回目以降の検索     rs.FindNext criteria   Loop End If rs.Close: Set rs = Nothing db.Close: Set db = Nothing

aikun
質問者

お礼

ご連絡が遅くなりました。 早速ためしてみます。いろいろありがとうございました。

その他の回答 (4)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.5

ちょっと気になったので。 参照設定のDAOのバージョンは3.6ではないかも知れません。 とにかく自分が使っているのが、2000で97が手元にないので確認してませんが。 では。

  • yoisho
  • ベストアンサー率64% (331/516)
回答No.3

せっかくの回答に水を差すようで申し訳ありませんが、Access97は、ADOをサポートしていません。(ADOが使えるのは Access2000からです。) いま、ちょっと時間を取れなくて、自分では具体的なアドバイスをできないのに、こんなことを申し上げるのは恐縮なのですが・・・。

aikun
質問者

お礼

アドバイスありがとうございます。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

再びmaruru01です。 ADOのレコードセットを使用しましょう。 元のテーブルを[顧客テーブル]、その中にフィールド[顧客ID](数値型)、[日付](日付型)があるとします。 [印刷]ボタンのクリックイベントに、 Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim condHiduke As String Dim condKyakuID As String Dim criteria As String '抽出条件の設定 condHiduke = "(日付 BETWEEN #" & [Forms]![条件フォーム]![開始日] & "# AND #" & [Forms]![条件フォーム]![終了日] & "#)" condKyakuID = "(顧客ID BETWEEN " & [Forms]![条件フォーム]![開始客先] & " AND " & [Forms]![条件フォーム]![終了客先] & ")" criteria = condHiduke & " AND " & condKyakuID 'レコードセットの作成 Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "顧客テーブル", cn, adOpenKeyset, adLockReadOnly '1回目の検索 rs.Find criteria, 0, adSearchForward If rs.EOF Then   '終了   Exit Sub Else   Do Until rs.EOF     *** ここに印刷処理を書く(Forループの中身だけ) ***     Filterの抽出条件は、"顧客ID = " & rs!顧客ID     (印刷処理)     ************************************************     '2回目以降の検索     rs.Find criteria, 1, adSearchForward   Loop End If rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing レコードセットのOpenやFindメソッドについては、ヘルプを参照して下さい。 なお、私はAccess2000で、しかも試していないので、動作するかどうかはわかりません。 では。

aikun
質問者

お礼

丁寧にご説明いただきありがとうございます。 ここまで書いていただければなんとかできそうです。 早速ためしてみます。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 毎回客一人だけを抽出してレポートのソースに設定して、Forループで回せばいいと思います。 客総数をAllCountとして、 For i = 1 To AllCount   1枚目用レポート名.Filter = "(抽出条件)"   1枚目用レポート名.FilterOn = True   DoCmd.OpenReport 1枚目用レポート名, acViewNormal   2枚目用レポート名.Filter = "(抽出条件)"   2枚目用レポート名.FilterOn = True   DoCmd.OpenReport 2枚目用レポート名, acViewNormal   3枚目用レポート名.Filter = "(抽出条件)"   3枚目用レポート名.FilterOn = True   DoCmd.OpenReport 3枚目用レポート名, acViewNormal Next i このままだと、紙は3枚目が一番上になると思うので、プリンタのオプションで変えるなり、上のコードの順番を変えるなりして下さい。 では。

aikun
質問者

お礼

ご連絡ありがとうございます。 早速ためさせていただきます(結果は明日になると思います)。 取り急ぎ御礼まで。

aikun
質問者

補足

おはようございます。 早速ためそうとやりかけたのですが、ちょっと上記コードで質問なんですが、  1枚目用レポート名.Filter = "(抽出条件)" ←この抽出条件の具体的な記述はどう書けばよいのでしょうか?ちなみに、請求書の元になるクエリーに以下の抽出条件を設定います。 「日付」・・・Between[Forms]![条件フォーム]![開始日]AND[Forms]![条件フォーム]![終了日] 「客先」・・・Between[Forms]![条件フォーム]![開始客先]AND[Forms]![条件フォーム]![終了客先] 条件フォームに日付、客先(コード番号)をそれぞれ設定し、レポートを印刷するスタイルです。 ご教授いただければ幸いです。

関連するQ&A

  • Access 2002 レポートの印刷設定について

    先ほど一度投稿しましたが、説明不足と感じ、削除の上、再投稿いたします。 ------------------------------------------------------------- いつもお世話になっております。 あるレポートを、A5サイズで出力し、それをA4の用紙(たて)に上下に2部印刷したいのです。 (図を参照ください) レポートは所謂「納品書」でして、通常、A51枚で終わります。(A4の用紙に印刷し、半分に切ってお渡ししています。レポートのデザインも、A5に収まるようにしています。) レポートの構成は、タイトルなどの、メイン部分と、該当レコードを表示するサブレポートで構成されており、該当レコードが増えると、図のようにはならず、A4のたていっぱいに印刷されてしまいます。サブレポートの書式プロパティで、印刷時自動拡張する、に設定しているからですが、これを「しない」にすると2ページ目に移るのかな?と思い、試してみましたが、改ページされず、レコードが部分印刷され、後半(1ページに印刷できない部分)が納品書からもれてしまう、という状態です。 ここからが本題です。 納品書の控えを取りたい、という担当者のため、同じものを2部印刷しているのですが、用紙節約のため、上下に同じものを印刷し、切り離せばお渡しするものと控えが出来上がる、という要望を受けております。専用にドットインパクトプリンタを購入し、複式印刷すればいいのですが、さすがにそこまでの経費は捻出できません。 印刷のプロパティなどを弄ってみましたが、目的を達成できなかったので、質問させていただきました。 まとめますと・・・ 1.A5の納品書をA4の用紙に上下2部印刷したい 2.納品件数が多い場合、2枚目以降に印刷したい(サイズはA5のままで) 詳しい方、ご教授のほう、よろしくお願いします。

  • ★access2000★レポートを複数枚印刷したい時は??

    納品書レポートを印刷したいのですが、【納品書】【請求書】【納品書(控)】といったふうに、タイトルが違い内容がまったく同じレポートを続けて印刷するにはどうしたらよいのでしょうか? 初めて質問させていただきますが、どなたか良いアドバイスをお願いします。

  • アクセスのレポート出力について

    いつも楽しく拝見しています。 質問させてください。 アクセスのレポートについてなのですが、今フォームのボタンを押すと「納品書」と言うレポートが出力されるようになっています。 これをフォームのボタンを押すと「納品書」と「納品書控え」と言う2つのレポートを出力したいと考えています。 試しに自分でやってみると、2つのレポートは別々のウィンドウで表示され、印刷ボタンを2回押せば可能な所まできました。 出来れば、これを改良し、 フォームのボタンを押す→レポートが表示(納品書と納品書控えが同じウィンドウにて続けて表示される)→印刷(納品書と納品書控えが出力される) と言う形にしたいと考えております。 これは可能なことなのでしょうか? また、可能な場合、どのような仕込が必要なのでしょうか? おわかりになる方いらっしゃいましたら、ご教授ください。 よろしくお願いいたします。

  • アクセスのレポートで同一内容の複数表示の改ページについて教えて下さい

    アクセスのレポートで、A4サイズ1枚の伝票が”納品書”・”請求書”・”納品書控”と3項目あります。それぞれ同一内容を印刷するわけですが、1ページに入りきらない場合、改ページをして続きを印刷します。さらに最終ページには合計金額を各項目ごとに別枠で印刷させたいのですが、どのようにすれば良いのか、どなたか教えていただけませんでしょうか。

  • Accessレポートのvbaの質問です

    Accessレポートの「Copies」の質問ですが、 Reports("rptNohinsyo").Printer.Copies = 2 DoCmd.OpenReport "rptNohinsyo", acViewPreview A4サイズで1枚目に「納品書」「請求書」、2枚目に「納品書(控)」「受領書」 なので、Copies=2で2部印刷したのですが、2枚目の受領書は、 数量。金額欄を空白にしたいので、レポートの中で、今のCopiesを取得出来ませんか? 2部目なら、数量・金額を印字しないようにしたいと思います。 宜しくお願いします。

  • クイックレポートでの帳票印刷について

    クイックレポートを使ってA4の用紙の上段に請求書明細、下段に請求書明細(控)をそれぞれQRBand(DetailBand)コンポーネントを貼り付けて作成しようとしています。 ところがプレビューで確認しても印刷しても上段の請求明細書の方は出力されるのですが、下段の方の控の方が出力されません。 どうしたらよいのでしょうか? それとも上下に同じような明細を出力するのに何か違ったやり方はあるのでしょうか? 困っています。解る方いましたら宜しくお願いします。

  • Accessのレポートについて

    クエリやテーブルのデータを利用して、レポートを作成しようと思います。 テーブルで20人のお客様のお買い物商品・金額がのっているとします。(人によっては3商品や1商品のみの場合もあるとします) レポートでそれぞれのお客様ごとの請求書を作成したい場合、『オートレポート:単表形式』とやらにして印刷をすると、20人分それぞれお客様ごとのレポート(請求書)が印刷できるものでしょうか? 素人質問で本当に申し訳ありません。 是非ともわかりやすいお答えお待ちしております。

  • [ACCESS][レポート]2列に印刷がしたい

    ACCESSのレポートで、ひとつのテーブルの内容を、2列に印刷することは可能でしょうか? たとえばA4ヨコの用紙で、印刷する項目が3つしかなかった場合、右に余白ができてしまうので、印刷する項目が用紙の下までいったら、次に右上からもう一列印刷をする、というようなことを実現したいのです。

  • access2013 でのレポート印刷について

    この度、OSをwindows8に変えまして、それに伴いaccessも2003から2013に変えました。 以前のデータを用い、プリンターも同じ物を使っているのですが、 印刷結果が違って出てくるので質問させて下さい。 レポートを ページヘッダー 納品IDヘッダー    得意先の情報 詳細セクション    商品の数量、単価等 ページフッター    合計金額 以上の様に作成をし、詳細セクションの項目を10行まで印刷できる様にしていました。  (納品書の商品項目の欄が10行しかない為) ですが現在は10行目があると、9行だけ印刷をし、 残り1行を2ページ目に印刷してしまいます。 10行目まで印刷できる様にするにはどうしたら宜しいでしょうか? ページ設定は 印刷オプション  上 4.23 下 4.23  左 13.12 右 22.57 ページ  印刷向き 縦  用紙 用紙サイズ 連続紙15×5inch      給紙方法  自動選択  印刷 その他のプリンター(EPSON VP-1200U)       プリンターの設定は用紙サイズのみ変更をし、あとはデフォルトのままです 約10年前に自分で作成しておきながら、久しぶりに触るので、 どこをどう直せばいいのかわからなくなってしまいました。 どの辺りに問題があるのか分かる方がいらっしゃいましたら、 教えて頂ければ幸いです。

  • アクセスのレポート

    アクセスの初心者です。 A4の用紙に6件の得意先の情報を書き込む既定の用紙に手書きしていたものを、アクセスでその用紙に印刷するプログラムを入門書を読みながら、作り始めました。 初心者ですから、データははじめから印刷したい順番(得意先の50音順)に並べてから、入力用に作成したフォームでしました。 そして、出力も規定の用紙の位置にズバリ嵌るようなレポートもできました。改ページしても何とか印刷位置も合うようにできました。 しめしめと思い、データを30件ほど入力して出力しますと、なんと印刷された順番がテーブルのレコード順(得意先の50音順)になりません。 いろいろ検索して探して見ましたが、よく分かりません。このままでは、アクセスのレポートの順番はレコード順にはならないのではとも思えてきましたが、結局印刷の順番を決めるための基になるものをなににするばよいかを教えてください。 クリエがいまいちよく理解できないので、、、、なんとなくここかなとも思うのですが、宜しくお願いします。

専門家に質問してみよう