• ベストアンサー

ExcelVBA、印刷ページを事前に知るには

ExcelVBAで印刷するのですが、事前にページ数を知る方法はあるでしょうか? ブック全体を印刷するのですが、シートによっては大量に印刷されてしまいます。 任意に指定したページ以上作成される場合は、警告メッセージを出したいと思っています。 よろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 こんな風かな? ただし、プリント・プレビューも含みます。 Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim i As Integer  i = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")  If i > 5 Then  '5ページよりも以上   If MsgBox(i & "ページありますが、継続しますか?", vbInformation + vbOKCancel) = vbCancel Then    Cancel = True   End If  End If End Sub

believe_me
質問者

お礼

回答ありがとうございます。 「Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")」なんて全く知りませんでした。

believe_me
質問者

補足

このVBAはシート1枚当たりのページ数を表示しますが、ブック全体の印刷ページ枚数を表示することはできないでしょうか。 できなければFor Eachで各シート毎のページ数を合計するので問題ありませんが、もしそのような機能があるのであれば教えていただけないでしょうか。 よろしくお願い申し上げます。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。Wendy02です。 今、Worksheets.Select (または、Sheets.Select)で、作業グループにして取れるかと思いましたが、取れませんでしたので、ご指摘のように、ループでしかないようですね。 Sub Test2() Dim i As Integer Dim sh As Worksheet  For Each sh In Worksheets  If WorksheetFunction.CountA(sh.Cells) > 0 Then   i = i + Application.ExecuteExcel4Macro("GET.DOCUMENT(50,""" & sh.Name & """)")  End If  Next    If i > 5 Then  '5ページよりも以上   If MsgBox(i & "ページありますが、継続しますか?", vbInformation + vbOKCancel) = vbCancel Then    Cancel = True   End If  End If End Sub

believe_me
質問者

お礼

やはりそうでしたか。各シートを合計します。

関連するQ&A