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

اکثر خوانندگان از قبل می دانند که می توانید توابع و زیر روال ها را با استفاده از VBA ایجاد کنید. این تفاوتی با آن چیزی که تحت نام ویژوال بیسیک VBA است، ندارد. به طور معمول، زمانی که کادر محاوره‌ای ماکروها را نمایش می‌دهید، یک ماکرو در لیست ماکرو نشان داده می‌شود ( Alt+F8 را فشار دهید )، مگر اینکه یکی از سه شرط رعایت شود:

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

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

Sub MySub()
    MsgBox "We are running the macro"
End Sub

این ماکرو در کادر محاوره ای Macros ظاهر می شود. اگر نمی‌خواهید ظاهر شود، چندین راه‌حل وجود دارد که می‌توانید دنبال کنید، که همه آنها با بررسی سه روش حذف ماکروها از فهرست کلان آشکار می‌شوند. اولین راه حل بالقوه این است که کد خود را بررسی کنید و بفهمید که آیا واقعا "جهانی" است یا خیر. آیا به کد بیش از یک ماژول نیاز دارید؟ اگر این کار را نکردید، زیرروال را Private اعلام کنید. در کادر محاوره ای ماکروها ظاهر نمی شود. بنابراین، ماکرو مشکل قبلی به صورت زیر می شود:

Private Sub MySub()
    MsgBox "We are running the macro"
End Sub

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

Function MySub() As Boolean
    MsgBox "We are running the macro"
End Function

این رویه در کادر محاوره ای Macros نشان داده نمی شود و به آرگومان نیاز ندارد. به طور پیش فرض False را برمی گرداند، اما این نتیجه را می توان نادیده گرفت. بسته به ماهیت زیربرنامه ای که در حال تغییر آن هستید، ممکن است به نفع شما باشد که واقعاً به تابع تبدیل شده اجازه دهید که True یا False بسته به موفقیت کاری که در کد انجام می شود، برگرداند. در این مورد، تابع تبدیل شده یک تابع واقعی است، و در واقع یک زیربرنامه ساختگی نیست، زیرا چیزی با ارزش را برمی گرداند.

سومین راه حل بالقوه استفاده از برخی پارامترهای ساختگی با زیربرنامه است. لازم نیست در خود زیربرنامه کاری با آنها انجام دهید، اما با قرار دادن آنها، رویه در لیست ماکرو فهرست نمی شود. در این سناریو، زیربرنامه مشکل به چیزی شبیه به زیر تغییر می کند:

Sub MySub(Void As Integer)
    MsgBox "We are running the macro"
End Sub

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

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

پاسخ شما

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

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

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

سوالات مشابه

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

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

142 نفر آنلاین
0 عضو و 142 مهمان در سایت حاضرند
بازدید امروز: 5554
بازدید دیروز: 10986
بازدید کل: 15363580
...