管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

ExcelVBAで改ページ変動を検知したい

Excelで難しいのが、環境差異等により生じる改ページ変動(想定している改ページ通りに印刷されない状況)
これを検出する方法はないもんかとやってみた。まだ課題はあるものの、メモっておく

メモ

Option Explicit

Sub ページ高さチェック()
'改ページプレビューで表示
ActiveWindow.View = xlPageBreakPreview

Dim lastRowNum As Integer '再下行行番号
Dim beforeRowNum As Integer '1つ前の改ページ直下行番号
Dim beforeHeight As Integer '1つ前の改ページ内の行の数
Dim i As Integer
Dim threshold As Double ’ ページ間の高さの比(この値を下回ったら改ページ変動とする)

threshold = 0.5
lastRowNum = Cells(Rows.Count, 1).End(xlUp).Row

beforeRowNum = 1
For i = 1 To ActiveSheet.HPageBreaks.Count
    If i > 1 Then
       If ((ActiveSheet.HPageBreaks(i).Location.Row - beforeRowNum) / beforeHeight) < threshold Then
           Debug.Print "意図しない改ページかもしれません:" & beforeRowNum
       End If
    End If

    beforeHeight = ActiveSheet.HPageBreaks(i).Location.Row - beforeRowNum
    beforeRowNum = ActiveSheet.HPageBreaks(i).Location.Row
Next

' 印刷範囲最下については別途計算の必要あり
If ((lastRowNum - beforeRowNum) / beforeHeight) < 0.5 Then
    Debug.Print "意図しない改ページかもしれません:" & beforeRowNum
End If

End Sub

実行例

このケースでは、2ページ目、4ページ目を検出したい
f:id:ksk1130:20190315015454p:plain

意図しない改ページかもしれません:27
意図しない改ページかもしれません:55

一応意図した動きではあるが、現在の方式だと、A列最下行に文字が入っていないと誤判定してしまうので、印刷範囲最下行を取得して判定できればよいかなと思います。