如何在Excel VBA中分页后有条件地插入行?

时间:2018-04-19 21:32:18

标签: excel-vba loops page-break vba excel

我目前正在尝试编写一个宏,在适当的时候在每个新页面的顶部插入“标题继续”和“字幕连续”行。为此,我想循环遍历每一行并确定:

  1. 该行是不是标题或副标题的分页符(如果是,行插入“标题继续”而另一行是“字幕继续”),
  2. 该行是否分页并且已经是副标题(如果是,只插入“标题继续”),
  3. 该行是否已成为标题或不是分页符(如果是,请跳过),
  4. 目前,对于除字幕和标题本身之外的每一行,字幕和标题分别存储在列C和D中。对于标题和副标题行,列C和D为空白。我遇到的问题是,在第一次插入发生后我变得奇怪。大多数行插入宏都会向后移动,但这在此处不起作用,因为在中断之前插入行之后页面中断会发生变化。这是我写的代码:

    Inserts = 0
    Dim Counter As Long
    Counter = 1
    While Counter < RowCount
        If Rows(Counter).PageBreak <> -4142 And Cells(Counter, "C").Value <> "" Then
            Range("C" & (Counter), "C" & (Counter + 1)).EntireRow.Insert
            Cells(Counter, "A").Value = UCase(Cells(Counter + 2, "D").Value) & " continued"
    
            Cells(Counter + 1, "A").Value = UCase(Cells(Counter + 2, "C").Value) & " continued"
    
            Counter = Counter + 3
            Inserts = Inserts + 2
        ElseIf Rows(Counter).PageBreak <> -4142 And Cells(Counter + 1, "C").Value <> "" Then
            Range("C" & Counter).EntireRow.Insert
                Cells(Counter, "A").Value = UCase(Cells(Counter + 2, "D").Value) & " continued"
    
            Counter = Counter + 2
            Inserts = Inserts + 1
        Else: Counter = Counter + 1
        End If
    Wend
    RowCount = RowCount + Inserts - 2
    

    谢谢!

    安迪

1 个答案:

答案 0 :(得分:1)

更新:此代码实际上按预期工作。问题是电子表格中的其他列正在影响分页符,即使它们超出了打印范围。在此段运行后,我删除了代码中的那些列,因此页面中断后移动,给人的印象是这部分不起作用。将所有自动分页符设置为xlPageBreakManual解决了这个问题,而没有强迫我提前删除列(因为我需要他们的数据)。