在VBA中,为什么索引时选择对象的行为不同?

时间:2018-09-17 21:05:54

标签: vba loops for-loop selection

希望您能帮助我!

我正在用VBA编写代码,并且选择对象的行为与我预期的不同。

当我像这样编写for循环时

For Each Cell in Selection
    MsgBox Cell.Value
Next Cell

它按预期工作,但是随后我尝试为其编制索引,并且行为有所不同。尤其是不连续的单元格选择。

喜欢这个

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

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

编辑:

感谢大家的投入,看来我需要找到另一种方法来进行以下操作。我有一段代码,它接受用户选择的单元格并将这些值用于计算。现在,我一直在努力使之能够选择不连续的单元格。基本上,我需要对这些值进行排列,而我的想法是按如下所示制作一个for循环

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

我不确定是否还有另一种方法。如果有人有任何建议,我很感兴趣!

1 个答案:

答案 0 :(得分:1)

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

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

enter image description here

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

enter image description here

因此,如果您选择了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