HI excel_learner,
Welcome to ExcelFox!!
Try this. Untested.
Code:
Option Explicit
Sub Print_Ranges()
Dim strShtname As String, strRngName As String
Dim i As Long
With Worksheets("INDEX")
'sort the named range list according to page number order
.Range("A2").CurrentRegion.Sort key1:=Range("A3"), order1:=xlAscending, Header:=xlYes, ordercustom:=1, Orientation:=xlTopToBottom
'loop through the cells and determine parent of named range and specific range addresses
For i = 3 To 34
If LCase$(.Cells(i, "C").Text) = "x" Then 'I assume the 'X' is in Col C,if not, replace "C" with appropriate Col
strRngName = .Cells(i, 2).Text
strShtname = Range(strRngName).Parent.Name
'clear any existing print areas and reset to named ranges areas
With Worksheets(strShtname)
.PageSetup.PrintArea = ""
.PageSetup.PrintArea = Range(strRngName).Address
.PrintOut
' .PrintPreview
End With
End If
Next i
End With
End Sub
'//This routine is for print sheets from other workbook
Sub PrintRangesFromOtherWorbook(ByVal WbkName As String, ParamArray Sheets2Print() As Variant)
'workbook name should be with the extension
Dim i As Long
Dim wbkOther As Workbook
With Application
.ScreenUpdating = 0
.EnableEvents = 0
.DisplayAlerts = 0
End With
On Error Resume Next
Set wbkOther = Workbooks(CStr(WbkName))
If Err.Number <> 0 Then
Err.Clear
Set wbkOther = Workbooks.Open(ThisWorkbook.Path & "\" & WbkName, 0)
If Err.Number <> 0 Then
MsgBox "Workbook '" & WbkName & "' not found in" & vbLf & ThisWorkbook.Path, vbInformation
Err.Clear
GoTo QuickExit
End If
End If
For i = LBound(Sheets2Print) To UBound(Sheets2Print)
'I hope print area is there in every sheet
With wbkOther.Worksheets(Sheets2Print(i))
.PrintOut
' .PrintPreview
End With
MsgBox Sheets2Print(i)
Next
QuickExit:
With Application
.ScreenUpdating = 1
.EnableEvents = 1
.DisplayAlerts = 1
End With
End Sub
'// Call the macro like..
Sub kTest()
PrintRangesFromOtherWorbook "OtherWorkbookName.xls", "Sheet1", "Sheet2", "Sheet3"
End Sub
HTH
Bookmarks