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

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

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

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

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

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

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 پاسخ 181 visibility
ارسال شده در 26 تیر 1402 موضوع: آفیس توسط: Admin
0 دوستدار 0 امتیاز منفی
0 پاسخ 100 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 96 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 85 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 99 visibility

31.4k سوال

16.7k پاسخ

619 دیدگاه

13.7k کاربر

8 نفر آنلاین
0 عضو و 8 مهمان در سایت حاضرند
بازدید امروز: 1357
بازدید دیروز: 26952
بازدید کل: 33006808
...