ایجاد سوال
dark_mode
0 دوستدار 0 امتیاز منفی
18 visibility
موضوع: آفیس توسط:

کرک پرسید آیا راهی برای کنترل مشروط آنچه در اکسل چاپ می شود وجود دارد؟ به عنوان مثال، سلول 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 در محدوده باشد، ماکرو از شما می پرسد که آیا می خواهید از پیش نمایش چاپ استفاده کنید یا خیر. بسته به پاسخ کاربران، ماکرو کاربرگ مشخص شده را چاپ می کند یا پیش نمایش چاپ را برای آن کاربرگ نمایش می دهد.

اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

looks_5نام شما برای نمایش - اختیاری
حریم شخصی : آدرس ایمیل شما محفوظ میماند و برای استفاده های تجاری و تبلیغاتی به کار نمی رود
عدد چهار رقمی در تصویر را وارد کنید

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
اگر حساب گوگل دارید به راحتی وارید شوید

0 پاسخ وجود دارد

سوال مشابهی یافت نشد

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

148 نفر آنلاین
0 عضو و 148 مهمان در سایت حاضرند
بازدید امروز: 16871
بازدید دیروز: 27627
بازدید کل: 15191695
...