Return to VBA Code Examples
In this Article
- Hide Sheet in VBA
- Unhide Sheet
- Very Hidden Sheets
- Unhide Very Hidden Sheets
- Hide / Unhide Sheets in the VBA Editor
- Hide All Worksheet Tabs
- Hide / Unhide Sheets in Protected Workbook
- Unhide All Sheets
- VBA Coding Made Easy
This tutorial will teach you how to hide and unhide Worksheets with VBA.
Hide Sheet in VBA
To hide a Sheet in VBA, use the worksheet Visible property.
Either set the Visible property to FALSE:
Worksheets("Sheet1").visible = False
or set the Visible property to xlSheetHidden:
Worksheets("Sheet1").visible = xlSheetHidden
This is the same as if the user right-clicked the worksheet tab and selected “hide”.
Unhide Sheet
To unhide a Sheet in VBA, use the worksheet Visible property:
Worksheets("Sheet1").Visible = True
or
Worksheets("Sheet1").Visible = xlSheetVisible
Hidden Sheets can be seen by right-clicking in the Worksheet tab area:
Very Hidden Sheets
The Sheet Visible property has a third option: xlSheetVeryHidden:
Worksheets("Sheet1").Visible = xlSheetVeryHidden
Very hidden Sheets are hidden when right-clicking in the Worksheet tab area:
This code will prevent the spreadsheet user from seeing the Worksheet tab at the bottom of the screen. It also hides the Worksheet from the user when they right-click the tabs at the bottom. The only way to see that the Worksheet exists (or unhide the Worksheet) is by opening the Visual Basic Editor.
Unhide Very Hidden Sheets
Very hidden Worksheets are made visible just like regular hidden Worksheets:
Worksheets("Sheet1").Visible = True
or
Worksheets("Sheet1").Visible = xlSheetVisible
Hide / Unhide Sheets in the VBA Editor
You can also toggle the Worksheet Visible property within the VBA Editor:
Hide All Worksheet Tabs
You might also want to hide the Worksheet Tab area altogether to prevent the user from navigating to different worksheets. Learn more about hiding worksheet tabs.
Hide / Unhide Sheets in Protected Workbook
Your workbook must be unprotected before you can hide or unhide worksheets. To unprotect your workbook structure use the following code:
ActiveWorkbook.Unprotect
If your workbook structure is password-protected you must do this instead:
ThisWorkbook.Unprotect "password"
Unhide All Sheets
This procedure will unhide all worksheets in a workbook, using a For Each Loop:
Sub Unhide_All_Sheets()
Dim ws As Worksheet
ActiveWorkbook.Unprotect
For Each ws In Worksheets
ws.Visible = xlSheetVisible
Next
End Sub
Notice that we first unprotect the workbook, just in case it was password protected.
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!
Learn More!
I have an Excel spreadsheet with three sheets. One of the sheets contains formulas for one of the other sheets.
Is there a programmatic way to hide the sheet which contains these formulas?
Teamothy
1,9903 gold badges15 silver badges24 bronze badges
asked May 12, 2009 at 15:09
0
To hide from the UI, use Format > Sheet > Hide
To hide programatically, use the Visible
property of the Worksheet
object. If you do it programatically, you can set the sheet as «very hidden», which means it cannot be unhidden through the UI.
ActiveWorkbook.Sheets("Name").Visible = xlSheetVeryHidden
' or xlSheetHidden or xlSheetVisible
You can also set the Visible property through the properties pane for the worksheet in the VBA IDE (ALT+F11).
answered May 12, 2009 at 15:16
TmdeanTmdean
9,03843 silver badges51 bronze badges
2
You can do this programmatically using a VBA macro. You can make the sheet hidden or very hidden:
Sub HideSheet()
Dim sheet As Worksheet
Set sheet = ActiveSheet
' this hides the sheet but users will be able
' to unhide it using the Excel UI
sheet.Visible = xlSheetHidden
' this hides the sheet so that it can only be made visible using VBA
sheet.Visible = xlSheetVeryHidden
End Sub
answered May 12, 2009 at 15:17
Dirk VollmarDirk Vollmar
171k53 gold badges256 silver badges313 bronze badges
Just wanted to add a little more detail to the answers given. You can also use
sheet.Visible = False
to hide and
sheet.Visible = True
to unhide.
Source
trejder
17k27 gold badges123 silver badges215 bronze badges
answered Apr 23, 2013 at 18:52
2
This can be done in a single line, as long as the worksheet is active:
ActiveSheet.Visible = xlSheetHidden
However, you may not want to do this, especially if you use any «select» operations or you use any more ActiveSheet operations.
answered May 20, 2009 at 15:20
Andrew ScagnelliAndrew Scagnelli
1,5844 gold badges18 silver badges26 bronze badges
I would like to answer your question, as there are various methods — here I’ll talk about the code that is widely used.
So, for hiding the sheet:
Sub try()
Worksheets("Sheet1").Visible = xlSheetHidden
End Sub
There are other methods also if you want to learn all Methods Click here
answered Feb 15, 2020 at 10:16
0
Hide UnHide Worksheets in Excel VBA
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. Like HR, Admin, Finance, etc…, all of these may have same knind of data but the data (numbers) may vary from one department to another.
While sending the workbook to a specific department, you need to show the worksheets related to that particular department. And have hide all other worksheets, it may be confidential or not useful to that department.
VBA hide unhide worksheets – Solution
We can use Visible=FALSE to Hide a Worksheet, Visible=TRUE to UnHide a Worksheet
Hide UnHide Worksheets in Excel VBA – An Example to Hide the Worksheets
The following example will show you how to hide and unhide the worksheet using Excel VBA.
Code:
Sub sbHideASheet() Sheet2.Visible = False 'OR You can mention the Sheet name Sheets("Sheet2").Visible = True End Sub
Observations:
When you hide by setting the Visible property is FALSE, it will be available for user to Unhide the Worksheets. User can right click on the Sheet tabs and Unhide the Worksheets as shown below.
How Hide the Worksheets, so that user can not unhide the Worksheets?:
Yes, we can hide the worksheets completely by Changing the visual property. You can set the visual property to hide the worksheets, so that user can not unhide it by right click on the Sheets Tabs. You can see the different options of hiding and unhiding the sheets in the following screen-shot.
Code:
Sub sbHideASheet() Sheet2.Visible = 2 'to very hide the worksheet 'OR You can mention the Sheet name Sheets("Sheet2").Visible = True End Sub
Once you are done with this, you can protect the VBA project by setting the password to open it. So that user can not code it to open the Worksheets.
Advanced Hide Options
When we hide worksheets using, still user can right click on tabs and un-hide the worksheets. For example, following example will hide the worksheet and user can un hide the sheets on right click on sheet tabs:
Sub sbHideSheet() Sheets("SheetName").Visible = False 'OR Sheets("SheetName").Visible = xlSheetHidden End Sub
What if you do not want to permit users to un-hide worksheet, you can set the Visible property of worksheet to xlSheetVeryHidden and lock the VBA code. so that user can not un-hide the worksheet. The below example will hide the sheet and user can not see it in un hide worksheet dialog list.
Sub sbVeryHiddenSheet() Sheets("SheetName").Visible = xlSheetVeryHidden End Sub
Hide Unhide sheets based on Condition (Selection Change) And Button Click
The below example file helps you to understand how to hide or unhide the sheets based on a codition (Range/Selection change), I have also shown another approach using simple buttons.
Download the Example VBA file here and explore your self.
https://analysistabs.com/hideunhide-sheets-based-on-condition/
A Powerful & Multi-purpose Templates for project management. Now seamlessly manage your projects, tasks, meetings, presentations, teams, customers, stakeholders and time. This page describes all the amazing new features and options that come with our premium templates.
Save Up to 85% LIMITED TIME OFFER
All-in-One Pack
120+ Project Management Templates
Essential Pack
50+ Project Management Templates
Excel Pack
50+ Excel PM Templates
PowerPoint Pack
50+ Excel PM Templates
MS Word Pack
25+ Word PM Templates
Ultimate Project Management Template
Ultimate Resource Management Template
Project Portfolio Management Templates
Related Posts
-
- VBA hide unhide worksheets – Solution
- Hide UnHide Worksheets in Excel VBA – An Example to Hide the Worksheets
- Advanced Hide Options
- Hide Unhide sheets based on Condition (Selection Change) And Button Click
VBA Reference
Effortlessly
Manage Your Projects
120+ Project Management Templates
Seamlessly manage your projects with our powerful & multi-purpose templates for project management.
120+ PM Templates Includes:
37 Comments
-
Ramesh
March 24, 2015 at 7:45 PM — ReplyI would like to use the both Hide and Unhide in one VBA, as I would like to hide the active/current sheet and unhide the specified sheet.
please advise me how to code it…
thanks a Tons in advance:-)
-
PNRao
March 24, 2015 at 9:56 PM — ReplyHi Ramesh,
How do you want to hide or unhide the sheets. The below code will unhide Sheet2 AND hide Sheet1.
Sub sbHidAndUnHideSheets() Sheets("Sheet2").Visible = True 'To unhide the Sheet2 Sheets("Sheet1").Visible = False 'To hide the Sheet1 End Sub
Hope this helps-Thanks-PNRao!
-
Ramesh
March 29, 2015 at 12:12 PM — ReplyThanks Rao sir,
Its perfectly working, upon the un hiding sheet 2 how to make a sheet 2 as active sheet as I have multiple sheets, currently once the code run the display sheet showing something like sheet 4/5.
kindly advise.
-
Ramesh
March 29, 2015 at 12:16 PM — ReplyFurthermore,the hiding option should be “xlSheetVeryHidden”, kindly assist me.
-
Nicola
March 30, 2015 at 4:54 PM — ReplyHow can you hide or unhide certain tabs for specific users? I was attempting the following code but the uname2 section has a syntax error.
UserNameWindows() As String
unamewindows = Environ(“Username”)
Uname2 = StrConv(unamewindows, vbUpperCase)If Uname2 = “PERSON1” _
Or Uname2 = “PERSON2” _
Or Uname2 = “PERSON3” _Sheets(“Copy Data”).Visible = True
End If
-
PNRao
April 1, 2015 at 7:21 PM — ReplyYou use the Activate method of worksheet:
Sheets("SheetName").Activate
Thanks-PNRao!
-
PNRao
April 1, 2015 at 7:24 PM — ReplyYou use the Activate method of worksheet:
Sheets("SheetName").Visible = xlSheetVeryHidden
Thanks-PNRao!
-
PNRao
April 1, 2015 at 7:28 PM — ReplyYou are missing the ‘Then’ keyword: Please use the below code
Sub SbShow_Or_Hide_The_Tabs_To_Specific_Users() Dim UserNameWindows As String unamewindows = Environ("Username") Uname2 = StrConv(unamewindows, vbUpperCase) If Uname2 = "PERSON1" _ Or Uname2 = "PERSON2" _ Or Uname2 = "PERSON3" Then Sheets("Copy Data").Visible = True End If End Sub
Thanks-PNRao!
-
yuko
July 2, 2015 at 9:58 AM — ReplyHi.
I’m used this code:
Sub sbHidAndUnHideSheets()
Sheets(“Sheet1”).Visible = False ‘ To hide the Sheet1
Sheets(“Sheet2”).Visible = True ‘To unhide the Sheet2
End SubEdit for my work:
Sub sbHidAndUnHideSheets()
Sheets(“Khuon”).Visible = False
Sheets(“Duc”).Visible = True
End SubShortcut key: Ctrl + H for use this. but it isn’t work. Error with yellow highlight: Sheets(“Khuon”).Visible = False
Pls help me!
-
PNRao
July 2, 2015 at 10:16 AM — ReplyHi Yuko,
Use the below code when you have only two sheets in your workbook. We can not hide all worksheets in a workbook, at least on worksheet should be visible. Just swap the statements to avoid the issue:
Sub sbHidAndUnHideSheets1() Sheets("Sheet2").Visible = True 'To unhide the Sheet2 Sheets("Sheet1").Visible = False 'To hide the Sheet1 End Sub 'Edit for my work: Sub sbHidAndUnHideSheets() Sheets("Duc").Visible = True Sheets("Khuon").Visible = False End Sub
Thanks-PNRao!
-
yuko
July 2, 2015 at 2:17 PM — ReplyHi PNRao!
Thank you so much! -
PNRao
July 2, 2015 at 4:50 PM — Reply -
David
July 18, 2015 at 1:50 AM — ReplyHi,
This has been really useful, want can I do if I want to have a worksheet with a dropdown menu where I could select the tab I want to be unhidden, and the rest of them hidden?Thanks
David
-
PNRao
July 18, 2015 at 2:09 PM — ReplyHi David,
Yes, this is possible. You can fill the drop down while opening the workbookPlace a Combo Box in the required worksheet (Example: in Sheet1). And place the below code in ThisWorkbook Code module:
Private Sub Workbook_Open() Sheets("Sheet1").ComboBox1.Clear For Each sht In ThisWorkbook.Sheets Sheets("Sheet1").ComboBox1.AddItem sht.Name Next End Sub
And place the below code in the Worksheet module (i.e: Sheet1 Code module):
Private Sub ComboBox1_Change() If Not ComboBox1.ListIndex >= 0 Then Exit Sub 'Unhide/show the required sheet Sheets(ComboBox1.Value).Visible = True 'hide all other sheets For Each sht In ThisWorkbook.Sheets If sht.Name <> ComboBox1.Value Then sht.Visible = False Next 'You may want Sheet1 should be visible always Sheets("Sheet1").Visible = True Sheets("Sheet1").Activate End Sub
This will make you to select required worksheet visible and hide all other sheets.
Thanks-PNRao!
-
David
July 21, 2015 at 12:53 AM — ReplyThanks PNRao!
I have ben tying with this but can’t get it wo work for me… I am not using a private sub so I can just run it anytime with a specific command.
The message I am getting is that there is an Object Required. My ComboBox y also named ComboBox1.
Also if my sheets are already named, do I need the first part of code you sent?Thanks a lot!
-
PNRao
July 23, 2015 at 1:29 PM — ReplyHi David,
Yes, you need to both the codes.The first code will goes to ThisWorkbook Module:(go to Project explorer and and double click on the ThisWorkbook class module and paste the code)
And the second code goes to your worksheet Module:(go to Project explorer and and double click on the required Sheet class module and paste the code)
Hope this helps!
Thanks-PNRao! -
Dan Bailey
August 24, 2015 at 8:39 PM — ReplyI working on an application with 6 sheets that interact with each other via code. I do not want the users to be able to see the sheet tabs BUT, I need to be able to interact with them. I’m using Excel 2013 (xlsm file) and went into the File- Options-Advanced and deselected “Sheet Tabs visible”. The tabs are hidden and I can still access the sheet. However, after I save and close the workbook and then reopen it the sheet tabs are there again. I am at a lose as to why the sheet tab return. Is there some VBA code that can duplicate what the Options-Advance setting should keep in the workbook but does not.? I would be so grateful if someone could help me out on this one.
-
Dan Bailey
August 24, 2015 at 9:34 PM — ReplyI have discovered the problem. The file I need to hide the “Sheet Tabs” only is a “XLSM” micro enabled workbook. I opened a “XLSX” file and tested the Options – Advanced and deselected “Sheet Tabs visible” and they went away. After I save and reopened the file the Tabs were still hidden. Is there any way to hide the Tabs only in a “XLSM” workbook?? Or is there anyway I can use a “XLSX” workbook and write VBA code in it. Thanks. Dan
-
PNRao
August 25, 2015 at 12:30 AM — ReplyHi,
I have updated the post, please see the last example to make worksheets Very Hidden.
Thanks-PNRao! -
Priya
October 28, 2015 at 3:01 PM — ReplyHi,
I have index sheet from which i want to access other sheets.. I have different sheets for expenses, payroll, taxes and so on and i have given hyperlink to all these sheets from the index page.
I want to hide all the sheets except the index..and from here when the user clicks on a desired link.. it should take the user to the specified sheet. Even it is hidden. Please helpPriya
-
samola
November 6, 2015 at 2:36 AM — ReplyHello,
I am trying to hide all sheets except two, below is what I have to hide only one sheet. I need to expand it so that I can keep “approval” visible.
Dim wk As Worksheet
For Each wk In Worksheets
If Not wk.Name = “AdviceForm” Then wk.Visible = xlSheetHiddenNext
End Sub
Thanks for your assistance in this matter.
Regards,
Samola -
Deepu
November 12, 2015 at 10:59 AM — ReplyHi,
I would like to hide all sheet except the summary tab, how to do it? Please advice. Thanks
Deepu
-
PNRao
November 16, 2015 at 4:08 PM — ReplyHere is code to hide all sheets except one summary sheet:
Sub sbHideAllExceptSummary() Sheets("Summary").Visible = True For Each sht In ActiveWorkbook.Sheets If sht.Name <> "Summary" Then sht.Visible = False Next End Sub
Thanks-PNRao!
-
Sammie
December 6, 2015 at 3:46 PM — ReplyHi,
Please I’m working on a daily report, how can I create a button on that will lead the user to another sheet were they can fill in details? Please help really urgent.
Thank you. -
SGirard
February 5, 2016 at 1:36 AM — ReplyHi PNRao,
I am using multiple sheet that all depends on the Data entry one. Based on one selection on the Data entry, is it possible to hide or unhide automatically specific sheet?
I have 3 different type of Implementation. On the Data entry, i need to select the current implementation. It will modify a list that will control the content of different Sheet. I would like to hide the useless sheet and show only the ones that belong to this implementation.
kind of:
If ‘Client Information’B17=”Migration”
Then Sheets(“Discovery Call”).Visible = True
Sheets(‘Best Practice’) Visible=FalseCan you help me?
-
PNRao
February 5, 2016 at 8:30 PM — ReplyHi Giridar,
You can achieve this with many approaches, here are the two best methods:
Method 1: Using Worksheet Events to hide unhide sheets
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("B17").Address Then If Range("B17") = "Migration" Then sbButtonSet1 ElseIf Range("B17") = "Other Set2" Then sbButtonSet2 ElseIf Range("B17") = "Other Set3" Then sbButtonSet3 Else sbButtonHideAll End If End If End Sub
‘Method 2:This is another approach to hide unhide the sheets by using Buttons (recommended)
Sub sbButtonSet1() Call ShowOnlySheets("Set1a,Set1b") End Sub Sub sbButtonSet2() Call ShowOnlySheets("Set2a,Set2b") End Sub Sub sbButtonSet3() Call ShowOnlySheets("Set3a,Set3b") End Sub Sub sbButtonHideAll() Call ShowOnlySheets(") End Sub Sub ShowOnlySheets(ByVal strSheets As String) 'strSheets is parameter to specify the rqeuired sheet names (comma separated) 'Hide all sheets except the main sheet For Each sht In ActiveWorkbook.Sheets If sht.Name <> "Main" Then sht.Visible = False Next 'Unhide the required sheets For i = 0 To UBound(Split(strSheets, ",")) Sheets(Split(strSheets, ",")(i)).Visible = True Next End Sub
I recommend the second method as it will be user friendly, also avoids the unnecessary event calls.
Please find the example file here:
http://analysistabs.com/hideunhide-sheets-based-on-condition/Thanks-PNRao!
-
Venkat
March 3, 2016 at 3:12 PM — ReplyHi
I have created navigation in home page. But the thing I want is to hide the sheet names which are shown below. But it should be accessed when the buttons are clicked.Simply to say “Sheets should be hidden, but should be accessible”
Could you please help me in this issue.
Thanks in advance.
-
Jorge
April 20, 2016 at 8:04 PM — ReplyHi,
In regards to hiding or unhiding- I know I can do that with a sheet, but can I hide a condition inside a sheet?
This is the macro that I’m using and it pops “Run-time error ‘438’: Object doesn’t support this property or method”
Sub TransferStuff()Application.ScreenUpdating = False
Application.DisplayAlerts = FalseRange(“M1”, Range(“M” & Rows.Count).End(xlUp)).AutoFilter 1, ”
Range(“A2”, Range(“L” & Rows.Count).End(xlUp)).Copy Sheet2.Range(“A” & Rows.Count).End(3)(2)
Range(“A2”, Range(“L” & Rows.Count).End(xlUp)).Visible = False
[M1].AutoFilterApplication.DisplayAlerts = True
Application.ScreenUpdating = True
Sheet2.SelectEnd Sub
-
Colin
August 26, 2016 at 5:40 PM — ReplyHi,
I keep getting an error at the point below. I’m quite new to this so still learning.
For i = 0 To UBound(Split(strSheets, “,”))
Sheets(Split(strSheets, “,”)(i)).Visible = TrueI’m not sure why, any help would be appreciated.
Thanks
C
-
brendan
November 23, 2016 at 4:51 PM — ReplyHi
I would like to be able to create a button on a home page to open a hidden sheet which needs a password to gain entry. (either separate buttons or a drop down list)
I have 1 sheet as the main page and 6 other sheets for each individuals personal xmas savings.How would i do this?
-
Matt
March 7, 2017 at 8:57 PM — ReplyHi PNRao,
I’ve got a workbook that presently has 38 pages. I’ve included code to create a dynamic index.
Private Sub Worksheet_Activate()
Dim xSheet As Worksheet
Dim xRow As Integer
Dim calcState As Long
Dim scrUpdateState As Long
Application.ScreenUpdating = False
xRow = 1
With Me
.Columns(1).ClearContents
.Cells(1, 1) = “INDEX”
.Cells(1, 1).Name = “Index”
End With
For Each xSheet In Application.Worksheets
If xSheet.Name Me.Name Then
xRow = xRow + 1
With xSheet
.Range(“A1”).Name = “Start_” & xSheet.Index
.Hyperlinks.Add anchor:=.Range(“A1″), Address:=”, _
SubAddress:=”Index”, TextToDisplay:=”Back to Index”
End With
Me.Hyperlinks.Add anchor:=Me.Cells(xRow, 1), Address:=”, _
SubAddress:=”Start_” & xSheet.Index, TextToDisplay:=xSheet.Name
End If
Next
Application.ScreenUpdating = True
End SubWhen the index is created it links back to the index page but it is deleting a line I am trying to keep. I would like to insert a row before creating the link back to the index. Also when creating the index I would like to have it auto generate a checkbox to be used to hide worksheets not needed for the project we are working on.
I would like to use the same checkbox to hide rows on the cover sheet as well.
If you could provide any help it would be immensely appreciated.
-
Ali
March 8, 2017 at 3:55 AM — ReplyHi
I have 2 Sheets Sheet 1(Home) and Sheet 2(Info) .
How can i to hide Sheet2 and create a macro in Sheet1 for unhide that ,When i go back to Sheet1 automatically Sheet2 automatically be hidden ??????????please help me.
-
Jafar
October 16, 2018 at 8:18 AM — ReplyHi PNRao,
I would like to visible only link desire sheet which already hidden. How to do it? Please advice.
Thanks/
Jafar -
puneet
December 13, 2018 at 3:22 PM — ReplyHi All,
I have a workbook containing multiple i need to hide them on the basis of their name ending . Can you please help
-
Devraj Adhikari
June 28, 2020 at 12:33 AM — ReplyI Have a More Than a 100 Sheets in a Worksheet if i want to hide sheets 1,5,76,99,32,45,57 Than How Can i Hide Only This Sheets
-
PNRao
September 6, 2020 at 9:08 PM — ReplySub HideListOfSheetsWithNumber()
sheetsToHide = “1,5,76,99,32,45,57” ‘ Sheet Numbers to Hide
sheetsToHide = Split(sheetsToHide, “,”)For iCntr = 0 To UBound(sheetsToHide)
Sheets(sheetsToHide(iCntr)).Visible = False
Next
End Sub -
Alan
November 10, 2020 at 9:09 PM — ReplyI leave 5 tabs unhidden and then use the Sheets(“xxx”).visible =True method to unhide the sheet(s) I need to make available. The problem is the newly visible tabs don’t appear in places I expect them, sometimes at position 6 +, sometimes in the middle of first 5. Can I designate a next position or do I have to use the .Move method to manage where they show up?
Effectively Manage Your
Projects and Resources
ANALYSISTABS.COM provides free and premium project management tools, templates and dashboards for effectively managing the projects and analyzing the data.
We’re a crew of professionals expertise in Excel VBA, Business Analysis, Project Management. We’re Sharing our map to Project success with innovative tools, templates, tutorials and tips.
Project Management
Excel VBA
Download Free Excel 2007, 2010, 2013 Add-in for Creating Innovative Dashboards, Tools for Data Mining, Analysis, Visualization. Learn VBA for MS Excel, Word, PowerPoint, Access, Outlook to develop applications for retail, insurance, banking, finance, telecom, healthcare domains.
Page load link
Go to Top
You can use a VBA code to hide or unhide a sheet in Excel. When you right-click on the sheet tab, you can see the option to hide or unhide it, and that same thing you can do with a VBA code.
In this post, we will look at some of the ways and methods that we can use.
Let’s say you want to hide “Sheet1” from the active workbook. In that case, you need to use code like the following.
Sheets("Sheet1").Visible = False
In the above code, you have referred to Sheet1, use the visible property, and changed it to false.
Make a Sheet Very Hidden
There’s one more option that you can use to make a sheet very hidden that cannot be un-hide by the user easily.
Hide a Sheet Based on the Value from a Cell
Alright, if you want to use a cell value instead of directly using the sheet name in the code, you can refer to that cell.
Sheets(Range("A1").Value).Visible = True
This code refers to cell A1 and uses the value from it to refer to the sheet that you want to hide.
Helpful Links: Run a Macro – Macro Recorder – Visual Basic Editor – Personal Macro Workbook
Check Sheet Before Hiding
You can also use a small code like the following to check the sheet that you want to hide exits or not.
Sub vba_hide_sheet()
Dim sht As Worksheet
For Each sht In ThisWorkbook.Worksheets
If sht.Name = "Sheet1" Then
sht.Visible = False
Exit Sub
End If
Next sht
MsgBox "Sheet not found", vbCritical, "Error"
End Sub
The above code uses the FOR EACH LOOP + IF STATEMENT to loop through each sheet in the workbook. And check for the sheet that you want to hide.
Hide All the Sheets (Except ActiveSheet)
Now there one thing that you need to understand you can’t hide all the sheets. There must be one sheet visible all the time.
Sub vba_hide_sheet()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
If ActiveSheet.Name <> ws.Name Then
ws.Visible = False
End If
Next ws
End Sub
The above code loops through all the sheets of the workbook, then match each sheet’s name with the active sheet’s name and hide it if it doesn’t match.
VBA Code to Unhide a Sheet
To unhide a sheet, you need to change the visible property to TRUE.
Sheets("Sheet1").Visible = False
If the sheet that you want to unhide it already visible, this code won’t show any error. But if that sheet doesn’t exist, then you’ll get a Run-time error ‘9’.
Use VBA to Unhide All the Hidden Sheets
Imagine you have more than one hidden sheet in a workbook, and if you want to hide them manually, you need to do this one by one.
But here’s the code does this in one go.
Sub vba_unhide_sheet()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
If ws.Visible = False Then
ws.Visible = True
End If
Next ws
End Sub
It loops through each sheet and un-hides it.
More Tutorials on VBA Worksheets
- Back to VBA Worksheet / VBA Tutorial
Hiding and Unhiding worksheets in Excel is a straightforward task.
You can hide a worksheet and the user would not see it when he/she opens the workbook. However, they can easily unhide the worksheet if they want (as we will see later in this tutorial).
But what if you don’t want them to be able to unhide the worksheet(s).
To do that, you need to take a couple of additional steps to make sure the worksheets are ‘very hidden’ (also covered later in this tutorial).
Let’s see how to hide a worksheet in Excel so that it can easily be unhidden, or can not be unhidden.
Regular Way of Hiding a Worksheet in Excel
You can use the below steps to hide a worksheet in Excel:
- Right-click on the sheet tab that you want to hide.
- Click on Hide.
This would instantly hide the worksheet, and you will not see it in the workbook. This setting remains intact when you save the workbook and reopen it again, or send it to some else.
PRO TIP: To hide multiple sheets at one go, hold the Control key and then select the sheet tabs (that you want to hide) one by one. Once selected, right-click on any one of the selected tabs and click on ‘Hide”. This will hide all the worksheets at one go.
While this method hides the worksheet, it’s extremely easy to unhide these worksheets as well.
Here are the steps to unhide a worksheet in Excel:
This will instantly make the sheet visible in the workbook.
Note that you can only unhide one sheet at a time. To unhide multiple sheets, you need to repeat the above steps to unhide each worksheet. Alternately, you can use a macro code to unhide all the worksheets at one go.
While this method works in most cases, it doesn’t really help if you want to hide the worksheets so that your client or colleague (or anyone with whom you share the workbook) can’t unhide and view these.
All they need to do is right-click on any of the tabs and they will see what all worksheets are hidden (and unhide these easily).
So let’s see how you can really hide a worksheet so that it can not be unhidden (at least not so easily).
Hide a Worksheet So That It Can Not be Unhidden
Here are the steps to hide a worksheet so that it can not be unhidden:
Now you will notice that the sheet is hidden.
When you right-click on any of the tabs, you will not see it in the list of hidden sheets that you can unhide.
Is this method foolproof? – NO!
This method works as a user can not see the hidden sheet in the list of sheets that he/she can unhide.
But this doesn’t mean that the sheet can’t be unhidden.
Unhide a Sheet that has been ‘Very Hidden’
Here are the steps to unhide a sheet that has been ‘Very Hidden’:
This will unhide the worksheet and it will be visible in the workbook.
Hide/Unhide Worksheets Using VBA
If you have a lot of worksheets that you need to hide/unhide, it can take up a lot of your time.
Using a simple VBA code can automate this task for you.
Hide All Worksheets Using VBA
Below is the VBA code that will hide all the worksheets except the current/active worksheet:
'This macro will hide all the worksheet except the active sheet Sub HideAllExceptActiveSheet() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets If ws.Name <> ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End Sub
The above code would hide all the worksheet except the except the active sheet. However, it will hide it so that these can be unhidden easily (note that ws.Visible property is set to xlSheetHidden).
If you want to hide the sheets so that these can not be unhidden, use the below code:
'This macro will hide all the worksheet except the active sheet Sub HideAllExcetActiveSheet() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets If ws.Name <> ActiveSheet.Name Then ws.Visible = xlSheetVeryHidden Next ws End Sub
The only change we have done here is making the ws.Visible property xlSheetVeryHidden.
Unhide All Worksheets Using VBA
Below is the code that will unhide all the hidden worksheets in the workbook.
'This code will unhide all sheets in the workbook Sub UnhideAllWoksheets() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets ws.Visible = xlSheetVisible Next ws End Sub
Using this code, we simply go through each worksheet one by one and make the ws.Visible property equal to xlSheetVisible.
Where to put the code?
Below are the steps to place the code in the VB Editor:
Now you can assign the macro to a shape or run it from the Developer tab. You can read more about different ways to run a macro in Excel here.
Note that you don’t need to insert a new module for each code. You can have one single module and have multiple VBA macro codes in it.
You May Also Like the Following Excel Tutorials:
- Unhide Columns in Excel (A Simple Step-by-step Guide)
- How to Unhide Sheets in Excel (All In One Go)
- How to Create and Use an Excel Add-in.
- Useful Excel Macros for Beginners.
- How to Lock Cells in Excel.
- How to Lock Formulas in Excel.
- Hide Zero Values in Excel
- How to Delete All Hidden Rows and Columns in Excel
- How to Hide or Show Formula Bar in Excel?