Hello
I have a macro that displays all visible worksheets for the user to select which worksheet to go to. The code originated with Bob Phillips and edited by AlphaFrog.
The macro works with the initial selection but then I get the error message "run-time 1004: unable to get show property of the dialogsheet class". Interestingly when I go back to the first worksheet, it works again BUT it actually has multiple sheets selected within the dialog box.
The code is:
The code stops at If .show. Thanks for any assistance.
I have a macro that displays all visible worksheets for the user to select which worksheet to go to. The code originated with Bob Phillips and edited by AlphaFrog.
The macro works with the initial selection but then I get the error message "run-time 1004: unable to get show property of the dialogsheet class". Interestingly when I go back to the first worksheet, it works again BUT it actually has multiple sheets selected within the dialog box.
The code is:
Code:
Sub BrowseSheets()
Const nPerColumn As Long = 58 '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 worksheet 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
Dim ws As Worksheet
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 Each ws In ActiveWorkbook.Worksheets
If ws.Visible = xlSheetVisible Then
iBooks = iBooks + 1
If iBooks Mod nPerColumn = 1 Then
cCols = cCols + 1
TopPos = 40
cLeft = cLeft + (cMaxLetters * nWidth)
cMaxLetters = 0
End If
cLetters = Len(ws.Name)
If cLetters > cMaxLetters Then
cMaxLetters = cLetters
End If
iBooks = iBooks + 1
With .OptionButtons.Add(cLeft, TopPos, cLetters * nWidth, 16.5)
.Text = ws.Name
.Value = ws Is ActiveSheet
End With
TopPos = TopPos + 13 'controls space between them vertically
End If
Next ws
.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
The code stops at If .show. Thanks for any assistance.