Place the code below in a standard module and run Indexing Sub so as to create or update a hyperlink index of all visible sheets in a new sheet called INDEX.
Also a "Back to index" will be added to the top of each visible sheet by inserting rows so to avoid deleting existing data.
enjoy
Code:Dim wSheet As Worksheet, mySht As Worksheet Dim l As Long Sub Indexing() RESPONSE = MsgBox("Select 'Yes' to create an index or 'No' to refresh the existing one. Select 'Cancel' to abort.", vbYesNoCancel) If RESPONSE = vbYes Then Call Generate_Index MsgBox "Index created" ElseIf RESPONSE = vbNo Then Call Refresh_Index MsgBox "Index updated" Else MsgBox "Operation cancelled" End If End Sub Sub Refresh_Index() With Application .ScreenUpdating = False .Cursor = xlWait End With l = 1 Set mySht = Sheets("INDEX") With mySht .Columns(1).ClearContents .Cells(1, 1) = "INDEX" .Cells(1, 1).name = "Index" .Cells(1, 1).font.Bold = True .Cells(1, 1).Interior.Color = 12859158 .Cells(1, 1).font.ThemeColor = xlThemeColorDark1 End With For Each wSheet In Worksheets If wSheet.Visible = True And wSheet.name <> "INDEX" And wSheet.Range("A1").Text = "Back to Index" Then l = l + 1 With wSheet .Range("A1").name = "Start_" & wSheet.INDEX .Hyperlinks.Add Anchor:=.Range("A1"), Address:="", _ SubAddress:="Index", TextToDisplay:="Back to Index" .Range("A1").EntireColumn.AutoFit End With mySht.Hyperlinks.Add Anchor:=mySht.Cells(l, 1), Address:="", _ SubAddress:="Start_" & wSheet.INDEX, TextToDisplay:=wSheet.name ElseIf wSheet.Visible = True And wSheet.name <> "INDEX" Then wSheet.Select Rows("1:1").Select For i = 1 To 2 Selection.Insert Shift:=xlDown Next i Range("A1").Select l = l + 1 With wSheet .Range("A1").name = "Start_" & wSheet.INDEX .Hyperlinks.Add Anchor:=.Range("A1"), Address:="", _ SubAddress:="Index", TextToDisplay:="Back to Index" .Range("A1").EntireColumn.AutoFit End With mySht.Hyperlinks.Add Anchor:=mySht.Cells(l, 1), Address:="", _ SubAddress:="Start_" & wSheet.INDEX, TextToDisplay:=wSheet.name End If Next wSheet mySht.Select With Application .ScreenUpdating = True .Cursor = xlDefault End With End Sub Sub Generate_Index() With Application .ScreenUpdating = False .Cursor = xlWait End With l = 1 Worksheets.Add(Before:=Worksheets(1)).name = "INDEX" Set mySht = Sheets("INDEX") With mySht .Columns(1).ClearContents .Cells(1, 1) = "INDEX" .Cells(1, 1).name = "Index" .Cells(1, 1).font.Bold = True .Cells(1, 1).Interior.Color = 12859158 .Cells(1, 1).font.ThemeColor = xlThemeColorDark1 End With For Each wSheet In Worksheets If wSheet.Visible = True And wSheet.name <> "INDEX" Then wSheet.Select Rows("1:1").Select For i = 1 To 2 Selection.Insert Shift:=xlDown Next i Range("A1").Select l = l + 1 With wSheet .Range("A1").name = "Start_" & wSheet.INDEX .Hyperlinks.Add Anchor:=.Range("A1"), Address:="", _ SubAddress:="Index", TextToDisplay:="Back to Index" .Range("A1").EntireColumn.AutoFit End With mySht.Hyperlinks.Add Anchor:=mySht.Cells(l, 1), Address:="", _ SubAddress:="Start_" & wSheet.INDEX, TextToDisplay:=wSheet.name End If Next wSheet mySht.Select With Application .ScreenUpdating = True .Cursor = xlDefault End With End Sub




enjoy
Reply With Quote
Bookmarks