2

我在报告的单元格 D5:D103 中有一系列公式,这些公式链接到书中的另一张表。A:C 列包含文本结果,D 列有 $ 金额作为结果。A4:D4 包含数据标题,A1:D3 是描述报表的通用标题。最后一行的位置每个月都会改变,可能>103,也可能<103。

在每 16 行数据之后,我需要插入从工作表中的命名范围粘贴的 3 行乘 4 列,并在 3 行中的第 2 列的 D 列中插入总共 16 行。然后我在下面添加一个分页符(由其他要求决定的粗略的分页练习)。

以下代码实现了大部分功能:-

Dim Formula1 As String

Formula1 = "=SUM(R[-17]C:R[-2]C)"

For i = 21 To (Range("a5", Range("d4").End(xlDown)).Rows.Count + 4) Step 19

    Range("Total_credit").Select
    Selection.Copy

    Range("a" & i).Select

    Selection.Insert Shift:=xlDown

    Range("a" & i).Offset(1, 3) = Formula1

    Selection.Offset(3).PageBreak = xlPageBreakManual

Next i

但是,我在底部留下了 19 行数据块,应该是 2 个 16 行的数据块,粘贴文本和每个下面的总数(理想情况下,最后一个序列中不会有空白行,但我可以活如果我能把剩下的都做对的话)。当我使数据块大几行时,似乎会发生同样的问题,即最后一个总数总是在同一个地方(D117)。

看起来 i 的值在增加每个循环,但这似乎并没有反映在过程中。我已经尝试了各种方法并彻底搜索无济于事,现在我的头正在旋转。我相信有人会立即看到我出错的地方,这似乎应该是一个简单的修复。

提前致谢。

4

1 回答 1

1

我刚刚在您的代码中添加了这个来管理“for循环”限制

Dim row_count As Double

row_count = Range("a5", Range("d5").End(xlDown)).Rows.Count
row_count = row_count + Round(row_count / 16) * 3 + 4
For i = 21 to row_count step 19 'change limit to the variable "row_count"

这应该注意“For循环”限制。或者您可以将其更改为Do While您的控制变量可以更改的循环。像这样:

Dim Formula1 As String
Dim row_count As Long

Formula1 = "=SUM(R[-17]C:R[-2]C)"
'initialize variable
row_count = Range("a5", Range("d5").End(xlDown).Address).Rows.Count + 4 
i = 21 'initialize variable
'I added this before the loop to make the appearance clean
Cells.PageBreak = xlPageBreakNone 
Do While i < row_count
    Range("Total_credit").Copy: Range("a" & i).Insert xlDown
    Range("a" & i).Offset(1, 3) = Formula1
    Range("a" & I).Offset(3, 0).PageBreak = xlPageBreakManual
    i = i + 19 'increment variable
    're-initialize variable
    row_count = Range("a5", Range("d5").End(xlDown).Address).Rows.Count + 4 
Loop

希望这是你需要的。

于 2013-09-26T05:22:22.217 回答