我正在学习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循环不能很好地工作。循环永远不会结束。现在我不知道如何保持范围"使循环工作。
如果您知道如何操作,请提供帮助。谢谢,真的很感激。
答案 0 :(得分:0)
这里真的不需要两个功能。要修改循环以执行您需要的操作,b / c您要添加行,您需要在另一个循环中嵌套一个小循环,该循环适用于3
,Breakfast
,{{{ 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