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

باب در حال پردازش اطلاعات در یک ورک بوک با استفاده از یک ماکرو است. او مایل است که ماکرو یک ورک بوک دوم را باز کند که دارای یک ماکرو AutoClose در آن باشد، اما نمی خواهد وقتی کتاب دوم بسته می شود، اجرا شود. او به دنبال راهی برای باز کردن کتاب دوم، تحت کنترل ماکرو در ورک بوک اول، بدون فعال کردن ماکروهای ورک بوک دوم است.

هیچ راهی برای غیرفعال کردن ماکروها در ورک بوک دوم هنگام باز کردن آن تحت کنترل ماکرو وجود ندارد. (اگر آن را به صورت دستی باز می کنید، بدیهی است که می توانید کلید Shift را با باز شدن ورک بوک نگه دارید، اما این به ماکرو شما کمکی نمی کند - انگشتی برای نگه داشتن آن کلید ندارد!)

با این حال، چند راه حل وجود دارد. اولین مورد شامل تغییر کد شما است که دومین ورک بوک را می بندد، به این ترتیب:

Application.EnableEvents = False
Workbooks("SecondBook.xls").Close
Application.EnableEvents = True

با تنظیم ویژگی EnableEvents روی False، رویدادی که قرار است رخ دهد (بستن ورک بوک) ماکرو AutoClose را راه اندازی نمی کند. سپس می توانید (و باید) ویژگی EnableEvents را روی True تنظیم کنید تا بعداً رویدادها ادامه پیدا کنند.

راه حل دیگر این است که نوعی "پرچم" را در ماکرو AutoClose ورک بوک دوم تنظیم کنید. این پرچم می تواند آزمایش کند که آیا اولین ورک بوک باز است یا نه، و اگر باز است، کد اصلی را در ماکرو AutoClose اجرا نمی کند.

برای انجام این کار، در کتاب دوم در بالای صفحات ماژول کد زیر را اضافه کنید:

Dim AutoCloseDisabled as Boolean
Sub DisableAutoClose()
    AutoCloseDisabled=True
End Sub

توجه داشته باشید که عبارت اعلان برای متغیر AutoCloseDisabled خارج از هر رویه ای است، به این معنی که دامنه آن جهانی خواهد بود و در همه رویه ها قابل دسترسی است.

در مرحله بعد، ماکرو AutoClose را طوری تغییر دهید که بدنه آن در داخل یک عبارت If محصور شود، همانطور که در اینجا نشان داده شده است:

Sub AutoClose()
    variable declarations here

    If Not AutoCloseDisabled then

        body of AutoClose here

    End if
End Sub

ایده این است که وقتی کتاب دوم به طور معمول باز می شود، متغیر AutoCloseDisabled به طور خودکار روی False تنظیم می شود. (متغیرهای بولی به طور پیش فرض زمانی که اعلان می شوند روی False هستند.) از آنجایی که روال DisableAutoClose هرگز در ورک بوک اجرا نمی شود، دستور If در ماکرو AutoClose اجازه می دهد که بدنه واقعی ماکرو اجرا شود.

اگر دومین ورک بوک را از اولین ورک بوک خود باز کنید، کد موجود در اولین ورک بوک شما می تواند ماکرو DisableAutoClose را در ورک بوک دوم فراخوانی کند و در نتیجه پرچم AutoCloseDisabled را روی True تنظیم کند. این بدان معناست که وقتی دومین ورک بوک بسته می شود، دستور If از روی بدنه ماکرو AutoClose رد می شود.

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

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

97 نفر آنلاین
0 عضو و 97 مهمان در سایت حاضرند
بازدید امروز: 5592
بازدید دیروز: 14408
بازدید کل: 15454512
...