Note: The other languages of the website are Google-translated. Back to English
Log in  \/ 
Register  \/ 


How to lock or freeze worksheet tab in Excel?

Supposing you have a workbook which contains multiple worksheets, there is a worksheet named Main-sheet as the first tab in the workbook. And now, you want to try to lock or freeze this sheet tab to make it always visible even when scrolling across a number of worksheets. In fact, there is no direct way for you freeze the tab, but, you can use a workaround to deal with this problem.

Lock or freeze a specific worksheet tab with VBA code

arrow blue right bubble Lock or freeze a specific worksheet tab with VBA code

In Excel, we can apply the following VBA code to make the specific worksheet always before your current clicked worksheet tab, so that you can always see this worksheet when you scroll across any other sheet tabs. Please do as follows:

1. Hold down the ALT + F11 keys, and it opens the Microsoft Visual Basic for Applications window.

2. Then choose ThisWorkbook from the left Project Explorer pane, double click it to open the Module, and then copy and paste following VBA code into the blank Module:

VBA code: Freeze or lock a specific worksheet tab

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'Update by Extendoffice
Application.EnableEvents = False
Application.ScreenUpdating = False
If Application.ActiveSheet.Index <> Application.Sheets("Main-sheet").Index Then
    Application.Sheets("Main-sheet").Move Before:=Application.Sheets(Application.ActiveSheet.Index)
End If
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub


3. And then save and close this code, now, when you click any of your worksheet tab, this specific worksheet will be always at the front of your clicked sheet tab, see screenshots:


Note: In the above code, the Main-sheet is the sheet name that you want to freeze, you can change it to your need.

Related articles:

How to Freeze Panes in Excel 2010?

How to apply freeze / unfreeze panes to multiple worksheets at once?

The Best Office Productivity Tools

Kutools for Excel Solves Most of Your Problems, and Increases Your Productivity by 80%

  • Reuse: Quickly insert complex formulas, charts and anything that you have used before; Encrypt Cells with password; Create Mailing List and send emails...
  • Super Formula Bar (easily edit multiple lines of text and formula); Reading Layout (easily read and edit large numbers of cells); Paste to Filtered Range...
  • Merge Cells/Rows/Columns without losing Data; Split Cells Content; Combine Duplicate Rows/Columns... Prevent Duplicate Cells; Compare Ranges...
  • Select Duplicate or Unique Rows; Select Blank Rows (all cells are empty); Super Find and Fuzzy Find in Many Workbooks; Random Select...
  • Exact Copy Multiple Cells without changing formula reference; Auto Create References to Multiple Sheets; Insert Bullets, Check Boxes and more...
  • Extract Text, Add Text, Remove by Position, Remove Space; Create and Print Paging Subtotals; Convert Between Cells Content and Comments...
  • Super Filter (save and apply filter schemes to other sheets); Advanced Sort by month/week/day, frequency and more; Special Filter by bold, italic...
  • Combine Workbooks and WorkSheets; Merge Tables based on key columns; Split Data into Multiple Sheets; Batch Convert xls, xlsx and PDF...
  • More than 300 powerful features. Supports Office/Excel 2007-2019 and 365. Supports all languages. Easy deploying in your enterprise or organization. Full features 30-day free trial. 60-day money back guarantee.
kte tab 201905

Office Tab Brings Tabbed interface to Office, and Make Your Work Much Easier

  • Enable tabbed editing and reading in Word, Excel, PowerPoint, Publisher, Access, Visio and Project.
  • Open and create multiple documents in new tabs of the same window, rather than in new windows.
  • Increases your productivity by 50%, and reduces hundreds of mouse clicks for you every day!
officetab bottom
Say something here...
symbols left.
You are guest
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    Xuan · 2 years ago
    chăng đc gi cả
  • To post as a guest, your comment is unpublished.
    Joku · 2 years ago
    As Thuyen pointed out 2 years ago, you can't copy data between sheets while this code is active. Furthermore, the code is needlessly complicated. The sheet that you activate is passed to the procedure as the parameter "Sh". This makes the frequent calls to "ActiveSheet" unnecessary, and could cause problems for someone who's trying to modify the code but isn't very experienced.

    Here's my versions that corrects those issues, and even shows how to add a 2nd "Main" sheet (similar to what Dzingai posted):

    'These 2 lines aren't necessary if you use the sheets' codenames, which I recommend.
    Set shtMain1 = Worksheets("Main-Sheet-1")
    Set shtMain2 = Worksheets("Main-Sheet-2")

    If Application.CutCopyMode = False Then
    If Sh.Index <> shtMain1.Index And Sh.Index <> shtMain2.Index Then
    shtMain1.Move before:=Sh
    shtMain2.Move before:=Sh
    End If
    End If
  • To post as a guest, your comment is unpublished.
    Dzingai · 3 years ago
    @Sangs [quote name="Sangs"]This code worked well. Only problem is...if we close the file & open it again it goes off.[/quote]
    Try saving document as Macro-Enabled Workbook. I think it should work well that way.
  • To post as a guest, your comment is unpublished.
    Sangs · 3 years ago
    This code worked well. Only problem is...if we close the file & open it again it goes off.
  • To post as a guest, your comment is unpublished.
    dzingai · 3 years ago
    @Pablo Yes, it is possible, you just have to add more arguments to the if clause using the "AND" like this

    IF Application.ActiveSheet.Index Application.Sheets("Main-sheet").Index AND Application.ActiveSheet.Index Application.Sheets("Other-Main-sheet").Index and so on...
    Application.Sheets("Main-sheet").Move Before:=Application.Sheets(Application.Sheets("Other-Main-sheet").Index)
    Application.Sheets("Other-Main-sheet").Move Before:=Application.Sheets(Application.ActiveSheet.Index)
    This will place the Main-Sheet, then the Other-Main-Sheet in front of your active sheet.
  • To post as a guest, your comment is unpublished.
    Pablo · 4 years ago
    Is it possible to create one with multiple arguments? Like instead of just moving the one main sheet to the front of where you are working, is it possible to move three tabs in front of what you are working on?
  • To post as a guest, your comment is unpublished.
    MEESHA · 4 years ago
    Could not get your code to work, but this one did :)

    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim sc As Long ' count of sheets
    Dim NewPos As Long ' index of serlected sheet

    Application.EnableEvents = False
    Application.ScreenUpdating = False

    If ActiveSheet.Index 1 Then
    sc = Sheets.Count
    NewPos = ActiveSheet.Index
    For i = 2 To NewPos - 1
    Sheets(2).Move After:=Sheets(sc)
    Next i
    End If

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    End Sub
  • To post as a guest, your comment is unpublished.
    Thuyen · 5 years ago
    When I use VBA, I cannot copy data from Main-Sheet to another sheet
    Please help me fix this bug