ExcelVBA の HPageBreaks コレクションが不正な挙動をする

このQ&Aのポイント
  • Excel VBA のワークシートの改ページの数を得る方法として、Worksheets(*).HPageBreaks.Count を使用していますが、その値が「標準」表示時に正しく取得できない問題が発生しています。
  • また、HPageBreaks.Extent プロパティにおいても同様の問題が発生しており、HPageBreaks コレクションの数が「標準」表示に切り替えたとたんに減少してしまいます。
  • この問題はバグの可能性も考えられますが、microsoft のサポートサイトでの検索でも該当する情報が見つかっていません。Windows95 Excel97 での問題かどうかも不明です。ご存じの方はご回答いただけますと幸いです。
回答を見る
  • ベストアンサー

ExcelVBA の HPageBreaks コレクションがおかしい

Excel VBA で、ワークシートの改ページの数を得るのは、 Worksheets(*).HPageBreaks.Count でいいと思うのですが、 その値に、不思議なことが起きて困っています。 それは、メニューバーの「表示」に、 「標準」と「改ページ プレビュー」の切り替えがありますが、 その「標準」を選んでいる時に、正しい値が得られないのです。 HPageBreaks.Extent プロパティにも同じ症状が出ます。 要するに、HPageBreaks コレクションの数が 「標準」に切り替えたとたん、なぜか減ってしまうのです。 ちなみに、Worksheets のインデックスは間違っていません。 これは、バグか何かでしょうか? microsoft のサポートサイトも検索してみましたが、 それらしきものは見当たりませんでした。 それとも、私の環境だけでしょうか?(Windows95 Excel97) ご存じの方、宜しくお願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.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行になっている?お手数ですが、つなげて実行して下さい)

Takochu
質問者

お礼

ご回答、有り難うございます。 返事、遅れてすみません。 私の場合も、ほんと悩みました。 再インストールでもしようかとも思っていました。 でも、nishi6 さんのおかげで解決することができました。 本当に感謝します。 確かに、技術情報の通りに実行するだけでは、私の場合も、 正しい改ページ数が得られませんでした。 しかし、おっしゃっていた通り、 「印刷範囲の最後の行を画面に表示」で正しい値が得られました。 それから、自分でも色々試してみました。 既にご存じだとは思いますが、 分かったことは、技術情報にある、  ・改ページされているセルを画面に表示  ・ZOOM で縮小したあと元に戻す の、いずれの場合も、シート末端の改ページがウインドウに表示されれば、 正しい値が得られるようです。 また、ActiveWindow.View = xlPageBreakPreview で、 「改ページ プレビュー」にすると無条件で、 正しいページ数が得られるようです。

Takochu
質問者

補足

遅くなりました。 本当に助かりました。有り難うございました。

関連するQ&A

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

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

  • ExcelVBAで改行方法

    お世話になります。 以下のように改行を行うマクロをマクロの記録で作成しました。 ActiveWindow.View = xlPageBreakPreview ActiveWindow.SmallScroll Down:=9 Set ActiveSheet.HPageBreaks(1).Location = Range("A34") ActiveWindow.View = xlNormalView 1行目は改ページプレビューに移動する 3行目は改行位置をA34に設定する 4行目は標準ページにもどす この2行目は何をやっているのでしょうか? また、一般的に改ページの操作方法(2ページ目はここから) というような制御はどのように行うのが普通なのでしょうか? よろしくお願いします。

  • 改ページプレビュー

    エクセルの改ページプレビューですが、これはどういう場面で使うのでしょうか? また、中央に1ページという文字をなしで、改ページプレビュー(値がないセルを灰色)にできないでしょうか?表示で標準にすれば1ページという文字は消えますが、セルは元に戻ってしまいます。 よろしくお願いします。 エクセル2007以上

  • ページ枠

    Excel2003です。 改ページプレビューの後に標準に戻すと破線が残りますが、保存して終了した後に 開くと破線は消えてしまいます。 標準の表示でページの枠線を表示させたままに出来るでしょうか? 文章を入力したり、画像を貼るときにページ内のどの辺りかすぐに把握したいです。 普段は標準のままでも問題ないのですが、A4での印刷も考えて資料を作成する時は 枠があった方が便利です。 入力した後や画像を貼った後に、改ページプレビューしてまた標準に戻すと いうのを繰り返すと手間です。 改ページプレビューのままだと真ん中のグレーのページ数が邪魔になります。

  • マクロで、改ページがうまく認識されません

    マクロで、改ページがうまく認識されません Excel2002を使用しています。 1ページ内に収まるように作った「内訳明細書」の型があり、 複数ページに渡る時は、ボタンを押せば新しいページが下に追加される…という マクロを作りたいと思い、いろいろ調べながらやってみたのですがうまくいきません。 以下のように、 「シートの最後の改ページの次の行に、原紙シートからコピーしたフォームを貼り付ける」 としてみたのですが、 最後の改ページの後ろ側に何かしらのデータがある時は ちゃんと最後の改ページを認識するのに、それがない時は、そのひとつ手前の 改ページを最後の改ページとみなすようです。 これはこういうものなのでしょうか? 何か解決策がありましたら、お教え願います。 Sub 改ページを入れる() Sheets("内訳明細書").Select p = ActiveSheet.HPageBreaks.Count '改ページの総数 L = ActiveSheet.HPageBreaks(p).Location.Row '最後の改ページの行 Sheets("原紙").Select Rows("1:26").Select Selection.Copy Sheets("内訳明細書").Select Rows(L).Select ActiveSheet.Paste Range("A7").Select Sheets("原紙").Select Application.CutCopyMode = False 'コピーモードを解除 Range("A1").Select Sheets("内訳明細書").Select  ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate '最後のセルをアクティブにする 最終行 = ActiveCell.Row + 1 'アクティブセルの行番号(+1)    Worksheets("内訳明細書").Rows(最終行).PageBreak = xlPageBreakManual End Sub

  • 改ページプレビュー→標準に戻した後に残った線を消す

    エクセル2003を使っています。 改ページプレビューを一旦して、その後標準に戻したら線が残ってしまうのですがこれを消す方法ってないのでしょうか?詳しい方よろしくお願いします。

  • EXCEL改ページプレビューのページ数消去できますか?

    こんにちわ。 EXCEL2002を使用しています。 このEXCELの改ページプレビューにした時に現れる背面のページ数は消せないでしょうか? よろしくお願いします。

  • エクセルセルにページ番号を追加したい

    こんにちは 自分のちからではどうにも無理なので、お力をお借りしたいです 色々名前がついたエクセルのシートがあり、手前から順々にページ番号を振っていきたいのですが、特定の名前のシートがあったら番号を入れるセルの位置を変えたいです その位置を変えたい名前のものが複数あったら、その分4/13,5/13などその分もページが入るようにVBAで出来ますでしょうか? とりあえず全てのシートの順番にセルにページ番号を入れるVBAは見つけたのですが、自分ではそれから更に改良など難しいです Sub pageA() Dim i As Long For i = 1 To Worksheets.Count: Worksheets(i).Range("G1") = "'" & i & "/" & Worksheets.Count: Next End Sub どなたかお力をお借りできれば、有難いです それとそのVBAがワークシートを開いたら作動するようにしたいです なにかと細かくてすみません

  • エクセル2000で

    いつもお世話になります。エクセル2000で作成したファイルで表示の改ページプレビューと標準のメニューが使用できません。又、印刷プレビューも見ることができません。 エクセルの新規文書では、通常どおり使用できます。どなたかよろしくお願いいたします。

  • シート番号追加VBA

    watabe007さま 大変お世話になりました 前にシートのセルにページ番号を追加するVBAをこちらで教えて頂きまして、本当に有難うございます 前回に下記の内容を教えて頂き、大変有難く使わせていただいております Sub pageA()   Dim i As Long   For i = 1 To Worksheets.Count      If Worksheets(i).Name = "Sheet3" Then       Worksheets(i).Range("G2") = "'" & i & "/" & Worksheets.Count     ElseIf Worksheets(i).Name = "Sheet4" Then       Worksheets(i).Range("G3") = "'" & i & "/" & Worksheets.Count     Else       Worksheets(i).Range("G1") = "'" & i & "/" & Worksheets.Count     End If   Next End Sub それで、今回はどのシート名にも属さないシートはページカウントとしてカウントしない、という方法がありましたらお教え頂きたいのですが、方法はありますでしょうか? お忙しいかと思いますが、アドバイス頂けますますと嬉しいです

専門家に質問してみよう