在Excel VBA中调用函数到范围中的每个单元格(涉及插入行,因此范围将更改)

时间:2016-07-05 22:00:20

标签: excel vba excel-vba

我正在学习VBA并遇到一些问题

我所拥有的是一份日期清单: picture1

我想做的是像这样每天添加3餐 picture2

我录制了一个可以达到此目的的宏:

Sub InsertMeal()
    ActiveCell.EntireRow.Insert
    ActiveCell.EntireRow.Insert
    ActiveCell.Offset(0, 2).Select
    ActiveCell.FormulaR1C1 = "Breakfast"
    ActiveCell.Offset(1, 0).Select
    ActiveCell.FormulaR1C1 = "Lunch"
    ActiveCell.Offset(1, 0).Select
    ActiveCell.FormulaR1C1 = "Dinner"
    ActiveCell.Offset(-2, -2).Range("A1:A3").Select
    Selection.Merge
End Sub

现在我想编写一个宏,它将此InsertMeal()函数应用于所选范围内的每个单元格。

这就是我写的

Sub ApplyToAll()
    For Each c In ActiveCell.CurrentRegion.Cells
        Call InsertMeal
        ActiveCell.Offset(1, 0).Select
    Next
End Sub

问题是,因为我每次都插入行,For循环不能很好地工作。循环永远不会结束。现在我不知道如何保持范围"使循环工作。

如果您知道如何操作,请提供帮助。谢谢,真的很感激。

2 个答案:

答案 0 :(得分:0)

这里真的不需要两个功能。要修改循环以执行您需要的操作,b / c您要添加行,您需要在另一个循环中嵌套一个小循环,该循环适用于3Breakfast,{{{ 1}}和Lunch

代码看起来像这样,但你必须修改范围以适合你的目的。例如

Dinner
顺便说一句,当你加入行时,拉斯特罗将需要乘以3,所以原来的拉斯特罗将不会反映出最后一行的结果。

答案 1 :(得分:0)

Sub RelativeFunc()
    col = ActiveCell.Column
    lastrow = Cells(Rows.Count, col).End(xlUp).Row
    firstrow = Cells(1, col).End(xlDown).Row
    rownum = lastrow - firstrow + 1
    frownum = rownum * 3

    x = Array("Breakfast", "Lunch", "Dinner")

    For i = 1 To frownum
        Cells(i + firstrow, col).Resize(2).EntireRow.Insert
        For j = 1 To 3
            Cells(firstrow + i - 1 + j - 1, col + 1).Value = x(j - 1)
        Next j
        Cells(firstrow + i - 1, col).Resize(3).Merge
        i = i + 2
    Next i
End Sub