アプリ版:「スタンプのみでお礼する」機能のリリースについて

Windows NTでAccess2000を使っています。
フォームでコマンドボタンを用意し、レポートの印刷を設定しています。
ここまでは順調にできたのですが、この応用として
ボタンを1回押すと同じものを7枚いっきに印刷するという設定が
どうしてもできません。
その方法をご存知の方、よろしくお願いします。

A 回答 (6件)

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

どの部分に部数を入れればよいのでしょうか。
お手数ですが再度回答をお願いします。

補足日時:2002/08/29 14:25
    • good
    • 0

DoCmd.PrintOut で処理できます。



>stDocName = "搬入書"
>DoCmd.OpenReport stDocName, acNormal
この部分を

stDocName = "搬入書"
DoCmd.OpenReport stDocName, acPreview, "", ""
acPrintAll, , , acHigh, 7, True

の記述に直します。
数字の 7が入っている個所が枚数になります。
搬入書をプレビューで表示し7枚出力します。
    • good
    • 0

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
    • good
    • 0

DoCmd.OpenReportの後に記述します。

PrintOutアクションでレポートを印刷する場合は一度プレビューでレポートを開いておかないといけません。

DoCmd.OpenReport stDocName, acViewPreview
DoCmd.PrintOut acPrintAll, , , acHigh, 7, True
DoCmd.Close acReport, stDocName

一度プレビューで開くため、最後に閉じます。

参考までにOpenReportの引数である、acNormalというのは、いきなり印刷してしまう引数で、印刷物を確認してから印刷したい人には向きません。その場合はacViewPreviewを使います。いわゆる印刷プレビューが表示され、ユーザはその後印刷を始めます。

この回答への補足

お世話になります。
教えていただいた通り組み込んでみたところ
テーブルに入っている情報全てが印刷されてしまいます。
フォーム(単票形式)で表示されるもののみを7枚出力したいのですが
これはマクロの問題ではなくレポートの設定の問題なのでしょうか??
お手数ですが回答をよろしくお願いします。

補足日時:2002/08/30 14:26
    • good
    • 1

搬入書というレポートのレコードソースをテーブルではなくそのフォームに表示


されている搬入書の搬入書No等のキーを使って抽出するクエリをソースに使えば
フォームに表示されているデータだけ7枚出力出来ます。
搬入書のレポートがテーブルをソースに使っていればテーブル上のレコード全て
出力されてしまいます。

この回答への補足

回答ありがとうございます。
なるほど…クエリで搬入書のNoを抽出条件に絞り込めばいいわけですね。
フォームで表示している搬入書Noを自動で読み取る…なんてことはできないですよね。
できれば印刷までスムーズに持っていけるのにと思っただけです。
すみません、贅沢ばかり言って。

補足日時:2002/08/30 19:21
    • good
    • 0

そのフォームには、搬入書のNoを表示しているテキストボックスがありますよね?そのテキストボックスを自動的にひいて来れます。


クエリの抽出条件のところに、[forms]![フォーム名]![テキストボックス名]を記述しそのクエリーをレポートのレコードソースとしてください。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています