ワークシートに改ページを設定する場合、以下のように指定することで、任意の位置で改ページさせることができます。
WorkSheets(1).HPageBreaks.Add Range("A10")
または
WorkSheets(1).Rows(10).PageBreak = xlPageBreakManual
上記例の場合、10行目から次のページ、つまり9行目と10行目の間で改ページします。
しかし、上記の指定をしても改ページが追加されず、なぜか何百行もあるシート全体が1ページになってしまい、頭を悩ませました。
また同じことで悩まないためにも、解決までの道のりをメモメモ。
改ページさせるための方法
シートに水平な改ページを追加するには、上でも書きましたが二通りの方法があります。
WorkSheets(1).HPageBreaks.Add Range("A10")
WorkSheets(1).Rows(10).PageBreak = xlPageBreakManual
どちらも、9行目と10行目の間で改ページする指定方法です。
同様に、垂直方向に改ページする場合は、以下のように指定します。
WorkSheets(1).VPageBreaks.Add Range("E10")
WorkSheets(1).Range("E10").PageBreak = xlPageBreakManual
どちらも、D列とE列の間に改ページを追加します。が、下の方法だと、9行目と10行目にも改ページが設定されてしまうので、垂直方向だけに改ページを設定したい場合は上の方法で。
しかし、上記のように改ページだけを指定しても、改ページが設定されない現象に悩まされました。
改ページのリセットをしてみる
改ページの設定を初期化していないからダメなんだろう、と思い、初期化処理の中で改ページのリセットを行ってみました。
WorkSheets(1).ResetAllPageBreaks
それでも改ページは、されません。
印刷エリアを設定してみる
印刷するエリアを指定していなかったからダメなんだろう、と思い、設定してみました。
WorkSheets(1).PrintArea = "A:G"
それでも改ページは、されません。
ページフィットを設定してみる
印刷の拡大縮小設定で、用紙の横方向にフィットさせる設定、縦方向にフィットさせる設定があるので、横方向に1ページフィット、縦方向は自動にしてみました。
WorkSheets(1).FitToPagesWide = 1 '横方向1ページにフィット
WorkSheets(1).FitToPagesTall = False '縦方向は自動
改ページされました!…が、意図してつけた改ページの場所では用紙に収まりきらないようで、Excel側で自動でつけてくれた点線の改ページが出てしまいました。これではダメ。
拡大縮小率を設定してみる
Excelのリボンでページレイアウトを見ていたところ、「拡大/縮小」が100%になっていることに気付きました。この拡大縮小率が自動になれば、もしかしたら意図した改ページ位置で揃うかも。
WorkSheets(1).PageSetup.Zoom = False
ここでは拡大縮小率を10~400で指定しますが、Falseにすることで設定しない(自動にする)ことができます。
意図した通りに改ページされ、勝手に余計な改ページも無くなりました!
さいごに
ということで、他の指定も含め、ページの初期化処理で以下のようにしたところ、意図した改ページが反映されるようになりました。
With WorkSheets(1)
.Cells.Clear
With .PageSetup
.PrintArea = "A:G"
.CenterHorizontally = True
.CenterVertically = True
.FitToPagesWide = 1
.FitToPagesTall = False
.Zoom = False
.TopMargin = Application.CentimetersToPoints(1)
.BottomMargin = Application.CentimetersToPoints(1)
.LeftMargin = Application.CentimetersToPoints(3)
.RightMargin = Application.CentimetersToPoints(2.5)
.HeaderMargin = Application.CentimetersToPoints(1.3)
.FooterMargin = Application.CentimetersToPoints(1.3)
End With
.ResetAllPageBreaks
.HPageBreaks.Add Range("A101")
.HPageBreaks.Add Range("A201")
End With
ちなみに、Zoom = False に設定した場合は、シートの拡大縮小率は FitToPagesWide と FitToPagesTall に依存するようになるため、3つワンセットで指定する、と考えていた方がいいのかも。
結構悩まされた事案でした。
コメント