برای اینکه بتونید تو کدنویسی وی بی، شرط ها رو تعیین کنید از ساختارهای مختلف استفاده میشه. مهمترین ساختار برای بررسی شرط استفاده از ساختار IF هست که درموردش صحبت کردیم. تو این آموزش قصد دارم در مورد دستور Select Case در اکسل صحبت کنیم که روش خوبی برای بررسی حالت های مختلف یک شرط هست.
ساختار SELECT از این نظر شبیه ساختار IF هست که یک عبارت رو بررسی میکنه و بر اساس نتیجه این بررسی کدهای متناسب رو اجرا میکنه. ساختار کلی دستور SELECT به صورت زیر هست:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ |
Select Case Expression Case Value1 'دستوراتی که در صورت برقرار شرایط Value1 باید اجرا شود Case Value2 ' دستوراتی که در صورت برقرار شرایط Value2 باید اجرا شود … Case Else 'دستوراتی که در صورت برقراری هیچکدام از شرایط بالا باید اجرا شود End Select |
تو دستورات بالا، عبارت Case Else (که برای اجرای کدهایی هست که هیچکدام از دیگر شرایط برقرار نباشه)، اختیاری هست و میتونه تو این ساختار حذف بشه. حالا برای اینکه یک مثال عملیاتی بزنیم میخوایم کدی بنویسیم که رنگ پس زمینه سلول فعال بسته به عددی که درونش نوشته شده تغییر کنه.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ |
Select Case ActiveCell.Value Case Is <= ۵ ActiveCell.Interior.Color = ۶۵۲۸۰ ' رنگ سبز Case ۶, ۷, ۸, ۹ ActiveCell.Interior.Color = ۴۹۴۰۷ ' رنگ نارنجی Case ۱۰ ActiveCell.Interior.Color = ۶۵۵۳۵ ' رنگ زرد Case Else ActiveCell.Interior.Color = ۲۵۵ ' رنگ قرمز End Select |
تو مثال بالا اول باید مشخص کنیم که قصد داریم چه چیزی رو بررسی کنیم. این عبارت باید جلوی Select Case نوشته بشه. در اینجا مقدار درون سلول فعال مد نظر ماست ( ActiveCell.Value). در قسمت های بعدی حالت هایی که ممکنه وجود داشته باشه و رنگ های متناظر با اون حالت رو مشخص کردم. سعی کردم که روش های مختلف تعریف یک عبارت شرطی رو بیارم.
شرط | توضیحات |
Case Is <= 5 | با استفاده از این نوع شرط میخوایم بررسی کنیم که آیا مقدار اون کوچکتر و یا مساوی ۵ هست یا نه. در صورتیکه این حالت برقرار باشه رنگ پس زمینه سلول سبز میشه. |
Case 6, 7, 8, 9 | اگر بخوایم مقدار نوشته شده تو سلول فعال فقط چند عدد دلخواه باشه تا کدهای مربوطه اجرا بشه از این روش استفاده کنید. |
Case 10 | اگر بخوایم که نتیجه عبارتی که بررسی میکنیم فقط برابر یک مقدار خاص باشه تا کدهای مربوطه اجرا بشه از این دستور استفاده میکنیم. |
Case Else | این دستور شبیه دستور Else در ساختار IF هست. در صورتی کدهای این قسمت اجرا میشه که هیچکدام از شرط هایی که در قسمت های بالای این ساختار تعریف کردیم برقرار نباشه. |
به محض اینکه اولین شرطی که در ساختار Select تعریف کردیم برقرار شد، کدهای اون قسمت اجرا میشه و دیگه از ساختار Select خارج میشه و بقیه شرط ها بررسی نمیشن. بنابراین هیچوقت دو قسمت از این ساختار اجرا نمیشه.
تو این مطلب در مورد ساختار دیگه ای ( دستور Select Case در اکسل ) جهت تعریف شرط در وی بی صحبت کردیم که به عنوان دستوری در کنار ساختار IF قابلیت های خوبی رو در کدهای شما ایجاد میکنه. سعی کنی حتما از این ساختار در کدهاتون استفاده کنید.
برای بررسی اطلاعات بیشتر از این ساختار میتونید از مطالب راهنما در این مورد در سایت مایکروسافت هم استفاده کنید.
Sub CopyRange()
ActiveWorkbook.Sheets(“Line1”).Visible = True
ActiveWorkbook.Sheets(“Line1”).Select
Range(“C6:H8”).Select
Selection.COPY
Workbooks.Open “D:\abc.xlsm”, Activate
ActiveWorkbook.Sheets(“Linela”).Visible = True
Range(“A2”).Select
ActiveSheet.Paste
ActiveWorkbook.Sheets(“line1a”).Visible = True
ActiveWorkbook.Save
ActiveWindow.Close
سلام این فایل ایرادش چیه چرا بازوذخیره نمیکنه
سلام
برای اینکه متوجه بشید کجای کدی که زدید مشکل داره، Sub رو با استفاده از F8 خط به خط اجرا کنید تا مشخص شود کجا خطا ایجاد میکنه.
سلام من یک فرم دارم در شیت FORM که فرم اولیه توقفات وارد میشه و شماره اتوماتیک میخوره و یک فرم در شیت EDITION دارم که با همون شماره اتوماتیک ثبت نهایی میشه و در شیت دیتابیس دیگری به نام DATA EDIT وارد میشه حالا می خوام یه ماکرو بنویسم که این داده های ثبتی من در ادامه همون داده های قبل و بر روی همون ردیفی که اون شماره ثبت خورده ثبت بشه و در سلولهای خالی اون ردیف ثبت بشه، در واقع میخام هر دو دیتا بیس رو یکی کنم و دیتا بیس DATA EDIT رو حذف کنم امکانش هست کمکم کنید خیلی روش کار کردم ولی نوع آدرس دهیش رو نمیتونم تجسم کنم ، ممنون میشم
با سپاس
سلام
به جای استفاده از VBA بهتره در ستون های خالی یک جدول (مثلا جدول FORM) با استفاده از تابع Vlookup سایر اطلاعاتی که در جدول EDITION هست رو فراخوانی کنید (در آخر فرمول ها رو به عدد تبدیل کنید) و جدول FORM رو تبدیل به جدول اصلی کنید.
مسئله اینه که الان ماکرو ثبت در جدول برای کلید RECORD هم در فرم موجود در شیت FORM و هم در فرم موجود در شیت EDITION وجود داره و امکان فرمول دهی در داخل سلولهای فرم موجود در شیت FORM وجود نداره اما در سلولهای فرم EDITION برای بازخوانی از VLOOKUP استفاده کرده بودم ،بنده یه ماکرو نیاز دارم که شماره ثبت رو ببینه و روی همون شماره ثبت بقیه آیتم های یک توقف رو پیست کنه و این ماکرو رو با ماکروی RECORD همزمان روی کلید RECORD اجرا کنم.
این کاری که میخام انجام بدم فقط با VBA امکان داره چون بعد از هر ثبت خانه های فرم CLEAR CONTENT میشن.
ممنون از پاسخگویی و لطفتون
این موردی که من عرض کردم برای یکپارچه سازی دو تا دیتابیس هست.
منظورتون از ادغام اطلاعات فرم چی هست؟
از حسن توجه شما متشکرم به پیشنهادتون فکر کردم طبق گفته شما دیتابیس اصلی رو به form اختصاص دادم و داخلش از یه جایی به بعد که در فرم شیت eddition ثبت میشد فرمول نویسی کردم که از دیتا بیس edition بخونه و این کار هم با شماره ثبت که منحصر به فرد بود قابل انجام بود.
واقعا ممنونم جناب مهندس چراغی
اگه خواسته باشیم دو عدد را دریافت کند و هر عملگری(مثلا *) که وارد کرد محاسبه کند آیا می توانیم از کدselect case استفاده کنیم؟
سلام
اگر عملگر رو هم از کاربر دریافت کنید میتونید با ساختار Select عملیات انتخابی رو روی اعداد دریافت شده اعمال کنید.
سلام.
آیا این امکان وجود داره که وقتی یک سلول رو لینک میکنیم به یک سلول در یک جدول دیگر ، فقط ردیف مربوط به سلول انتخابی نمایش داده بشه و بقیه ی ردیف های جدول مشخص نباشند?
درد بر شما
خیر این امکان وجود نداره
مگه اینکه کدنویسی کنید