- ベストアンサー
ボタン1つで1度に複数枚印刷するには?
Windows NTでAccess2000を使っています。 フォームでコマンドボタンを用意し、レポートの印刷を設定しています。 ここまでは順調にできたのですが、この応用として ボタンを1回押すと同じものを7枚いっきに印刷するという設定が どうしてもできません。 その方法をご存知の方、よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
そのフォームには、搬入書のNoを表示しているテキストボックスがありますよね?そのテキストボックスを自動的にひいて来れます。 クエリの抽出条件のところに、[forms]![フォーム名]![テキストボックス名]を記述しそのクエリーをレポートのレコードソースとしてください。
その他の回答 (5)
- O_cyan
- ベストアンサー率59% (745/1260)
搬入書というレポートのレコードソースをテーブルではなくそのフォームに表示 されている搬入書の搬入書No等のキーを使って抽出するクエリをソースに使えば フォームに表示されているデータだけ7枚出力出来ます。 搬入書のレポートがテーブルをソースに使っていればテーブル上のレコード全て 出力されてしまいます。
- mantaro1
- ベストアンサー率48% (19/39)
DoCmd.OpenReportの後に記述します。PrintOutアクションでレポートを印刷する場合は一度プレビューでレポートを開いておかないといけません。 DoCmd.OpenReport stDocName, acViewPreview DoCmd.PrintOut acPrintAll, , , acHigh, 7, True DoCmd.Close acReport, stDocName 一度プレビューで開くため、最後に閉じます。 参考までにOpenReportの引数である、acNormalというのは、いきなり印刷してしまう引数で、印刷物を確認してから印刷したい人には向きません。その場合はacViewPreviewを使います。いわゆる印刷プレビューが表示され、ユーザはその後印刷を始めます。
補足
お世話になります。 教えていただいた通り組み込んでみたところ テーブルに入っている情報全てが印刷されてしまいます。 フォーム(単票形式)で表示されるもののみを7枚出力したいのですが これはマクロの問題ではなくレポートの設定の問題なのでしょうか?? お手数ですが回答をよろしくお願いします。
- ShadowMoon
- ベストアンサー率59% (73/122)
VBAのプログラムコードはVBEの画面で確認できますので、 レポートの印刷の処理を7回記述する(印刷処理の1行のコードをコピーして6回貼り付けする。)または、7回ループさせることでできます。 VBAのプログラムコードを確認するには、 (1)作成した印刷のボタンを右クリックしプロパティを選択。 (2)イベントタブでクリック時のイベントにイベントプロシージャとあるので、そこをクリック (3)右に▼のボタンと・・・の2つのボタンが現れるので・・・のボタンをクリック でできます。 すると下記のようなプログラムコードが表示されます。 Private Sub 印刷ボタン_Click() On Error GoTo Err_印刷ボタン_Click Dim stDocName As String stDocName = "レポート1" DoCmd.OpenReport stDocName, acNormal End Sub レポートの印刷の処理を7回記述する(印刷処理の1行のコードをコピーして6回貼り付けする。)には、 上記のプログラムの DoCmd.OpenReport・・・の1行を選択してCtrlキーを押しながらCキーをたたき、 その下の行をクリックしてカーソルを表示させ、Ctrlキーを押しながらVキーを6回叩きます。下記に例を示します。 Private Sub 印刷ボタン_Click() On Error GoTo Err_印刷ボタン_Click Dim stDocName As String stDocName = "レポート1" DoCmd.OpenReport stDocName, acNormal DoCmd.OpenReport stDocName, acNormal DoCmd.OpenReport stDocName, acNormal DoCmd.OpenReport stDocName, acNormal DoCmd.OpenReport stDocName, acNormal DoCmd.OpenReport stDocName, acNormal DoCmd.OpenReport stDocName, acNormal End Sub ループさせるには下記のように処理を修正します。(いきなり印刷されるのを防ぐためメッセージボックスもいれてみました。) Private Sub 印刷ボタン_Click() On Error GoTo Err_印刷ボタン_Click Dim stDocName As String Dim i As Integer If MsgBox("印刷しますか?", vbYesNo + vbDefaultButton1, "確認") = vbYes Then stDocName = "レポート1" For i =1 TO 7 DoCmd.OpenReport stDocName, acNormal Next i End If End Sub ご参考になれば幸いです。m(__)m
- O_cyan
- ベストアンサー率59% (745/1260)
DoCmd.PrintOut で処理できます。 >stDocName = "搬入書" >DoCmd.OpenReport stDocName, acNormal この部分を stDocName = "搬入書" DoCmd.OpenReport stDocName, acPreview, "", "" acPrintAll, , , acHigh, 7, True の記述に直します。 数字の 7が入っている個所が枚数になります。 搬入書をプレビューで表示し7枚出力します。
- mantaro1
- ベストアンサー率48% (19/39)
VBAを使うのでしょうか?VBAならDocmd.Printoutアクションで部数を指定できます。またマクロなら、「印刷」アクションを選べば引数で部数を指定できます。 実際にはこの2つは全く同じ事をしますが。
補足
回答ありがとうございます! 現在このようなマクロを書いています。 Private Sub Ctl7枚同時印刷_Click() On Error GoTo Err_Ctl7枚同時印刷_Click Dim stDocName As String stDocName = "搬入書" DoCmd.OpenReport stDocName, acNormal Exit_Ctl7枚同時印刷_Click: Exit Sub Err_Ctl7枚同時印刷_Click: MsgBox Err.Description Resume Exit_Ctl7枚同時印刷_Click どの部分に部数を入れればよいのでしょうか。 お手数ですが再度回答をお願いします。
補足
回答ありがとうございます。 なるほど…クエリで搬入書のNoを抽出条件に絞り込めばいいわけですね。 フォームで表示している搬入書Noを自動で読み取る…なんてことはできないですよね。 できれば印刷までスムーズに持っていけるのにと思っただけです。 すみません、贅沢ばかり言って。