- ベストアンサー
ExcelVBA の HPageBreaks コレクションが不正な挙動をする
- Excel VBA のワークシートの改ページの数を得る方法として、Worksheets(*).HPageBreaks.Count を使用していますが、その値が「標準」表示時に正しく取得できない問題が発生しています。
- また、HPageBreaks.Extent プロパティにおいても同様の問題が発生しており、HPageBreaks コレクションの数が「標準」表示に切り替えたとたんに減少してしまいます。
- この問題はバグの可能性も考えられますが、microsoft のサポートサイトでの検索でも該当する情報が見つかっていません。Windows95 Excel97 での問題かどうかも不明です。ご存じの方はご回答いただけますと幸いです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
一時期、悩んだ事象です。 マイクロソフト サポート技術情報 - JP408042 [XL97] 印刷されるページの総数を調べる方法 http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/JP408/0/42.asp の中に、 H_Break = Sheet1.HPageBreaks.Count '横の改ページ数取得 の記述があり、頁数が取得できるように書いてあります、しかし、この技術情報の最後に、 『注意 このプロシージャを実行する前に、改ページ位置のセルを画面に表示して、 改ページ位置を認識させる必要があります。次のいずれかの操作を 1 度実行します。 ・改ページされているセルを画面に表示 ・ZOOM で縮小したあと元に戻す 』 とあり、技術情報にあるコードを実行しただけでは正しい頁数は求められませんでした。 個人的には、 1.印刷範囲を設定し、 2.『Application.ScreenUpdating = False』は使用不可とし、 3.印刷範囲の最後の行を画面に表示した状態で、 4.HPageBreaksを使う ようにしています。 また、マイクロソフト サポート技術情報 - JP402754 [XL95] 印刷されるペ-ジの総数を調べる方法 http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/JP402/7/54.asp があります。 Excel97なら、Excel4マクロの「GET.DOCUMENT(50)」を使ったほうが確実かもしれません。 ご参考に。(URLが2行になっている?お手数ですが、つなげて実行して下さい)
お礼
ご回答、有り難うございます。 返事、遅れてすみません。 私の場合も、ほんと悩みました。 再インストールでもしようかとも思っていました。 でも、nishi6 さんのおかげで解決することができました。 本当に感謝します。 確かに、技術情報の通りに実行するだけでは、私の場合も、 正しい改ページ数が得られませんでした。 しかし、おっしゃっていた通り、 「印刷範囲の最後の行を画面に表示」で正しい値が得られました。 それから、自分でも色々試してみました。 既にご存じだとは思いますが、 分かったことは、技術情報にある、 ・改ページされているセルを画面に表示 ・ZOOM で縮小したあと元に戻す の、いずれの場合も、シート末端の改ページがウインドウに表示されれば、 正しい値が得られるようです。 また、ActiveWindow.View = xlPageBreakPreview で、 「改ページ プレビュー」にすると無条件で、 正しいページ数が得られるようです。
補足
遅くなりました。 本当に助かりました。有り難うございました。