- Chọn ví dụ về trường hợp
- Cú pháp câu lệnh trường hợp
- Chọn tiêu chí trường hợp
- Chọn Trường hợp - Văn bản & Toán tử Thích
- Trường hợp - Dấu hai chấm
- Chọn trường hợp - Và / Hoặc - Nhiều điều kiện
- Tuyên bố trường hợp lồng nhau
- Tuyên bố trường hợp so với Tuyên bố nếu
- Ví dụ về VBA Select Case
- VBA Chọn trường hợp trong Access
Trong VBA, Chọn Tuyên bố Trường hợp là một sự thay thế cho Câu lệnh If-Then, cho phép bạn kiểm tra xem các điều kiện có được đáp ứng hay không, chạy mã cụ thể cho từng điều kiện. Câu lệnh Chọn thích hợp hơn Câu lệnh Nếu khi có nhiều điều kiện để xử lý.
Chọn ví dụ về trường hợp
Ví dụ này nhắc người dùng với Hộp thư YesNoCancel và kiểm tra tùy chọn mà người dùng đã chọn:
1234567891011121314 | Sub Select_Case_Yes_No_Cancel ()Dim nResult Như VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Chọn trường hợp nResultTrường hợp vbYesMsgBox "Có"Trường hợp vbNoMsgBox "Không"Trường hợp vb HủyMsgBox "Hủy"Kết thúc Lựa chọnKết thúc Sub |
Dưới đây, chúng tôi đã viết ra điều tương tự bằng cách sử dụng Câu lệnh Nếu thay thế. Bạn sẽ nhận thấy rằng Tuyên bố lựa chọn trường hợp liên quan đến việc nhập ít hơn một chút - lợi ích này được khuếch đại khi kiểm tra nhiều tiêu chí.
12345678910111213 | Sub If_Yes_No_Cancel ()Dim nResult Như VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Nếu nResult = vbYes ThìMsgBox "Có"ElseIf nResult = vbNo Sau đóMsgBox "Không"ElseIf nResult = vbCancel Sau đóMsgBox "Hủy"Kết thúc nếuKết thúc Sub |
Cú pháp câu lệnh trường hợp
Cú pháp của Câu lệnh Chọn trường hợp như sau:
12345678910 | Chọn trường hợp [Biểu thức kiểm tra]Trường hợp [Điều kiện 1][Hành động nếu điều kiện 1 là đúng]Trường hợp [Điều kiện 2][Hành động nếu điều kiện 2 là đúng]Trường hợp [Điều kiện n][Hành động nếu điều kiện n là đúng]Trường hợp khác[Hành động nếu không có sự thật]Kết thúc Lựa chọn |
Ở đâu:
[Biểu thức thử nghiệm] - Là giá trị để đánh giá. Thông thường đây là một biến.
[Hành động nếu điều kiện n là đúng] - Chỉ là mã để chạy nếu điều kiện được đáp ứng (giống như với Câu lệnh If)
[Điều kiện n] - Là điều kiện để kiểm tra. Có rất nhiều cách khác nhau để kiểm tra các điều kiện. Chúng tôi sẽ thảo luận về chúng dưới đây.
Câu lệnh Trường hợp sẽ thực thi mã cho điều kiện ĐẦU TIÊN được tìm thấy là ĐÚNG. Nếu không có điều kiện nào được đáp ứng thì sẽ không có mã nào được thực thi, trừ khi mệnh đề Khác được thêm vào.
Chọn tiêu chí trường hợp
Các trường hợp chọn có thể được sử dụng để đánh giá cả giá trị số và văn bản. Đầu tiên chúng ta sẽ thảo luận về cách sử dụng các trường hợp lựa chọn để đánh giá các biểu thức số.
Khớp chính xác - Số
Bạn có thể dễ dàng kiểm tra xem có khớp chính xác hay không với Case Statement:
1 | Trường hợp 10 |
hoặc thêm dấu phẩy để kiểm tra các kết quả khớp chính xác với nhiều số:
1 | Trường hợp 20, 30, 40 |
1234567891011121314 | Sub ExactMatch_Numbers ()Dim n As Integern = CInt (InputBox ("…"))Chọn trường hợp nTrường hợp 10'Nếu n là 10 thìTrường hợp 20, 30, 40'Nếu n là 20/30/40 thìTrường hợp khác'Nếu n không phải là 10/20/30/40 thìKết thúc Lựa chọnKết thúc Sub |
Các dãy
Bạn có thể kiểm tra xem một số có nằm trong phạm vi như vậy không:
1 | Trường hợp 55 đến 74 |
Quy trình này sẽ tạo ra một điểm chữ cái cho một học sinh dựa trên số điểm của họ:
12345678910111213141516171819202122 | Sub Calc_Grade ()Điểm mờ dưới dạng số nguyênDim LetterGrade As StringScore = InputBox ("Nhập điểm của học sinh")Chọn điểm tình huốngTrường hợp 90 đến 100LetterGrade = "A"Trường hợp 80 đến 90LetterGrade = "B"Trường hợp 70 đến 80LetterGrade = "C"Trường hợp 60 đến 70LetterGrade = "D"Trường hợp khácLetterGrade = "F"Kết thúc Lựa chọnMsgBox "Điểm của học sinh là:" & LetterGradeKết thúc Sub |
Bạn cũng có thể kiểm tra phạm vi với Case Is
Chọn trường hợp là
1234 | Trường hợp là <55'Không làm gì cảTrường hợp <= 74MsgBox "Trong phạm vi" |
Hãy nhớ rằng Báo cáo trường hợp sẽ chỉ thực thi mã cho DUY NHẤT trận đấu đầu tiên.
Quy trình này sẽ tính điểm của học sinh bằng cách sử dụng Trường hợp Là thay vì Trường hợp Cho.
12345678910111213141516171819202122 | Sub Select_Case_Is_Grade ()Điểm mờ dưới dạng số nguyênDim letterGrade As StringScore = InputBox ("Nhập điểm của học sinh")Chọn điểm tình huốngTrường hợp là> = 90LetterGrade = "A"Trường hợp là> = 80LetterGrade = "B"Trường hợp là> = 70LetterGrade = "C"Trường hợp là> = 60LetterGrade = "D"Trường hợp khácLetterGrade = "F"Kết thúc Lựa chọnMsgBox "Điểm của học sinh là:" & LetterGradeKết thúc Sub |
Trường hợp khác
Bạn có thể thêm "Trường hợp khác" vào cuối Tuyên bố trường hợp của mình để làm điều gì đó nếu không có điều kiện nào được đáp ứng:
1 | Trường hợp khác |
Xem phần cuối của ví dụ mã trước để biết cách Case Else có thể được sử dụng.
Chọn Trường hợp - Văn bản & Toán tử Thích
Cho đến nay, các ví dụ về Trường hợp lựa chọn của chúng tôi chỉ hoạt động với các con số. Bạn cũng có thể sử dụng câu lệnh Chọn trường hợp có văn bản.
Kết hợp Chính xác - Văn bản
Bạn có thể kiểm tra xem biểu thức có khớp với một cụm từ chính xác như sau không:
1 | Trường hợp "Củ cải đường" |
Hoặc sử dụng dấu phẩy để kiểm tra xem biểu thức có khớp chính xác với nhiều hơn một cụm từ hay không:
1 | Trường hợp "Apple", "Banana", "Orange" |
Kết hợp nó với nhau trông giống như:
12345678910 | Sub ExactMatch_Food ()Chọn Phạm vi trường hợp ("a1"). Giá trịTrường hợp "Củ cải đường"MsgBox "Rau"Trường hợp "Apple", "Banana", "Orange"MsgBox "Trái cây"Kết thúc Lựa chọnKết thúc Sub |
Viết in hoa và viết thường
Theo mặc định, VBA Phân biệt chữ hoa chữ thường. Điều này có nghĩa là VBA coi “Văn bản” khác với “văn bản”. Để tắt phân biệt chữ hoa chữ thường, hãy thêm Tùy chọn So sánh Văn bản vào đầu mô-đun của bạn:
1 | Tùy chọn So sánh Văn bản |
Ví dụ này sẽ làm cho Chọn trường hợp không phân biệt chữ hoa chữ thường khi làm việc với văn bản:
123456789101112 | Tùy chọn So sánh Văn bảnSub ExactMatch_Food ()Chọn Phạm vi trường hợp ("a1"). Giá trịTrường hợp "Củ cải đường"MsgBox "Rau"Trường hợp "Apple", "Banana", "Orange"MsgBox "Trái cây"Kết thúc Lựa chọnKết thúc Sub |
Trường hợp giống như
Toán tử Like cho phép bạn so sánh không chính xác. Nếu văn bản khớp, Like trả về TRUE, nếu không khớp, nó trả về FALSE. Điều này làm cho toán tử Like dễ sử dụng với Câu lệnh If, tuy nhiên nó sẽ không hoạt động dễ dàng với Câu lệnh trường hợp.
Trường hợp giống như - Kiểm tra không thành công
Đoạn mã sau chứng minh rằng Toán tử Like không hoạt động với Chọn trường hợp:
1234567891011 | Sub Select_Case_Like_DoesnotWork ()Làm mờ từ dưới dạng chuỗiword = "COCOA"Chọn từ viết hoaTừ trường hợp 2 Như "* C * C *"MsgBox "Tốt"Trường hợp khácMsgBox "Không tốt"Kết thúc Lựa chọnKết thúc Sub |
Trường hợp giống như - Cách chính xác
Tuy nhiên, chúng ta có thể thêm biểu thức TRUE để làm cho Câu lệnh Chọn hoạt động với Toán tử Like:
1234567891011 | Sub Select_Case_Like_CorrectWay ()Làm mờ từ dưới dạng chuỗiword = "COCOA"Chọn trường hợp đúngChữ hoa như "* C * C *"MsgBox "Tốt"Trường hợp khácMsgBox "Không tốt"Kết thúc Lựa chọnKết thúc Sub |
Trường hợp - Dấu hai chấm
Khi sử dụng Case Statement, bạn có thể thêm bao nhiêu dòng mã tùy thích để chạy với mỗi điều kiện. Tuy nhiên, nếu bạn chỉ cần chạy một dòng mã. Bạn có thể sử dụng Dấu hai chấm (:) để viết mọi thứ trên cùng một dòng.
Đây là ví dụ về điểm học sinh tương tự như trước đây, ngoại trừ việc sử dụng dấu hai chấm để rút ngắn mã:
1234567891011121314151617 | Sub Calc_Grade_colon ()Điểm mờ dưới dạng số nguyênDim LetterGrade As StringScore = InputBox ("Nhập điểm của học sinh")Chọn điểm tình huốngTrường hợp 90 đến 100: LetterGrade = "A"Trường hợp 80 đến 90: LetterGrade = "B"Trường hợp 70 đến 80: LetterGrade = "C"Trường hợp 60 đến 70: LetterGrade = "D"Trường hợp khác: LetterGrade = "F"Kết thúc Lựa chọnMsgBox "Điểm của học sinh là:" & LetterGradeKết thúc Sub |
Chọn trường hợp - Và / Hoặc - Nhiều điều kiện
Bạn có thể sử dụng Toán tử Và / Hoặc để kiểm tra các tiêu chí bổ sung cùng với Chọn trường hợp.
Trong ví dụ này, chúng tôi đang sử dụng Trường hợp chọn trên biến 'tuổi', nhưng chúng tôi cũng muốn kiểm tra giới tính. Vì vậy, chúng tôi sử dụng And Operator để thực hiện bài kiểm tra phức tạp hơn:
123456789101112131415161718 | Sub NestedSelectCase ()Dim sex As StringDim age As Integersex = "nam" hoặc nữtuổi = 15Chọn độ tuổi trường hợpTrường hợp là <20 Và sex = "nam"Msgbox "Nam dưới 20 tuổi"Trường hợp là <20 và sex = "nữ"Msgbox "Nữ dưới 20 tuổi"Trường hợp là> = 20 Và giới tính = "nam"Msgbox "Nam trên 20 tuổi"Trường hợp là> = 20 Và giới tính = "nữ"Msgbox "Nữ trên 20 tuổi"Kết thúc Lựa chọnKết thúc Sub |
Tuyên bố trường hợp lồng nhau
Cũng giống như Câu lệnh If, bạn có thể lồng các Câu lệnh trường hợp vào bên trong nhau:
123456789101112131415161718192021222324 | Sub NestedSelectCase ()Dim sex As StringDim age As Integersex = "nam" hoặc nữtuổi = 15Chọn độ tuổi trường hợpTrường hợp là <20Chọn trường hợp giới tínhTrường hợp "nam"MsgBox "Nam dưới 20 tuổi"Trường hợp "nữ"MsgBox "Nữ dưới 20 tuổi"Kết thúc Lựa chọnTrường hợp là> = 20 Và giới tính = "nữ"Chọn trường hợp giới tínhTrường hợp "nam"MsgBox "Nam trên 20 tuổi"Trường hợp "nữ"MsgBox "Nữ trên 20 tuổi"Kết thúc Lựa chọnKết thúc Lựa chọnKết thúc Sub |
Tuyên bố trường hợp so với Tuyên bố nếu
Càng nhiều điều kiện để kiểm tra, Câu lệnh tình huống càng hữu ích so với Câu lệnh nếu. Hãy xem một ví dụ.
Đây là mã cần thiết để kiểm tra xem tên trang tính có bằng một tập hợp các giá trị bằng cách sử dụng Câu lệnh If:
12345 | Nếu Tên = "Ngân sách" Hoặc Tên = "Dự báo" Hoặc Tên = "Trailing12" Hoặc _Name = "Flex" Hoặc Name = "OtherRatios" Hoặc Name = "So sánh" Hoặc _Tên = "BudReview" Hoặc Tên = "P & L_Review" Hoặc Tên = "Khác" Sau đó'Làm việc gì đóKết thúc nếu |
Đây là mã tương tự bằng cách sử dụng Câu lệnh Chọn thay thế:
12345 | Chọn tên trường hợpTrường hợp "Ngân sách", "Dự báo", "Trailing12", "Linh hoạt", "Tỷ lệ khác", _"So sánh", "BudReview", "P & L_Review", "Khác"'Làm việc gì đóKết thúc Lựa chọn |
Bạn có thể thấy việc sử dụng Câu lệnh lựa chọn trong trường hợp này dễ dàng hơn nhiều. Việc nhập liệu ít hơn đáng kể và dễ đọc hơn nhiều.
Ví dụ về VBA Select Case
Ví dụ 1. Tuyên bố trường hợp Chức năng do người dùng xác định (UDF)
Hãy sao chép ví dụ tính điểm của chúng tôi ở trên và tạo UDF để tính điểm của học sinh:
12345678910111213141516 | Hàm GetGrade (Score As Integer) Dưới dạng chuỗiChọn điểm tình huốngTrường hợp 90 đến 100GetGrade = "A"Trường hợp 80 đến 90GetGrade = "B"Trường hợp 70 đến 80GetGrade = "C"Trường hợp 60 đến 70GetGrade = "D"Trường hợp khácGetGrade = "F"Kết thúc Lựa chọnChức năng kết thúc |
Giờ đây, chúng ta có thể sử dụng Hàm GetGrade trong trang tính Excel của mình để nhanh chóng tính điểm học sinh:
Ví dụ 2. Tên tờ kiểm tra / Tuyên bố trường hợp vòng lặp
Mã này sẽ lặp qua tất cả các trang tính trong sổ làm việc, Bỏ chọn các trang tính đáp ứng các tiêu chí nhất định:
123456789101112 | Sub Case_UnProtectSheet ()Dim ws As WorksheetĐối với mỗi ws trong WorksheetsChọn Case ws.Name 'Danh sách tất cả các trang tính có Tỷ lệTrường hợp "Ngân sách", "Dự báo", "Trailing12", "Linh hoạt", "Tỷ lệ khác", _"So sánh", "BudReview", "P & L_Review", "Khác"ws.UnprotectKết thúc Lựa chọnTuần tiếp theoKết thúc Sub |
Ví dụ 3. Chọn trường hợp - Giá trị ô
Ví dụ này sẽ kiểm tra điểm của học sinh trong một ô, xuất trực tiếp điểm chữ cái sang ô bên phải.
12345678910111213141516 | Sub TestCellValue ()Làm mờ ô dưới dạng phạm viĐặt ô = Phạm vi ("C1")Chọn ô chữ hoa và giá trịTrường hợp 90 đến 100cell.Offset (0, 1) = "A"Trường hợp 80 đến 90cell.Offset (0, 1) = "B"Trường hợp 70 đến 80cell.Offset (0, 1) = "C"Trường hợp 60 đến 80cell.Offset (0, 1) = "D"Kết thúc Lựa chọnKết thúc Sub |
Ví dụ 4. Chọn trường hợp - Ngày
Ví dụ về Chọn trường hợp này là một Hàm kiểm tra ngày rơi vào quý nào.
123456789101112131415161718 | Sub TestDate ()MsgBox GetQuarter (CDate ("20/7/2019"))Kết thúc SubHàm GetQuarter (dt As Date) As IntegerDim sht As WorksheetChọn trường hợp dtCase CDate ("01/01/2019") Đến CDate ("31/03/2019")GetQuarter = 1Case CDate ("04/01/2019") Đến CDate ("30/06/2019")GetQuarter = 2Case CDate ("07/01/2019") Đến CDate ("30/09/2019")GetQuarter = 3Case CDate ("10/01/2019") Đến CDate ("31/12/2019")GetQuarter = 4Kết thúc Lựa chọnChức năng kết thúc |
Bởi vì nó là một hàm, bạn có thể sử dụng nó như một hàm bên trong Excel:
Bán tại. 5 Kiểm tra xem Số là Lẻ hay Chẵn
Ví dụ này kiểm tra xem một số là số lẻ hay số chẵn.
123456789101112 | Sub CheckOddEven ()Dim n As Integern = InputBox ("Nhập một số")Chọn Case n Mod 2Trường hợp 0MsgBox "Số chẵn."Trường hợp 1MsgBox "Số là số lẻ."Kết thúc Lựa chọnKết thúc Sub |
Bán tại. 6 Kiểm tra xem Ngày là Ngày trong tuần hay Cuối tuần
Những ví dụ này sẽ kiểm tra xem một ngày rơi vào ngày trong tuần hay cuối tuần.
123456789101112131415161718192021 | Kiểm tra phụWeekDay ()Dim dt As Datedt = CDate ("1/1/2020")Chọn tình huống Ngày trong tuần (dt)Case vbMondayMsgBox "Hôm nay là Thứ Hai"Trường hợp vbTuesdayMsgBox "Hôm nay là Thứ Ba"Trường hợp vbWednesdayMsgBox "Hôm nay là Thứ Tư"Trường hợp vbThursdayMsgBox "Hôm nay là Thứ Năm"Trường hợp vbFridayMsgBox "Hôm nay là Thứ Sáu"Trường hợp vbSaturdayMsgBox "Hôm nay là thứ Bảy"Case vbSundayMsgBox "Hôm nay là Chủ nhật"Kết thúc Lựa chọnKết thúc Sub |
123456789101112 | Sub CheckWeekend ()Dim dt As Datedt = CDate ("1/1/2020")Chọn tình huống Ngày trong tuần (dt)Trường hợp vbSaturday, vbSundayMsgBox "Đó là một ngày cuối tuần"Trường hợp khácMsgBox "Không phải là cuối tuần"Kết thúc Lựa chọnKết thúc Sub |
VBA Chọn trường hợp trong Access
Tất cả các ví dụ trên đều hoạt động hoàn toàn giống nhau trong Access VBA cũng như trong Excel VBA.
123456789101112131415161718192021 | Sub TestCellValue ()Làm mờ dbs dưới dạng Cơ sở dữ liệuLàm mờ lần đầu tiên dưới dạng RecordSetĐặt dbs = CurrentDBĐặt rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Với đầu tiên.MoveFirst.Chỉnh sửaChọn Trường hợp đầu tiên ("Thành phố")Trường hợp "Austin".rst.Fields ("TelCode") = "512"Trường hợp "Chicago".rst.Fields ("TelCode") = "312"Trường hợp "New YorK".rst.Fields ("TelCode") = "1212"Trường hợp "San Fransisco".rst.Fields ("TelCode") = "415"Kết thúc Lựa chọn.Cập nhậtKết thúc vớiKết thúc Sus |