如何在 Excel VBA 中的分页符后有条件地插入行?
How can I Conditionally Insert Rows after Page Breaks in Excel VBA?
我目前正在尝试编写一个宏,在适当的时候在每个新页面的顶部插入一个 "Title continued" 和一个 "Subtitle continued" 行。为此,我想遍历每一行并确定:
- 该行是否是不是标题或副标题的分页符(如果是,则插入一行"Title continued"和另一行"Subtitle continued"),
- 该行是否分页且已经是副标题(如果是,只插入"Title continued"),
- 该行是否已经是标题或不是分页符(如果是,跳过),
目前,除了字幕和标题本身之外的每一行,字幕和标题分别存储在 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
谢谢!
安迪
更新:此代码确实按预期工作。问题是电子表格中的其他列正在影响分页符,即使它们超出了打印范围。我删除了这段代码中的那些列是 运行,所以分页符后来移动了,给人的印象是这部分不起作用。将所有自动分页符设置为 xlPageBreakManual 解决了这个问题,而没有强迫我提前删除列(因为我需要它们的数据)。
我目前正在尝试编写一个宏,在适当的时候在每个新页面的顶部插入一个 "Title continued" 和一个 "Subtitle continued" 行。为此,我想遍历每一行并确定:
- 该行是否是不是标题或副标题的分页符(如果是,则插入一行"Title continued"和另一行"Subtitle continued"),
- 该行是否分页且已经是副标题(如果是,只插入"Title continued"),
- 该行是否已经是标题或不是分页符(如果是,跳过),
目前,除了字幕和标题本身之外的每一行,字幕和标题分别存储在 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
谢谢!
安迪
更新:此代码确实按预期工作。问题是电子表格中的其他列正在影响分页符,即使它们超出了打印范围。我删除了这段代码中的那些列是 运行,所以分页符后来移动了,给人的印象是这部分不起作用。将所有自动分页符设置为 xlPageBreakManual 解决了这个问题,而没有强迫我提前删除列(因为我需要它们的数据)。