循环中“为每个细胞”的细胞顺序

时间:2013-05-31 09:34:50

标签: excel vba excel-vba foreach word-vba

我想知道是否有规则要按顺序知道循环将会完成?

有没有办法改变它?

假设我在多个工作簿上的多个工作表上有多个范围。

2 个答案:

答案 0 :(得分:5)

是的,总有规则要运行循环。你可以做一些实验,但我会给你一些信息(据我记得)。

工作簿:订单是从第一次打开/创建到最后一次打开/创建。

工作表/表格:从左到右的顺序,因为您可以在应用程序中看到它们。

单元格(范围内):它从左到右排在第一行,然后移到下一行(我们用英文读写)。

其他三个例子:

Excel工作表中的注释:基于注释所在单元格的地址,按循环与单元格的顺序排列(参见上文)。

Word文档中的注释:从文档开头,按出现顺序排列。

MS Word中的书签:按书签名称的字母顺序排列。


2013年8月8日编辑

我刚刚在Word文档中找到了有关书签顺序的有趣内容。实际上有两个订单:

1。此循环:

    Dim BM As Bookmark
    For Each BM In ActiveDocument.Content.Bookmarks
    Next

将按照Document Content (Range)

中书签的出现顺序进行迭代

2。虽然这个循环:

    Dim BM As Bookmark
    For Each BM In ActiveDocument.Bookmarks
    Next

将根据书签名称按字母顺序迭代。


使用For...Next循环时,您可以使用Step minus参数反转订单。

进行实验很容易,我可以承认 - 通常知道循环迭代顺序很重要。

答案 1 :(得分:1)

如果你使用索引而不是每个循环,你可以定义'step'来告诉它如何遍历索引:

Sub test_forloop()

Dim rng As Range Dim i As Integer Dim strOut As String

Set rng = Range("A1:A10")

For i = 1 To rng.Cells.Count Step 1
    strOut = strOut & rng.Cells(i).Address Next

MsgBox strOut

strOut = ""
' Now do it stepping backwards

For i = rng.Cells.Count To 1 Step -1
    strOut = strOut & rng.Cells(i).Address Next

MsgBox strOut

End Sub

如果它们是同一个集合的成员(使用Worksheets(<index>)),这与工作表和工作簿的工作方式相同。