我正在创建一个报告,在其中查看日期列,并基于该列中的值(介于某个范围之间),使用上一个单元格中的值递增一个聚合。因为日期在不连续的列中,所以我使用的是Union范围。我已经硬编码了下面的单元格值,并删除了其余的代码以解决循环问题。我的循环经过5次,但是每次出现$ I $ 2值和相同的日期值。我怎样才能使循环进入单元格K2及以后?
Dim c as Range
Range("I2").Select
Set installmentRng = Union(Cells(2, 9), Cells(2, 11), Cells(2, 13), Cells(2, 15), Cells(2, 17))
For Each c In installmentRng
MsgBox (ActiveCell.Value)
MsgBox (ActiveCell.Address)
Next c
答案 0 :(得分:0)
如果将ActiveCell.Value
替换为c.Value
,我认为您的问题已解决。
如果可能的话,您根本不应使用Select
。此外,如果将Msgbox
替换为Debug.Print
,则故障排除的麻烦将大大减轻。按Ctrl + G查看输出。
答案 1 :(得分:0)
ActiveCell
是焦点所在的单元格(换句话说,如果用户开始输入内容,它将进入该单元格)。
在VBA中处理工作表数据时,通常不需要处理ActiveCell
。在您的情况下,循环不会更改ActiveCell
(并且不需要这样做)。相反,Range
-变量c
将会改变,您可以使用它:
For Each c In installmentRng
MsgBox c.Value
MsgBox c.Address
Next c
另外有两句话:
(1)不需要Range("I2").Select
-语句。这会更改ActiveCell
-但这并不是必须的(您几乎不需要Select
语句,但是在(不良)VBA代码中经常看到它,因为宏记录器使用它。
(2)请勿在msgBox参数周围加上括号。