Loop to hide sheets

excel vba hide multiple sheets
excel vba hide multiple sheets based on cell value
how to hide and unhide sheets in excel with vba
how to hide and unhide sheets in excel with vba button
excel vba hide all sheets except one
vba hide sheet
vba unhide all sheets
how to delete hidden sheets in excel

Currently, I am using this VBA code to hide all sheets in my spreadsheet:

Sub HideSheets()
    Sheet1.Visible = False
    Sheet2.Visible = False
    Sheet3.Visible = False
    Sheet4.Visible = True
End Sub

This code runs perfectly.

However, since I have more than just 4 sheets in my original file I would like to have a solution with a loop. Therefore, I tried to go with the following formula:

Sub LoopHideSheets()
    Dim b As Worksheet
    For Each b In Worksheets
        b.Select
        ActiveWindow.Visible = False
    Next b
End Sub

Once I run this code my Excel file crashes. I guess the reason for this is that at least one file needs to stay visible. Do you know what I have to change my loop code so all sheets getting hidden instead of Sheet4?

Sub LoopHideSheets()
    Dim b As Worksheet
    For Each b In Worksheets
        If b.Name <> "DontHide" Then    'whatever the sheet name is to not hide
            b.Visible = False
        End If
    Next b
End Sub

How to hide or unhide a specific worksheet based on cell value in , How do I hide or unhide a specific worksheet based on cell value in another sheet? In Step 3, the macro simply compares the active sheet name to the sheet that is currently being looped. If the sheet names are different, the macro hides the sheet in Step 4. In Step 5, you loop back to get the next sheet. After all sheets are evaluated, the macro ends.

This will hide every sheet that is not named "Sheet4" - but be careful, you need to ensure Sheet4 exists or you will get an error.

Sub LoopHideSheets()

Dim b As Worksheet

For Each b In Worksheets
    If b.Name <> "Sheet4" Then b.Visible = False
Next b

End Sub

You might want to hide all sheets other than the one currently active..?

    If b.Name <> ActiveSheet.Name Then b.Visible = False

However, you may need to hide all but 1 (hey, I've no idea why) as per other answers. To do this properly, you need to count visible sheets and only deal with those:

Sub LoopHideSheets()

Dim b As Worksheet, shtcnt As Long

'Count up all visible sheets
For Each b In Worksheets
    If b.Visible = True Then shtcnt = shtcnt + 1
Next b

'Hide each visible sheet until only 1 is left
For Each b In Worksheets
    If b.Visible = True And shtcnt > 1 Then
    shtcnt = shtcnt - 1
    b.Visible = False
    End If
Next b

End Sub

How to Unhide and Rehide Multiple Sheets in Excel, How do I hide all worksheets except one in VBA? Sub AllSheetsHidden() 'This code does not actually hide all sheets, as there must be 'at least one visible sheet. The code will hide all except the last sheet. 'Create a variable to hold the worksheet Dim Ws As Worksheet 'Loop through each worksheet in the Worksheets collection of the 'active workbook and set it to visible.

Alternatively you can catch the error with error handling

Sub HideAllSheets()
    Dim b As Worksheet
    For Each b In Worksheets
        On Error Resume Next 'disable error reporting
        b.Visible = False
        If Err.Number = 1004 Then
            MsgBox "The last sheet must stay visible" 'remove if you don't want a message
            Exit Sub
        End If
        On Error GoTo 0 're-enable error handling. Don't forget this line!
    Next b
End Sub

How to unhide multiple sheets & make sheets invisible, The Tab Control Add-in​​ A more advanced option is to create a sheet with a list of the sheet names to be hidden, then have the macro loop through the list on that sheet. Button to Hide/Unhide Sheets. Lastly to learn how to Unhide Sheets in Excel we will sum up what we have learned and make a simple VBA UserForm to be able to quick manage visibily across the entire list of Excel Worksheets. Create the UserForm. First you need to create a VBA UserForm with a VBA ListBox and a VBA CommandButton:

If You always want to have last sheet visible you could use this

Sub HideSheets()

Dim i As Long

With ThisWorkbook
    For i = 1 To .Sheets.Count - 1
        .Sheets(i).Visible = False
    Next i
End With

End Sub

An Excel Macro to Hide All but the Active Worksheet, The code will hide all except the last sheet. 'Create a variable to hold the worksheet Dim Ws As Worksheet 'Loop through each worksheet in the  on sheet named “home page” im looking to enter items based on command button that unhides and shows Item 1 sheet first (with all others still hidden), then when command button clicked it needs to hide that sheet 1 and show sheet 2 only and then loop through 1 at a time with that same command button selection up to the quantity amount selected in “D19” of (“Customer Details & Contract $”). eg if 50 quantity the code loops only up to 50 and not through the whole 100.

VBA Hide (or Unhide) a Worksheet, However, you can hide all but the active sheet. How the macro works. The macro here loops through the worksheets and matches each worksheet name to the  How to hide all worksheets except the specified or active one in Excel? For keeping workbook clean and easy to navigate, you may want to hide all worksheets except current active one in Excel. In this article, we will show you two methods of hiding all worksheets but specified or active one in Excel.

3 Methods to Unhide All Sheets in Excel (& how to hide), Or set sheets to Very Hidden using the Worksheet Visible property. This procedure will unhide all worksheets in a workbook, using a For Each Loop:  VBA hide unhide worksheets example macro macro helps when we have many worksheets in a workbook and you want to show only specific worksheets to the user. You can hide unhide worksheets using Excel VBA. For Example you may be developing a tracker for different departments in an organization.

How To Automate Sorting, Hiding, Unhiding and Listing Your Sheets , Hiding sheets in Excel is easy, but unhiding all sheets is not as simple. This macro will loop Duration: 6:43 Posted: Jan 18, 2019 The code below loops through all worksheets in the workbook, and activates each worksheet. The code uses the “for each” loop to loop through the wrosheets contained inside ThisWorkbook. After it is done looping through all the worksheets, it reactivates the original worksheet that was active before running the macro.

Comments
  • Replace the 2 lines within your For Each loop with If b.Name <> "Sheet4" Then b.Visible = False
  • Because you're trying to hide ALL the sheets, leaving nothing displayed. Excel will be much happier if you leave at least one sheet visible.
  • use for instead of for each and use a counter
  • @Peh: Thanks for the code. I put it in my code and it works. The only issue I have is that I would prefer to use the internal sheet name in the VBA object catalogue instead of the sheet name given by the user. Therefore, I tried to use b.worksheets <> Sheet4 then b.Visible but I could not make it work. Do you have any idea to solve this?
  • @Michi use b.CodeName instead of b.Name.
  • Hi Davesexcel, your code works very nice. The only issue I still have is that instead of a sheet name (in your case "DontHide") I always use the internal sheet name as reference, therefore, I would like to put Sheet1 instead of the name of the sheet. However, so far I could not make it work using the internal sheet name.
  • Use b.CodeName instead of b.Name to check the VBA internal name instead of the public sheet name on the tab bar.
  • @Peh: Other question regarding the formats in your comment. How do you get the gray code format? I tried to use Ctrl+K as I do in my question but could not make it work.
  • Use the key below the esc key.. or above the tab key
  • This will fail if the last sheet is already hidden (eg by a previous code or manually) before you start this procedure.
  • True. Adding .Sheets(.Sheets.Count).Visible = True just before loop should help.