|
パトラッシュ さん、こんばんわ。
>>>品物が切り替わる部分で改ページを打ちたい
>これは,うまくいきます。OKです。
>
>>>同一の品物が多くなると,品物が切り替わる前のところでいちど自動的に改ページが打たれます。
>
>例えば,「品物:りんご」だけで50行くらいになったとしますよね。
>そうすると次の「品物:ばなな」に切り替わる前に1ページでは収まらないので
>「品物:りんご」の中のどこか中途半端なところで自動改ページされてしまいます。
>この自動改ページが必ずしも「品物:・・・」のところではないので,この自動改ページだけをうまくずらしたいのです。
>提示していただいた構文でもこの部分がうまくいかないのです。
早合点してました、すみません。
品物が異なる部分に手動改ページを入れて、自動改ページが入ったらそれより上の「品物」位置にあらためて改ページを追加します。
Sub test()
Dim hpb As HPageBreak
'
With ActiveSheet
With .UsedRange
Rmax = .Cells(.Count).Row
End With
'
For II& = 1 To Rmax
'左3文字が「品物:」の時にチェック
If Left(.Cells(II&, 1).Value, 3) = "品物:" Then
If a1$ = "" Then
'初回はスルー
a1$ = .Cells(II&, 1).Value
Else
'品物:なんとか が一致しなければ手動改ページを入れて、入れ替え
If a1$ <> .Cells(II&, 1).Value Then
.HPageBreaks.Add Before:=.Cells(II&, 1)
a1$ = .Cells(II&, 1).Value
End If
End If
End If
Next
'自動改行がなくなるまで移動
Application.ScreenUpdating = False 'ウィンドウを切り替えるため
Do
'改ページ位置再計算(エラー回避、今は不要かもしれない)
ActiveWindow.View = xlPageBreakPreview
ActiveWindow.View = xlNormalView
'チェック開始
Hflg = False
For Each hpb In .HPageBreaks
If hpb.Type = xlPageBreakAutomatic Then
II& = hpb.Location.Row
Do Until II& = 1
If Left(.Cells(II&, 1).Value, 3) = "品物:" Then
.HPageBreaks.Add Before:=.Cells(II&, 1)
Hflg = True: Exit For '外側ループも抜ける
End If
II& = II& - 1
Loop
End If
Next
Loop While Hflg = True
Application.ScreenUpdating = True
End With
End Sub
こんな感じです。
1つの品物リストで1頁を超えるような場合は無限ループに入るので注意が必要です。
|
|