VBA代码循环通过工作表开始与特定工作表(索引3)

我需要循环遍历索引3提示最后一张表并运行代码。 我尝试过这样的东西,但它不起作用。

If (ws.sheetIndex > 2) Then With ws 'code goes here End With End If 

我做了一个search,但没有find解决这个问题的方法。 帮助将不胜感激。

我也试过:

 Dim i As Long, lr As Long Dim ws As Worksheet Windows("Book1").Activate With ActiveWorkbook Set ws = .Worksheets("index") For i = 3 To 10 'code goes here Next i End With 

您可以尝试以下操作,它遍历工作簿中的所有工作表,并且只对索引为3或更高的工作表“执行”。

 Dim sheet As Worksheet For Each sheet In ActiveWorkbook.Worksheets If sheet.Index > 2 Then ' Do your thing with each "sheet" object, eg: sheet.Cells(1, 1).Value = "hi" End If Next 

请注意,这不会对您拥有的工作表数量(10或者其他)有严格的限制,因为它可以用于工作簿中的任意数量的工作表。


编辑

如果您希望代码在名称为"Sheet" + i工作表上运行(其中, i是从3开始的索引号),则以下内容应该有所帮助:

 Dim sheet As Worksheet Dim i As Long For i = 3 To ActiveWorkbook.Worksheets.Count Set sheet = ActiveWorkbook.Worksheets(i) If sheet.Name = "Sheet" & i Then ' Do your thing with each "sheet" object, eg: sheet.Cells(2, 2).Value = "hi" End If Next i 

当然,这意味着您的工作表名称需要始终遵循这种模式,所以这不是最佳实践。 不过,如果你确定名字会保持这样的状态,那么它应该适合你。

尝试使用名称排除第一张和第二张纸:

 Public Sub Sheets3andUp() Dim ws As Worksheet Dim nameOfSheet1 As String Dim nameOfSheet2 As String nameOfSheet1 = "Sheet1" nameOfSheet2 = "Sheet2" For Each ws In ActiveWorkbook.Worksheets If ws.Name <> nameOfSheet1 And ws.Name <> nameOfSheet2 Then 'Code goes here Debug.Print ws.Name End If Next ws 

结束小组

请注意,用户可以对工作表集合中的工作表重新sorting,所以最好通过CodeName来引用工作表(用户不能更改),并通过CodeName排除要跳过的工作表,如下所示:

 Public Sub TestLoop() On Error GoTo ErrHandler Dim ws As Worksheet, s As String For Each ws In Worksheets If ws.CodeName <> "Sheet2" Then s = s & vbNewLine & ws.CodeName End If Next ws s = "WorksheetList (except Sheet2:" & vbNewLine & vbNewLine & s MsgBox s, vbOKOnly, "Test" EndSUb: Exit Sub ErrHandler: Resume EndSUb End Sub 

如果将Sheet 3拖到Sheet1之前,则MsgBox输出:

 WorksheetList (except Sheet2: Sheet3 Sheet1