在 VBA 为什么选择对象在索引时表现不同?

in VBA Why does the Selection Object act differently when indexed?

希望你能帮我解决这个问题!

我正在 VBA 中编写代码,但我遇到了 Selection 对象的问题,其行为与我预期的不同。

当我写一个for循环时

For Each Cell in Selection
    MsgBox Cell.Value
Next Cell

它按预期工作,但后来我尝试为它编制索引,但它的行为有所不同。特别是它是一个非连续的单元格 selection.

像这样;

For i = 0 to 5
    MsgBox Selection(i).Value
Next i

它给出了相当随机的值。任何见解都会很棒!

编辑:

感谢大家的意见,看来我需要另辟蹊径了。我有一段代码获取用户的 selected 单元格并使用这些值进行计算。现在,我一直在努力做到这一点,这样他们就可以 select 不连续的单元格。基本上,我需要制作一个包含这些值的数组,我的想法是制作一个 for 循环,如下所示

For I = 0 To 5
    Array(i) = Selection(i).Value
Next I

我不确定是否有其他方法可以做到这一点。如果有人有什么建议,我很感兴趣!

正如其他人所说,您不应以这种方式使用选择。但要回答你的问题......我根据你的示例用例做了一些快速测试。

当您循环 cell in Selection 时,它似乎从左到右,然后从上到下按范围区域。因此,例如,如果您选择了两个不连续的范围,那么如果看起来像这样:

当你索引它时,它似乎不会在范围区域之间跳跃。相反,它将继续在第一个范围区域的列边界内从左到右从上到下迭代:

因此,如果您选择了 2 列,对索引的迭代将仅继续沿着第一列向下,即使它在选择之外。

我的测试代码:

Private Sub testing()
    Dim i As Integer
    For i = 1 To Selection.Cells.Count
        Selection(i).Value = i
    Next i
End Sub

Private Sub testing2()
    Dim c As Range
    For Each c In Selection.Cells
        c.Value = c.Column
    Next c
End Sub