印刷する


シートの印刷はPrintOutメソッド

ワークシートを印刷するには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