کرک پرسید آیا راهی برای کنترل مشروط آنچه در اکسل چاپ می شود وجود دارد؟ به عنوان مثال، سلول A1 حاوی یک مقدار است و مقدار دقیقاً آنچه را که چاپ می شود کنترل می کند. شاید اگر A1 حاوی 1 باشد، Sheet1 چاپ می شود. اگر شامل 2 باشد، Sheet1 و Sheet2 چاپ می شوند.
تنها راه انجام این کار با ماکرو است و چندین روش وجود دارد که می توانید از آن استفاده کنید. ماکرو بسیار ساده زیر را در نظر بگیرید که به سادگی از ساختار Select Case برای کنترل چاپ استفاده می کند.
Sub PrintStuff()
Dim vShts As Variant
vShts = Sheets(1).Range("A1")
If Not IsNumeric(vShts) Then
Exit Sub
Else
Select Case vShts
Case 1
Sheets("Sheet1").PrintOut
Case 2
Sheets("Sheet2").PrintOut
Case 3
Sheets("Sheet1").PrintOut
Sheets("Sheet2").PrintOut
End Select
End If
End Sub
این ماکرو را با مقدار 1، 2 یا 3 در سلول A1 صفحه اول اجرا کنید و ماکرو چیزهای مختلفی را بر اساس مقدار چاپ می کند. اگر مقدار 1 باشد، Sheet1 چاپ می شود. اگر 2 باشد، Sheet2 چاپ می شود. و اگر 3 باشد، هر دو Sheet1 و Sheet2 چاپ می شوند. اگر می خواهید مقادیر متفاوتی برای چاپ چیزهای مختلف داشته باشید، فقط ساختار Select Case را تغییر دهید تا مقادیر احتمالی و آنچه باید برای هر مقدار چاپ شود را نشان دهد.
همچنین می توان رویکرد جامع تری ایجاد کرد. اضافه کردن یک "برگه کنترل" به ورک بوک خود را در نظر بگیرید. این برگه دارای نام هر کاربرگ در ورک بوک است که در ستون اول فهرست شده است. اگر مقداری را در سمت راست نام کاربرگ در ستون دوم قرار دهید، یک ماکرو کاربرگ مربوطه را چاپ می کند.
ماکرو زیر را می توان برای ایجاد "صفحه کنترل" استفاده کرد.
Sub CreateControlSheet()
Dim i as integer
On Error Resume Next Delete this sheet if it already exists
Sheets("Control Sheet").Delete
On Error GoTo 0
Sheets.Add Add the WhatToPrint Sheet
ActiveSheet.Name = "Control Sheet"
Range("A1").Select Label the columns
ActiveCell.FormulaR1C1 = "Sheet Name"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Print?"
Cells.Select
Selection.Columns.AutoFit
For i = 1 To ActiveWorkbook.Sheets.Count
Cells(i + 1, 1).Value = Sheets(i).Name
Next
End Sub
ماکرو ابتدا هر صفحه کنترل قدیمی را در صورت وجود حذف می کند. سپس یک کاربرگ جدید به نام Control Sheet اضافه می کند و برچسب های سرصفحه ها را در ستون های A و B قرار می دهد. سپس تمام کاربرگ های ورک بوک را در ستون A فهرست می کند.
با صفحه کنترل ایجاد شده، می توانید یک "X" یا مقدار دیگری (مانند "Y" یا 1) را در ستون B در کنار هر صفحه کاری که می خواهید چاپ کنید، قرار دهید. سپس ماکرو زیر صفحه کنترل را بررسی می کند و هر برگه ای را که دارای علامت – هر علامت – در سلول ستون B باشد چاپ می کند.
Sub PrintSelectedSheets()
Dim i as Integer
i = 2
Do Until Sheets("Control Sheet").Cells(i, 1).Value = ""
If Trim(Sheets("Control Sheet").Cells(i, 2).Value <> "") Then
Sheets(Sheets("Control Sheet").Cells(i, 1).Value).Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
End If
i = i + 1
Loop
End Sub
روش دیگر ایجاد یک ماکرو است که درست قبل از چاپ اجرا شود. (چاپ یکی از رویدادهایی است که اکسل به شما اجازه می دهد آن را به دام بیندازید.) ماکروی زیر که به شی thisWorkbook اضافه شده است، هر بار که می خواهید چاپ کنید اجرا می شود.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim vShts As Variant
Dim iResponse As Integer
Dim bPreview As Boolean
On Error GoTo ErrHandler
vShts = Sheets(1).Range("A1")
If Not IsNumeric(vShts) Then
GoTo InValidEntry
ElseIf vShts < 1 Or vShts > Sheets.Count Then
GoTo InValidEntry
Else
iResponse = MsgBox(prompt:="Do you want Print Preview?", _
Buttons:=vbYesNoCancel, Title:="Preview?")
Select Case iResponse
Case vbYes
bPreview = True
Case vbNo
bPreview = False
Case Else
Msgbox "Canceled at User request"
GoTo ExitHandler
End Select
Application.EnableEvents = False
Sheets(vShts).PrintOut Preview:=bPreview
End If
ExitHandler:
Application.EnableEvents = True
Cancel = True
Exit Sub
InValidEntry:
MsgBox "" & Sheets(1).Name & "!A1" _
& vbCrLf & "must have a number between " _
& "1 and " & Sheets.Count & vbCrLf
GoTo ExitHandler
ErrHandler:
MsgBox Err.Description
Resume ExitHandler
End Sub
ماکرو مقدار سلول A1 اولین کاربرگ را بررسی می کند. از این مقدار برای تعیین اینکه چه برگه هایی باید چاپ شوند استفاده می کند. به عبارت دیگر، a 1 اولین کاربرگ را چاپ می کند، a 2 دومی را چاپ می کند، a 3 سومی را چاپ می کند و غیره.
اگر مقدار A1 یک مقدار نباشد یا کمتر از 1 یا بیشتر از تعداد کاربرگ های ورک بوک باشد، به کاربر اطلاع داده می شود که مقدار نادرست است و ماکرو خارج می شود.
با فرض اینکه مقدار A1 در محدوده باشد، ماکرو از شما می پرسد که آیا می خواهید از پیش نمایش چاپ استفاده کنید یا خیر. بسته به پاسخ کاربران، ماکرو کاربرگ مشخص شده را چاپ می کند یا پیش نمایش چاپ را برای آن کاربرگ نمایش می دهد.