You are currently viewing دستور پرینت در اکسل با استفاده از VBA
دستور PrintOut در VBA

دستور پرینت در اکسل با استفاده از VBA

در اکسل 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 باشد (اختیاری).
آیا می‌دانید:

آیا می‌دانید که تسلط بر ماکرونویسی و دستورات VBA در اکسل به شما این امکان را می‌دهد که با استفاده از ویژوال بیسیک، عملکرد خود را در انجام کارهای روزمره به طرز قابل توجهی بهبود ببخشید؛ به طوری که با ایجاد نمونه کدهای شخصی‌سازی‌شده، می‌توانید به‌راحتی کارهای تکراری را انجام دهید و در نتیجه، وقت بیشتری برای انجام وظایف مهم‌تر داشته باشید؟

توضیحات پارامترها

توضیح پارامتر Collate

پارامتر Collate به تنظیم نحوه مرتب‌سازی نسخه‌های چاپ‌شده کمک می‌کند.

  • Collate:=True: نسخه‌ها به‌صورت مرتب‌شده چاپ می‌شوند. این یعنی تمام صفحات یک نسخه چاپ شده و سپس چاپ نسخه بعدی شروع می‌شود.
    • مثال: اگر 3 نسخه از صفحات 1 تا 3 را پرینت بگیرید، ترتیب چاپ به این صورت خواهد بود:
      • نسخه اول: صفحه 1، صفحه 2، صفحه 3
      • نسخه دوم: صفحه 1، صفحه 2، صفحه 3
      • نسخه سوم: صفحه 1، صفحه 2، صفحه 3
  • Collate:=False: تمام نسخه‌های هر صفحه به‌صورت پشت سر هم چاپ می‌شوند.
    • مثال: برای 3 نسخه از صفحات 1 تا 3، ترتیب چاپ به این شکل خواهد بود:
      • صفحه 1، صفحه 1، صفحه 1 (همه نسخه‌های صفحه 1)
      • صفحه 2، صفحه 2، صفحه 2 (همه نسخه‌های صفحه 2)
      • صفحه 3، صفحه 3، صفحه 3 (همه نسخه‌های صفحه 3)

توضیح پارامتر ActivePrinter

پارامتر ActivePrinter در دستور PrintOut در VBA به شما این امکان را می‌دهد که چاپگری را که می‌خواهید از آن استفاده کنید، مشخص کنید. این پارامتر زمانی که چندین چاپگر به سیستم متصل است، بسیار مفید است و به شما این اجازه را می‌دهد که تعیین کنید کدام چاپگر برای چاپ مورد استفاده قرار گیرد.

این پارامتر به نام چاپگری اشاره دارد که می‌خواهید از آن برای چاپ استفاده کنید. شما باید نام کامل چاپگر را به صورت یک رشته متنی (String) وارد کنید. اگر این پارامتر را نادیده بگیرید، اکسل از چاپگر پیش‌فرض سیستم استفاده می‌کند.

استفاده از پارامتر ActivePrinter زمانی اهمیت بیشتری پیدا می‌کند که شما بخواهید یک شیت را به چاپگری خاص ارسال کنید، مثلاً وقتی که چندین چاپگر در دسترس دارید یا چاپگری که معمولاً پیش‌فرض است برای نوع خاصی از چاپ مناسب نیست.

نکات مهم

  1. نام چاپگر: نام چاپگر باید دقیقاً همان‌طور که در سیستم شما نمایش داده می‌شود، نوشته شود. معمولاً شامل نام چاپگر و نام سازنده آن است.
  2. چاپگرهای شبکه‌ای: اگر از چاپگرهای شبکه‌ای استفاده می‌کنید، اطمینان حاصل کنید که نام چاپگر به‌درستی نوشته شده و قابل دسترسی باشد.

نکات اضافی پارامتر 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

توضیحات کد:

  1. تعریف شیت: ابتدا یک متغیر به نام ws برای ذخیره شیت مورد نظر تعریف می‌شود.
  2. تعیین نام چاپگر: نام چاپگر را در متغیر printerName ذخیره می‌کنید. نام چاپگر باید دقیقاً مطابق با نامی باشد که در سیستم شما نمایش داده می‌شود.
  3. تنظیم چاپگر فعال: با استفاده از Application.ActivePrinter = printerName، چاپگر فعال را تنظیم می‌کنید.
  4. چاپ شیت: با 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

توضیحات کد:

  1. تعریف شیت: ابتدا یک متغیر به نام ws برای ذخیره شیت مورد نظر تعریف می‌شود.
  2. تعیین مسیر فایل: مسیر و نام فایل خروجی در متغیر filePath ذخیره می‌شود. در اینجا، خروجی به یک فایل با پسوند .prn در دسکتاپ کاربر ذخیره می‌شود.
  3. چاپ به فایل: با استفاده از 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

در این کد:

  1. از چاپگر “Microsoft Print to PDF” استفاده می‌شود.
  2. فایل خروجی به‌صورت PDF و در مسیر مشخص‌شده ذخیره می‌شود.

این پست دارای 4 نظر است

  1. حامد

    سلام ببخشید اگر بخواهیم اسم فایل خروجی پی دی اف با یکی از سلول ها برابر باشد چطور؟

    1. صادق آب‌شناس
      صادق آب‌شناس

      سلام
      برای اینکار باید مسیر فایل PDF را اصلاح نمایید. بعنوان مثال فرض کنید مسیر فایل در متغیر pdfPath به شکل زیر ذخیره شده است:
      pdfPath = "C:\Users\YourUsername\Desktop\output.pdf"
      برای اینکه نام فایل از سلول A1 انتخاب شود کد را باید به صورت زیر اصلاح نمایید:
      pdfPath = "C:\Users\YourUsername\Desktop\" & ActiveSheet.Cells(1, 1) & ".pdf"
      کد بالا نام فایل از سلول A1 برگه فعال انتخاب خواهد نمود. موفق باشید.

  2. حامد

    سلام مجدد
    تشکر فراوان از راهنمایی بسیار مفید و کاربردی شما و همچنین توجه به نظر مخاطبین خودتان …

  3. صادق آب‌شناس
    صادق آب‌شناس

    سلام و وقت بخیر
    بسیار خوشحالم که آموزش‌ها برای شما مفید بوده است. نظر و رضایت شما برای ما ارزشمند است. اگر سوال یا نکته‌ای بود، خوشحال می‌شوم که کمک کنم.

دیدگاهتان را بنویسید