ExcelVBA技 全般 E13M008

E13M008 (Excel2000~2013)
印刷の総ページ数を取得する

Excelのシートを印刷するときのページ数を得るkPageN関数を示します。
Excel2007からは PageSetup.Pagesプロパティ が追加されて利用できるようになりました。
 ActiveSheet.PageSetup.Pages.Count
ここではバージョンに依存しない Excel4.0マクロ を用いた方法を示します。

'標準モジュール
Option Explicit
Option Private Module

'kPageN関数
'アクティブシートの印刷総ページ数を得る
'戻り値:総ページ数
Function kPageN() As Long
  Dim vw&, pb As Boolean
  With ActiveWindow 'バグ対応
    vw = .View: pb = ActiveSheet.DisplayPageBreaks: .View = xlPageBreakPreview
    kPageN = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") 'Excel4.0マクロ
    'kPageN = ActiveSheet.PageSetup.Pages.Count 'excel2007以降
    .View = xlNormalView: .View = vw: ActiveSheet.DisplayPageBreaks = pb
  End With
End Function

'kPageN関数の使用例
Sub example_kPageN()
  MsgBox ActiveSheet.Name & " 印刷ページ数=" & kPageN, , ActiveSheet.Parent.Name
End Sub

印刷ページ数を取得するために Excel4.0マクロ や Pages.Countプロパティを用いると条件により実際の印刷総ページ数と異なる値が取得される不都合があります。
示した kPageN関数 は不都合を回避したコードとなっています。
Pages.Count プロパティを取得すると実際の印刷総ページ数と異なる値を取得する