Skip to content

Make list of Excel sheets/tabs - automatic and even better

Here’s an even better way to make an automatic list of tabs in an Excel workbook it works in Excel for Windows and Mac and bypasses some possible traps.

Start with our article on Automatic worksheet/tabs list in Excel which explains how to add a list of Excel tabs/sheets with or without clickable links to make a ‘Table of Contents’ for an Excel workbook.

Also using Transpose() to change the list from horizontal (across a row) to vertical).

Plenty of people wrote in with their thanks, which should be directed to the coder: David Peel.

However, one Office Watcher, Conrado, politely pointed out a problem. If you have the Option Base is set to 1, the code didn’t work. Option Base tells Office to count arrays from either zero (the default and standard in most languages) or one. As David says “Excel has always been a bit weird in starting it’s collections from 1 rather than 0, so many people do like to do that for arrays, too.” by using Option Base 1.

We’ve added a fix to the original code to workaround this, relatively rare. problem. David Peel took that as an opportunity to revise the code to make a single Excel custom function to show all tabs or only visible tabs. The logic is changed so it doesn’t matter what the Option Base setting is and so no need for a special check.

Here’s another version of the Sheet List code with an optional parameter to choose showing hidden sheets or not.

Using SheetList()

To list only visible sheets (no hidden sheets) use SheetList() or SheetList(FALSE).

To make a list of all sheets use SheetList(TRUE).

That makes a dynamic array going across a row, for a list down a column use TRANSPOSE() e.g. TRANSPOSE(SheetList()).

To make the function automatically update (avoid for large workbooks) either add the line Application Volatile to the start of the function or use the &T(NOW()) trick, see Automatic worksheet/tabs list in Excel for more info.

SheetList() Code

Function SheetList(Optional ShowHidden As Boolean) As Variant
' Make list of Excel sheets / tabs to dynamic array.
' Code by David Peel

    Dim sht As Worksheet, strShtList() As String, lngNumSheets As Long

    For Each sht In ActiveWorkbook.Worksheets
        If Not sht.Visible Then   ' skip if sheet is hidden and ShowHidden is False.
            If Not ShowHidden Then GoTo Continue
        End If
        
        lngNumSheets = lngNumSheets + 1
        ReDim Preserve strShtList(1 To lngNumSheets)
        strShtList(lngNumSheets) = sht.Name

Continue:
    Next sht

    SheetList = strShtList()

End Function

Automatic worksheet/tabs list in Excel
Solved! The problem with Excel Tables and Transpose
BMI calcs can do more in Excel

About this author

Office-Watch.com

Office Watch is the independent source of Microsoft Office news, tips and help since 1996. Don't miss our famous free newsletter.