2017-07-19 9 views
0

自動水平改ページがワークシート上でどう落ちるかをクリーンアップしようとしています。自動ページ区切りが列「D」のフレーズ「全体的な状態」の上に壊れていない場合、「全体的な状態」の下の次の最も近い水平の改ページを移動したいと思います。以下は、列Dの「Overall Status」と呼ばれるすべての行の上に水平改ページを配置するコードスニペットですが、ページブレイクが多すぎます。既存の水平改ページは現在、該当する場所最も近い自動水平改ページをキーワード行まで移動します。

Sub Pagebreak() 
'adds horizontal pagebreak before every 'Overall Status' 

Dim Search As String 

Search = "Overall Status" 

With ActiveSheet.UsedRange 
    Set c = .Find(What:=Search, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True) 
    If Not c Is Nothing Then 
     FirstAddress = c.Address 
     Do 
      ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=c 
      Set c = .FindNext(c) 
     Loop While Not c Is Nothing And c.Address <> FirstAddress 
    End If 

    'Then try toggle between pagebreak screen and normal view 
    End With 
End Sub 

以下のコードのスニペットは示しています

Sub HPageBreakTest() 
'counts and shows where horizontal pagebreaks are 
Dim pgeBreak As HPageBreak 

With ActiveSheet 
.Cells(65536, 1).Select 
MsgBox .HPageBreaks.Count & " Horizontal page breaks counted" 
For Each pgeBreak In .HPageBreaks 
MsgBox "pgbreak at row: " & pgeBreak.Location.row 
.Cells(65536, 1).Select 
Next pgeBreak 
.Cells(1, 1).Select 
End With 

End Sub 

私は(1に、これら2つのコードスニペットのロジックを組み合わせることができます方法を理解したいと思います)最初の自動水平ページ区切りを「Overall Status」の下に配置し、(2)そのページをD列の「Overall Status」句のすぐ上に移動します。「Overall Status」の各インスタンスの水平ページ区切りではありません。私の質問が意味をなさないことを願う。ご協力いただきありがとうございます。

答えて

2

ああ(これは少なくとも一つの改ページがあることを前提としています)

With Activesheet.range("D1:D" & HPageBreaks(1).Location.Row) 

With ActiveSheet.UsedRange 

を交換し、私の推奨される変更は、最初の発生時に改ページを挿入します最初の自然ページブレイクが発生する前の "全体的な状態"ページ区切りの前に最後のオカレンスの前に挿入したいとします。複雑なことは、マニュアルページブレークを入力するとすぐに、他のブレークはすべて変更されることです。 Soは、ページnの列D内の他のすべてのページの最後の出現 挿入改ページを 反復を見つけるために、最初のページの範囲をループ

範囲は、最後のページ区切り+1の行によって与えられます。そう

Dim Search As String 
Search = "Overall Status" 
Dim x as long 
Dim r as range 
dim lastrow as long 

with activesheet 
    do while x < .hpagebreaks.count 
      for each r in range("D" & (lastrow+1) & ":D" & .HPageBreaks(x+1).Location.Row) 
       if r = search then  'might have found it 
        lastrow = r.row 'so remember the row number 
       end if 
      next r 
      if lastrow = 0 then exit sub 'no find 
      .hpagebreaks.add before:=range("A" & lastrow) 

      x = x +1 
     loop 
end with 
+0

ありがとう、悩まされたお父さん!私はちょうどあなたの解決策を試しました(上記)、それは治療を働くように見えます! – XLmatters

0

+0

次のページ区切りの行に感謝しますが、上記のコードは正常に動作し、私は多分、最後の「総合的な状況」下のクローゼット自然の改ページを見つけるために、これらのスニペットを使用する方法を把握しようとしています列Dに移動し、horを移動します。各インスタンスの列Dの末尾にページが分割されます。 – XLmatters

関連する問題