首页 > 解决方案 > 评估 For Each 时,子范围选择行为令人困惑

问题描述

使用下面的代码,我试图将那些浅绿色的字段设置为列标题的值。令人困惑的行为是,一旦它填充了前几个用石灰绿色填充的字段,它将永远不会再用 rCell(0) 的值填充石灰绿色字段。是什么导致 rCell 的评估发生变化?我希望它保持静态,因为选择不会改变。我已经确认 sub 正确匹配后续的浅绿色字段(因为颜色被替换),但代码此时并未写入标题值。现在我已经通过在 for each 循环之前将标头值设置为单独的字符串来解决该行为,但我想了解我在哪里迷路并失去了范围的选择。

Sub ChangeColor()
    Dim rCell As Range
    If Selection.Cells.Count = 1 Then
        MsgBox "Select the range to be processed."
        Exit Sub
    End If
    For Each rCell In Selection
        If rCell.Interior.Color = RGB(146, 208, 80) Then  'lime green
            rCell.Interior.Color = RGB(255, 255, 255)      'white
            rCell.Value = rCell(0).Value
        End If
    Next rCell
End Sub

标签: excelvba

解决方案


该行rCell.Value = rCell(0).Value没有像想象的那样引用标题值,它引用了范围评估内当前位置上方的单元格。正如上面的 Scott Craner 所说,我想在选择之前使用rCell.Value = Selection(0).Value.


推荐阅读