در مقالات قبلی با ساختار شرطی If آشنا شدیم، یادگرفتیم که چگونه برای رویدادهای مختلف برنامه ریزی کنیم، عبارت Select-Case در ویژوال بیسیک بسیار مشابه ساختار If عمل مینماید. در واقع تمام اموری که با عبارت Select-Case میتوان انجام داد توسط ساختار If هم قابل انجام هستند.
کاربرد عبارت Select-Case در ویژوال بیسیک
فرض کنید میخواهیم برای یک رویداد برنامه ریزی کنیم، مثلاً میخواهیم برنامه ای بنویسیم که میزان پاداش کارکنان یک شرکت را با توجه به حقوق دریافتی هریک تعیین نماید، در نظر بگیرید سه بازه ی حقوقی در شرکت وجود دارد و میزان پاداش با توجه به اینکه حقوق فرد در کدام بازه قرار داشته باشد تعیین میگردد، نوشتن چنین کدی با استفاده از ساختار شرطی If بسیار ساده است. برای نوشتن کد مورد نظر با استفاده از عبارت Select-Case کافیست حقوق فرد مورد نظر را به عنوان Case به برنامه معرفی نماییم، سپس برای سه Case متفاوت که در واقع سه بازه ی حقوقی مختلف میباشند مقدار متغیر پاداش را مشخص کنیم.
به بیان واضح تر، عبارت Select-Case زمانی کاربرد دارد که تعداد رویدادها و اتفاقاتی که قرار است برای Case رخ دهد محدود میباشد، مانند مثال بالا که برای Case حقوق تنها سه حالت وجود داشت.
ساختار عبارت Select-Case در ویژوال بیسیک
ساختار یا Syntax عبارت Select-Case به صورت زیر است:
1 2 3 4 5 6 |
Select Case TestExpression [Case Expression List-n [statements-n]] [Case Else [Else Statements]] End Select |
در ساختار بالا TestExpression در واقع همان متغیری است که در مورد رویداد های آن تصمیم گیری میکنیم، در مثال بالا میزان حقوق فرد را میتوان به عنوان TestExpression به برنامه معرفی کرد، عبارات اختیاری بعدی همگی رویداد ها و تصمیم برنامه در قبال هر رویداد را معرفی میکنند.
TestExpression میتواند یک متغیر عددی یا یک متغیر رشته ای باشد.
برای فهم بیشتر مطلب، مثال ذکر شده در ابتدای مقاله را با استفاده از عبارت Select-Case مینویسیم:
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub ExcelPro_SelectCase() Select Case Salary Case 0 To 1000000 Award = 200000 Case 1000000 To 2000000 Award = 400000 Case Is > 2000000 Award = 600000 Case Else Award = 0 End Select End Sub |
در کد بالا (که کاملتر آن در انتهای مقاله آورده شده است)، متغیر Salary یک متغیر عددی در برگیرنده میزان حقوق هر فرد میباشد و متغیر Award در واقع پاداش تعلق گرفته به هر فرد است که با استفاده از عبارت Select-Caseو با توجه به میزان حقوق هر فرد تعیین میگردد.
برای تکمیل کد بالا نیاز به دریافت میزان حقوق هر فرد و نمایش میزان پاداش متعلقه داریم، در انتهای این مقاله کد بالا به صورت کامل و قابل اجرا آورده شده است، لطفاً برای تمرین بیشتر این کد را اجرا نمایید.
در ساختار عبارت Select-Case، در برابر کلمه ی کلیدی Case معمولاً از سه ساختار استفاده میگردد:
1 2 3 |
Case ….. Case ….. To ….. Case IS …… |
ساختار اول برای اشاره به یک مقدار مشخص استفاده میگردد در حالی که ساختار دوم یک بازه را هدف قرار میدهد، ساختار سوم برای شرط های مقایسه ای مورد استفاده قرار میگیرد، ساختار دوم و سوم در مثال بالا به کار رفته اند.
در مقابل عبارت Case میتوان حتی از چندین شرط به صورت همزمان استفاده نمود، البته شروط نباید همپوشانی داشته باشند، مانند مثال زیر:
1 |
Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber |
این Case مقدار متغیر از ۱ تا ۴، از ۷ تا ۹، یازده، سیزده و مقادیر بیشتر از MaxNumber را شامل میشود. از ساختار مشابه میتوان برای متغیرهای رشته ای هم استفاده نمود.
عملکرد عبارت Select-Case در ویژوال بیسیک
در حالی که کدها از بالا به پایین اجرا میشوند، سه حالت اتفاق میافتد:
- اگر متغیر مورد بررسی (در مثال بالا Salary) منطبق با شرایط ذکر شده در یک Case باشد آنگاه کدهای قرار گرفته در ذیل آن Case اجرا میشوند و اجرای کدها تا انتهای برنامه صورت میگیرد،
- اگر متغیر مورد بررسی (در مثال بالا Salary) شرایطی منطبق با چند Case را دارا بود تنها کدهای ذیل Case اولین انطباق اجرا میشوند و بقیه ی موارد صرفه نظر میشوند
- و اگر هیچکدام از Case ها برای متغیر مورد بررسی مناسب نبود برنامه بدون توقف ادامه مییابد.
کاربرد عبارت Case Else
همانطور که در بالا ذکر شد اگر متغیر مورد بررسی با شرایط هیچ یک از Case ها منطبق نباشد، اجرای برنامه بدون توقف ادامه میابد. در این جا لازم است که برنامه نویس این حالت را پیش بینی کند و برای آن تمهیدی در نظر بگیرد، با استفاده از عبارت Case Else در صورت عدم انطباق متغیر با تمام Case های قبلی برنامه کدهای ذیل این عبارت را اجرا میکند و به این ترتیب میتوان از خارج شدن برنامه از مسیر مورد نظر جلوگیری کرد.
مثال استفاده از عبارت Select-Case
کد زیر متغیر Number را دریافت میکند و با توجه به مقدار آن یک پیام در Immediate Window چاپ میکند، مقدار Number برابر با ۸ قرار داده شده است، این کد را اجرا کرده، به دلخواه خود تغییر داده و استفاده نمایید تا مطلب را کاملاً متوجه شوید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub ExcelPro_Test() Dim Number Number = 8 ' Initialize variable. Select Case Number ' Evaluate Number. Case 1 To 5 ' Number between 1 and 5, inclusive. Debug.Print "Between 1 and 5" ' The following is the only Case clause that evaluates to True. Case 6, 7, 8 ' Number between 6 and 8. Debug.Print "Between 6 and 8" Case 9 To 10 ' Number is 9 or 10. Debug.Print "Greater than 8" Case Else ' Other values. Debug.Print "Not between 1 and 10" End Select End Sub |
کد زیر در واقع کد کامل مثال ذکر شده در ابتدای مقاله میباشد، در این کد میزان حقوق فرد به عنوان یک متغیر توسط تابع Inputbox دریافت میگردد و مقدار پاداش تعلق گرفته به ایشان توسط یک تابع Msgbox نمایش داده میشود:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub ExcelPro_SelectCase() Dim Salary As Long Dim Award As Long Dim Msg, Answer SalaryInput: Salary = InputBox( _ "Please Insert Your Salary in Toman", _ "Salary Input", 1000000) Select Case Salary Case 0 To 1000000 Award = 200000 Case 1000000 To 2000000 Award = 400000 Case Is > 2000000 Award = 600000 Case Else Msg = "The Number You Entered is no Valid" _ & vbNewLine & "Please Insert a Valid Value" Answer = MsgBox(Msg, 16, "Wrong Value") GoTo SalaryInput End Select Msg = "Your Award is: " & Award & " Toman" Answer = MsgBox(Msg, 32, "Award Value") End Sub |
ممنون از آموزش گام به گام ، دقیق و خوبتون.
موفق باشید.
متشکرم از ابراز نظرتون.
بسیار عالی بود
تشکر فراوان
متشکرم، موفق باشید.