Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Excel / New Users / September 2007

Tip: Looking for answers? Try searching our database.

Macro for Sheet Navigation (Excel 2007)

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Randy - 10 Sep 2007 21:19 GMT
I'm looking for a macro that is compatible with Excel 2007.  I've
searched the forums and shareware sites, but can't find anything
current enough.  I have a workbook with many sheets, too many to
conveniently navigate through with just the basic Excel GUI.  I have
seen some older shareware apps that create floating menus that allow
the user to organize the sheets into groups so that the user only has
to interact with a subset of worksheets at any moment, based on the
group that they have selected.  This allows them to more easily switch
between sheets without scrolling horizontally across the tabs at the
bottom.

Does anybody have any code that will do this or know of any good
shareware apps compatible with Excel 2007?  I'm trying to avoid
spending time reinventing the wheel.

Thanks,
Randy
Gord Dibben - 10 Sep 2007 21:40 GMT
I prefer Bob Phillips' browsesheet code to go to any sheet in the workbook so
you don't have to keep going back to the TOC sheet.

Sub BrowseSheets()
Const nPerColumn  As Long = 38          'number of items per column
Const nWidth As Long = 13                'width of each letter
Const nHeight As Long = 18              'height of each row
Const sID As String = "___SheetGoto"    'name of dialog sheet
Const kCaption As String = " Select sheet to goto"
                                       'dialog caption

Dim i As Long
Dim TopPos As Long
Dim iBooks As Long
Dim cCols As Long
Dim cLetters As Long
Dim cMaxLetters As Long
Dim cLeft As Long
Dim thisDlg As DialogSheet
Dim CurrentSheet As Worksheet
Dim cb As OptionButton
   Application.ScreenUpdating = False
   If ActiveWorkbook.ProtectStructure Then
       MsgBox "Workbook is protected.", vbCritical
       Exit Sub
   End If
   On Error Resume Next
       Application.DisplayAlerts = False
       ActiveWorkbook.DialogSheets(sID).Delete
       Application.DisplayAlerts = True
   On Error GoTo 0
   Set CurrentSheet = ActiveSheet
   Set thisDlg = ActiveWorkbook.DialogSheets.Add
   With thisDlg
       .Name = sID
       .Visible = xlSheetHidden
       'sets variables for positioning on dialog
       iBooks = 0
       cCols = 0
       cMaxLetters = 0
       cLeft = 78
       TopPos = 40
       For i = 1 To ActiveWorkbook.Worksheets.Count
           If i Mod nPerColumn = 1 Then
               cCols = cCols + 1
               TopPos = 40
               cLeft = cLeft + (cMaxLetters * nWidth)
               cMaxLetters = 0
           End If
           Set CurrentSheet = ActiveWorkbook.Worksheets(i)
           cLetters = Len(CurrentSheet.Name)
           If cLetters > cMaxLetters Then
               cMaxLetters = cLetters
           End If
           iBooks = iBooks + 1
           .OptionButtons.Add cLeft, TopPos, cLetters * nWidth, 16.5
           .OptionButtons(iBooks).text = _
               ActiveWorkbook.Worksheets(iBooks).Name
           TopPos = TopPos + 13
       Next i
       .Buttons.Left = cLeft + (cMaxLetters * nWidth) + 24
       CurrentSheet.Activate
       With .DialogFrame
           .Height = Application.Max(68, _
               Application.Min(iBooks, nPerColumn) * nHeight + 10)
           .Width = cLeft + (cMaxLetters * nWidth) + 24
           .Caption = kCaption
       End With
       .Buttons("Button 2").BringToFront
       .Buttons("Button 3").BringToFront
       Application.ScreenUpdating = True
       If .Show Then
           For Each cb In thisDlg.OptionButtons
               If cb.Value = xlOn Then
                   ActiveWorkbook.Worksheets(cb.Caption).Select
                   Exit For
               End If
           Next cb
       Else
           MsgBox "Nothing selected"
       End If
       Application.DisplayAlerts = False
       .Delete
   End With
End Sub

NOTE:  Gary Brown revised this code to cover hidden sheets and chart sheets and
other potential problems.

See this thread for that revised code.

http://snipurl.com/1l8o4

I would make one more change to Gary's code.

Const nWidth As Long = 8        'width of each letter
Change to 10 or sheetnames < 4 chars will be incomplete

Gord Dibben  MS Excel MVP

>I'm looking for a macro that is compatible with Excel 2007.  I've
>searched the forums and shareware sites, but can't find anything
[quoted text clipped - 13 lines]
>Thanks,
>Randy

Rate this thread:






 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.