نسخه جدید افزونه تقویم شمسی منتشر شد!!! جزئیات بیشتر در صفحه این محصول (سابقه افزونه تقویم شمسی) نوشته شده.
سبد خرید
0

محصولی در سبد خرید نیست.

بازگشت به فروشگاه
تمام دسته ها
  • تمام دسته ها
  • ابزارها
  • افزونه ها
  • اکسل مدیا
  • Power BI
  • Power Pivot
  • Power Query
  • توابع اکسل
  • دسته‌بندی نشده
  • دیده بان
  • گوگل شیت
  • مسائل کاربردی
  • معرفی کتاب
  • نمودار ها
  • وی بی - ماکرو

تابع Msgbox و تعامل با کاربر

تابع Msgbox
۴.۷/۵ - (۶ امتیاز)

تابع Msgbox در VBA و نمایش پیغام به کاربر

در هنگام ساخت برنامه با استفاده از VBA و در بسیاری از موارد نیاز هست که اطلاعت خاصی به کاربر نمایش داده شود. برای نمایش اطلاعات به کاربر روش های مختلفی تعریف شده که یکی از این روش ها استفاده از تابع Msgbox هست. با اجرای دستور کد Msgbox یک پنجره به کاربر نمایش داده میشه که حاوی متنی هست که تعیین کردیم. در VBA امکان شخصی سازی این پنجره تا حدودی میسر شده که در این آموزش در این مورد و نحوه استفاده از تابع Msgbox در یک Sub صحبت میکنیم.

ساختار تابع MsgBox به صورت زیر هست:

MsgBox( Prompt[Buttons][Title][HelpFile][Context] )

شرح این آرگومان ها رو در جدول زیر ببینید:

Prompt: متنی که قرار است به کاربر به عنوان پیغام نمایش داده بشه.

[Buttons]: آرگومان اختیاری که به واسطه مقادیری که در آن قرار داده میشه، نوع پنجره نمایش داده شده و دکمه های آن تعیین خواهد شد. برخی از مقادیری که در این آرگومان میتونید وارد کنید از این قراره:

مقدار دکمه های نمایش داده شده
vbOKOnly نمایش دکمه OK
vbOKCancel نمایش دکمه OK و Cancel
vbAbortRetryIgnore نمایش سه دکمه Abort،Retry و Ignore
vbYesNoCancel نمایش دکمه های Yes، No و Cancel
vbYesNo نمایش دکمه های Yes و No
vbRetryCancel نمایش دکمه های Retry و Cancel
vbMsgBoxRtlReading تعیین نوشته های پنجره به صورت راست به چپ برای زبان های فارسی و …
vbMsgBoxRight قرار دادن متن پیغام در سمت راست
vbExclamation نمایش آیکون اخطار در پیغام
vbInformation نمایش علامت تعجب در پیغام
vbQuestion نمایش آیکون علامت سوال در پیغام
vbCritical نمایش آیکون ضربدر در پیغام

اگر مقدار این آرگومان خالی بماند، حالت پیشفرض برای پیغام نمایش داده شده به صورت vbOKOnly در نظر گرفته خواهد شد.

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

 

[Ttile]: متنی اختیاری جهت نمایش عنوان در پنجره نمایش داده شده استفاده میشه.

[HelpFile]: متن اختیاری جهت مشخص کردن فایل راهنمای مربوط به این پنجره هست. توجه کنید که اگه این قسمت مقداردهی شده باشه، مقدار آرگومان [Context] هم باید مقداردهی شده باشه.

[Context]: یک عدد اختیاری جهت تعیین عنوان مورد نظر در فایل راهنمای مشخص شده در بخش [HelpFile] هست.

با مقدار دهی آرگومان های مختلف این تابع و قرار دادن این دستور در یک Sub میتونید اون رو اجرا و نتیجه (در شکل ۱ نمایش داده شده) رو ببینید:

پنجره نمایش داده شده توسط کد Msgbox

شکل ۱- پنجره نمایش داده شده توسط کد Msgbox

در این کد، دو حالت در vbOKOnly و vbInformation همزمان انتخاب شده که با علامت + از هم جدا شده و در آرگومان دوم تابع قرار داده شده.

خروجی تابع

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

دکمه انتخاب شده عدد متناظر عبارت متناظر
دکمه OK ۱ vbOK
دکمه Cancel ۲ vbCancel
دکمه Abort ۳ vbAbort
دکمه Retry ۴ vbRetry
دکمه Ignore ۵ vbIgnore
دکمه Yes ۶ vbYes
دکمه No ۷ vbNo

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

مثال: حذف رکورد اطلاعاتی

با اجرای این کد پنجره شکل ۲ نمایش داده میشه که از کاربر سوالی میپرسه و بر اساس گزینه انتخاب شده ادامه کد اجرا میشه.

بررسی دکمه انتخاب شده در تابع Msgbox

شکل ۲- بررسی دکمه انتخاب شده در تابع Msgbox

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

در بعضی مواقع لازم هست قبل از نمایش اطلاعات به کاربر، یک سری اطلاعات دریافت کنیم، این کار رو با تابع Inputbox انجام میدیم که در مقاله تابع InputBox ابزاری برای تعامل با کاربر در موردش صحبت کردم.

کلیدواژه : تابع Msgboxمتوسط
133

من سامان چراغی هستم. دانش آموخته مقطع فوق لیسانس دانشگاه تربیت مدرس در رشته مهندسی صنایع. از سال 1388 اکسل و برنامه نویسی VBA رو به صورت حرفه ای شروع کردم.

دیدگاه کاربران
  • ولی الله ۲۰ آذر ۱۴۰۲ / ۱۰:۱۲ ق٫ظ

    سلام و خدا قوت
    من میخوام یک msgbox باز کنم بدون هیچ دکمه ای و فقط یک نمایشگر باشه، مثلا من یه شمارنده رو توی کدهام گذاشتم و قراره این شمارنده رو نمایش بده و خودکار بسته بشه، چنین چیزی هم امکان داره یا خیر؟
    ممنون

    • آواتار
      حسنا خاکزاد ۲۳ آذر ۱۴۰۲ / ۱۰:۳۱ ق٫ظ

      درود بر شما
      از یک یوزرفرم بدون باتن استفاده کنید

      • عبدالباسط ۱۳ اردیبهشت ۱۴۰۳ / ۱۰:۰۵ ب٫ظ

        یه کد وی بی ای اکسل میخوام که وقتی کاربر در هرجای ویندوز کلید کیبورد را میزنه یه مسج باکس برای ظاهر بشه

        • سامان چراغی ۲۱ اردیبهشت ۱۴۰۳ / ۶:۳۴ ب٫ظ

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

  • ایمانی ۱۵ مهر ۱۴۰۲ / ۲:۰۷ ب٫ظ

    سلام
    من میخوام با توجه به اطلاعات وارد شده برای هر دانش آموز فرمولی بنویسم که در سلولهایی مشخص کنه دانش آموز مجاز هست یا خیر از چه دستوری باید استفاده کنم؟

    • آواتار
      حسنا خاکزاد ۱۶ مهر ۱۴۰۲ / ۶:۲۰ ب٫ظ

      درود بر شما
      با توجه به منطق مجاز یا غیر مجاز بودن شما میتونید تابع if بنویسید

  • خالد ۶ دی ۱۴۰۱ / ۰:۵۷ ق٫ظ

    با سلام.
    در دستور msgbox چطور میشه نوع فونت و تعیین کرد؟
    با سپاس

    • سامان چراغی ۷ دی ۱۴۰۱ / ۹:۰۶ ق٫ظ

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

  • mm ۲۵ آذر ۱۴۰۱ / ۸:۰۳ ب٫ظ

    سلام
    اگر بخواهیم به جای yes/no بله /خیر بگذارد چکار باید بکنیم؟

    • سامان چراغی ۲۵ آذر ۱۴۰۱ / ۹:۳۵ ب٫ظ

      سلام
      در حالت عادی امکان انجام چنین کاری نیست. اما می توان با فراخوانی توابع ویندوزی مرتبط با این تابع در زمان ساخت یوزرفرم ساختار و متن رو تغییر داد که در این جا نمیشه توضیح داد.
      جهت توضیحات کامل به مقاله ویرایش تابع Msgbox رجوع کنید.

  • ونداد ۲۷ شهریور ۱۴۰۱ / ۱۲:۴۹ ب٫ظ

    سلام
    توضیحات خیلی کاملی بود
    متنی که میخوام نمایش بدم به صورتی زیر هست. چطور میشه بدون اینکه پشت سر هم نمایش بده این کار رو کرد؟
    _ متن یک
    _ متن دو
    _ متن سه
    _ متن چهار

    • سامان چراغی ۲۲ مهر ۱۴۰۱ / ۱۱:۱۴ ب٫ظ

      سلام
      تشکر از شما
      در انتهای هر خط برای ایجاد شکستگی vbNewLine رو اضافه کنید.

  • Seyyed ۱۴ شهریور ۱۴۰۱ / ۵:۳۱ ب٫ظ

    سلام وقتتون بخیر. خداقوت و ممنون از سایت خوبتون
    ببخشید من یک متن دارم و میخوام داخلش مقادیر جایگزین بشن مثلا : سلام وقت بخیر کد کاربری شما “فلان”و رمز عبور شما “فلان” است.
    از من مقادیر “فلان” رو بگیره و جایگزین کنه در متن
    ممنون میشم راهنمایی بفرمایید

  • علی ۱۰ آبان ۱۴۰۰ / ۶:۴۹ ب٫ظ

    سلام استاد وقتتون بخیر
    من یک فایل اکسل دارم که با vba کد نویسی شده
    داخل فایلم حدود ۲۰۰ موضوع دارم میخوام وقتی هر بار فایل رو باز کردم یکی از موضوعات رو خود سیستم انتخاب کنه بهم نمایش بده
    آیا راهی هست که msgbox رو بشه فرمول داد که هربار یکی از موضوعات رو بهم نمایش بده ممنون میشم راهنمایی کنید که چه کدی بنویسم که اینکار رو برای من انجام بده
    سپاسگذارم

    • آواتار
      حسنا خاکزاد ۱۰ آبان ۱۴۰۰ / ۹:۴۲ ب٫ظ

      درود
      یک عدد رندم بین ۱ تا ۲۰۰ رو تولید کنید کثلا با تابع randbetween
      بعد اون شماره رو وصل کنید به اون موضوضع
      بقیش هم که کد msgbox میخواد که داخل مقاله هست

  • ahmad ۲۸ فروردین ۱۴۰۰ / ۷:۴۶ ب٫ظ

    با سلام
    در اجرای Msgbox بجای اینکه پیغام به صورت فارسی نمایش داده شود، لوزی هایی که علامت؟ درآنهاست و با رنگ مشکی نمایش داده می شود. چگونه این مشکل حل می شود؟

    • سامان چراغی ۲۹ فروردین ۱۴۰۰ / ۷:۵۳ ق٫ظ

      درود،
      وقت بخیر
      از مسیر Control Panel > Region > Administrative گزینه Change System Locale … رو بزنید و از لیست باز شده گزینه Persian رو انتخاب کنید، سیستم رو Restart کنید و مجددا کد رو اجرا کنید.

  • زمانی ۲۳ اردیبهشت ۱۳۹۹ / ۶:۱۶ ب٫ظ

    با سلام واحترام
    علاقه مند به آموزش VBA هستم از کجا شروع کنم و با چه فایل و کتاب آموزشی
    مچکرم

    • آواتار
      حسنا خاکزاد ۲۳ اردیبهشت ۱۳۹۹ / ۹:۳۷ ب٫ظ

      درود بر شما
      میتونید از این کتاب شروع کنید
      یا اینکه این ویدئو رو تهیه کنید و استفاده کنید

  • آرش ۲۹ آذر ۱۳۹۸ / ۱۰:۴۱ ب٫ظ

    خیلی ممنون
    ارزش انسان هایی که داشته ها و اطلاعاتشون رو بدون منت به اشتراک میذارن بسیار بالاست و با یک قدر دانی کوچک نمیشه جبران کرد
    بسیار لطف کردید

  • مهران کرامت زاده ۲۲ شهریور ۱۳۹۷ / ۵:۲۲ ب٫ظ

    با سپاس
    اطلاعات دریافتی بسیار مفید و مناسب است .

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

توسط
تومان