シートの印刷を行うには

VBAではワークシートやグラフシートなどの印刷を行うためにPrintOutメソッドが用意されています。

PrintOutメソッドは引数無しで実行すると全てのシートを印刷します。それとは逆に複数の引数を設定して細かい設定での印刷も可能です。

一般的には印刷したブックの印刷の設定は微調整などを経て1度決まるとそれ以降はほとんど変わることはありません。次に印刷する場合も前回と同じ設定で印刷することが大多数です。

そこで印刷が多いブックには印刷用の設定を事前に用意した関数を用意しておくと設定をいちいち触る必要がなくなります。

PrintOutメソッドの構文

親オブジェクト.PrintOut([From], [To], [Copies], [Preview], [ActivePrinter], [PrintToFile], [Collate], [PrToFileName], [IgnorePrintAreas])

親オブジェクト PrintOutメソッドの親オブジェクトにはChart、Charts、Range、Sheets、Window、Workbook、Worksheet、Worksheetsの8つのオブジェクトが指定できます。

ただ、実際に使うことが多いのはWorkbook、Worksheet、Worksheetsの3つでしょう。

From 印刷を開始するページ番号を指定します。最初のページは1になります。省略した場合は最初のページから印刷を開始します。
To 印刷を終了するページ番号を指定します。省略した場合は最後のページまで印刷します。
Copies 印刷する部数を指定します。最小部数は1になります。省略した場合は1部印刷します。
Preview 印刷プレビューを表示する場合はTrue、表示しない場合はFalseを指定します。省略した場合はFalseになります。
ActivePrinter 印刷先のプリンターの名前を指定します。省略した場合は現在使っているプリンター名が指定されます。
PrintToFile 印刷する内容をファイルに出力する場合はTrueを指定します。Trueを指定した場合は引数PrToFileNameで指定されたファイル名でファイル出力します。省略した場合はFalseになりファイル出力されません。
Collate 複数ページを2部以上印刷する場合に、部単位で印刷する場合はTrueを指定します。ページ単位で印刷する場合はFalseを指定します。省略した場合はFalseになります。
PrToFileName 引数PrintToFileがTrueの場合に出力先のファイル名を指定します。省略した場合はダイアログボックスが表示されファイル名欄に入力した名前をファイル名とします。引数PrintToFileがFalseの場合はダイアログボックスは表示されません。
IgnorePrintAreas 印刷範囲を無視して印刷する場合はTrueを指定します。印刷範囲を有効にする場合はFalseを指定します。省略した場合はFalseになります。親オブジェクトがSheets、Workbook、Worksheet、Worksheetsの4つのいずれかの場合のみ指定可能です。

引数を全て省略した場合

PrintOutメソッドは全ての引数を省略することが出来ます。

この1行だけでブックの全てのシートを印刷します。印刷に関する設定は事前に設定されている内容に依存します。また、印刷先がXPS Document Writerなどのように紙ではなく電子ファイル出力する場合は保存先とファイル名を確認するダイアログが表示されます。

現在使用しているプリンターを調べるには

PrintOutメソッドのActivePrinter引数に設定するプリンター名ですが、デバイスとプリンターなどで表示されている名前がプリンター名になります。ただ、それは正確なプリンター名ではありません。

正確なプリンター名を取得したい場合はVBA画面のイミディエイトウィンドウで「? Application.ActivePrinter」と入力してEnterキーを押すと以下のように出力されます。

Microsoft XPS Document Writer on Ne00:

これが正確なプリンター名になります。[ on Ne00:]の部分もプリンター名に含めます。

何も入力していないシート

ワークシートを追加しただけで何も入力していない場合は、印刷しようとしても「印刷できるものがありません」とメッセージが表示されます。

この状態でPrintOutメソッドを実行すると、上記のメッセージは表示されず、白紙ページが印刷されます。

サンプルコード

単純にブック全体を印刷する場合は引数を省略して以下のようなコードで印刷可能です。

ただ、実際にVBAで自動印刷させたいときに必要な引数は、From(開始ページ)、To(終了ページ)、Copies(印刷部数)、Collate(部単位・ページ単位指定)=True(部単位)の4つがメインになると思います。

その場合は以下のようなコードになります。