Excel VBA 面倒な印刷設定を高速自動化

スポンサーリンク
スポンサーリンク

PrintOut(プリントアウト)メソッド

印刷を実行するにはPrintOutメソッドを使います。このPrintOutメソッドはWorksheetオブジェクトだけでなくWookbookオブジェクトでも使用可能です。

Workbook全体を印刷するコード

Sub sample()
    ActiveWorkbook.PrintOut
End sub

Worksheetを印刷するコード

Sub sample()
    Sheets("Sheet1").PrintOut
End Sub

印刷する前にプレビューを表示する

PrintOutメソッドの引数Preview(プレビュー)にTrue(トウルー)を指定すると、印刷前にプレビューが表示されます。プレビュー画面で印刷ボタンを押さないと印刷はされません。PrintPreview【プリントプレビュー】メソッドを使う方法もあります。

印刷する前にプレビュー表示するコード

Sub sample()
   Sheets("sheet1").PrintOut Preview:=True
End Sub

PrintPreviewの場合

Sub sample()
   ActiveSheet.PrintPreview
End Sub

用紙の向きを設定する

印刷する用紙の向きは、PageSetup【ページセットアップ】オブジェクトのOrientation【オリエンテーション】プロパティで設定します。
Orientationプロパティの定数は

  • xlLandscape(ランドスケープ) 横向き
  • xlPortrait(ポートレート)   縦向き

の2種類です。

用紙の向きを縦に設定したコード

Sub sample()
  With ActiveSheet
       .PageSetup.Orientation = xlPortrait
       .PrintPreview
  End With
End Sub

余白を設定する

余白を設定するには、PageSetupオブジェクトのMargin【マージン】プロパティで設定します。Marginプロパティの設定値はptポイントでわかりづらいのでApplication【アプリケーション】オブジェクトのCentimetersToPoints【センチメーターズトウポインツ】メソッドを使用しでセンチ単位に変換して指定します。
Marginの位置は

  • LeftMargin 【左余白の設定】
  • RightMargin 【右余白の設定】
  • TopMargin 【上余白の設定】
  • BottomMargin 【下余白の設定】
  • HeaderMargin 【ヘッダー余白の設定】
  • FooterMargin 【フッター余白の設定】

余白設定をした印刷設定のコード

Sub sample()
  With ActiveSheet.PageSetup
       .Orientation = xlPortrait
       .LeftMargin = Application.CentimetersToPoints(1)
       .RightMargin = Application.CentimetersToPoints(1)
       .TopMargin = Application.CentimetersToPoints(1.5)
       .BottomMargin = Application.CentimetersToPoints(1.5)
       .HeaderMargin = Application.CentimetersToPoints(0.5)
       .FooterMargin = Application.CentimetersToPoints(0.5)
  End With 
   ActiveSheet.PrintPreview
End Sub

余白を左右1cm 上下1.5cm フッターヘッター0.5cmに設定したコードです。

用紙の中央に印刷する方法

用紙の中央に印刷するには、PageSetupオブジェクトのCenterHorizontally【センターホリゾンタル】プロパティ(水平)CenterVertically(センターバーティカリー)プロパティ (垂直)にTrueを設定します。

用紙の中央に印刷する設定をしたコード

Sub sample()
  With ActiveSheet.PageSetup
       .Orientation = xlPortrait
       .LeftMargin = Application.CentimetersToPoints(1)
       .RightMargin = Application.CentimetersToPoints(1)
       .TopMargin = Application.CentimetersToPoints(1.5)
       .BottomMargin = Application.CentimetersToPoints(1.5)
       .HeaderMargin = Application.CentimetersToPoints(0.5)
       .FooterMargin = Application.CentimetersToPoints(0.5)
       .CenterHorizontally = True
       .CenterVertically = True
  End With 
   ActiveSheet.PrintPreview
End Sub

1枚の用紙に強制的に収めて印刷する

印刷する範囲の大きさによらす、1枚の用紙に収めて印刷するには、PageSetupオブジェクトのFitToPagesWide(フィットトウページズワイド)プロパティ(幅)FitTOpagesTall(フィットトウページズトール)プロパティ(高さ)に1を設定します。収まらないときは自動的に縮小して1枚の用紙に収めます。

1枚の用紙に強制的に収めて印刷するコードを追加したコード

Sub sample()
  With ActiveSheet.PageSetup
       .Orientation = xlPortrait
       .LeftMargin = Application.CentimetersToPoints(1)
       .RightMargin = Application.CentimetersToPoints(1)
       .TopMargin = Application.CentimetersToPoints(1.5)
       .BottomMargin = Application.CentimetersToPoints(1.5)
       .HeaderMargin = Application.CentimetersToPoints(0.5)
       .FooterMargin = Application.CentimetersToPoints(0.5)
       .CenterHorizontally = True
       .CenterVertically = True
       .FitToPagesWide = 1
       .FitTOpagesTall = 1
  End With 
   ActiveSheet.PrintPreview
End Sub

印刷の設定を高速化する

上記のコードでもわかるように、印刷各種設定で操作するPageSetupオブジェクトは、設定に時間がかかるオブジェクトです。そんなときは、Excelとプリンターとの通信を一時的に遮断します。遮断状態では、PageSetupオブジェクトの設定が高速に行われるので、設定を終えてからプリンターとの通信を再開し、キャッシュされた設定をプリンターに送信します。
Application【アプリケーション】オブジェクトのPrintCommunication【プリントコミュニケーション】プロパティを使用します。
なお、このプロパティはExcel 2010から追加されたプロパティです。2010以前は使用できません。設定の最初に Falseで遮断して、プレビューの前にTrueで通信を再開します。

印刷高速化を追加したコード

Sub sample()
  Application.PrintCommunication = False
  With ActiveSheet.PageSetup
       .Orientation = xlPortrait
       .LeftMargin = Application.CentimetersToPoints(1)
       .RightMargin = Application.CentimetersToPoints(1)
       .TopMargin = Application.CentimetersToPoints(1.5)
       .BottomMargin = Application.CentimetersToPoints(1.5)
       .HeaderMargin = Application.CentimetersToPoints(0.5)
       .FooterMargin = Application.CentimetersToPoints(0.5)
       .CenterHorizontally = True
       .CenterVertically = True
       .FitToPagesWide = 1
       .FitTOpagesTall = 1
  End With 
  Application.PrintCommunication = True
  ActiveSheet.PrintPreview
End Sub

以上で、面倒な印刷設定を高速自動化についての解説を終了します。
ありがとうございました。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク