![تابع Msgbox](https://excelpedia.net/wp-content/uploads/2018/03/InputBox-Function-Cover.jpg)
تابع 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 میتونید اون رو اجرا و نتیجه (در شکل ۱ نمایش داده شده) رو ببینید:
۱ ۲ ۳ |
Sub Show_Massage() MsgBox "من سامان چراغی هستم", vbOKOnly + vbInformation, "اکسل پدیا" End Sub |
شکل ۱- پنجره نمایش داده شده توسط کد Msgbox
در این کد، دو حالت در vbOKOnly و vbInformation همزمان انتخاب شده که با علامت + از هم جدا شده و در آرگومان دوم تابع قرار داده شده.
خروجی تابع
بعد از نمایش پیغام به کاربر، کاربر باید یک گزینه رو انتخاب کنه. بعد از انتخاب گزینه توسط کاربر، مقدار تعریف شده متناظر با دکمه انتخاب شده برگردانده میشه. پس باید بدونیم مقدار تعریف شده متناظر با هر دکمه چی هست. در جدول زیر این مقادیر رو میبینید:
دکمه انتخاب شده | عدد متناظر | عبارت متناظر |
دکمه OK | ۱ | vbOK |
دکمه Cancel | ۲ | vbCancel |
دکمه Abort | ۳ | vbAbort |
دکمه Retry | ۴ | vbRetry |
دکمه Ignore | ۵ | vbIgnore |
دکمه Yes | ۶ | vbYes |
دکمه No | ۷ | vbNo |
در حالت معمول بعد از فشردن هر کدوم از این دکمه هیچ اتفاق خاصی نمیفته و شما به عنوان توسعه دهنده اکسل باید با استفاده از دستورهای شرطی و بررسی اینکه کدام دکمه انتخاب شده، تعریف کنید که چه اتفاقی بیفته.
مثال: حذف رکورد اطلاعاتی
۱ ۲ ۳ ۴ ۵ ۶ ۷ |
Sub Remove_Record IF Msgbox (“آیا مایل به حذف این کاربر هستید؟ با حذف کاربر قادر به بازگردانی آن نخواهید بود”, vbYesNo, “برنامه مدیریت مشتریان”) = vbYes Then ‘کدهای حذف رکورد مشتری Else ‘کدهای مربوط به عدم حذف رکورد مشتری End IF End Sub |
با اجرای این کد پنجره شکل ۲ نمایش داده میشه که از کاربر سوالی میپرسه و بر اساس گزینه انتخاب شده ادامه کد اجرا میشه.
شکل ۲- بررسی دکمه انتخاب شده در تابع Msgbox
تو این مطلب در مورد تابع Msgbox صحبت کردیم و آرگومان هاش رو بررسی کردیم. حالت های مختلفی رو میشه برای این تابع تعریف کرد و بسته به گزینه انتخابی توسط کاربر، نتایج مرتبط رو نمایش داد.
در بعضی مواقع لازم هست قبل از نمایش اطلاعات به کاربر، یک سری اطلاعات دریافت کنیم، این کار رو با تابع Inputbox انجام میدیم که در مقاله تابع InputBox ابزاری برای تعامل با کاربر در موردش صحبت کردم.
سلام و خدا قوت
من میخوام یک msgbox باز کنم بدون هیچ دکمه ای و فقط یک نمایشگر باشه، مثلا من یه شمارنده رو توی کدهام گذاشتم و قراره این شمارنده رو نمایش بده و خودکار بسته بشه، چنین چیزی هم امکان داره یا خیر؟
ممنون
درود بر شما
از یک یوزرفرم بدون باتن استفاده کنید
یه کد وی بی ای اکسل میخوام که وقتی کاربر در هرجای ویندوز کلید کیبورد را میزنه یه مسج باکس برای ظاهر بشه
درود، وقت بخیر
این کار با اکسل انجام نمیشه، پیشنهاد میکنم از برنامه های ضبط ماکرو تحت ویندوز استفاده کنید.
سلام
من میخوام با توجه به اطلاعات وارد شده برای هر دانش آموز فرمولی بنویسم که در سلولهایی مشخص کنه دانش آموز مجاز هست یا خیر از چه دستوری باید استفاده کنم؟
درود بر شما
با توجه به منطق مجاز یا غیر مجاز بودن شما میتونید تابع if بنویسید
با سلام.
در دستور msgbox چطور میشه نوع فونت و تعیین کرد؟
با سپاس
سلام
وقت بخیر
چون این تابع از پیش تعریف شده، تنها با فراخوانی توابع ویندوزی میشه این کار رو انجام داد که در این کامنت نمیگنجه.
سلام
اگر بخواهیم به جای yes/no بله /خیر بگذارد چکار باید بکنیم؟
سلام
در حالت عادی امکان انجام چنین کاری نیست. اما می توان با فراخوانی توابع ویندوزی مرتبط با این تابع در زمان ساخت یوزرفرم ساختار و متن رو تغییر داد که در این جا نمیشه توضیح داد.
جهت توضیحات کامل به مقاله ویرایش تابع Msgbox رجوع کنید.
سلام
توضیحات خیلی کاملی بود
متنی که میخوام نمایش بدم به صورتی زیر هست. چطور میشه بدون اینکه پشت سر هم نمایش بده این کار رو کرد؟
_ متن یک
_ متن دو
_ متن سه
_ متن چهار
سلام
تشکر از شما
در انتهای هر خط برای ایجاد شکستگی vbNewLine رو اضافه کنید.
سلام وقتتون بخیر. خداقوت و ممنون از سایت خوبتون
ببخشید من یک متن دارم و میخوام داخلش مقادیر جایگزین بشن مثلا : سلام وقت بخیر کد کاربری شما “فلان”و رمز عبور شما “فلان” است.
از من مقادیر “فلان” رو بگیره و جایگزین کنه در متن
ممنون میشم راهنمایی بفرمایید
درود
این مقاله رو بخونید
https://excelpedia.net/dynamic-phrase/
سلام استاد وقتتون بخیر
من یک فایل اکسل دارم که با vba کد نویسی شده
داخل فایلم حدود ۲۰۰ موضوع دارم میخوام وقتی هر بار فایل رو باز کردم یکی از موضوعات رو خود سیستم انتخاب کنه بهم نمایش بده
آیا راهی هست که msgbox رو بشه فرمول داد که هربار یکی از موضوعات رو بهم نمایش بده ممنون میشم راهنمایی کنید که چه کدی بنویسم که اینکار رو برای من انجام بده
سپاسگذارم
درود
یک عدد رندم بین ۱ تا ۲۰۰ رو تولید کنید کثلا با تابع randbetween
بعد اون شماره رو وصل کنید به اون موضوضع
بقیش هم که کد msgbox میخواد که داخل مقاله هست
با سلام
در اجرای Msgbox بجای اینکه پیغام به صورت فارسی نمایش داده شود، لوزی هایی که علامت؟ درآنهاست و با رنگ مشکی نمایش داده می شود. چگونه این مشکل حل می شود؟
درود،
وقت بخیر
از مسیر Control Panel > Region > Administrative گزینه Change System Locale … رو بزنید و از لیست باز شده گزینه Persian رو انتخاب کنید، سیستم رو Restart کنید و مجددا کد رو اجرا کنید.
با سلام واحترام
علاقه مند به آموزش VBA هستم از کجا شروع کنم و با چه فایل و کتاب آموزشی
مچکرم
درود بر شما
میتونید از این کتاب شروع کنید
یا اینکه این ویدئو رو تهیه کنید و استفاده کنید
خیلی ممنون
ارزش انسان هایی که داشته ها و اطلاعاتشون رو بدون منت به اشتراک میذارن بسیار بالاست و با یک قدر دانی کوچک نمیشه جبران کرد
بسیار لطف کردید
با سپاس
اطلاعات دریافتی بسیار مفید و مناسب است .