ワークシートを印刷するにはPrintOutメソッドを使います。次のコードはSheet1を印刷します。
Sub Sample08() Worksheets("Sheet1").PrintOut End Sub
また、複数のシートを一気に印刷することもできます。次のコードはSheet1、Sheet2、Sheet3を印刷します。
Sub Sample08_2() Sheets(Array("Sheet1", "Sheet2", "Sheet3")).PrintOut End Sub
印刷時のオプションなどは、実際の印刷操作をマクロ記録してプロパティを調べましょう。
Sheet1以外のワークシートをアクティブにしてSample08を実行すると、印刷開始の直前にSheet1が一瞬アクティブになります。印刷のデータをプリンタに送った後はまた元のワークシートが表示されるのですが、一瞬のちらつきが気になります。「それなら、ScreenUpdatingプロパティを使えばいい」とお思いの方もいらっしゃるでしょう。ApplicationオブジェクトのScreenUpdatingプロパティにFalseを指定すると、それ以降プロシージャが終了するまでは画面の更新が抑止されます。確かに
Sub Sample08_3() Application.ScreenUpdating = False Worksheets("Sheet1").PrintOut End Sub
とすれば画面のちらつきはなくなりました。しかし、問題はそこではありません。Sheet1が一瞬アクティブになったことが重要なのです。試しに次のコードを実行してみましょう。Sheet2をアクティブにしてから非表示のSheet1を印刷するマクロです。
Sub Sample08_4() Worksheets("Sheet2").Activate Worksheets("Sheet1").Visible = False Worksheets("Sheet1").PrintOut End Sub
結果はエラーになります。非表示のSheet1はアクティブになれないのでPrintOutメソッドでは印刷できないのです。したがって、印刷したいワークシートが非表示の場合は、そのワークシートを印刷する前に再表示しなければなりません。その際、ユーザーに隠しておいた非表示の印刷用ワークシートが画面に表示されないために、VisibleプロパティにTrueを設定する直前でScreenUpdatingプロパティを使います。
Sub Sample08_5() Worksheets("Sheet2").Activate Worksheets("Sheet1").Visible = False If MsgBox("Sheet1を印刷しますか?", vbQuestion + vbYesNo) = vbYes Then Application.ScreenUpdating = False Worksheets("Sheet1").Visible = True Worksheets("Sheet1").PrintOut Worksheets("Sheet1").Visible = False End If End Sub
印刷プレビューするのは、それほど難しくありません。PrintOutメソッドの代わりにPrintPreviewメソッドを使えばいいのです。次のコードはSheet1の印刷プレビューを表示します。
Sub Sample08_6() Worksheets("Sheet1").PrintPreview End Sub