印刷前にプレビューではなくダイアログボックスを開いて選択・設定するVBA
店舗や事務所などで複数のプリンターが印刷可能な状態の時に、コマンドボタンに記録した印刷実行するプログラムを作動させて失敗した経験がありませんか?
エクセルVBAでは、印刷枚数・開始ページ・終了ページ・用紙選択などは設定できるのですが、両面印刷に関しては設定できません。
そこで、プリンター自体の設定ができる「ダイアログボックス」を、VBAで表示させる指示を出せば解決します。
印刷ダイアログボックスをVBAで起動
プリンターのダイアログボックスを開くには、左上の「ファイル」➡「印刷」➡「プリンターのプロパティ」の順にクリックしていくとこのような画面(ダイアログボックス)が開きます。
右の画像がプリンターの設定を行うプロパティ画面で、ダイアログボックスといいます。
VBAでは、この画面のひとつ前のプリンターの選択を表示させることができます。
このように、順番にクリックすることで印刷ダイアログボックスを表示させることもできますが、コマンドボタンにVBAコードを記述すれば、ワンクリックで表示させられます。
ここでは、ユーザーフォームに配置した「コマンドボタン1」にVBAに記述しています。
Private Sub CommandButton1_Click()
Application.Dialogs(xlDialogPrinterSetup).Show
End Sub
- コマンドボタン1が押されたら
- プリンター設定のダイアログを表示する
- マクロ終了
このVBAコードを書いて実行するとこのような画面が表示されます。
ここで最初に選択されているプリンターが、登録されている通常使用するプリンターなので、他のプリンタたーに変更することも可能ですし、選択されたプリンターで設定(S)ボタンを押せば、プリンターのプロパティが表示されるので設定を変更することができます。
設定が終われば、OKボタンでプリンター設定ダイアログボックスを閉じられます。
これで、共有パソコンなどでもプリンターの設定さえ忘れなければ、失敗しないで印刷できますよね。
さらに、VBAコードで用紙を事前に横方向で設定しておけば、わざわざダイアログを表示させなくても必ず用紙を横向きで、用紙サイズも印刷設定できます。
成績表などで「高得点順に並べ替えを行った後で印刷を実行する」というプログラムを作り、印刷枚数もテキストボックスの入力値に応じてできるようにしました。