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

فرانکلین یک ماکرو دارد که تعدادی ردیف را در یک کاربرگ پنهان می کند و سپس کاربرگ را چاپ می کند. برای انجام این کار او از کنترل کننده رویداد BeforePrint استفاده می کند. مشکل اینجاست که فرانکلین می‌خواهد بعد از اتمام چاپ، ردیف‌ها را به‌طور خودکار آشکار کند. او نمی داند چگونه این کار را در کلان خود انجام دهد.

چند راه وجود دارد که می توانید به این موضوع نزدیک شوید. یکی استفاده از کنترل کننده رویداد BeforePrint و استفاده از آن برای مخفی کردن ردیف های مورد نظر و سپس تعیین یک ماکرو برای اجرا از طریق متد OnTime. شکلی که کنترل کننده رویداد به نظر می رسد:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
     Code here to hide rows desired

    Application.OnTime Now, "AfterPrint"
End Sub

باید کدی را به این کنترل کننده رویداد اضافه کنید تا ردیف هایی را که می خواهید پنهان کنید پنهان کنید. (فرانکلین گفت که چنین کدی کار می‌کرد؛ پس از چاپ آن‌ها را پنهان می‌کرد که با آن مشکل داشت.) توجه داشته باشید که ماکرویی که از طریق OnTime فراخوانی می‌شود، AfterPrint نامیده می‌شود. این ماکرو باید در یک ماژول معمولی قرار گیرد، نه در همان ماژولی که کنترل کننده های رویداد قرار می گیرند. این می تواند حتی ساده تر از کنترل کننده رویداد باشد:

Sub AfterPrint()
     Code here to unhide rows
    Cells.Select
    Selection.EntireRow.Hidden = False
End Sub

همچنین در صورت تمایل می توانید نیاز به روش OnTime (و ماکرو AfterPrint) را به طور کامل دور بزنید. این شامل این رویکرد است:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Cancel = True
     Code here to hide rows desired

    Application.EnableEvents = False
    ActiveSheet.PrintOut
    Application.EnableEvents = True

     Code here to unhide rows
End Sub

ماکرو به این دلیل کار می‌کند که چاپی را که رویداد BeforePrint را راه‌اندازی کرده بود، لغو می‌کند، ردیف‌ها را پنهان می‌کند، کاربرگ فعال را چاپ می‌کند و سپس سطرها را باز می‌کند.

اشکال چنین رویکرد مبتنی بر رویداد این است که آنچه کاربر می تواند چاپ کند را محدود می کند. به عبارت دیگر، کاربر فقط می‌تواند آنچه را که شما به او اجازه چاپ می‌دهید چاپ کند، نه آنچه را که واقعاً بخواهد چاپ کند. برای دور زدن این محدودیت نسبتاً بزرگ، باید رویکرد BeforePrint را به طور کامل کنار بگذارید. در عوض، یک ماکرو معمولی ایجاد کنید که کار چاپ را انجام می دهد:

Sub PrintWS()
     Code here to hide rows desired

    Application.EnableEvents = False
    ActiveSheet.PrintOut
    Application.EnableEvents = True

     Code here to unhide rows
End Sub

توجه داشته باشید که اساساً این روش دوم BeforePrint است - شما ردیف‌ها را پنهان می‌کنید، کاربرگ را چاپ می‌کنید و سپس سطرها را باز می‌کنید. این ماکرو PrintWS سپس می تواند به یک کلید میانبر یا چیزی در نوار ابزار دسترسی سریع متصل شود تا بتوان آن را به راحتی فراخوانی کرد.

به هر حال، اگر تصمیم دارید یکی از رویکردهای BeforePrint را انتخاب کنید، گزارش هایی مبنی بر عدم کارکرد صحیح آن در تمام نسخه های اکسل وجود دارد. (به‌نظر می‌رسد ردیابی این امر بسیار سخت است.) آنچه اتفاق می‌افتد این است که در برخی از نسخه‌ها، آنچه اکسل چاپ می‌کند، قبل از فراخوانی کنترل‌کننده رویداد BeforePrint «در سنگ» قرار می‌گیرد. این بدان معنی است که هر ردیفی که در کنترل کننده رویداد پنهان می کنید، وقتی کاربرگ واقعاً چاپ می شود نادیده گرفته می شود، بنابراین گویی هرگز ردیف ها را در ماکرو پنهان نکرده اید. تنها راه حل این واقعیت بسیار ناامیدکننده این است که خودتان مستقیماً از طریق مثال دوم BeforePrint در بالا یا رویکرد ماکرو PrintWS، چاپ را انجام دهید.

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

پاسخ شما

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

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

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

سوالات مشابه

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

31.4k سوال

16.7k پاسخ

620 دیدگاه

13.8k کاربر

20 نفر آنلاین
0 عضو و 20 مهمان در سایت حاضرند
بازدید امروز: 53578
بازدید دیروز: 33245
بازدید کل: 33817235
...