• ベストアンサー

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

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

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

  • ベストアンサー
回答No.6

さきほどの回答で説明が一部間違えていましたので、訂正します。 >フォームで編集中の 例)『請求書ID』が【1】のレコードだけ印刷したい時って、どんな条件式?を書けばでできますか? それぞれのレポートを開くときのイベントで、次のような処理を入れます。 レポートの元のレコードソースが商品テーブル、フォームが商品フォームと仮定して、 Private Sub Report_Open(Cancel As Integer) Me.RecordSource = "SELECT * FROM [商品テーブル] WHERE [商品ID]=" & Forms![商品フォーム].商品ID End Sub としてください。 これは現在のフォームでアクティブなレコード(カレントレコード)の商品IDのレコードだけをレポートのレコードソースにする処理です。 あと、いきなり印刷されるのを防ぐため一時的に 印刷をプレビューにコードを修正してみることも一法です。 DoCmd.OpenReport stDocName, acNormalを DoCmd.OpenReport stDocName, acPreview に一時的に修正して確認してみてください。 ご参考になれば幸いです。m(__)m

non23
質問者

お礼

ありがとうございます!! おかげさまで問題は解決しました。

その他の回答 (5)

回答No.5

>フォームで編集中の 例)『請求書ID』が【1】のレコードだけ印刷したい時って、どんな条件式?を書けばでできますか? それぞれのレポートを開くときのイベントで、次のような処理を入れます。 レポートの元のレコードソースが商品テーブル、フォームが、商品テーブルと仮定して、 Private Sub Report_Open(Cancel As Integer) Me.RecordSource = "SELECT * FROM [商品テーブル] WHERE [商品ID]=" & Forms![商品フォーム].商品ID End Sub としてください。 これは現在のフォームでアクティブなレコード(カレントレコード)の商品IDのレコードだけをレポートのレコードソースにする処理です。 ご参考になれば幸いです。m(__)m

回答No.4

四たびShadowMoonです。 No.1,No.2の回答で、Public変数の宣言をクラスモジュール(フォームやレポート単位のプログラム群)ではなくて、標準モジュールで宣言しないとだめなようでした。どうもすみません。(^_^;) もしNo.1、2の回答を試したければ、VBEの画面から挿入メニュー~標準モジュールで標準モジュールを挿入できますので、ここにPublic変数を宣言するコードを入れかえてください。 なお蛇足ですがNo.3の回答例のレポートの名称は、いいかげんなのでちゃんとご自分で付けてださいね。 あと、この方法を使えば、それぞれのページ設定を変える事も簡単にできますのでそれぞれのページ設定を変えて印刷したい場合にも有用な方法のひとつです。 今回No.2~3では、AccessでVBAを使用することのとっかかりになればということで回答いたしました。また不明な点があれば、教えてください。m(__)m

non23
質問者

補足

 できました!!!できました!!!感動です(>_<)  が、もう一つお聞きしたいことが出てきました。  フォームで編集中の 例)『請求書ID』が【1】のレコードだけ印刷したい時って、どんな条件式?を書けばでできますか? 今、作成中のデータベースは既に、何件かレコードが入力されているんですが、【請求書を印刷しますか?】の後で【はい】のボタンをクリックしたら、全レコードの請求書が印刷されてしまわないですか? そうなってしまってはやばいから、まだ【はい】ボタンをクリックできずにいます。  お願いします。お手数をおかけしますが教えて下さいませ。

回答No.3

ふたたびShadowMoonです。 No.1,No.2の回答は1つのレポートを使いまわす方法ですので、初心者の方にはちょっと難しかったかもしれません。 もっと簡単な方法としては、 (1)同じレポートをコピーして、3つ作成し、それぞれタイトルだけ異なるようにラベルを入れておく。 (2)印刷するためのフォームにボタンを作り、ボタンをクリックすると、3つのレポートを印刷するようにする。(この部分がVBA) とすることもできます。 (1)「同じレポートをコピーして、3つ作成し、それぞれタイトルだけ異なるようにラベルを入れておく。」方法の例 データベースウインドウで元になるレポートを選択 (レポートの名前は仮に”レポート1納品書”とします。) Ctrlキーを押しながら、空いているところにドラッグ&ドロップ コピーされたレポートの名前を修正 (コピーして修正したレポートの名前を仮に”レポート2納品書”とします。) 同様にもうひとつコピーして名前を修正 (コピーして修正したレポートの名前を仮に”レポート3納品書控え”とします。) (2)「印刷するためのフォームにボタンを作り、ボタンをクリックすると、3つのレポートを印刷するようにする。(この部分がVBA)」方法の例 (1)ボタンを作成したいフォームをデザイン表示します。 (2)フォームデザインのツールバーからコマンドボタンをクリックします。 (3)マウスポインタをフォーム上に移動し、任意の大きさでドラッグします。 (4)コマンドボタンウイザードが表示されたら、種類はレポートの操作、ボタンの動作はレポートの印刷を選択し、次へのボタンをクリックします。 (5)印刷するレポートを選択し、次へのボタンをクリックします。 (6)絵と文字列がありますが、文字列の方が分かりやすいので、文字列の方に●をつけてください。 (7)文字列を”レポートの印刷”から”納品書と請求書の印刷”に変えてみましょう。 (変え終わったら請求書の印刷部分をドラッグして、Ctrlキーを押しながらCキーを叩いてください。) (8)次へをクリックすると”コマンド何とか”が反転していますので、Ctrlキーを押しながらVキーを叩いてください。ボタン名が”請求書の印刷”と変わります。 (9)完了をクリックするとボタンができます。 VBAの表示 (1)作成したボタンを右クリックし、プロパティを選択します。 (2)イベントタブか、すべてのタブを選択します。 (3)クリック時というところに[イベントプロシージャ]と表示されています。 (4)[イベントプロシージャ]の欄をクリックすると、欄の右に▼と・・・のボタンが出ます。 (5)・・・をクリックするとボタンクリック時のプログラムコードが表示されるVBE(VisualBasicEditor)画面が表示されます。 Private Sub 納品書と請求書の印刷_Click() On Error GoTo Err_納品書と請求書の印刷_Click Dim stDocName As String stDocName = "レポート1納品書" DoCmd.OpenReport stDocName, acNormal Exit_納品書と請求書の印刷_Click: Exit Sub Err_納品書と請求書の印刷_Click: MsgBox Err.Description Resume Exit_納品書と請求書の印刷_Click End Sub 上記のVBAの修正を行います。 (1)stDocName~と入力されているところから3行分選択します。(ドラッグして色を反転させます。) (2)Ctrlキーを押しながらCキーを叩いて選択部分をコピーします。 (3)Exit_納品書と請求書の印刷_Click:と入力されている前の行をクリックしてカーソルを表示します。 (4)Ctrlキーを押しながらVキーを2回叩きます。 (5)レポートの名前を修正します。(下記にサンプルを示します。) Private Sub 納品書と請求書の印刷_Click() On Error GoTo Err_納品書と請求書の印刷_Click Dim stDocName As String stDocName = "レポート1納品書" DoCmd.OpenReport stDocName, acNormal stDocName = "レポート2請求書" DoCmd.OpenReport stDocName, acNormal stDocName = "レポート3請求書控え" DoCmd.OpenReport stDocName, acNormal Exit_納品書と請求書の印刷_Click: Exit Sub Err_納品書と請求書の印刷_Click: MsgBox Err.Description Resume Exit_納品書と請求書の印刷_Click End Sub (6)デバッグメニューから***のコンパイルを選択して、入力したコードに問題ないか確認します。 (7)上書き保存ボタンをクリックし、保存します。 (8)フォームをデザインビューから通常の表示に戻し、ボタンをクリックしてください。 また、コードを下記のように修正すれば、ボタンをクリックしていきなり印刷されるのを防ぐことができます。 Private Sub 納品書と請求書の印刷_Click() On Error GoTo Err_納品書と請求書の印刷_Click If MsgBox("印刷しますか?", vbYesNo + vbDefaultButton1, "確認") = vbYes Then Dim stDocName As String stDocName = "レポート1納品書" DoCmd.OpenReport stDocName, acNormal stDocName = "レポート2請求書" DoCmd.OpenReport stDocName, acNormal stDocName = "レポート3請求書控え" DoCmd.OpenReport stDocName, acNormal End If Exit_納品書と請求書の印刷_Click: Exit Sub Err_納品書と請求書の印刷_Click: MsgBox Err.Description Resume Exit_納品書と請求書の印刷_Click End Sub ご検討を祈ります。m(__)m

non23
質問者

お礼

ShadowMoonさん何度もありがとうございます。 No.1.2でやってみたら、エラーは出ないのですが三つのタイトルが同時に表示されるレポートが3枚印刷されてしまって、困っていたんですよ(^_^;) 初心者向けの方法にチャレンジしてみますね。

回答No.2

>(2)次にフォームのボタンをクリックしたら3回印刷するような処理を入れておきます。 (1)ボタンを作成したいフォームをデザイン表示します。 (2)フォームデザインのツールバーからコマンドボタンをクリックします。 (3)マウスポインタをフォーム上に移動し、任意の大きさでドラッグします。 (4)コマンドボタンウイザードが表示されたら、種類はレポートの操作、ボタンの動作はレポートの印刷を選択し、次へのボタンをクリックします。 (5)印刷するレポートを選択し、次へのボタンをクリックします。 (6)絵と文字列がありますが、文字列の方が分かりやすいので、文字列の方に●をつけてください。 (7)文字列を”レポートの印刷”から”請求書の印刷”に変えてみましょう。 (変え終わったら請求書の印刷部分をドラッグして、Ctrlキーを押しながらCキーを叩いてください。) (8)次へをクリックすると”コマンド何とか”が反転していますので、Ctrlキーを押しながらVキーを叩いてください。ボタン名が”請求書の印刷”と変わります。 (9)完了をクリックするとボタンができます。 VBAの表示 (1)作成したボタンを右クリックし、プロパティを選択します。 (2)イベントタブか、すべてのタブを選択します。 (3)クリック時というところに[イベントプロシージャ]と表示されています。 (4)[イベントプロシージャ]の欄をクリックすると、欄の右に▼と・・・のボタンが出ます。 (5)・・・をクリックするとボタンクリック時のプログラムコードが表示されるVBE(VisualBasicEditor)画面が表示されます。 VBAの修正 3回印刷を行うには、 DoCmd.OpenReport stDocName, acNormal の部分を DoCmd.OpenReport stDocName, acNormal DoCmd.OpenReport stDocName, acNormal DoCmd.OpenReport stDocName, acNormal と3回記述(コピー)すればいいです。 現在のプログラムコードを次のように修正してください。 Public pub印刷回数 As Variant 'パブリック変数を宣言 Private Sub 請求書の印刷_Click() On Error GoTo Err_請求書の印刷_Click Dim stDocName As String stDocName = "ここはレポートの名前になっています" pub印刷回数 = 1 DoCmd.OpenReport stDocName, acNormal pub印刷回数 = 2 DoCmd.OpenReport stDocName, acNormal pub印刷回数 = 3 DoCmd.OpenReport stDocName, acNormal Exit_請求書の印刷_Click: Exit Sub Err_請求書の印刷_Click: MsgBox Err.Description Resume Exit_請求書の印刷_Click End Sub >(3)最後にレポートのフォーマット時のイベントで、 どこにラベルを作成しているかわかりませんが、レポートヘッダーとしておきます。 (1)印刷するレポートをデザインで開いてください。 (2)レポートヘッダーと表示されているところをダブルクリックします。 (3)イベントタブのフォーマット時の欄をクリックします。 (4)欄の右にある▼をクリックし、イベントプロシージャをクリックします。 (5)欄の右にある・・・をクリックするとレポートヘッダーフォーマット時のプログラムコードが表示されます。 (6)ここに次のコードを入力します。 Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer) On Error GoTo Err_レポートヘッダー_Format If pub印刷回数=1 Then Me.納品書.visible=True Me.請求書.visible=False Me.納品書(控).visible=False EndIf If pub印刷回数=2 Then Me.納品書.visible=False Me.請求書.visible=True Me.納品書(控).visible=False EndIf If pub印刷回数=3 Then Me.納品書.visible=False Me.請求書.visible=False Me.納品書(控).visible=True EndIf Exit_レポートヘッダー_Format: Exit Sub Err_レポートヘッダー_Format: MsgBox Err.Description Resume Exit_レポートヘッダー_Format End Sub あとは、VBEのデバッグ~コンパイルで、エラーが無いのを確認します。 がんばってくださいね。m(__)mう~疲れました・・・

回答No.1

VBAを使った方法ですが、 (1)まず、納品書レポートに、、【納品書】【請求書】【納品書(控)】ラベルを作成します。(ラベルは重なってもかまいません。)それぞれのラベルは、納品書、請求書、納品書(控)としておきます。 (2)次にフォームのボタンをクリックしたら3回印刷するような処理を入れておきます。(VBA) パブリック変数(例えば、pub印刷回数)を宣言しておいて、 1回目印刷前にpub印刷回数=1とします。 2回目印刷前にpub印刷回数=2とします。 3回目印刷前にpub印刷回数=3とします。 (3)最後にレポートのフォーマット時のイベントで、 pub印刷回数=1なら Me.納品書.visible=True Me.請求書.visible=False Me.納品書(控).visible=False pub印刷回数=2なら Me.納品書.visible=False Me.請求書.visible=True Me.納品書(控).visible=False pub印刷回数=3なら Me.納品書.visible=False Me.請求書.visible=False Me.納品書(控).visible=True でできますので、ご参考まで。m(__)m

non23
質問者

補足

さっそくの回答ありがとうございます。しかし、access初心者の私にはレベルが高すぎるのか、(2)(3)ができません(^_^;) 一体、どこの画面に何を入力したらいいのでしょうか?こんな私に詳しく教えてくれませんか?

関連するQ&A