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

هنگامی که در حال توسعه یک ماکرو برای استفاده دیگران هستید، ممکن است بخواهید روشی اضافه کنید تا کاربر قبل از پایان ماکرو شما از ماکرو خارج شود و همچنان کنترل کارهای ماکرو را حفظ کند. Ctrl+Break یک ماکرو را متوقف می کند، اما به خوبی از آن خارج نمی شود، زیرا به کاربر اجازه می دهد کد را در ویرایشگر VBA مشاهده کند.

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

Do ...

        your code goes here

    Counter = Counter + 1
    If Counter Mod 25 = 0 Then
        If MsgBox("Stop Macro?", vbYesNo) = vbYes Then End
    End If
Loop

ساخت ماکرو بر این فرض استوار است که شما یک سری مراحل دارید که می خواهید بارها و بارها با استفاده از ساختار Do... Loop تکرار کنید. هر بار که از طریق حلقه، مقدار Counter افزایش می یابد. هر 25 بار از طریق حلقه، "توقف ماکرو؟" درخواست نمایش داده می شود و کاربر فرصتی برای خروج دارد.

اجرای این رویکرد آسان است و ممکن است برای برخی اهداف کاملاً خوب عمل کند. با این حال، بزرگترین ایراد این رویکرد این است که فوریت را اجازه نمی دهد - کاربر باید منتظر بماند تا حداقل 25 تکرار رخ دهد تا از ماکرو خارج شود.

روش دیگر "مخفی کردن" کد VBA و اعمال رمز عبور برای آن است. این کار را با دنبال کردن مراحل زیر از ویرایشگر VBA انجام می دهید:

image

شکل 1. تب Protection از کادر محاوره ای Project Properties.

  1. از منوی Tools گزینه VBAProject Properties را انتخاب کنید. ویرایشگر گفتگوی Project Properties را نمایش می دهد.
  2. مطمئن شوید که تب Protection نمایش داده شده است. (شکل 1 را ببینید.)
  3. تیک Lock Project for Viewing را انتخاب کنید.
  4. در کادر Password، رمز عبوری را که می خواهید برای محافظت از ماکرو استفاده کنید، وارد کنید.
  5. در کادر تأیید رمز عبور، برای بار دوم همان رمز عبور را وارد کنید.
  6. روی OK کلیک کنید.

ویرایشگر VBA را ببندید، سپس کتاب کار را ذخیره کنید. با محافظت از پروژه VBA، کاربر همچنان می تواند Ctrl+Break را برای توقف ماکرو کلیک کند، اما نمی تواند به کد برنامه واقعی برسد. آنها فقط می توانند از میان دکمه های Continue یا End انتخاب کنند که هر دو از کد شما محافظت می کنند. به عنوان یک مزیت اضافی، این رویکرد همچنین کاربر را از مشاهده کد شما با استفاده از گزینه های منو، نوار ابزار یا نوار محدود می کند.

با این حال، شاید بهترین رویکرد ایجاد یک کنترل کننده خطا باشد که اساساً هر زمان که کاربر Esc یا Ctrl+Break را فشار می‌دهد، شارژ را به عهده بگیرد . سپس کنترل کننده ای که اجرا می شود می تواند از کاربر بپرسد که آیا واقعاً می خواهد کار را ترک کند یا خیر، و در صورت انجام آن، به راحتی خاموش می شود. در اینجا چند نمونه کد وجود دارد که نشان می دهد چگونه این کار انجام می شود:

Sub Looptest()
    Application.EnableCancelKey = xlErrorHandler
    On Error GoTo ErrHandler

    Dim x As Long
    Dim y As Long
    Dim lContinue As Long

    y = 100000000
    For x = 1 To y Step 1
    Next

    Application.EnableCancelKey = xlInterrupt
    Exit Sub

ErrHandler:
    If Err.Number = 18 Then
        lContinue = MsgBox(prompt:=Format(x / y, "0.0%") & _
          " complete" & vbCrLf & _
          "Do you want to Continue (YES)?" & vbCrLf & _
          "Do you want to QUIT? [Click NO]", _
          Buttons:=vbYesNo)
        If lContinue = vbYes Then
            Resume
        Else
            Application.EnableCancelKey = xlInterrupt
            MsgBox ("Program ended at your request")
            Exit Sub
        End If
    End If

    Application.EnableCancelKey = xlInterrupt
End Sub

توجه داشته باشید که این مثال از روش EnableCancelKey استفاده می‌کند و نام برچسبی را که در صورت فشار دادن کلید لغو ( Esc یا Ctrl+Break ) باید به آن پرش کنید، اختصاص می‌دهد. در این حالت، ErrHandler به پرش داده می شود و از کاربر پرسیده می شود که چه کاری انجام دهد. اگر کاربر خروج را انتخاب کند، ماکرو به آرامی خاموش می شود.

توجه داشته باشید که اولین کاری که بعد از برچسب ErrHandler انجام می شود این است که بررسی کنیم که آیا خاصیت Number شی Err برابر با 18 است یا خیر. اگر اینطور است، می دانید که یک کلید لغو فشار داده شده است. اگر نه، نوع دیگری از خطا رخ داده است، و باید به هر طریقی که برای ماکرو شما مناسب است، با آن برخورد کرد.

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

پاسخ شما

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

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

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

سوالات مشابه

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما
0 دوستدار 0 امتیاز منفی
0 پاسخ 52 visibility
ارسال شده در 27 تیر 1402 موضوع: آفیس توسط: Admin
0 دوستدار 0 امتیاز منفی
0 پاسخ 24 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 42 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 21 visibility
ارسال شده در 26 تیر 1402 موضوع: آفیس توسط: Admin
0 دوستدار 0 امتیاز منفی
0 پاسخ 24 visibility

24.3k سوال

9.6k پاسخ

614 دیدگاه

11.2k کاربر

294 نفر آنلاین
0 عضو و 294 مهمان در سایت حاضرند
بازدید امروز: 15918
بازدید دیروز: 25180
بازدید کل: 20353264
...