Bài viết này sẽ trình bày việc sử dụng VBA TypeOf Operator.
Toán tử VBA TypeOf được sử dụng để xác định kiểu của một đối tượng. Điều này có thể hữu ích trong việc bật hoặc tắt các điều khiển trên biểu mẫu VBA hoặc để kiểm soát luồng mã tùy thuộc vào loại đối tượng đang được sử dụng.
Sử dụng TypeOf để kiểm soát mã
Chúng ta có thể sử dụng TypeOf để đảm bảo rằng lựa chọn được thực hiện là loại đối tượng cụ thể mà chúng ta yêu cầu - ví dụ: chúng ta có thể muốn chọn một phạm vi và sau đó sử dụng câu lệnh IF để xem những gì được chọn. Nếu một dải ô được chọn, thì chúng tôi sẽ nhận được một thông báo cho chúng tôi biết rằng một dải ô đã được chọn, nhưng nếu một dải ô không được chọn, chúng tôi sẽ nhận được một thông báo khác.
Hãy để chúng tôi chọn một số ô trên trang tính của chúng tôi.
Bây giờ, nếu chúng ta chạy macro bên dưới, chúng ta sẽ được thông báo rằng chúng ta đã chọn một Phạm vi.
12345678 | Sub TestSelection ()Dim rng As ObjectNếu lựa chọn TypeOf là phạm vi thìMsgBox "Một dải ô đã được chọn!"KhácMsgBox "Đã chọn thứ gì đó khác"Kết thúc nếuKết thúc Sub |
Tuy nhiên, nếu chúng ta không chọn một phạm vi và chọn một thứ khác - có lẽ là một biểu đồ - và sau đó chạy macro, chúng ta sẽ nhận được một kết quả khác!
Sử dụng TypeOf trên điều khiển biểu mẫu
VBA cho phép chúng tôi tạo các biểu mẫu tương tác mà người dùng có thể điền vào và trả lại dữ liệu cho mã được sử dụng theo nhiều cách khác nhau. Chúng ta có thể sử dụng toán tử TypeOf để xác định loại điều khiển đang được sử dụng trên biểu mẫu.
Trong ví dụ dưới đây, tôi đã tạo một biểu mẫu người dùng với nhiều điều khiển trên đó - một vài Hộp văn bản, Hộp tổ hợp, 2 nút tùy chọn, 2 hộp kiểm và 3 nút lệnh.
Sử dụng mã bên dưới, tôi có thể xác định loại điều khiển nào trên biểu mẫu bằng cách lặp qua tất cả các điều khiển trên biểu mẫu. Tôi đã sử dụng hàm TypeName để trả về một thông báo với loại điều khiển và đã sử dụng Câu lệnh VBA IF bằng cách sử dụng Hàm TypeOf để kiểm tra loại điều khiển nào được chọn và sau đó là một hộp thông báo khác để trả về loại điều khiển đó.
12345678910111213141516171819202122 | Sub WhatControlType ()Dim ctl As ObjectĐối với mỗi ctl Trong tôi.MsgBox (TypeName (ctl))'Sử dụng hàm TypeOf để xác định kiểu của đối tượng.Nếu TypeOf ctl là msforms.TextBox ThìMsgBox ("Điều khiển là một TextBox.")ElseIf TypeOf ctl Is msforms.ComboBox Sau đóMsgBox ("Điều khiển là một ComboBox.")ElseIf TypeOf ctl Is msforms.Label ThenMsgBox ("Điều khiển là một Nhãn.")ElseIf TypeOf ctl Is msforms.CommandButton Sau đóMsgBox ("Điều khiển là một nút lệnh.")ElseIf TypeOf ctl Is msforms.CheckBox Sau đóMsgBox ("Điều khiển là một Hộp kiểm.")ElseIf TypeOf ctl Is msforms.OptionButton Sau đóMsgBox ("Điều khiển là một nút tùy chọn / radio.")KhácMsgBox ("Đối tượng là một số loại điều khiển khác.")Kết thúc nếuCtl tiếp theoKết thúc Sub |
Loại mã này có thể rất hữu ích nếu chúng ta muốn bật hoặc tắt các điều khiển. Trong đoạn mã dưới đây, khi biểu mẫu được mở lần đầu tiên, các nút tùy chọn và hộp kiểm sẽ bị vô hiệu hóa.
123456789101112 | Private Sub UserForm_Initialize ()Dim ctl As ObjectĐối với mỗi ctl Trong tôi.Nếu TypeOf ctl là msforms.CheckBox Thìctl.Enabled = SaiElseIf TypeOf ctl Is msforms.OptionButton Sau đóctl.Enabled = SaiKhácctl.Enabled = ĐúngKết thúc nếuCtl tiếp theoKết thúc Sub |
Để bật các nút tùy chọn và hộp kiểm, tôi đã viết thêm một số mã đằng sau nút Bật điều khiển.
12345678910 | Sub riêng tư cmdEnable_Click ()Dim ctl As ObjectĐối với mỗi ctl Trong tôi.Nếu TypeOf ctl là msforms.CheckBox Thìctl.Enabled = Không phải ctl.EnabledElseIf TypeOf ctl Is msforms.OptionButton Sau đóctl.Enabled = Không phải ctl.EnabledKết thúc nếuCtl tiếp theoKết thúc Sub |
Bây giờ khi chúng ta nhấp vào nút Enable Controls, nếu các điều khiển bị vô hiệu hóa, chúng sẽ được kích hoạt và nếu chúng được kích hoạt, chúng sẽ bị vô hiệu hóa. Điều này đạt được bằng cách sử dụng Không Nhà điều hành cho phép chúng tôi chuyển đổi giữa tắt và bật.