Tuyên bố trường hợp lựa chọn VBA

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
wave wave wave wave wave