Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Westi on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Page Switch When Macro Runs 2

Status
Not open for further replies.

DrMingle

Technical User
May 24, 2009
116
US
I need help...

When I run this macro it switches to the second worksheet and prompts the user to select sheets to print, however I need it to stay on the first worksheet (or active worksheet) so the user can reference what they need to actually print.

Thanks for any help.

Below is the code:


Sub SelectSheets()
Dim i As Integer
Dim TopPos As Integer
Dim SheetCount As Integer
Dim PrintDlg As DialogSheet
Dim CurrentSheet As Worksheet
Dim cb As CheckBox
Application.ScreenUpdating = False

' Check for protected workbook
If ActiveWorkbook.ProtectStructure Then
MsgBox "Workbook is protected.", vbCritical
Exit Sub
End If

' Add a temporary dialog sheet
Set CurrentSheet = ActiveSheet
Set PrintDlg = ActiveWorkbook.DialogSheets.Add

SheetCount = 0

' Add the checkboxes
TopPos = 40
For i = 1 To ActiveWorkbook.Worksheets.Count
Set CurrentSheet = ActiveWorkbook.Worksheets(i)
' Skip empty sheets and hidden sheets
If Application.CountA(CurrentSheet.Cells) <> 0 And _
CurrentSheet.Visible Then
SheetCount = SheetCount + 1
PrintDlg.CheckBoxes.Add 78, TopPos, 150, 16.5
PrintDlg.CheckBoxes(SheetCount).Text = _
CurrentSheet.Name
TopPos = TopPos + 13
End If
Next i

' Move the OK and Cancel buttons
PrintDlg.Buttons.Left = 240

' Set dialog height, width, and caption
With PrintDlg.DialogFrame
.Height = Application.Max _
(68, PrintDlg.DialogFrame.Top + TopPos - 34)
.Width = 230
.Caption = "Select master appraisal & audit sheets to print"
End With

' Change tab order of OK and Cancel buttons
' so the 1st option button will have the focus
PrintDlg.Buttons("Button 2").BringToFront
PrintDlg.Buttons("Button 3").BringToFront

' Display the dialog box
CurrentSheet.Activate
Application.ScreenUpdating = True
If SheetCount <> 0 Then
If PrintDlg.Show Then
For Each cb In PrintDlg.CheckBoxes
If cb.Value = xlOn Then
Worksheets(cb.Caption).Activate
ActiveSheet.PrintOut
' ActiveSheet.PrintPreview 'for debugging
End If
Next cb
End If
Else
MsgBox "All worksheets are empty."
End If

' Delete temporary dialog sheet (without a warning)
Application.DisplayAlerts = False
PrintDlg.Delete

' Reactivate original sheet
CurrentSheet.Activate
End Sub
 
I'd change your Add checkboxes loop like this:
Code:
For i = 1 To ActiveWorkbook.Worksheets.Count
  With ActiveWorkbook.Worksheets(i)
' Skip empty sheets and hidden sheets
    If Application.CountA(.Cells) <> 0 And .Visible Then
      SheetCount = SheetCount + 1
      PrintDlg.CheckBoxes.Add 78, TopPos, 150, 16.5
      PrintDlg.CheckBoxes(SheetCount).Text = .Name
      TopPos = TopPos + 13
    End If
  End With
Next i

Hope This Helps, PH.
FAQ219-2884
FAQ181-2886
 
Print without activating:
Code:
If cb.Value = xlOn Then
    Worksheets(cb.Caption).PrintOut
    ' Worksheets(cb.Caption).PrintPreview 'for debugging
End If


combo
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top