我如何循环浏览一部分工作表?

我知道如何遍历工作簿中的所有工作表,以及如何在到达“结束标志”工作表时退出:

For Each ThisWorkSheet In Worksheets
   If ThisWorkSheet.Name = "FlagEnd" Then Exit For
   MsgBox "This worksheet name is: " & ThisWorkSheet.Name
Next

然而,我无法从开始标志工作表开始循环(或者在开始标志工作表之后的工作表上更好地开始循环,例如标记的开始/结束工作表位于一堆其他工作表的中间,所以开始或结束遍历是不可行的。

在“FlagStart”表单之前可能会有数百个工作表,所以我真的需要从正确的表单开始。

尝试:

Set ThisWorkSheet = Sheets("FlagNew")

For Each Sheets("FlagNew") In Worksheets

想法?

解决方案:Mathias非常接近,但dendarii与自定义结束索引距离更近了一步。 我实际上是自己想出了最终的解决方案,但是想要给予信任。 这是我的最终解决方案:

Private Sub CommandButtonLoopThruFlaggedSheets_Click()
    ' determine current bounds
    Dim StartIndex, EndIndex, LoopIndex As Integer
    StartIndex = Sheets("FlagNew").Index + 1
    EndIndex = Sheets("FlagEnd").Index - 1

    For LoopIndex = StartIndex To EndIndex
        MsgBox "this worksheet is: " & Sheets(LoopIndex).Name
        ' code here
    Next LoopIndex
End Sub

如果这不是一个特别易变的工作簿(即工作表不是一直被添加和删除),则可以将工作表的名称存储在隐藏工作表的范围内,并按名称循环显示。

但是,这听起来像是将它们连续存储在工作簿中,因此,基于Mathias的解决方案,您可以使用函数返回开始和结束工作表的索引,然后循环:

Public Function GetStartIndex() As Integer
    On Error Resume Next
    GetStartIndex = ThisWorkbook.Worksheets("MyStartingWorksheet").Index + 1
End Function

Public Function GetEndIndex() As Integer
    On Error Resume Next
    GetEndIndex = ThisWorkbook.Worksheets("MyEndingWorksheet").Index - 1
End Function

Sub LoopThrough()

    Dim wks As Worksheet
    Dim i As Integer
    Dim iStart As Integer
    Dim iEnd As Integer

    iStart = GetStartIndex()
    iEnd = GetEndIndex()

    If iStart > 0 And iEnd > 0 And iEnd > iStart Then
        For i = iStart To iEnd
            Set wks = ThisWorkbook.Worksheets(i)
            MsgBox wks.Name
        Next i
    End If

End Sub

我相信如果您使用“foreach”,您将无法控制起始页面。 对于这个问题,我甚至不确定你会保证迭代的顺序。
我认为你应该做的第一件事,就是获取你感兴趣的工作表的索引(按名称获取工作表并获取索引),然后使用for循环遍历从标志开始的工作表索引图表索引。
[编辑:我通过一个简单的例子砍了]

Sub Iterate()

Dim book As Workbook
Dim flagIndex As Integer
Dim flagSheet As Worksheet

Set book = ActiveWorkbook
Set flagSheet = book.Worksheets("Sheet3")
flagIndex = flagSheet.Index

Dim sheetIndex As Integer
Dim currentSheet As Worksheet

For sheetIndex = flagIndex To book.Worksheets.Count
    Set currentSheet = book.Worksheets(sheetIndex)
Next

End Sub

怎么样?

For Each ThisWorkSheet In Worksheets  
    If ThisWorkSheet.Name = "FlagStart" Then output = true 
    If ThisWorkSheet.Name = "FlagEnd" Then Exit For   
    If output = true Then MsgBox "This worksheet name is: " & ThisWorkSheet.Name
Next

这段代码可能不完全正确。 我在SO编辑器中编写而不是VBA,但你明白了。

链接地址: http://www.djcxy.com/p/43491.html

上一篇: How can I loop through a subset of worksheets?

下一篇: NSCollectionView draws nothing