• ベストアンサー

EXCEL-VBAで印刷時のページ番号を取得したい

EXCEL97です。 ブックの目次を作るマクロを作っています。 ブック内のシート名を目次のシートに縦に並べることはできたのですが、 その横にセットしたページ数をどうやって取得するか悩んでいます。 過去ログも見たのですがHPageBreaks.Countでは プレビューでは1ページしかないはずのシートで 1が返ってきたりしてどうもうまくいきません。 良い方法があればどなたか教えてもらえないでしょうか。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

Application.ExecuteExcel4Macro("get.document(50)") で、印刷ページ数が取得出来ます。 http://www2.odn.ne.jp/excel/waza/print.html

papy_moon
質問者

お礼

お礼が遅くなってすみません。 教えていただいたファンクションで無事 実現することができました。 アクティブなシートでないと取得できないということが わかるのに少々手間取りましたが(笑) ありがとうございました!

その他の回答 (1)

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

こんばんは。 >過去ログも見たのですがHPageBreaks.Countでは >プレビューでは1ページしかないはずのシートで1が返ってきたりしてどうもうまくいきません。 過去ログがどんな内容かはわかりませんが、1が返ってくるなら、あっているのでは?それは、たぶん、0ではありませんか? HPageBreaks.Count というのは、水平ページブレイクの数のことですから、最後のページには入りません。そこで、1つ足してあげなくてはなりません。 HPageBreaks.Count + 1 なお、正確には、この水平ページブレークと垂直ページブレークとがありますから、 Sub PageCount() 'ページ数を取る Dim lngHpage As Long Dim lngVPage As Long Dim lngPTotal As Long  On Error Resume Next   '水平改ページ数 + 1   lngHpage = ActiveSheet.HPageBreaks.Count + 1   '垂直改ページ数 + 1   lngVPage = ActiveSheet.VPageBreaks.Count + 1   '総ページ数を計算   lngPTotal = Int(lngHpage * lngVPage)   MsgBox lngPTotal End Sub このようになります。ただし、改ページプレビューを使うとデータが飛んでしまうことがあります。 私も、ふだんは、Ver4 マクロ関数を使います。こちらは、直接、Applicationにアクセスして、取得していますので、若干ですが、取得時間が速いようです。

関連するQ&A

専門家に質問してみよう