【问题标题】:Move closest automatic horizontal pagebreak up to keyword line将最近的自动水平分页符向上移动到关键字行
【发布时间】:2017-07-24 21:44:21
【问题描述】:

我正在尝试清理自动水平分页符如何落在我的工作表上。如果自动分页符没有超出“D”列中的短语“总体状态”,我想将“总体状态”下方的下一个最近的水平分页符向上移动。下面是一个代码 sn-p,它在 D 列中显示“总体状态”的所有行上方放置一个水平分页符,但分页符太多了。

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

下面代码的 sn-p 显示了现有水平分页符当前所在的位置:

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

我想弄清楚如何结合这两个代码 sn-ps 的逻辑,以 (1) 在“总体状态”下方找到第一个自动水平分页符,以及 (2) 将该分页符移动到上方D 列中的“总体状态”短语。不是每个“总体状态”实例的水平分页符。我希望我的问题是有道理的。提前感谢您的帮助。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    啊,我建议的更改是在第一个自然分页符之前第一次出现“总体状态”时插入一个分页符。您想在分页符之前的最后一次出现之前插入。复杂之处在于,一旦您输入手动分页符,所有其他分页符都会更改。 所以循环遍历第一页的范围以找到最后一次出现 插入分页符 重复所有其他页面

    第 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
    

    【讨论】:

    • 谢谢,被骚扰的爸爸!我刚刚尝试了您的解决方案(上图),它似乎可以解决问题!
    【解决方案2】:

    替换

     With ActiveSheet.UsedRange
    

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

    (注意这里假设至少有一个分页符)

    【讨论】:

    • 谢谢,但上面的代码工作正常,我想弄清楚如何使用这些 sn-ps 来找到 D 列中最后一个“总体状态”下方的壁橱自然分页符并移动霍。每个实例的页面分解到 D 列的末尾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2016-10-22
    相关资源
    最近更新 更多