投稿者 allgreen  (社会人) 投稿日時 2009/1/19 20:53:15
エクセルのシートを印刷するためのマクロで、場合よって縦で印刷したり横で印刷したりする場合
改ページの設定を管理したいときが出てきます。
困っていたことが、自己解決できましたので他の人も問題に遭遇するかもしれませんので報告をしておきます。

まず、改ページの設定をするのに
  10行目が次の頁の先頭の場合
 ActiveSheet.HPageBreaks.add rows(10)
とする方法と
  ActiveSheet.cells(10,1).PageBreak=xlPageBreakManual
の2種類があります
エクセルのヘルプにあるサンプルには、上側の方法がよく書いてあります。

次に、改ページの設定を解除するのに
改ページの1番目を解除
  ActiveSheet.HPageBreaks(1).delete
10行目が先頭になる改ページを解除
  ActiveSheet.cells(10,1).PageBreak=xlPageBreakNone
の2種類があります
これもエクセルのヘルプにあるサンプルには、上側の方法が書いてあるのですが
エクセル98では問題なかったのですが、エクセル2002以降だと
印刷範囲を指定している場合、上側の方法では
「アプリケーション定義エラーまたはオブジェクト定義エラーです」となります。
下側の方法だとエラーはおこりません。

それと、改ページの数がいくつ全体であるのかを取得する
改ページの数=ActiveSheet.HPageBreaks.count
なのですが、たまに間違った数を返す時があります(たぶんどこかにバグがあるのでしょう)
改ページの数の範囲にあるはずの、ActiveSheet.HPageBreaks(番号)が、インデックスが
範囲外ですとなることがあります。
これもエクセル98のときは、おこらなかったエラーです。
それと、「改ページプレビュー」表示のときはエラーにならないのに「標準」表示のときは
エラーになるというときもあります。

改ページの設定をすべて削除する方法に
いろいろなところに
ActiveSheet.cells.PageBreak=xlPageBreakNone
と書いてありますが
これを、「改ページプレビュー」表示のときにすると、エラーになります。
「標準」表示のときは正常に動きます。
これの回避策ですが、
ActiveSheet.ResetALLPageBreaks
こっちだと表示方法によらずに、正常に動きます。

エラーになる原因は、エクセル95時代の情報の保存方法と、エクセル2002以降の方法が違うのと
それに対するマクロのコマンドの違い、(昔のコマンドでも文法エラーにはならないが
細かい動きのときにエラーになる)、そのわりにヘルプファイルが新しくなっていない、などなど

以上、報告です。
どこかに、新旧エクセルの違い(昔は動いたけど今はエラーになる)それに対する回避方法一覧
というのは、ないものでしょうかね