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

اگر Roy هنگام باز کردن یک کتاب کار، کلید Shift را پایین نگه دارد، اکسل اجرای ماکروهای «خودکار» را که معمولاً اجرا می‌شوند، از جمله رویداد Workbook_Open دور می‌زند. او فکر می کند که آیا یک راه به همان اندازه آسان، هنگام بستن یک کتاب کار، وجود دارد که باعث شود اکسل رویداد Workbook_BeforeClose را دور بزند.

راه به همان اندازه آسان وجود ندارد. این بدان معنا نیست که نمی توان آن را انجام داد، اما "به همان اندازه آسان" به طور کلی به معنای "چیزی ساخته شده است؛ کلیدهایی برای فشار دادن یا تنظیم کردن برای ایجاد." چنین کلیدها و تنظیماتی برای دور زدن رویداد BeforeClose در اکسل تعبیه نشده است.

کاری که می توانید انجام دهید این است که نحوه برنامه ریزی رویداد BeforeClose را به گونه ای تنظیم کنید که اگر یک شرط خاص برآورده شد، کد موجود در کنترل کننده رویداد دور زده شود. یک روش آسان این است که در صورت انتخاب یک سلول کاربرگ خاص، به سادگی کد را دور بزنید، به این ترتیب:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If ActiveCell.Address = "$Z$27" Then Exit Sub
    
     Your normal code here...
    
End Sub

در این حالت، اگر سلول فعال - سلولی که هنگام راه اندازی رویداد BeforeClose انتخاب می شود - سلول Z27 باشد، کد معمولی شما در کنترل کننده رویداد حذف می شود. اگر سلول دیگری انتخاب شده باشد، از آن رد نمی شود. (من عمداً سلول Z27 را انتخاب کردم زیرا هم باطنی و هم مبهم است. البته می توانید کد را تغییر دهید تا هر سلول دیگری را که می خواهید منعکس کند.)

اگر برای بررسی اینکه آیا کلید Shift پایین نگه داشته شده است، در حالت خاموش هستید، می توانید با استفاده از Windows API این کار را انجام دهید. این شامل افزودن مقداری کد به ناحیه اعلامیه های یک ماژول است. این می تواند یک ماژول معمولی باشد. لازم نیست در پنجره کد ThisWorkbook باشد. فقط باید مطمئن شوید که در قسمت اعلامیه‌ها قرار دارد، قبل از اینکه هر رویه‌ای اعلام شود.

#If VBA7 Then
    Declare PtrSafe Function GetKeyState Lib "USER32" (ByVal vKey As Long) As Integer
#Else
    Declare Function GetKeyState Lib "USER32" (ByVal vKey As Long) As Integer
#End If

توجه داشته باشید که #اگر از دستور شرطی VBA7 استفاده می شود تا اگر از اکسل 2010 یا جدیدتر استفاده می کنید، از نحو صحیح اعلان استفاده می شود تا هیچ خطایی در نسخه های 32 بیتی یا 64 بیتی برنامه وجود نداشته باشد.

اکنون، در کنترلر رویداد BeforeClose خود می توانید کارهای زیر را انجام دهید:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Const VSHIFT = &H10
    Const SHIFTED = &H80

    If GetKeyState(VSHIFT) And SHIFTED Then Exit Sub
    
     Your normal code here...
    
End Sub

اگر با فعال شدن رویداد BeforeClose کلید Shift را نگه دارید، کد BeforeClose حذف می شود. باید توجه داشته باشید که تشخیص اینکه چه زمانی باید کلید Shift را نگه دارید یا به اندازه کافی آن را نگه داشته اید کمی دشوار باشد. به همین دلیل، من تمایل دارم رویکرد "بررسی ActiveCell" را بهتر ترجیح دهم، زیرا می توانید به سادگی سلول را انتخاب کنید، کتاب کار را ببندید و آن را فراموش کنید.

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

پاسخ شما

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

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

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

سوالات مشابه

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما
0 دوستدار 0 امتیاز منفی
0 پاسخ 37 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 61 visibility
ارسال شده در 25 تیر 1402 موضوع: آفیس توسط: Admin
0 دوستدار 0 امتیاز منفی
1 پاسخ 52 visibility
ارسال شده در 2 مرداد 1402 موضوع: موبایل توسط: Admin
0 دوستدار 0 امتیاز منفی
1 پاسخ 49 visibility
0 دوستدار 0 امتیاز منفی
1 پاسخ 45 visibility

24.3k سوال

9.6k پاسخ

614 دیدگاه

11.2k کاربر

356 نفر آنلاین
0 عضو و 356 مهمان در سایت حاضرند
بازدید امروز: 26185
بازدید دیروز: 25180
بازدید کل: 20363525
...