How to reorder sheets in an Excel workbook using VBA?

Reordering sheets in an Excel workbook using VBA can be done by manipulating the `Sheets` collection. Here is a step-by-step guide with some example code:

Steps to Reorder Sheets

  • Open the Workbook: Make sure the workbook you’re going to work with is open.
  • Access the VBA Editor:
    • Press `ALT` + `F11` to open the VBA editor.
    • In the VBA editor, you may need to insert a new module where you will write your script.
  • Write the VBA Code:
    • You can use the `Move` method of the `Sheets` collection to reorder the sheets.

Example Code

Here’s an example of VBA code to reorder sheets in a specific way:

Sub ReorderSheets()
    Dim wb As Workbook
    Set wb = ThisWorkbook ' You could also use Workbooks("YourWorkbookName.xlsx")
    
    ' Example: Move Sheet3 to be before Sheet1
    wb.Sheets("Sheet3").Move Before:=wb.Sheets("Sheet1")
    
    ' Example: Move Sheet2 to be the last sheet
    wb.Sheets("Sheet2").Move After:=wb.Sheets(wb.Sheets.Count)
End Sub

Explanation of the Code

  • `wb As Workbook`: Declares a workbook variable.
  • `Set wb = ThisWorkbook`: Sets the variable `wb` to refer to the workbook where the VBA code is being executed. You can replace `ThisWorkbook` with `Workbooks(“YourWorkbookName.xlsx”)` if you want to refer to another specific workbook.
  • `Move Before` and `Move After`:
    • The `Move` method is used to reposition sheets. You specify where to move the sheet using `Before` or `After` parameters, followed by a reference to another sheet.
    • `Before:=wb.Sheets(“Sheet1”)` moves the specified sheet before “Sheet1”.
    • `After:=wb.Sheets(wb.Sheets.Count)` moves the specified sheet to the last position in the workbook.

Custom Reordering

To reorder sheets according to a custom order, you may need to write additional logic, perhaps using a loop to move each sheet in sequence.

Sub CustomReorderSheets()
    Dim wb As Workbook
    Set wb = ThisWorkbook

    ' Define the desired sheet order
    Dim sheetOrder() As Variant
    sheetOrder = Array("Sheet3", "Sheet1", "Sheet2")

    Dim i As Integer
    For i = LBound(sheetOrder) To UBound(sheetOrder)
        wb.Sheets(sheetOrder(i)).Move Before:=wb.Sheets(i + 1)
    Next i
End Sub

This script will reorder the sheets according to the specified order in the `sheetOrder` array.

Running the Code

To execute these scripts:

  • Open the VBA editor.
  • Insert a new module through `Insert` > `Module`.
  • Copy and paste the code into the module.
  • Run the macro using `F5` or by selecting `Run` > `Run Sub/UserForm`.

Remember to save your workbook before running the VBA code, especially if it involves moving and potentially altering the structure of your sheets, to prevent any data loss.

Unlock Your Potential

Excel

Basic - Advanced

Access

Access Basic - Advanced

Power BI

Power BI Basic - Advanced

Help us grow the project