こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

納品書レポートを印刷したいのですが、【納品書】【請求書】【納品書(控)】といったふうに、タイトルが違い内容がまったく同じレポートを続けて印刷するにはどうしたらよいのでしょうか?

初めて質問させていただきますが、どなたか良いアドバイスをお願いします。

投稿日時 - 2002-08-23 16:20:13

QNo.341910

困ってます

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

さきほどの回答で説明が一部間違えていましたので、訂正します。

>フォームで編集中の 例)『請求書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

投稿日時 - 2002-09-03 17:23:22

お礼

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

投稿日時 - 2002-09-09 12:20:33

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.5

>フォームで編集中の 例)『請求書ID』が【1】のレコードだけ印刷したい時って、どんな条件式?を書けばでできますか?

それぞれのレポートを開くときのイベントで、次のような処理を入れます。
レポートの元のレコードソースが商品テーブル、フォームが、商品テーブルと仮定して、

Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = "SELECT * FROM [商品テーブル] WHERE [商品ID]=" & Forms![商品フォーム].商品ID
End Sub

としてください。
これは現在のフォームでアクティブなレコード(カレントレコード)の商品IDのレコードだけをレポートのレコードソースにする処理です。
ご参考になれば幸いです。m(__)m

投稿日時 - 2002-09-03 17:13:53

ANo.4

四たびShadowMoonです。

No.1,No.2の回答で、Public変数の宣言をクラスモジュール(フォームやレポート単位のプログラム群)ではなくて、標準モジュールで宣言しないとだめなようでした。どうもすみません。(^_^;)
もしNo.1、2の回答を試したければ、VBEの画面から挿入メニュー~標準モジュールで標準モジュールを挿入できますので、ここにPublic変数を宣言するコードを入れかえてください。

なお蛇足ですがNo.3の回答例のレポートの名称は、いいかげんなのでちゃんとご自分で付けてださいね。

あと、この方法を使えば、それぞれのページ設定を変える事も簡単にできますのでそれぞれのページ設定を変えて印刷したい場合にも有用な方法のひとつです。

今回No.2~3では、AccessでVBAを使用することのとっかかりになればということで回答いたしました。また不明な点があれば、教えてください。m(__)m

投稿日時 - 2002-08-26 14:07:57

補足

 できました!!!できました!!!感動です(>_<)
 が、もう一つお聞きしたいことが出てきました。

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

投稿日時 - 2002-09-02 19:18:35

ANo.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

投稿日時 - 2002-08-26 10:11:23

お礼

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

投稿日時 - 2002-08-26 13:19:34

ANo.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う~疲れました・・・

投稿日時 - 2002-08-23 18:57:12

ANo.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

投稿日時 - 2002-08-23 17:23:34

補足

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

投稿日時 - 2002-08-23 17:56:01

あなたにオススメの質問