HOME > 即効テクニック > Excel VBA > ページ設定関連のテクニック > 印刷の総ページ数を取得する

即効テクニック

ページ設定関連のテクニック

印刷の総ページ数を取得する

(Excel 97/2000/2002/2003/2007)
ワークシートを印刷するにはPrintOutメソッドを使います。

Sub Sample1()
  ActiveSheet.PrintOut
End Sub   
印刷の操作をマクロ記録すると、Windowオブジェクトが記録されますが、PrintOutメソッドはワークシート(Worksheetオブジェクト)も持っています。 さて、印刷を実行する前に、印刷結果が何ページになるかを調べるにはどうしたらいいでしょう。 VBAには、水平方向の改ページを表すHPageBreakオブジェクトと、垂直方向の改ページを表すVPageBreakオブジェクトがありますが、印刷されるページ数を表すプロパティはありません。 改ページの個数から、印刷されるページ数を計算することもできますが、ちょっと、ややこしいです。ちなみに、次のようにします。
Sub Sample2()
  Dim n As Long
  n = (ActiveSheet.HPageBreaks.Count + 1) * _
    (ActiveSheet.VPageBreaks.Count + 1)
  MsgBox "全部で" & n & "ページです"
End Sub   
もっと簡単に調べることはできないのでしょうか。 印刷の総ページ数を直接調べることは、現在のVBAではできませんが、Excel 4.0時代の(VBAではない)マクロ言語では可能でした。 VBAからExcel 4.0マクロを使えば、一発で調べることができます。
Sub Sample3()
  Dim n As Long
  n = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")
  MsgBox "全部で" & n & "ページです"
End Sub
GET.DOCUMENTは、ファイルに関する情報を取得する命令で、書式は
GET.DOCUMENT(検査の種類を表す番号,ファイル名)
です。 [ファイル名]を省略すると、アクティブなブックやシートが対象になります。 アクティブシートでないSheet1のページ数を取得するには、
ExecuteExcel4Macro("GET.DOCUMENT(50,""Sheet1"")")
とします。シート名を指定するダブルコーテーションに留意してください。 GET.DOCUMENTで指定できる検査は、1から65までの65種類あります。 ほとんどの検査項目は、VBAにも対応するプロパティが用意されていますが、中には今回のようにVBAよりも便利に使えるケースもあります。