希望您能帮助我!
我正在用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
我不确定是否还有另一种方法。如果有人有任何建议,我很感兴趣!
答案 0 :(得分:1)
正如其他人所说,您不应以这种方式使用Selection。但是要回答您的问题...我根据您的示例用例进行了一些快速测试。
看来,当您循环cell in Selection
时,它从左到右,然后按范围区域从上到下。因此,例如,如果您选择了两个不连续的范围,则if看起来像这样:
索引它时,似乎不会在范围区域之间跳转。相反,它将继续在第一个范围区域的列范围内从左到右从上到下进行迭代:
因此,如果您选择了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