در اکسل VBA، برای پرینت گرفتن از یک شیت یا یک محدوده خاص میتوانید از دستور PrintOut
استفاده کنید. این دستور به شما این امکان را میدهد که تنظیمات مختلفی را برای پرینت انجام دهید و کنترل کاملی بر روی فرآیند چاپ داشته باشید.
استفاده از دستور PrintOut
فرمت عمومی این دستور به شکل زیر است:
expression.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName)
پارامترها:
- expression: یک متغیر شیء است که اشاره به یک Worksheet (صفحه اکسل)، Workbook (کاربرگ اکسل)، Chart (نمودار) یا Range (محدوده سلولی) اشاره دارد.
- From: شماره صفحه از که شروع به پرینت میکند (اختیاری).
- To: شماره صفحه تا که پرینت میشود (اختیاری).
- Copies: تعداد نسخههایی که میخواهید پرینت کنید (پیشفرض: 1).
- Preview: اگر TRUE باشد، پیشنمایش پرینت را نشان میدهد (پیشفرض: FALSE).
- ActivePrinter: نام چاپگری که میخواهید از آن استفاده کنید (اختیاری).
- PrintToFile: اگر TRUE باشد، پرینت به یک فایل انجام میشود (پیشفرض: FALSE).
- Collate: اگر TRUE باشد، نسخهها به ترتیب مرتب میشوند (پیشفرض: FALSE).
- PrToFileName: نام فایل خروجی در صورتی که PrintToFile TRUE باشد (اختیاری).
توضیحات پارامترها
توضیح پارامتر Collate
پارامتر Collate
به تنظیم نحوه مرتبسازی نسخههای چاپشده کمک میکند.
Collate:=True
: نسخهها بهصورت مرتبشده چاپ میشوند. این یعنی تمام صفحات یک نسخه چاپ شده و سپس چاپ نسخه بعدی شروع میشود.- مثال: اگر 3 نسخه از صفحات 1 تا 3 را پرینت بگیرید، ترتیب چاپ به این صورت خواهد بود:
- نسخه اول: صفحه 1، صفحه 2، صفحه 3
- نسخه دوم: صفحه 1، صفحه 2، صفحه 3
- نسخه سوم: صفحه 1، صفحه 2، صفحه 3
- مثال: اگر 3 نسخه از صفحات 1 تا 3 را پرینت بگیرید، ترتیب چاپ به این صورت خواهد بود:
Collate:=False
: تمام نسخههای هر صفحه بهصورت پشت سر هم چاپ میشوند.- مثال: برای 3 نسخه از صفحات 1 تا 3، ترتیب چاپ به این شکل خواهد بود:
- صفحه 1، صفحه 1، صفحه 1 (همه نسخههای صفحه 1)
- صفحه 2، صفحه 2، صفحه 2 (همه نسخههای صفحه 2)
- صفحه 3، صفحه 3، صفحه 3 (همه نسخههای صفحه 3)
- مثال: برای 3 نسخه از صفحات 1 تا 3، ترتیب چاپ به این شکل خواهد بود:
توضیح پارامتر ActivePrinter
پارامتر ActivePrinter
در دستور PrintOut
در VBA به شما این امکان را میدهد که چاپگری را که میخواهید از آن استفاده کنید، مشخص کنید. این پارامتر زمانی که چندین چاپگر به سیستم متصل است، بسیار مفید است و به شما این اجازه را میدهد که تعیین کنید کدام چاپگر برای چاپ مورد استفاده قرار گیرد.
این پارامتر به نام چاپگری اشاره دارد که میخواهید از آن برای چاپ استفاده کنید. شما باید نام کامل چاپگر را به صورت یک رشته متنی (String) وارد کنید. اگر این پارامتر را نادیده بگیرید، اکسل از چاپگر پیشفرض سیستم استفاده میکند.
استفاده از پارامتر ActivePrinter
زمانی اهمیت بیشتری پیدا میکند که شما بخواهید یک شیت را به چاپگری خاص ارسال کنید، مثلاً وقتی که چندین چاپگر در دسترس دارید یا چاپگری که معمولاً پیشفرض است برای نوع خاصی از چاپ مناسب نیست.
نکات مهم
- نام چاپگر: نام چاپگر باید دقیقاً همانطور که در سیستم شما نمایش داده میشود، نوشته شود. معمولاً شامل نام چاپگر و نام سازنده آن است.
- چاپگرهای شبکهای: اگر از چاپگرهای شبکهای استفاده میکنید، اطمینان حاصل کنید که نام چاپگر بهدرستی نوشته شده و قابل دسترسی باشد.
نکات اضافی پارامتر ActivePrinter
- اگر چاپگری با نام تعیینشده پیدا نشود، کد با خطا مواجه میشود. بنابراین، بهتر است قبل از تنظیم
ActivePrinter
از وجود چاپگر اطمینان حاصل کنید. - میتوانید نام چاپگرهای موجود در سیستم را با استفاده از کد زیر بدست آورید:
Sub ListPrinters()
Dim prt As Variant
For Each prt In Application.Printers
Debug.Print prt.Name
Next prt
End Sub
این کد نام تمام چاپگرهای موجود را در پنل Immediate نمایش میدهد و میتوانید از آنها برای تنظیم ActivePrinter
استفاده کنید.
توضیح پارامتر PrintToFile
پارامتر PrintToFile
در دستور PrintOut
به شما این امکان را میدهد که به جای ارسال خروجی چاپ به چاپگر، آن را به یک فایل چاپی ارسال کنید. این پارامتر مخصوصاً زمانی مفید است که شما بخواهید خروجی چاپ را بهصورت یک فایل ذخیره کنید، مثلاً یک فایل PDF یا فایل دیگری که میتوان آن را به یک چاپگر مجازی یا فیزیکی ارسال کرد.
- PrintToFile: اگر مقدار این پارامتر
True
باشد، به جای چاپ فیزیکی، خروجی به یک فایل ارسال میشود. - PrToFileName: اگر
PrintToFile
برابر باTrue
باشد، این پارامتر نام و مسیر فایل خروجی را مشخص میکند.
فایلهای .prn
فایلهای با پسوند .prn
یک نوع فایل چاپ هستند که حاوی دستورات چاپ است. این فایلها معمولاً به یک چاپگر مجازی یا فیزیکی ارسال میشوند تا محتوای آنها چاپ شود.
نکات مهم پارامتر PrintToFile
- اگر
PrToFileName
مشخص نشود، اکسل به طور پیشفرض یک مسیر برای فایل انتخاب میکند، اما بهتر است همیشه مسیر و نام فایل را بهصراحت تعیین کنید. - این فایلها معمولاً بهصورت متنی خام ذخیره نمیشوند و برای چاپ استفاده میشوند. اگر میخواهید خروجی قابلخواندن توسط کاربران باشد، میتوانید از روشهای دیگر مانند استفاده از چاپگر PDF یا ذخیره بهعنوان فایل PDF استفاده کنید.
مثالهای عملی
چاپ صفحه با استفاده از شیء Worksheet در VBA
متد PrintOut
میتواند برای چاپ یک صفحه (Worksheet) خاص از یک کاربرگ (Workbook) استفاده شود. این متد برای اشیاء از نوع Worksheet در دسترس است و برای چاپ شیتهای جداگانه کاربرد دارد.
Sub PrintWorksheet()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' شیت مورد نظر
' چاپ شیت
ws.PrintOut Copies:=1, Collate:=True
End Sub
در این مثال:
- ابتدا شیت Sheet1 از ورکبوک فعلی انتخاب شده و سپس به چاپگر ارسال میشود.
چاپ همه صفحات کاربرگ با استفاده از شیء Workbook در VBA
متد PrintOut
برای چاپ کل یک کاربرگ (همه صفحهها) استفاده میشود. برای اشیاء Workbook میتوانید متد PrintOut را استفاده کنید تا تمام صفحات موجود در کاربرگ چاپ شوند.
Sub PrintWorkbook()
Dim wb As Workbook
Set wb = ThisWorkbook ' ورکبوک فعلی
' چاپ کل ورکبوک
wb.PrintOut Copies:=1, Collate:=True
End Sub
در این مثال:
- کل ورکبوک به چاپگر ارسال میشود، به طوری که تمام شیتهای آن چاپ میشوند.
چاپ نمودار با استفاده از شیء Chart در VBA
میتوانید از PrintOut برای چاپ نمودارهای خاص استفاده کنید. نمودارها نیز اشیائی هستند که میتوانند با این متد چاپ شوند.
Sub PrintChart()
Dim chartObj As ChartObject
Set chartObj = ThisWorkbook.Sheets("Sheet1").ChartObjects(1) ' اولین نمودار در شیت
' چاپ نمودار
chartObj.PrintOut Copies:=2
End Sub
در این مثال:
- اولین نمودار موجود در Sheet1 به چاپگر ارسال میشود.
چاپ محدوده سلولی با استفاده از شیء Range در VBA
گاهی نیاز است که تنها یک بخش خاص از دادهها (مثلاً محدودهای از سلولها) چاپ شوند. در این حالت میتوان از PrintOut برای چاپ Range استفاده کرد.
Sub PrintRange()
Dim rng As Range
Set rng = ThisWorkbook.Sheets("Sheet1").Range("A1:D10") ' محدوده مورد نظر
' چاپ محدوده
rng.PrintOut
End Sub
در این مثال:
- محدودهای از سلولها (A1 تا D10) از Sheet1 به چاپگر ارسال میشود.
چاپ پیوتتیبل با استفاده از شیء PivotTable در VBA
اگر بخواهید فقط یک پیوتتیبل خاص را چاپ کنید، میتوانید از متد PrintOut برای چاپ آن پیوتتیبل استفاده کنید. پیوتتیبلها در محدودهای از شیتها قرار دارند و بهراحتی قابل چاپ هستند.
Sub PrintPivotTable()
Dim pt As PivotTable
Set pt = ThisWorkbook.Sheets("Sheet1").PivotTables("PivotTable1") ' پیوت تیبل
' چاپ پیوت تیبل
pt.PrintOut
End Sub
در این مثال:
- پیوتتیبل با نام PivotTable1 که در Sheet1 قرار دارد، به چاپگر ارسال میشود.
چاپ صفحه اکسل با انتخاب نام پرینتر
در اینجا یک مثال عملی برای استفاده از پارامتر ActivePrinter
در متد PrintOut
آورده شده است:
Sub PrintToSpecificPrinter()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' نام شیت مورد نظر را وارد کنید
' تعیین نام چاپگر
Dim printerName As String
printerName = "HP LaserJet P2055" ' نام چاپگر خود را وارد کنید
' تنظیم چاپگر فعال
Application.ActivePrinter = printerName
' چاپ شیت با چاپگر مشخص
ws.PrintOut Copies:=1, Collate:=True
End Sub
توضیحات کد:
- تعریف شیت: ابتدا یک متغیر به نام
ws
برای ذخیره شیت مورد نظر تعریف میشود. - تعیین نام چاپگر: نام چاپگر را در متغیر
printerName
ذخیره میکنید. نام چاپگر باید دقیقاً مطابق با نامی باشد که در سیستم شما نمایش داده میشود. - تنظیم چاپگر فعال: با استفاده از
Application.ActivePrinter = printerName
، چاپگر فعال را تنظیم میکنید. - چاپ شیت: با
ws.PrintOut Copies:=1, Collate:=True
، شیت مورد نظر را با چاپگر مشخصشده چاپ میکنید.
چاپ صفحه اکسل با چاپگر شبکهای
اگر از یک چاپگر شبکهای استفاده میکنید، نام چاپگر باید به مسیر چاپگر در شبکه اشاره نماید. در این حالت ممکن است نام چاپگر به صورت زیر باشد:
printerName = "\\ServerName\HP LaserJet P2055"
در این حالت، ServerName
باید با نام واقعی سرور چاپگر شما جایگزین شود.
Sub PrintToSpecificPrinter()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' نام شیت مورد نظر را وارد کنید
' تعیین نام چاپگر
Dim printerName As String
printerName = "\\ServerName\HP LaserJet P2055"
' تنظیم چاپگر فعال
Application.ActivePrinter = printerName
' چاپ شیت با چاپگر مشخص
ws.PrintOut Copies:=1, Collate:=True
End Sub
چاپ صفحه اکسل به فایل .prn
در این مثال، خروجی پرینت یک شیت بهجای چاپ فیزیکی، به یک فایل ذخیره میشود:
Sub PrintSheetToFile()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' نام شیت مورد نظر
' مسیر و نام فایل خروجی
Dim filePath As String
filePath = "C:\Users\YourUsername\Desktop\output.prn"
' چاپ شیت به فایل
ws.PrintOut PrintToFile:=True, PrToFileName:=filePath
End Sub
توضیحات کد:
- تعریف شیت: ابتدا یک متغیر به نام
ws
برای ذخیره شیت مورد نظر تعریف میشود. - تعیین مسیر فایل: مسیر و نام فایل خروجی در متغیر
filePath
ذخیره میشود. در اینجا، خروجی به یک فایل با پسوند.prn
در دسکتاپ کاربر ذخیره میشود. - چاپ به فایل: با استفاده از
ws.PrintOut PrintToFile:=True, PrToFileName:=filePath
، شیت مورد نظر به جای چاپ شدن، به یک فایل با نام و مسیری که مشخص کردهاید، ذخیره میشود.
چاپ صفحه اکسل به PDF
اگر میخواهید بهجای چاپ به فایل .prn
به یک فایل PDF چاپ کنید، باید از چاپگرهای PDF مانند “Microsoft Print to PDF” یا هر چاپگر PDF دیگری که روی سیستم نصب است، استفاده کنید:
Sub PrintToPDF()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' نام شیت مورد نظر
' مسیر و نام فایل PDF خروجی
Dim pdfPath As String
pdfPath = "C:\Users\YourUsername\Desktop\output.pdf"
' تنظیم چاپگر PDF
Application.ActivePrinter = "Microsoft Print to PDF"
' چاپ به فایل PDF
ws.PrintOut PrintToFile:=True, PrToFileName:=pdfPath
End Sub
در این کد:
- از چاپگر “Microsoft Print to PDF” استفاده میشود.
- فایل خروجی بهصورت PDF و در مسیر مشخصشده ذخیره میشود.
سلام ببخشید اگر بخواهیم اسم فایل خروجی پی دی اف با یکی از سلول ها برابر باشد چطور؟
سلام
برای اینکار باید مسیر فایل PDF را اصلاح نمایید. بعنوان مثال فرض کنید مسیر فایل در متغیر pdfPath به شکل زیر ذخیره شده است:
pdfPath = "C:\Users\YourUsername\Desktop\output.pdf"
برای اینکه نام فایل از سلول A1 انتخاب شود کد را باید به صورت زیر اصلاح نمایید:
pdfPath = "C:\Users\YourUsername\Desktop\" & ActiveSheet.Cells(1, 1) & ".pdf"
کد بالا نام فایل از سلول A1 برگه فعال انتخاب خواهد نمود. موفق باشید.
سلام مجدد
تشکر فراوان از راهنمایی بسیار مفید و کاربردی شما و همچنین توجه به نظر مخاطبین خودتان …
سلام و وقت بخیر
بسیار خوشحالم که آموزشها برای شما مفید بوده است. نظر و رضایت شما برای ما ارزشمند است. اگر سوال یا نکتهای بود، خوشحال میشوم که کمک کنم.