9月の課題はレポートの制御。今まで縁がなかった・・といえば大嘘になります。手をつけるとはまる・・2時間3時間ですむ世界ではなくなるので・・・からと敬遠していました。
予測どおり、四苦八苦。
フォームと一緒でしょ、と高を括ってレポートのオープン時にレコードソースのダイナミックな入れ替えを指定して蹴られる、などなどを繰り返し、大幅な設定変更はデザインビューでという大原則をやっと会得。
まあ、印刷プレビューで開いておいて、さ、設定変更よ、といわれてレポートさんが納得するとも思えませんし。
そんな中で新たな課題。
アプリケーションを作り上げるといくつかのレポートの印刷の向きがどうしても縦横、混在します。
2、3台のマシンで試すと最初に設定した「ページ設定」がいとも簡単に無視されることが判明。
これをクライアントさんに納品したり、社内に配って歩いたりというシチュエーションを考えると、手動で設定しなおす、という事態は避けたい。
ところがこれが難物。
2002だといとも簡単に設定できるのですが、2000以前のバージョンだと、プリンタの情報とドライバの情報を取得し、それぞれを初期化して設定しなおすという面倒なことをしなくてはならないようなのです。
まずは簡単な2002から。Printerオブジェクトが加わり、印刷設定周りがとても扱いやすくなっています。
ポイントは
★デザインビューで開く。
★閉じるとき必ず DocmdのClose引数にacSaveYesを使うこと。
印刷プレビューでもこのコードで印刷設定できますが、デザインビューで開いたほうがReportに負荷がかからないからです。
(mdeファイルやランタイムの時にプレビューで設定できるのがこのオブジェクトの"売り"ですけど・・。mdbの時は少しでもAccessにやさしくしましょう。)
また、Saveしないとページ設定を出してダイアログボックスのOKボタンを押す、という間抜けな羽目になります。
下のコードは2003βでも検証OKでした。
Private Sub PrinterSet()
DoCmd.OpenReport "請求_R", acViewDesign
'PrinterオブジェクトのOrientationがacPRORLandscapeなら横向き、acPRORPortraitなら縦向き。
Reports("請求_R").Printer.Orientation = acPRORLandscape
DoCmd.Close acReport, "請求_R", acSaveYes
End Sub
Form,Reportの各オブジェクトにもOrientationプロパティが存在しますが、これはオブジェクトの中での文字の方向を決定するもの。
オブジェクトそのもののプロパティシート、書式タブの「方向」ですね。
Printerオブジェクトの方向は用紙の方向です。上のプロシージャでは請求_Rというレポートを横向きに設定しています。
肝心の2000以前。一度テストしたときはうまくいったのですが、2度目は動かない。げーん。
ヘルプ丸写しなのに。もう少し検証してからアップします。