Excel миф for all worksheets

Summary

This article contains a Microsoft Visual Basic for Applications macro (Sub procedure) that loops through all the worksheets in the active workbook. This macro also displays the name of each worksheet.

More Information

Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements. To try the sample macro, follow these steps:

  1. Type the following macro code into a new module sheet.

          Sub WorksheetLoop()

    Dim WS_Count As Integer
    Dim I As Integer

    ' Set WS_Count equal to the number of worksheets in the active
    ' workbook.
    WS_Count = ActiveWorkbook.Worksheets.Count

    ' Begin the loop.
    For I = 1 To WS_Count

    ' Insert your code here.
    ' The following line shows how to reference a sheet within
    ' the loop by displaying the worksheet name in a dialog box.
    MsgBox ActiveWorkbook.Worksheets(I).Name

    Next I

    End Sub

  2. To run the macro, position the insertion point in the line that reads «Sub WorksheetLoop(),» and press F5.

The macro will loop through the workbook and display a message box with a different worksheet name each time it runs through the loop. Note that this macro will only display worksheet names; it will not display the names of other types of sheets in the workbook.

You can also loop through all of the worksheets in the workbook by using a ‘For Each’ loop.

  1. Enter the following macro code into a new module sheet.

          Sub WorksheetLoop2()

    ' Declare Current as a worksheet object variable.
    Dim Current As Worksheet

    ' Loop through all of the worksheets in the active workbook.
    For Each Current In Worksheets

    ' Insert your code here.
    ' This line displays the worksheet name in a message box.
    MsgBox Current.Name
    Next

    End Sub

  2. To run the macro, position the insertion point in the line that reads «Sub WorksheetLoop2(),» and press F5.

This macro works identically to the WorksheetLoop macro, except that it uses a different type of loop to process all of the worksheets in the active workbook.

References

For additional information about getting help with Visual Basic for Applications, please see the following article in the Microsoft Knowledge Base:

163435 VBA: Programming Resources for Visual Basic for Applications

226118 OFF2000: Programming Resources for Visual Basic for Applications

Need more help?

Home / VBA / How to Loop Through All the Sheets using VBA in Excel

There are two ways to loop through all the sheets that you have in a workbook.

  • FOR NEXT LOOP     
  • FOR EACH LOOP

1. Using For Each Loop

As you know with FOR EACH you can loop through all the objects in the collection and in a workbook worksheets are a collection of all the worksheets.

Use the following steps:

  1. First, declare a variable to refer to a worksheet for the loop.
    1-declare-a-variable-to-refer
  2. After that, start the loop with the keyword “For Each” and refer to each worksheet in the workbook.
    2-start-the-loop-with-the-keyword
  3. Now let’s say you want to enter a value in the cell A1 of each worksheet you can use write code like following.
    3-want-to-enter-a-value-in-the-cell
  4. In the end, use the keyword “End” to end the loop.
    4-use-the-keyword-end

Helpful Links: Run a Macro – Macro Recorder – Visual Basic Editor – Personal Macro Workbook

Sub vba_loop_sheets()

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets

    ws.Range("A1").Value = "Yes"

Next ws

End Sub

This code loops through each sheet and enters the value in the cell A1 of each sheet. The benefit of using this method is it loops through all the sheets in the workbook.

And if you want to loop through all the worksheets into a close workbook, use code like below.

Sub vba_loop_sheets()

Dim wb As Workbook
Dim ws As Worksheet

Application.DisplayAlerts = False

Set wb = Workbooks.Open("C:UsersDellDesktopsample-file.xlsx")

For Each ws In wb.Worksheets
    ws.Range("A1").Value = "Done"
Next ws

wb.Close SaveChanges:=True

Application.DisplayAlerts = True

End Sub

2. Use the For Next Loop

You can also loop by using the FOR NEXT loop, where you can use the count of the sheets to decide the number of loops to perform and use the loop counter to refer to each sheet.

Here are the steps you need to follow:

  1. First, you need to declare two variables to store count value for the loop and one for the count of the sheets that you have in the workbook.
    5-declare-to-variable-to-write-count-value
  2. Now, set the value for the “shtCount” variable equivalent to the number of sheets that you have in the workbook.
    6-set-the-value-for-the-shtcount
  3. After that, start the code for loop using the “For i” keyword and use the sheet count of the max value for the loop counter.
    7-start-the-code
  4. From here, you need to use the loop counter to loop through all the sheets and enter value “Yes” in the cell A1 of every sheet.
    8-use-the-loop-counter-to-loop

Full Code

Sub vba_loop_sheets()

Dim i As Long
Dim shtCount As Long

shtCount = Sheets.Count

For i = 1 To shtCount

    Sheets(i).Range("A1").Value = "Yes"

Next i

End Sub

And if you want to loop through a workbook that is closed then use the following code.

Sub vba_loop_sheets()

Dim i As Long
Dim shtCount As Long

Set wb = Workbooks.Open("C:UsersDellDesktopsample-file.xlsx")
shtCount = wb.Sheets.Count

Application.DisplayAlerts = False

For i = 1 To shtCount

    wb.Sheets(i).Range("A1").Value = "Yes"

Next i

wb.Close SaveChanges:=True

Application.DisplayAlerts = True

End Sub

    Return to VBA Code Examples

    Macros applied to an entire workbook can be handy for extracting data from multiple sheets to a new workbook, applying advanced formatting to all sheets, or many other reasons. Here is the basic syntax and a working code example for VBA that works on every sheet in a workbook.

    Loop Through Every Sheet in Workbook

    The basic syntax for looping through every sheet in a workbook and applying VBA code to it is

    For Each ws In Worksheets
      'Update or do something here
    Next

    Update Every Worksheet in Workbook Using VBA

    For a functioning example, copy and paste the following code into a module and run it. The result is text placed in cell A1 of every sheet in your workbook.

    Public Sub DoToAll()
    
    'Declare our variable
    Dim ws As Worksheet
    
    For Each ws In Worksheets
    'place code between the For and Next
    'for what you would like to do to
    'each sheet
    
      ws.Range("A1") = "AutomateExcel.com"
    Next
    
    End Sub

    VBA Coding Made Easy

    Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

    alt text

    Learn More!

    In this Article

    • VBA Loop Quick Examples
      • For Each Loops
      • For Next Loops
      • Do While Loops
      • Do Until Loops
    • VBA Loop Builder
    • VBA For Next Loop
      • For Loop Syntax
      • For Loop Step
      • For Loop Step – Inverse
      • Nested For Loop
      • Exit For
      • Continue For
    • VBA For Each Loop
      • For Each Cell in Range
      • For Each Worksheet in Workbook
      • For Each Open Workbook
      • For Each Shape in Worksheet
      • For Each Shape in Each Worksheet in Workbook
      • For Each – IF Loop
    • VBA Do While Loop
      • Do While
      • Loop While
    • VBA Do Until Loop
      • Do Until
      • Loop Until
    • Exit Do Loop
    • End or Break Loop
    • More Loop Examples
      • Loop Through Rows
      • Loop Through Columns
      • Loop Through Files in a Folder
      • Loop Through Array
    • Loops in Access VBA

    To work effectively in VBA, you must understand Loops.

    Loops allow you to repeat a code block a set number of times or repeat a code block on a each object in a set of objects.

    First we will show you a few examples to show you what loops are capable of. Then we will teach you everything about loops.

    VBA Loop Quick Examples

    For Each Loops

    For Each Loops loop through every object in a collection, such as every worksheet in workbook or every cell in a range.

    Loop Through all Worksheets in Workbook

    This code will loop through all worksheets in the workbook, unhiding each sheet:

    Sub LoopThroughSheets()
    Dim ws As Worksheet
     
        For Each ws In Worksheets
            ws.Visible = True
        Next
     
    End Sub

    Loop Through All Cells in Range

    This code will loop through a range of cells, testing if the cell value is negative, positive, or zero:

    Sub If_Loop()
    Dim Cell as Range
     
      For Each Cell In Range("A2:A6")
        If Cell.Value > 0 Then
          Cell.Offset(0, 1).Value = "Positive"
        ElseIf Cell.Value < 0 Then
          Cell.Offset(0, 1).Value = "Negative"
        Else
          Cell.Offset(0, 1).Value = "Zero"
         End If
      Next Cell
     
    End Sub

    vba else if statement

    For Next Loops

    Another type of “For” Loop is the For Next Loop.  The For Next Loop allows you to loop through integers.

    This code will loop through integers 1 through 10, displaying each with a message box:

    Sub ForLoop()
        Dim i As Integer
        For i = 1 To 10
            MsgBox i
        Next i
    End Sub

    Do While Loops

    Do While Loops will loop while a condition is met. This code will also loop through integers 1 through 10, displaying each with a message box.

    Sub DoWhileLoop()
        Dim n As Integer
        n = 1
        Do While n < 11
            MsgBox n
            n = n + 1
        Loop
    End Sub

    Do Until Loops

    Conversely, Do Until Loops will loop until a condition is met. This code does the same thing as the previous two examples.

    Sub DoUntilLoop()
        Dim n As Integer
        n = 1
        Do Until n >= 10
            MsgBox n
            n = n + 1
        Loop
    End Sub

    We will discuss this below, but you need to be extremely careful when creating Do While or Do Until loops so that you don’t create a never ending loop.

    VBA Loop Builder

    vba loop builder

    This is a screenshot of the “Loop Builder” from our Premium VBA Add-in: AutoMacro. The Loop Builder allows you to quickly and easily build loops to loop through different objects, or numbers. You can perform actions on each object and/or select only objects that meet certain criteria.

    The add-in also contains many other code builders, an extensive VBA code library, and an assortment of coding tools. It’s a must have for any VBA developer.

    Now we will cover the different types of loops in depth.

    VBA Coding Made Easy

    Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

    automacro

    Learn More

    VBA For Next Loop

    For Loop Syntax

    The For Next Loop allows you to repeat a block of code a specified number of times. The syntax is:

    [Dim Counter as Integer]
    
    For Counter = Start to End [Step Value]
        [Do Something]
    Next [Counter]

    Where the items in brackets are optional.

    • [Dim Counter as Long] – Declares the counter variable. Required if Option Explicit is declared at the top of your module.
    • Counter – An integer variable used to count
    • Start – The start value (Ex. 1)
    • End – The end value (Ex. 10)
    • [Step Value] – Allows you to count every n integers instead of every 1 integer. You can also go in reverse with a negative value (ex. Step -1)
    • [Do Something] – The code that will repeat
    • Next [Counter] – Closing statement to the For Next Loop. You can include the Counter or not. However, I strongly recommend including the counter as it makes your code easier to read.

    If that’s confusing, don’t worry. We will review some examples:

    Count to 10

    This code will count to 10 using a For-Next Loop:

    Sub ForEach_CountTo10()
    
    Dim n As Integer
    For n = 1 To 10
        MsgBox n
    Next n
    
    End Sub

    For Loop Step

    Count to 10 – Only Even Numbers

    This code will count to 10 only counting even numbers:

    Sub ForEach_CountTo10_Even()
    
    Dim n As Integer
    For n = 2 To 10 Step 2
        MsgBox n
    Next n
    
    End Sub

    Notice we added “Step 2”. This tells the For Loop to “step” through the counter by 2.  We can also use a negative step value to step in reverse:

    VBA Programming | Code Generator does work for you!

    For Loop Step – Inverse

    Countdown from 10

    This code will countdown from 10:

    Sub ForEach_Countdown_Inverse()
    
    Dim n As Integer
    For n = 10 To 1 Step -1
        MsgBox n
    Next n
    MsgBox "Lift Off"
    
    End Sub

    Delete Rows if Cell is Blank

    I’ve most frequently used a negative step For-Loop to loop through ranges of cells, deleting rows that meet certain criteria.  If you loop from the top rows to the bottom rows, as you delete rows you will mess up your counter.

    This example will delete rows with blank cells (starting from the bottom row):

    Sub ForEach_DeleteRows_BlankCells()
    
    Dim n As Integer
    For n = 10 To 1 Step -1
        If Range("a" & n).Value = "" Then
            Range("a" & n).EntireRow.Delete
        End If
    Next n
    
    End Sub

    Nested For Loop

    You can “nest” one For Loop inside another For Loop. We will use Nested For Loops to create a multiplication table:

    Sub Nested_ForEach_MultiplicationTable()
    
    Dim row As Integer, col As Integer
    
    For row = 1 To 9
        For col = 1 To 9
            Cells(row + 1, col + 1).Value = row * col
        Next col
    Next row
    
    End Sub

    vba nested for loop

    Exit For

    The Exit For statement allows you to exit a For Next loop immediately.

    You would usually use Exit For along with an If Statement, exiting the For Next Loop if a certain condition is met.

    For example, you might use a For Loop to find a cell. Once that cell is found, you can exit the loop to speed up your code.

    This code will loop through rows 1 to 1000, looking for “error” in column A. If it’s found, the code will select the cell, alert you to the found error, and exit the loop:

    Sub ExitFor_Loop()
    
    Dim i As Integer
     
    For i = 1 To 1000
        If Range("A" & i).Value = "error" Then
            Range("A" & i).Select
            MsgBox "Error Found"
            Exit For
        End If
    Next i
    
    End Sub

    Important: In the case of Nested For Loops, Exit For only exits the current For Loop, not all active Loops.

    Continue For

    VBA does not have the “Continue” command that’s found in Visual Basic. Instead, you will need to use “Exit”.

    AutoMacro | Ultimate VBA Add-in | Click for Free Trial!

    VBA For Each Loop

    The VBA For Each Loop will loop through all objects in a collection:

    • All cells in a range
    • All worksheets in a workbook
    • All shapes in a worksheet
    • All open workbooks

    You can also use Nested For Each Loops to:

    • All cells in a range on all worksheets
    • All shapes on all worksheets
    • All sheets in all open workbooks
    • and so on…

    The syntax is:

    For Each Object in Collection
    [Do Something]
    Next [Object]

    Where:

    • Object – Variable representing a Range, Worksheet, Workbook, Shape, etc. (ex. rng)
    • Collection – Collection of objects (ex. Range(“a1:a10”)
    • [Do Something] – Code block to run on each object
    • Next [Object] – Closing statement. [Object] is optional, however strongly recommended.

    For Each Cell in Range

    This code will loop through each cell in a range:

    Sub ForEachCell_inRange()
    
    Dim cell As Range
    
    For Each cell In Range("a1:a10")
        cell.Value = cell.Offset(0,1).Value
    Next cell
    
    End Sub

    For Each Worksheet in Workbook

    This code will loop through all worksheets in a workbook, unprotecting each sheet:

    Sub ForEachSheet_inWorkbook()
    
    Dim ws As Worksheet
    
    For Each ws In Worksheets
        ws.Unprotect "password"
    Next ws
    
    End Sub

    For Each Open Workbook

    This code will save and close all open workbooks:

    Sub ForEachWB_inWorkbooks()
    
    Dim wb As Workbook
    
    For Each wb In Workbooks
        wb.Close SaveChanges:=True
    Next wb
    
    End Sub

    AutoMacro | Ultimate VBA Add-in | Click for Free Trial!

    For Each Shape in Worksheet

    This code will delete all shapes in the active sheet.

    Sub ForEachShape()
    
    Dim shp As Shape
    
    For Each shp In ActiveSheet.Shapes
        shp.Delete
    Next shp
    
    End Sub
    

    For Each Shape in Each Worksheet in Workbook

    You can also nest For Each Loops. Here we will loop through all shapes in all worksheets in the active workbook:

    Sub ForEachShape_inAllWorksheets()
    
    Dim shp As Shape, ws As Worksheet
    
    For Each ws In Worksheets
        For Each shp In ws.Shapes
            shp.Delete
        Next shp
    Next ws
    
    End Sub

    For Each – IF Loop

    As we’ve mentioned before, you can use an If statement within a loop, performing actions only if certain criteria is met.

    This code will hide all blank rows in a range:

    Sub ForEachCell_inRange()
    
    Dim cell As Range
    
    For Each cell In Range("a1:a10")
        If cell.Value = "" Then _
           cell.EntireRow.Hidden = True
    Next cell
    
    End Sub

    VBA Do While Loop

    The VBA Do While and Do Until (see next section) are very similar. They will repeat a loop while (or until) a condition is met.

    The Do While Loop will repeat a loop while a condition is met.

    Here is the Do While Syntax:

    Do While Condition
    [Do Something]
    Loop

    Where:

    • Condition – The condition to test
    • [Do Something] – The code block to repeat

    You can also set up a Do While loop with the Condition at the end of the loop:

    Do 
    [Do Something]
    Loop While Condition

    We will demo each one and show how they differ:

    AutoMacro | Ultimate VBA Add-in | Click for Free Trial!

    Do While

    Here is the Do While loop example we demonstrated previously:

    Sub DoWhileLoop()
        Dim n As Integer
        n = 1
        Do While n < 11
            MsgBox n
            n = n + 1
        Loop
    End Sub

    Loop While

    Now let’s run the same procedure, except we will move the condition to the end of the loop:

    Sub DoLoopWhile()
        Dim n As Integer
        n = 1
        Do
            MsgBox n
            n = n + 1
        Loop While n < 11
    End Sub

    VBA Do Until Loop

    Do Until Loops will repeat a loop until a certain condition is met. The syntax is essentially the same as the Do While loops:

    Do Until Condition
    [Do Something]
    Loop

    and similarly the condition can go at the start or the end of the loop:

    Do 
    [Do Something]
    Loop Until Condition

    Do Until

    This do Until loop will count to 10, like our previous examples

    Sub DoUntilLoop()
        Dim n As Integer
        n = 1
        Do Until n > 10
            MsgBox n
            n = n + 1
        Loop
    End Sub

    AutoMacro | Ultimate VBA Add-in | Click for Free Trial!

    Loop Until

    This Loop Until loop will count to 10:

    Sub DoLoopUntil()
        Dim n As Integer
        n = 1
        Do
            MsgBox n
            n = n + 1
        Loop Until n > 10
    End Sub

    Exit Do Loop

    Similar to using Exit For to exit a For Loop, you use the Exit Do command to exit a Do Loop immediately

    Exit Do

    Here is an example of Exit Do:

    Sub ExitDo_Loop()
    
    Dim i As Integer
    i = 1 
    
    Do Until i > 1000
        If Range("A" & i).Value = "error" Then
            Range("A" & i).Select
            MsgBox "Error Found"
            Exit Do
        End If
        i = i + 1
    Loop
    
    End Sub

    End or Break Loop

    As we mentioned above, you can use the Exit For or Exit Do to exit loops:

    Exit For
    Exit Do

    However, these commands must be added to your code before you run your loop.

    If you are trying to “break” a loop that’s currently running, you can try pressing ESC or CTRL + Pause Break on the keyboard. However, this may not work.  If it doesn’t work, you’ll need to wait for your loop to end or, in the case of an endless loop, use CTRL + ALT + Delete to force close Excel.

    This is why I try to avoid Do loops, it’s easier to accidentally create an endless loop forcing you to restart Excel, potentially losing your work.

    More Loop Examples

    AutoMacro | Ultimate VBA Add-in | Click for Free Trial!

    Loop Through Rows

    This will loop through all the rows in a column:

    Public Sub LoopThroughRows()
     
    Dim cell As Range
     
    For Each cell In Range("A:A")
        If cell.value <> "" Then MsgBox cell.address & ": " & cell.Value
    Next cell
     
    End Sub

    Loop Through Columns

    This will loop through all columns in a row:

    Public Sub LoopThroughColumns()
    
    Dim cell As Range
    
    For Each cell In Range("1:1")
        If cell.Value <> "" Then MsgBox cell.Address & ": " & cell.Value
    Next cell
    
    End Sub
    

    Loop Through Files in a Folder

    This code will loop through all files in a folder, creating a list:

    Sub LoopThroughFiles ()
    
    Dim oFSO As Object
    Dim oFolder As Object
    Dim oFile As Object
    Dim i As Integer
    
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    
    Set oFolder = oFSO.GetFolder("C:Demo)
    
    i = 2
    
    For Each oFile In oFolder.Files
        Range("A" & i).value = oFile.Name
        i = i + 1
    Next oFile
    
    End Sub

    Loop Through Array

    This code will loop through the array ‘arrList’:

    For i = LBound(arrList) To UBound(arrList)
        MsgBox arrList(i)
    Next i

    The LBound function gets the “lower bound” of the array and UBound gets the “upper bound”.

    Loops in Access VBA

    Most of the examples above will also work in Access VBA. However, in Access, we loop through the Recordset Object rather than the Range Object.

    Sub LoopThroughRecords()
       On Error Resume Next
       Dim dbs As Database
       Dim rst As Recordset
       Set dbs = CurrentDb
       Set rst = dbs.OpenRecordset("tblClients", dbOpenDynaset)
       With rst
          .MoveLast
          .MoveFirst
          Do Until .EOF = True
             MsgBox (rst.Fields("ClientName"))
            .MoveNext
         Loop
       End With
       rst.Close
       Set rst = Nothing
       Set dbs = Nothing
    End Sub

    I am trying to loop through all the worksheets in the activeworkbook to perform a repetitive task.

    I currently have the code below:

    Sub sort_sectors()
    
    Dim i As Integer
    Dim rng As Range
    Dim SortRng As Range
    Dim rng1 As Integer
    Dim ws As Worksheet
    Dim wb As Workbook
    Dim LastCol As Long
    Dim LastRow As Long
    
    Set wb = ActiveWorkbook
    
    For Each ws In wb.Worksheets
    
    'This is marking several of the sheets of which I do not want to run the sub
    If ws.Range("a9").Value = "x" Then
    NextIteration:
    End If
    
    'Reference point is rng1 to select the desired range
    With Range("a1:t100")
        rng1 = .Find(what:="sector", LookIn:=xlValues).Row
    End With
    
    'return the row number for the sector header
    LastCol = ws.Cells(20, ws.Columns.Count).End(xlToLeft).Column
    LastRow = ws.Range("a15").End(xlDown).Row
    
    'I am going to add the code below to finish out the task that I want to complete
    
    Next
    
    End Sub
    

    I am sure the problem is that I’m misunderstanding something about how the for each loop actually works. Hopefully someone’s answer will allow to better understand.

    I really appreciate any help on this.

    I made some edits to the code, and now I actually do have an error :) I tried making the changes you suggested for the «with ws.range etc…» piece of the code, and I get the object error 91.

    Below is my new and «improved» code.

    Sub sort_sectors()
    
    Dim i As Integer
    Dim rng As Range
    Dim SortRng As Range
    Dim intAnchorRow As Integer
    Dim intMktCapAnchor As Integer
    Dim intSectorAnchor As Integer
    Dim ws As Worksheet
    Dim wb As Workbook
    Dim LastCol As Long
    Dim LastRow As Long
    
    Set wb = ActiveWorkbook
    
    For Each ws In ActiveWorkbook.Worksheets
    
    'Filter out the sheets that we don't want to run
    If ws.Range("a9").Value <> "x" Or ws.Name = "__FDSCACHE__" Or ws.Name = "INDEX" Then
    
    'Get the anchor points for getting sort range and the sort keys
    ''''''THIS IS THE PART THAT IS NOW GIVING ME THE ERROR'''''''
        With ws.Range("a1:t100")
            intAnchorRow = .Find(what:="sector", LookIn:=xlValues).Row
            intSectorAnchor = .Find(what:="sector", LookIn:=xlValues).Column
            intMktCapAnchor = .Find(what:="Market Cap", LookIn:=xlValues).Column
        End With
    
    'Find the last row and column of the data range
        LastCol = ws.Cells(20, ws.Columns.Count).End(xlToLeft).Column
        LastRow = ws.Range("a15").End(xlDown).Row
    
        Set SortRng = Range(Cells(intAnchorRow + 1, 1), Cells(LastRow, LastCol))
        Range(SortRng).Sort key1:=Range(Cells(intAnchorRow + 1, intSectorAnchor), Cells(LastRow, intSectorAnchor)), _
            order1:=xlAscending, key2:=Range(Cells(intAnchorRow + 1, intMktCapAnchor), Cells(LastRow, intMktCapAnchor)), _
            order2:=xlDescending, Header:=xlNo
    
    
    End If
    
    Next
    
    End Sub
    

    Thanks again. This has been very helpful for me.

    Ill show you how to loop through all of the worksheets in a workbook in Excel using VBA and Macros.

    This only takes a few lines of code and is rather simple to use once you understand it.

    Here is the macro that will loop through all worksheets in a workbook in Excel:

    Sub Sheet_Loop()
    'count the number of worksheets in the workbook
    sheet_count = ActiveWorkbook.Worksheets.Count
    
    'loop through the worksheets in the workbook
    For a = 1 To sheet_count
    
        'code that you want to run on each sheet
        
        'simple message box that outputs the name of the sheet
        MsgBox ActiveWorkbook.Worksheets(a).Name
    
    Next a
    End Sub
    

    Now, Ill go through the macro step-by-step.

    ActiveWorkbook.Worksheets.Count
    

    This line is what counts the number of worksheets that are in the workbook.

    The first part of the line simply sets the variable sheet_count equal to the number of sheets in the workbook:

    sheet_count = ActiveWorkbook.Worksheets.Count
    

    Now that we know how many worksheets there are, we can loop through them.

    We are going to use a very simple For Next loop in this case and you can copy it directly from here into your project.

    For a = 1 To sheet_count
    'code that you want to run on each sheet
    Next a
    

    In the above lines we are creating a new variable a and setting it equal to 1.  We then use the sheet_count variable to tell the macro when to stop looping; remember that it holds the numeric value of how many sheets there are in the workbook.

    After this first line, which creates the loop, we then put all of the code that we want to run on each worksheet.

    Dont forget that, at the end of the loop we still need something:

    Next a
    

    This tells the For loop that it should increment the value of the a variable by 1 each time the loop runs through a cycle or goes through a sheet.  The loop will not work without this line of code at the end of it.

    In the original example we also have a line of code within the For loop:

    MsgBox ActiveWorkbook.Worksheets(a).Name
    

    This line will output the name of each worksheet into a pop-up message box; it also illustrates how you can access the worksheets from within the loop.

    To do anything with the sheets from within the loop, we need to access each sheet by its reference or index number.  Each sheet has an index number and it always starts at 1 and increments by 1 for the next sheet in the workbook.

    This is why we create the a variable and set it equal to 1 in the For loop, because the first sheet in the workbook always has an index number of 1, and we want to use a as the index number to access the worksheets.

    Each time the loop runs and a is incremented by one, this allows you to access the next sheet in the workbook.  This is why we needed to count how many sheets were in the workbook, so we would know when to tell the For loop to stop running because there were no more sheets.

    So, we can access the worksheets from within the loop by using
    ActiveWorkbook.Worksheets(index number)

    or

    Sheets(index number)

    Remember that the variable a is being used as our index number in this case.

    Using this method you can do anything you want with the corresponding worksheet.

    And thats how you loop through all worksheets in a workbook in Excel!

    Make sure to download the accompanying file for this tutorial so you can see the VBA/Macro code in action.

    Similar Content on TeachExcel

    Get the Name of a Worksheet in Macros VBA in Excel

    Tutorial: How to get the name of a worksheet in Excel using VBA and Macros and also how to store tha…

    Excel Input Form with Macros and VBA

    Tutorial:
    Forms Course
    How to make a data entry form in Excel using VBA and Macros — this allows yo…

    Get User Submitted Data from a Prompt in Excel using VBA Macros

    Tutorial: How to prompt a user for their input in Excel.
    There is a simple way to do this using VBA …

    Find the Next Blank Row with VBA Macros in Excel

    Tutorial:
    Learn how to find the next empty cell in a range in Excel using VBA and Macros.  This me…

    Loop Through an Array in Excel VBA Macros

    Tutorial:
    I’ll show you how to loop through an array in VBA and macros in Excel.  This is a fairly…

    Copy Data or Formatting to Multiple Worksheets in Excel

    Tutorial:
    Quickly copy all or parts of a single worksheet — data, formatting, or both — to multiple…

    Subscribe for Weekly Tutorials

    BONUS: subscribe now to download our Top Tutorials Ebook!

    run vba on all files in folder

    A very popular Excel automation scenario is the need to a VBA run macro on all files in a folder or running VBA on all Worksheets in an Excel Workbook. This is a very typical case where you process similar data dump files and want to extract data or transform the workbook. In this post I will provide ready code snippets to address these scenarios and walk you through what happens.

    To run macro on all files in folder use the code snippet below. The code will do the following:

    • Open a VBA FileDialog in the current workbook path and ask for you to select a folder where all files are stored
    • It will open a separate Excel process (Application) and then open each file one by one
    • Replace the YOUR CODE HERE section with any code you want to run on every opened workbook
    • Each opened workbook will be closed w/o saving

    To make it more simple currWb and currWS represent the ActiveWorkbook and ActiveWorksheet whereas wb represents the newly opened Workbook from the selected folder.

    Sub RunOnAllFilesInFolder()
        Dim folderName As String, eApp As Excel.Application, fileName As String
        Dim wb As Workbook, ws As Worksheet, currWs As Worksheet, currWb As Workbook
        Dim fDialog As Object: Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
        Set currWb = ActiveWorkbook: Set currWs = ActiveSheet
    
        'Select folder in which all files are stored
        fDialog.Title = "Select a folder"
        fDialog.InitialFileName = currWb.Path
        If fDialog.Show = -1 Then
          folderName = fDialog.SelectedItems(1)
        End If
        
        
        'Create a separate Excel process that is invisibile
        Set eApp = New Excel.Application:  eApp.Visible = False
        
        'Search for all files in folder [replace *.* with your pattern e.g. *.xlsx]
        fileName = Dir(folderName &amp; "*.*")
        Do While fileName &lt;&gt; ""
            'Update status bar to indicate progress
            Application.StatusBar = "Processing " &amp; folderName &amp; "" &amp; fileName
    
    
            Set wb = eApp.Workbooks.Open(folderName &amp; "" &amp; fileName)
            '...
            'YOUR CODE HERE
            '...
            wb.Close SaveChanges:=False 'Close opened worbook w/o saving, change as needed
            Debug.Print "Processed " &amp; folderName &amp; "" &amp; fileName 
            fileName = Dir()
        Loop
        eApp.Quit
        Set eApp = Nothing
        'Clear statusbar and notify of macro completion
        Application.StatusBar = ""
        MsgBox "Completed executing macro on all workbooks"
    End Sub

    There is also built in simple progress tracking via the Application StatusBar.

    VBA Run Macro on All Files in Subfolders

    A scenario of the above case when you want to run a macro on all Excel files in a folder is also traversing all subfolders to run your macro. The below is an extension of the above and utilizes a slightly modified version of the TraversePath procedure from here.

    The below is almost identical to the above, however, notice the global variable fileCollection. This will be used to first store all file identified in subfolders and only after used to run all macros on files stored in this VBA Collection.

    Dim fileCollection As Collection
    Sub TraversePath(path As String)
        Dim currentPath As String, directory As Variant
        Dim dirCollection As Collection
        Set dirCollection = New Collection
        
        currentPath = Dir(path, vbDirectory)
        
        'Explore current directory
        Do Until currentPath = vbNullString
            Debug.Print currentPath
            If Left(currentPath, 1) &lt;&gt; "." And (GetAttr(path &amp; currentPath) And vbDirectory) = vbDirectory Then
                dirCollection.Add currentPath
            ElseIf Left(currentPath, 1) &lt;&gt; "." And (GetAttr(path &amp; currentPath) And vbNormal) = vbNormal Then
                fileCollection.Add path &amp; currentPath
            End If
            currentPath = Dir()
        Loop
        
        'Explore subsequent directories
        For Each directory In dirCollection
            Debug.Print "---SubDirectory: " &amp; directory &amp; "---"
            TraversePath path &amp; directory &amp; ""
        Next directory
    End Sub
    
    Sub RunOnAllFilesInSubFolders()
        Dim folderName As String, eApp As Excel.Application, fileName As Variant
        Dim wb As Workbook, ws As Worksheet, currWs As Worksheet, currWb As Workbook
        Dim fDialog As Object: Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
        Set currWb = ActiveWorkbook: Set currWs = ActiveSheet
    
        'Select folder in which all files are stored
        fDialog.Title = "Select a folder"
        fDialog.InitialFileName = currWb.path
        If fDialog.Show = -1 Then
          folderName = fDialog.SelectedItems(1)
        End If
        
        
        'Create a separate Excel process that is invisibile
        Set eApp = New Excel.Application:  eApp.Visible = False
        
        'Search for all files in folder [replace *.* with your pattern e.g. *.xlsx]
        Set fileCollection = New Collection
        TraversePath folderName &amp; ""
    
        For Each fileName In fileCollection
            'Update status bar to indicate progress
            Application.StatusBar = "Processing " &amp; fileName
    
    
            Set wb = eApp.Workbooks.Open(fileName)
            '...
            'YOUR CODE HERE.
            '...
            wb.Close SaveChanges:=False 'Close opened worbook w/o saving, change as needed
            Debug.Print "Processed " &amp; fileName  'Print progress on Immediate window
        Next fileName
        eApp.Quit
        Set eApp = Nothing
        'Clear statusbar and notify of macro completion
        Application.StatusBar = ""
        MsgBox "Completed executing macro on all workbooks"
    End Sub
    

    Run VBA on All Worksheets

    To run macro on all Sheets in Workbook you need to can use the code snippet below. Here is a walkthrough of the code:

    • Opens each worksheet in ActiveWorkbook that isn’t the ActiveSheet. This clause is to avoid running on Worksheet on which macro was activated assuming this is a working sheet, feel free to remove the If clause if needed.
    • Replace the YOUR CODE HERE section with any code you want to run on every opened Worksheet
    Sub RunOnAllWorksheets()
        Dim folderName As String, eApp As Excel.Application, fileName As String
        Dim ws As Worksheet, currWs As Worksheet, currWb As Workbook
        Dim fDialog As Object: Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
        Set currWb = ActiveWorkbook: Set currWs = ActiveSheet
    
        
        'Search for all files in folder [replace *.* with your pattern e.g. *.xlsx]
        
        For Each ws In Sheets
            If ws.Name &lt;&gt; currWs.Name Then
                'Update status bar to indicate progress
                Application.StatusBar = "Processing " &amp; ws.Name
                '...
                'YOUR CODE HERE
                '...
                Debug.Print "Processed " &amp; ws.Name
            End If
        Next ws
        'Clear statusbar and notify of macro completion
        Application.StatusBar = ""
        MsgBox "Completed executing macro on all worksheets"
    End Sub

    Excel VBA Tutorial about how to refer to, and work with, sheets and worksheets in macrosIn this VBA Tutorial, you learn how to refer to, and work with, sheets and worksheets in macros. This includes:

    1. How to refer to all sheets in a workbook.
    2. How to refer to all worksheets in a workbook.
    3. How to refer to the active sheet.
    4. How to refer to a sheet by its index number.
    5. How to refer to a worksheet by its index number.
    6. How to refer to a sheet by its name.
    7. How to refer to a worksheet by its name.
    8. How to refer to a sheet by its code name.
    9. How to refer to several sheets.
    10. How to refer to several worksheets.
    11. How to loop through all sheets in a workbook with the For Each… Next loop.
    12. How to loop through all worksheets in a workbook with the For Each… Next loop.
    13. How to loop through all sheets in a workbook with the For… Next loop.
    14. How to loop through all worksheets in a workbook with the For… Next loop.
    15. How to loop through all sheets in a workbook in reverse order.
    16. How to loop through all worksheets in a workbook in reverse order.

    This VBA Tutorial is accompanied by an Excel workbook containing the macros I use in the examples below. You can get immediate free access to this example workbook by subscribing to the Power Spreadsheets Newsletter.

    Alternatively, you can access all the files that accompany my Tutorials here.

    Related Excel VBA and Macro Tutorials

    The following VBA and Macro Tutorials may help you better understand and implement the contents below:

    • General VBA constructs and structures:
      • Learn the basics of working with macros here.
      • Learn about basic VBA terms and constructs here.
      • Learn how to enable or disable macros here.
      • Learn how to work with the Visual Basic Editor here.
      • Learn how to create Sub procedures here.
      • Learn how to create object references here.
      • Learn how to work with object properties here.
      • Learn how to work with object methods here.
      • Learn how to declare and work with variables here.
      • Learn about VBA data types here.
      • Learn how to work with arrays here.
      • Learn how to work with loops here.
    • Practical VBA applications and macro examples:
      • Learn how to delete sheets and worksheets here.

    You can find additional VBA and Macro Tutorials in the Archives.

    #1: Refer to all sheets in workbook

    VBA code to refer to all sheets in workbook

    To refer to all sheets in a workbook with VBA, use an object reference with the following structure:

    Workbook.Sheets
    

    Process to refer to all sheets in workbook

    To refer to all sheets in a workbook with VBA, follow these steps:

    1. Identify the workbook containing the sheets (Workbook).
    2. Refer to the Sheets collection representing all sheets in Workbook (Sheets).

    VBA statement explanation

    Item: Workbook

    Workbook object representing the Excel workbook containing the sheets you refer to.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.
    Item: Sheets

    The Workbook.Sheets property returns a Sheets collection representing all sheets in Workbook. The Sheets collection can, generally, contain both:

    • Chart objects, where each Chart object represents an individual chart sheet; or
    • Worksheet objects, where each Worksheet object represents an individual worksheet.

    Macro example to refer to all sheets in workbook

    The following macro example displays a message box (MsgBox) with the number of sheets (Sheets.Count) in the workbook where the macro is stored (ThisWorkbook).

    Sub referToSheetsCollection()
        'source: https://powerspreadsheets.com/
        'displays a message box with the number of sheets in this workbook
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'display message box with number of sheets in this workbook
        MsgBox ThisWorkbook.Sheets.Count
    
    End Sub
    

    Effects of executing macro example to refer to all sheets in workbook

    The following GIF illustrates the results of executing the macro example. The workbook where the macro is stored contains 5 worksheets (Sheet1 through Sheet5) and 5 chart sheets (Chart1 through Chart5). Therefore, Excel displays a message box with the number 10.

    Results of executing macro that refers to all sheets in workbook

    #2: Refer to all worksheets in workbook

    VBA code to refer to all worksheets in workbook

    To refer to all worksheets in a workbook with VBA, use an object reference with the following structure:

    Workbook.Worksheets
    

    Process to refer to all worksheets in workbook

    To refer to all worksheets in a workbook with VBA, follow these steps:

    1. Identify the workbook containing the worksheets (Workbook).
    2. Refer to the Sheets collection representing all worksheets in Workbook (Worksheets).

    VBA statement explanation

    Item: Workbook

    Workbook object representing the Excel workbook containing the worksheets you refer to.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.
    Item: Worksheets

    The Workbook.Worksheets property returns a Sheets collection representing all worksheets in Workbook.

    Macro example to refer to all worksheets in workbook

    The following macro example displays a message box (MsgBox) with the number of worksheets (Worksheets.Count) in the workbook where the macro is stored (ThisWorkbook).

    Sub referToWorksheetsCollection()
        'source: https://powerspreadsheets.com/
        'displays a message box with the number of worksheets in this workbook
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'display message box with number of worksheets in this workbook
        MsgBox ThisWorkbook.Worksheets.Count
    
    End Sub
    

    Effects of executing macro example to refer to all worksheets in workbook

    The following GIF illustrates the results of executing the macro example. The workbook where the macro is stored contains 5 worksheets (Sheet1 through Sheet5). Therefore, Excel displays a message box with the number 5.

    Results of executing macro that refers to all worksheets in workbook

    #3: Refer to active sheet

    VBA code to refer to active sheet

    To refer to the active sheet with VBA, use an object reference with the following structure:

    Workbook.ActiveSheet
    

    Process to refer to active sheet

    To refer to the active sheet with VBA, follow these steps:

    1. Identify the workbook containing the sheet (Workbook). If you don’t identify Workbook, VBA works with the active workbook.
    2. Refer to the active sheet in Workbook (ActiveSheet).

    VBA statement explanation

    Item: Workbook

    Workbook object representing the Excel workbook containing the active sheet you refer to.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.

    If you don’t specify Workbook when referring to the active sheet with ActiveSheet, VBA works with the active workbook (the workbook on top).

    Item: ActiveSheet

    The ActiveSheet returns an object representing the active sheet (the sheet on top) in Workbook, as follows:

    • If you specify Workbook, ActiveSheet returns an object representing the active sheet in Workbook.
    • If you don’t specify Workbook, ActiveSheet returns an object representing the active sheet in the active workbook (the workbook on top).

    Macro example to refer to active sheet

    The following macro example displays a message box (MsgBox) with the name (Name) of the active sheet in the active workbook (ActiveSheet).

    Sub referToActiveSheet()
        'source: https://powerspreadsheets.com/
        'displays a message box with the name of the active sheet
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'display message box with name of active sheet
        MsgBox ActiveSheet.Name
    
    End Sub
    

    Effects of executing macro example to refer to active sheet

    The following GIF illustrates the results of executing the macro example. As expected, Excel displays a message box with the name of the active sheet (Sheet1).

    Results of executing macro that refers to active sheet

    #4: Refer to sheet by index number

    VBA code to refer to sheet by index number

    To refer to a sheet by its index number with VBA, use an object reference with the following structure:

    Workbook.Sheets(SheetIndexNumber)
    

    Process to refer to sheet by index number

    To refer to a sheet by its index number with VBA, follow these steps:

    1. Identify the workbook containing the sheet (Workbook).
    2. Identify the sheet by its index number (Sheets(SheetIndexNumber)).

    VBA statement explanation

    Item: Workbook

    Workbook object representing the Excel workbook containing the sheet you refer to.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.
    Item: Sheets(SheetIndexNumber)

    The Workbook.Sheets property returns a Sheets collection representing all sheets in Workbook. The Sheets collection can, generally, contain both:

    • Chart objects, where each Chart object represents an individual chart sheet; or
    • Worksheet objects, where each Worksheet object represents an individual worksheet.

    SheetIndexNumber is the index number of the sheet you refer to. This index number represents the position of the sheet in the tab bar of Workbook, from left to right. For these purposes, the count usually includes:

    • Hidden sheets; and
    • Both chart sheets and worksheets.

    Therefore, Sheets(SheetIndexNumber) usually returns an individual Chart or Worksheet object representing the chart sheet or worksheet whose index number is SheetIndexNumber.

    Macro example to refer to sheet by index number

    The following macro example activates (Activate) the fifth sheet (Sheets(5)) in the workbook where the macro is stored (ThisWorkbook).

    Sub referToSheetIndex()
        'source: https://powerspreadsheets.com/
        'activates the fifth sheet in this workbook
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'activate fifth sheet in this workbook
        ThisWorkbook.Sheets(5).Activate
    
    End Sub
    

    Effects of executing macro example to refer to sheet by index number

    The following GIF illustrates the results of executing the macro example.

    When the macro is executed, the active sheet is Sheet1. As expected, Excel activates the fifth sheet (Chart1).

    Results of executing macro that refers to sheet by index number

    #5: Refer to worksheet by index number

    VBA code to refer to worksheet by index number

    To refer to a worksheet by its index number with VBA, use an object reference with the following structure:

    Workbook.Worksheets(WorksheetIndexNumber)
    

    Process to refer to worksheet by index number

    To refer to a worksheet by its index number with VBA, follow these steps:

    1. Identify the workbook containing the worksheet (Workbook).
    2. Identify the worksheet by its index number (Worksheets(WorksheetIndexNumber)).

    VBA statement explanation

    Item: Workbook

    Workbook object representing the Excel workbook containing the worksheet you refer to.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.
    Item: Worksheets(WorksheetIndexNumber)

    The Workbook.Worksheets property returns a Sheets collection representing all worksheets in Workbook.

    WorksheetIndexNumber is the index number of the worksheet you refer to. This index number represents the position of the worksheet in the tab bar of Workbook, from left to right. For these purposes, the count usually:

    • Includes hidden worksheets; but
    • Doesn’t include chart sheets.

    Therefore, Worksheets(WorksheetIndexNumber) returns an individual Worksheet object representing the worksheet whose index number is WorksheetIndexNumber.

    Macro example to refer to worksheet by index number

    The following macro example activates (Activate) the first worksheet (Worksheets(1)) in the workbook where the macro is stored (ThisWorkbook).

    Sub referToWorksheetIndex()
        'source: https://powerspreadsheets.com/
        'activates the first worksheet in this workbook
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'activate first worksheet in this workbook
        ThisWorkbook.Worksheets(1).Activate
    
    End Sub
    

    Effects of executing macro example to refer to worksheet by index number

    The following GIF illustrates the results of executing the macro example.

    When the macro is executed, the active sheet is Sheet5. As expected, Excel activates the first worksheet (Sheet1).

    Results of executing macro that refers to worksheet by index number

    #6: Refer to sheet by name

    VBA code to refer to sheet by name

    To refer to a sheet by its name with VBA, use an object reference with the following structure:

    Workbook.Sheets("SheetName")
    

    Process to refer to sheet by name

    To refer to a sheet by its name with VBA, follow these steps:

    1. Identify the workbook containing the sheet (Workbook).
    2. Identify the sheet by its name (Sheets(“SheetName”)).

    VBA statement explanation

    Item: Workbook

    Workbook object representing the Excel workbook containing the sheet you refer to.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.
    Item: Sheets(“SheetName”)

    The Workbook.Sheets property returns a Sheets collection representing all sheets in Workbook. The Sheets collection can, generally, contain both:

    • Chart objects, where each Chart object represents an individual chart sheet; or
    • Worksheet objects, where each Worksheet object represents an individual worksheet.

    “SheetName” is a string representing the name of the sheet you refer to, as displayed in the sheet’s tab. If you explicitly declare a variable to represent “SheetName”, you can usually declare it as of the String data type.

    Therefore, Sheets(“SheetName”) usually returns an individual Chart or Worksheet object representing the chart sheet or worksheet whose name is SheetName.

    Macro example to refer to sheet by name

    The following macro example activates (Activate) the sheet named “Chart1” (Sheets(“Chart1”)) in the workbook where the macro is stored (ThisWorkbook).

    Sub referToSheetName()
        'source: https://powerspreadsheets.com/
        'activates the sheet named "Chart1" in this workbook
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'activate Chart1 in this workbook
        ThisWorkbook.Sheets("Chart1").Activate
    
    End Sub
    

    Effects of executing macro example to refer to sheet by name

    The following GIF illustrates the results of executing the macro example.

    When the macro is executed, the active sheet is Sheet1. As expected, Excel activates Chart1.

    Results of executing macro that refers to sheet by name

    #7: Refer to worksheet by name

    VBA code to refer to worksheet by name

    To refer to a worksheet by its name with VBA, use an object reference with the following structure:

    Workbook.Worksheets("WorksheetName")
    

    Process to refer to worksheet by name

    To refer to a worksheet by its name with VBA, follow these steps:

    1. Identify the workbook containing the worksheet (Workbook).
    2. Identify the worksheet by its name (Worksheets(“WorksheetName”)).

    VBA statement explanation

    Item: Workbook

    Workbook object representing the Excel workbook containing the worksheet you refer to.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.
    Item: Worksheets(“WorksheetName”)

    The Workbook.Worksheets property returns a Sheets collection representing all worksheets in Workbook.

    “WorksheetName” is a string representing the name of the worksheet you refer to, as displayed in the worksheet’s tab. If you explicitly declare a variable to represent “WorksheetName”, you can usually declare it as of the String data type.

    Therefore, Worksheets(“WorksheetName”) returns an individual Worksheet object representing the worksheet whose name is WorksheetName.

    Macro example to refer to worksheet by name

    The following macro example activates (Activate) the worksheet named “Sheet1” (Worksheets(“Sheet1”)) in the workbook where the macro is stored (ThisWorkbook).

    Sub referToWorksheetName()
        'source: https://powerspreadsheets.com/
        'activates the worksheet named "Sheet1" in this workbook
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'activate Sheet1 in this workbook
        ThisWorkbook.Worksheets("Sheet1").Activate
    
    End Sub
    

    Effects of executing macro example to refer to worksheet by name

    The following GIF illustrates the results of executing the macro example.

    When the macro is executed, the active sheet is Chart1. As expected, Excel activates Sheet1.

    Results of executing macro that refers to worksheet by name

    #8: Refer to sheet by code name

    VBA code to refer to sheet by code name

    To refer to a sheet by its code name with VBA, use the sheet’s code name:

    SheetCodeName
    

    Process to refer to sheet by code name

    To refer to a sheet by its code name with VBA, use the sheet’s code name.

    VBA statement explanation

    Item: SheetCodeName

    SheetCodeName is the code name of the sheet you refer to.

    You can use a sheet’s code name instead of an object reference (such as the ones I explain in other sections of this VBA Tutorial) returning the Chart or Sheet object you refer to.

    Macro example to refer to sheet by code name

    The following macro example activates (Activate) the worksheet whose code name is Sheet1 (Sheet1).

    Sub referToSheetCodeName()
        'source: https://powerspreadsheets.com/
        'activates Sheet1 in this workbook
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'activate Sheet1 in this workbook
        Sheet1.Activate
    
    End Sub
    

    Effects of executing macro example to refer to sheet by code name

    The following GIF illustrates the results of executing the macro example.

    When the macro is executed, the active sheet is Sheet5. As expected, Excel activates Sheet1 (both the name and code name are Sheet1).

    Results of executing macro that refers to sheet by code name

    #9: Refer to several sheets

    VBA code to refer to several sheets

    To refer to several sheets with VBA, use an object reference with the following structure:

    Workbook.Sheets(Array(SheetList))
    

    Process to refer to several sheets

    To refer to several sheets with VBA, follow these steps:

    1. Identify the workbook containing the sheets (Workbook).
    2. Obtain an array with the index numbers or names of the sheets you refer to (Array(SheetList)).
    3. Identify the sheets (Sheets(Array(SheetList))).

    VBA statement explanation

    Item: Workbook

    Workbook object representing the Excel workbook containing the sheets you refer to.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.
    Item: Sheets(Array(SheetList))

    The Workbook.Sheets property returns a Sheets collection representing all sheets in Workbook. The Sheets collection can, generally, contain both:

    • Chart objects, where each Chart object represents an individual chart sheet; or
    • Worksheet objects, where each Worksheet object represents an individual worksheet.

    The Array function (Array(SheetList)) returns a Variant containing an array with the index numbers or names of the sheets you refer to.

    SheetList is the argument list of the Array function, which contains a comma-delimited list of the values you assign to each of the elements in the array returned by Array. When referring to several sheets, you can usually identify the specific objects in the Sheets collection you work with using the appropriate index number or sheet name, as follows:

    • The index number represents the position of a sheet in the tab bar of Workbook, from left to right. For these purposes, the count usually includes:
      • Hidden sheets; and
      • Both chart sheets and worksheets.
    • The sheet name is that displayed in the sheet’s tab.

    Therefore, Sheets(Array(SheetList)) represents the chart sheets or worksheets you specify in SheetList.

    Macro example to refer to several sheets

    The following macro example moves (Move) the first sheet, the sheet named “Sheet3” and the sheet named “Chart1” (Sheets(Array(1, “Sheet3”, “Chart1”))) in the workbook where the macro is stored (ThisWorkbook) to the end of the workbook (After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)).

    Sub referToSeveralSheets()
        'source: https://powerspreadsheets.com/
        'moves several sheets to end of this workbook
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'move the first sheet, "Sheet3" and "Chart1" to end of this workbook
        ThisWorkbook.Sheets(Array(1, "Sheet3", "Chart1")).Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    
    End Sub
    

    Effects of executing macro example to refer to several sheets

    The following GIF illustrates the results of executing the macro example. As expected, Sheet1 (the first sheet), Sheet3 and Chart1 are moved to the end of the workbook.

    Results of executing macro that refers to several sheets

    #10: Refer to several worksheets

    VBA code to refer to several worksheets

    To refer to several worksheets with VBA, use an object reference with the following structure:

    Workbook.Worksheets(Array(WorksheetList))
    

    Process to refer to several worksheets

    To refer to several worksheets with VBA, follow these steps:

    1. Identify the workbook containing the worksheets (Workbook).
    2. Obtain an array with the index numbers or names of the worksheets you refer to (Array(WorksheetList)).
    3. Identify the worksheets (Sheets(Array(WorksheetList))).

    VBA statement explanation

    Item: Workbook

    Workbook object representing the Excel workbook containing the worksheets you refer to.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.
    Item: Worksheets(Array(WorksheetList))

    The Workbook.Worksheets property returns a Sheets collection representing all worksheets in Workbook.

    The Array function (Array(WorksheetList)) returns a Variant containing an array with the index numbers or names of the worksheets you refer to.

    WorksheetList is the argument list of the Array function, which contains a comma-delimited list of the values you assign to each of the elements in the array returned by Array. When referring to several worksheets, you can usually identify the specific objects in the Worksheets collection you work with using the appropriate index number or sheet name, as follows:

    • The index number represents the position of a worksheet in the tab bar of Workbook, from left to right. For these purposes, the count usually:
      • Includes hidden sheets; but
      • Doesn’t include chart sheets.
    • The worksheet name is that displayed in the worksheet’s tab.

    Therefore, Sheets(Array(WorksheetList)) represents the chart sheets or worksheets you specify in WorksheetList.

    Macro example to refer to several worksheets

    The following macro example moves (Move) the worksheets named “Sheet1”, “Sheet2” and “Sheet3” (Worksheets(Array(“Sheet1”, “Sheet2”, “Sheet3”))) in the workbook where the macro is stored (ThisWorkbook) after the last worksheets in the workbook (After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)).

    Sub referToSeveralWorksheets()
        'source: https://powerspreadsheets.com/
        'moves several worksheets after the last worksheet in this workbook
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'move "Sheet1", "Sheet2" and "Sheet3" after the last worksheet in this workbook
        ThisWorkbook.Worksheets(Array("Sheet1", "Sheet2", "Sheet3")).Move After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
    
    End Sub
    

    Effects of executing macro example to refer to several worksheets

    The following GIF illustrates the results of executing the macro example. As expected, Sheet1, Sheet2 and Sheet3 are moved after the last worksheet in the workbook (Sheet5).

    Results of executing macro that refers to several worksheets

    #11: Loop through all sheets in workbook with For Each… Next

    VBA code to loop through all sheets in workbook with For Each… Next

    To loop through all sheets in a workbook with a For Each… Next VBA loop, use a macro with the following statement structure:

    For Each Sheet In Workbook.Sheets
        Statements
    Next Sheet
    

    Process to loop through all sheets in workbook with For Each… Next

    To loop through all sheets in a workbook with a For Each… Next VBA loop, follow these steps:

    1. Identify the workbook containing the sheets (Workbook).
    2. Identify the Sheets collection representing all sheets in Workbook (Sheets).
    3. Use an object variable to iterate through the Sheets in Workbook (Sheet).
    4. Execute a set of Statements for each Sheet in Workbook.

    VBA statement explanation

    Lines #1 and #3: For Each Sheet In Workbook.Sheets | Next Sheet

    Item: For Each … In … | Next …

    The For Each… Next statement repeats the Statements for each Sheet in Workbook.Sheets.

    Item: Sheet

    Object variable used to iterate through the Sheets in Workbook.

    If you explicitly declare an object variable to represent Sheet, you can usually declare it as of the Variant or Object data type.

    Item: Workbook.Sheets

    Sheets collection through which the For Each… Next statement loops through.

    Workbook is a Workbook object representing the Excel workbook containing the sheets you loop through.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.

    The Workbook.Sheets property returns a Sheets collection representing all sheets in Workbook. The Sheets collection can, generally, contain both:

    • Chart objects, where each Chart object represents an individual chart sheet; or
    • Worksheet objects, where each Worksheet object represents an individual worksheet.

    Therefore, For Each… Next loops through all sheets in Workbook.

    Line #2: Statements

    Statements that are executed for each Sheet in Workbook.Sheets.

    Macro example to loop through all sheets in workbook with For Each… Next

    The following macro example:

    1. Loops through each sheet in the workbook where the macro is stored (For Each iSheet In ThisWorkbook.Sheets | Next iSheet).
    2. Displays a message box (MsgBox) with the name (Name) of the current sheet (iSheet).
    Sub loopThroughAllSheetsForEachNext()
        'source: https://powerspreadsheets.com/
        'loops through all sheets in this workbook, and displays a message box with each sheet name
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'declare variable to iterate through all sheets
        Dim iSheet As Object
    
        'loop through all sheets in this workbook
        For Each iSheet In ThisWorkbook.Sheets
    
            'display message box with name of current sheet
            MsgBox iSheet.Name
    
        Next iSheet
    
    End Sub
    

    Effects of executing macro example to loop through all sheets in workbook with For Each… Next

    The following GIF illustrates the results of executing the macro example. As expected, Excel displays a message box with the name of each sheet (both worksheets and chart sheets) in the workbook.

    Results of executing macro that loops through all sheets with For Each... Next

    #12: Loop through all worksheets in workbook with For Each… Next

    VBA code to loop through all worksheets in workbook with For Each… Next

    To loop through all worksheets in a workbook with a For Each… Next VBA loop, use a macro with the following statement structure:

    For Each Worksheet In Workbook.Worksheets
        Statements
    Next Worksheet
    

    Process to loop through all worksheets in workbook with For Each… Next

    To loop through all worksheets in a workbook with a For Each… Next VBA loop, follow these steps:

    1. Identify the workbook containing the worksheets (Workbook).
    2. Identify the Sheets collection representing all worksheets in Workbook (Worksheets).
    3. Use an object variable to iterate through the worksheets in Workbook (Worksheet).
    4. Execute a set of Statements for each worksheet in Workbook.

    VBA statement explanation

    Lines #1 and #3: For Each Worksheet In Workbook.Worksheets | Next Worksheet

    Item: For Each … In … | Next …

    The For Each… Next statement repeats the Statements for each Worksheet in Workbook.Worksheets.

    Item: Worksheet

    Object variable used to iterate through the worksheets in Workbook.

    If you explicitly declare an object variable to represent Worksheet, you can usually declare it as of the Worksheet object data type.

    Item: Workbook.Worksheets

    Sheets collection through which the For Each… Next statement loops through.

    Workbook is a Workbook object representing the Excel workbook containing the worksheets you loop through.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.

    The Workbook.Worksheets property returns a Sheets collection representing all worksheets in Workbook.

    Therefore, For Each… Next loops through all worksheets in Workbook.

    Line #2: Statements

    Statements that are executed for each worksheet in Workbook.

    Macro example to loop through all worksheets in workbook with For Each… Next

    The following macro example:

    1. Loops through each worksheet in the workbook where the macro is stored (For Each iWorksheet In ThisWorkbook.Worksheets | Next iWorksheet).
    2. Displays a message box (MsgBox) with the name (Name) of the current sheet (iSheet).
    Sub loopThroughAllWorksheetsForEachNext()
        'source: https://powerspreadsheets.com/
        'loops through all worksheets in this workbook, and displays a message box with each worksheet name
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'declare variable to iterate through all worksheets
        Dim iWorksheet As Worksheet
    
        'loop through all worksheets in this workbook
        For Each iWorksheet In ThisWorkbook.Worksheets
    
            'display message box with name of current worksheet
            MsgBox iWorksheet.Name
    
        Next iWorksheet
    
    End Sub
    

    Effects of executing macro example to loop through all worksheets in workbook with For Each… Next

    The following GIF illustrates the results of executing the macro example. As expected, Excel displays a message box with the name of each worksheet in the workbook.

    Results of executing macro that loops through all worksheets with For Each... Next

    #13: Loop through all sheets in workbook with For… Next

    VBA code to loop through all sheets in workbook with For… Next

    To loop through all sheets in a workbook with a For… Next VBA loop, use a macro with the following statement structure:

    For Counter = 1 To Workbook.Sheets.Count
        Statements
    Next Counter
    

    Process to loop through all sheets in workbook with For… Next

    To loop through all sheets in a workbook with a For… Next VBA loop, follow these steps:

    1. Identify the workbook containing the sheets (Workbook).
    2. Identify the Sheets collection representing all sheets in Workbook (Sheets).
    3. Count the number of sheets in the Sheets collection (Count).
    4. Execute a set of Statements a number of times equal to the number of Sheets in Workbook (For Counter = 1 To Workbook.Sheets.Count).

    VBA statement explanation

    Lines #1 and #3: For Counter = 1 To Workbook.Sheets.Count | Next Counter

    Item: For … To … | Next …

    The For… Next statement repeats the statements a number of times equal to the number of Sheets in Workbook.

    Item: Counter

    Numeric variable used as loop counter. If you explicitly declare Counter, you can usually declare it as of the Long data type.

    Item: = 1

    Counter’s initial value.

    Item: Workbook.Sheets.Count

    Counter’s end value, which is equal to the number of Sheets in Workbook.

    Workbook is a Workbook object representing the Excel workbook containing the sheets you loop through.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.

    The Workbook.Sheets property returns a Sheets collection representing all sheets in Workbook. The Sheets collection can, generally, contain both:

    • Chart objects, where each Chart object represents an individual chart sheet; or
    • Worksheet objects, where each Worksheet object represents an individual worksheet.

    The Sheets.Count property returns the number of objects in the Sheets collection.

    Therefore:

    • Workbook.Sheets.Count returns the number of Sheets in Workbook; and
    • For… Next loops through all Sheets in Workbook (From Counter = 1 To Workbook.Sheets.Count).

    Line #2: Statements

    Statements that are executed a number of times equal to the number of Sheets in Workbook.

    Macro example to loop through all sheets in workbook with For… Next

    The following macro example:

    1. Loops through each sheet in the workbook where the macro is stored (For iCounter = 1 To ThisWorkbook.Sheets.Count | Next iCounter).
    2. Displays a message box (MsgBox) with the name (Name) of the current sheet (ThisWorkbook.Sheets(iCounter)).
    Sub loopThroughAllSheetsForNext()
        'source: https://powerspreadsheets.com/
        'loops through all sheets in this workbook, and displays a message box each sheet name
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'declare variable to hold loop counter
        Dim iCounter As Long
    
        'loop through all sheets in this workbook
        For iCounter = 1 To ThisWorkbook.Sheets.Count
    
            'display message box with name of current sheet
            MsgBox ThisWorkbook.Sheets(iCounter).Name
    
        Next iCounter
    
    End Sub
    

    Effects of executing macro example to loop through all sheets in workbook with For… Next

    The following GIF illustrates the results of executing the macro example. As expected, Excel displays a message box with the name of each sheet (both worksheets and chart sheets) in the workbook.

    Results of executing macro that loops through all sheets with For... Next

    #14: Loop through all worksheets in workbook with For… Next

    VBA code to loop through all worksheets in workbook with For… Next

    To loop through all worksheets in a workbook with a For… Next VBA loop, use a macro with the following statement structure:

    For Counter = 1 To Workbook.Worksheets.Count
        Statements
    Next Counter
    

    Process to loop through all worksheets in workbook with For… Next

    To loop through all worksheets in a workbook with a For… Next VBA loop, follow these steps:

    1. Identify the workbook containing the worksheets (Workbook).
    2. Identify the Sheets collection representing all worksheets in Workbook (Worksheets).
    3. Count the number of worksheets in the Sheets collection (Count).
    4. Execute a set of Statements a number of times equal to the number of worksheets in Workbook (For Counter = 1 To Workbook.Worksheets.Count).

    VBA statement explanation

    Lines #1 and #3: For Counter = 1 To Workbook.Worksheets.Count | Next Counter

    Item: For … To … | Next …

    The For… Next statement repeats the statements a number of times equal to the number of worksheets in Workbook.

    Item: Counter

    Numeric variable used as loop counter. If you explicitly declare Counter, you can usually declare it as of the Long data type.

    Item: = 1

    Counter’s initial value.

    Item: Workbook.Worksheets.Count

    Counter’s end value, which is equal to the number of worksheets in Workbook.

    Workbook is a Workbook object representing the Excel workbook containing the worksheets you loop through.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.

    The Workbook.Worksheets property returns a Sheets collection representing all worksheets in Workbook.

    The Worksheets.Count property returns the number of objects in the Sheets collection returned by the Worksheets property.

    Therefore:

    • Workbook.Worksheets.Count returns the number of worksheets in Workbook; and
    • For… Next loops through all worksheets in Workbook (From Counter = 1 to Workbook.Worksheets.Count).

    Line #2: Statements

    Statements that are executed a number of times equal to the number of worksheets in Workbook.

    Macro example to loop through all worksheets in workbook with For… Next

    The following macro example:

    1. Loops through each worksheet in the workbook where the macro is stored (For iCounter = 1 To ThisWorkbook.Worksheets.Count | Next iCounter).
    2. Displays a message box (MsgBox) with the name (Name) of the current worksheet (ThisWorkbook.Worksheets(iCounter)).
    Sub loopThroughAllWorksheetsForNext()
        'source: https://powerspreadsheets.com/
        'loops through all worksheets in this workbook, and displays a message box with each worksheet name
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'declare variable to hold loop counter
        Dim iCounter As Long
    
        'loop through all worksheets in this workbook
        For iCounter = 1 To ThisWorkbook.Worksheets.Count
    
            'display message box with name of current worksheet
            MsgBox ThisWorkbook.Worksheets(iCounter).Name
    
        Next iCounter
    
    End Sub
    

    Effects of executing macro example to loop through all worksheets in workbook with For… Next

    The following GIF illustrates the results of executing the macro example. As expected, Excel displays a message box with the name of each worksheet in the workbook.

    Results of executing macro that loops through all worksheets with For... Next

    #15: Loop through all sheets in reverse order

    VBA code to loop through all sheets in reverse order

    To loop through all sheets in a workbook in reverse order with VBA, use a macro with the following statement structure:

    For Counter = Workbook.Sheets.Count To 1 Step -1
        Statements
    Next Counter
    

    Process to loop through all sheets in reverse order

    To loop through all sheets in a workbook in reverse order with VBA, follow these steps:

    1. Identify the workbook containing the sheets (Workbook).
    2. Identify the Sheets collection representing all sheets in Workbook (Sheets).
    3. Count the number of sheets in the Sheets collection (Count).
    4. Execute a set of Statements a number of times equal to the number of Sheets in Workbook while clarifying that the looping occurs in reverse order (For Counter = Workbook.Sheets.Count To 1 Step -1).

    VBA statement explanation

    Lines #1 and #3: For Counter = Workbook.Sheets.Count To 1 Step -1 | Next Counter

    Item: For … To …. | Next …

    The For… Next statement repeats the statements a number of times equal to the number of worksheets in Workbook.

    Item: Counter

    Numeric variable used as loop counter. If you explicitly declare Counter, you can usually declare it as of the Long data type.

    Item: = Workbook.Sheets.Count

    Counter’s initial value, which is equal to the number of Sheets in Workbook.

    Workbook is a Workbook object representing the Excel workbook containing the sheets you loop through.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.

    The Workbook.Sheets property returns a Sheets collection representing all sheets in Workbook. The Sheets collection can, generally, contain both:

    • Chart objects, where each Chart object represents an individual chart sheet; or
    • Worksheet objects, where each Worksheet object represents an individual worksheet.

    The Sheets.Count property returns the number of objects in the Sheets collection. Therefore, Workbook.Sheets.Count returns the number of Sheets in Workbook.

    Item: 1

    Counter’s end value.

    Item: Step -1

    Amount Counter changes each loop iteration.

    When looping through all sheets in reverse order:

    • Counter’s initial value is equal to the number of Sheets in Workbook (Workbook.Sheets.Count).
    • Counter’s end value is 1.
    • Counter decreases by 1 each iteration.

    Therefore, For… Next loops through all Sheets in Workbook in reverse order (From Counter = Workbook.Sheets.Count To 1 Step -1).

    Line #2: Statements

    Statements that are executed a number of times equal to the number of Sheets in Workbook.

    Macro example to loop through all sheets in reverse order

    The following macro example:

    1. Loops through each sheet in the workbook where the macro is stored in reverse order (For iCounter = ThisWorkbook.Sheets.Count To 1 Step -1 | Next iCounter).
    2. Displays a message box (MsgBox) with the name (Name) of the current sheet (ThisWorkbook.Sheets(iCounter)).
    Sub loopThroughAllSheetsBackwards()
        'source: https://powerspreadsheets.com/
        'loops through all sheets in this workbook (in reverse order), and displays a message box with each sheet name
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'declare variable to hold loop counter
        Dim iCounter As Long
    
        'loop through all sheets in this workbook (in reverse order)
        For iCounter = ThisWorkbook.Sheets.Count To 1 Step -1
    
            'display message box with name of current sheet
            MsgBox ThisWorkbook.Sheets(iCounter).Name
    
        Next iCounter
    
    End Sub
    

    Effects of executing macro example to loop through all sheets in reverse order

    The following GIF illustrates the results of executing the macro example. As expected, Excel displays a message box with the name of each sheet (both worksheets and chart sheets) in the workbook in reverse order.

    Results of executing macro that loops through all sheets in reverse order

    #16: Loop through all worksheets in reverse order

    VBA code to loop through all worksheets in reverse order

    To loop through all worksheets in a workbook in reverse order with VBA, use a macro with the following statement structure:

    For Counter = Workbook.Worksheets.Count To 1 Step -1
        Statements
    Next Counter
    

    Process to loop through all worksheets in reverse order

    To loop through all worksheets in a workbook in reverse order with VBA, follow these steps:

    1. Identify the workbook containing the worksheets (Workbook).
    2. Identify the Sheets collection representing all worksheets in Workbook (Worksheets).
    3. Count the number of worksheets in the Sheets collection (Count).
    4. Execute a set of Statements a number of times equal to the number of worksheets in Workbook while clarifying that the looping occurs in reverse order (For Counter = Workbook.Worksheets.Count To 1 Step -1).

    VBA statement explanation

    Lines #1 and #3: For Counter = ThisWorkbook.Worksheets.Count To 1 Step -1 | Next Counter

    Item: For … To … | Next …

    The For… Next statement repeats the statements a number of times equal to the number of worksheets in Workbook.

    Item: Counter

    Numeric variable used as loop counter. If you explicitly declare Counter, you can usually declare it as of the Long data type.

    Item: = Workbook.Worksheets.Count

    Counter’s initial value, which is equal to the number of worksheets in Workbook.

    Workbook is a Workbook object representing the Excel workbook containing the worksheets you loop through.

    You can usually work with one of the following properties to refer to this Workbook object:

    • Application.ActiveWorkbook.
    • Application.ThisWorkbook.
    • Application.Workbooks.

    The Workbook.Worksheets property returns a Sheets collection representing all worksheets in Workbook.

    The Worksheets.Count property returns the number of objects in the Sheets collection returned by the Worksheets property. Therefore, Workbook.Worksheets.Count returns the number of worksheets in Workbook.

    Item: 1

    Counter’s end value.

    Item: Step -1

    Amount Counter changes each loop iteration.

    When looping through all worksheets in reverse order:

    • Counter’s initial value is equal to the number of worksheets in Workbook (Workbook.Worksheets.Count).
    • Counter’s end value is 1.
    • Counter decreases by 1 each iteration.

    Therefore, For… Next loops through all worksheets in Workbook in reverse order (From Counter = Workbook.Worksheets.Count To 1 Step -1).

    Line #2: Statements

    Statements that are executed a number of times equal to the number of worksheets in Workbook.

    Macro example to loop through all worksheets in reverse order

    The following macro example:

    1. Loops through each worksheet in the workbook where the macro is stored in reverse order (For iCounter = ThisWorkbook.Worksheets.Count To 1 Step -1 | Next iCounter).
    2. Displays a message box (MsgBox) with the name (Name) of the current worksheet (ThisWorkbook.Worksheets(iCounter)).
    Sub loopThroughAllWorksheetsBackwards()
        'source: https://powerspreadsheets.com/
        'loops through all worksheets in this workbook (in reverse order), and displays a message box with each worksheet name
        'for further information: https://powerspreadsheets.com/excel-vba-sheets-worksheets/
    
        'declare variable to hold loop counter
        Dim iCounter As Long
    
        'loop through all worksheets in this workbook (in reverse order)
        For iCounter = ThisWorkbook.Worksheets.Count To 1 Step -1
    
            'display message box with name of current worksheet
            MsgBox ThisWorkbook.Worksheets(iCounter).Name
    
        Next iCounter
    
    End Sub
    

    Effects of executing macro example to loop through all worksheets in reverse order

    The following GIF illustrates the results of executing the macro example. As expected, Excel displays a message box with the name of each worksheet in the workbook in reverse order.

    Results of executing macro that loops through all worksheets in reverse order

    Learn more about working with sheets and worksheets in VBA

    You can get immediate free access to the example workbook that accompanies this VBA Tutorial by subscribing to the Power Spreadsheets Newsletter.

    Alternatively, you can access all the files that accompany my Tutorials here.

    The following Books are referenced in this Excel VBA sheets and worksheets Tutorial:

    • Alexander, Michael (2015). Excel Macros for Dummies. Hoboken, NJ: John Wiley & Sons Inc.
    • Alexander, Michael and Kusleika, Dick (2016). Excel 2016 Power Programming with VBA. Indianapolis, IN: John Wiley & Sons Inc.
    • Jelen, Bill and Syrstad, Tracy (2015). Excel 2016 VBA and Macros. United States of America: Pearson Education, Inc.
    • Walkenbach, John (2015). Excel VBA Programming for Dummies. Hoboken, NJ: John Wiley & Sons Inc.

    Понравилась статья? Поделить с друзьями:
  • Excel миф and or function
  • Excel минуты с дробью
  • Excel минут в значении
  • Excel минус перед формулой
  • Excel минус один месяц