我如何循环浏览一部分工作表?
我知道如何遍历工作簿中的所有工作表,以及如何在到达“结束标志”工作表时退出:
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