Тази статия ще демонстрира използването на VBA TypeOf оператора.
Операторът VBA TypeOf се използва за определяне на типа на обект. Това може да бъде полезно при активиране или деактивиране на контроли във VBA формуляр или за контрол на потока от код в зависимост от типа обект, който се използва.
Използване на TypeOf за контрол на кода
Можем да използваме TypeOf, за да гарантираме, че направеният избор е типът на конкретния обект, от който се нуждаем - например, може да искаме да изберем диапазон и след това да използваме оператор IF, за да видим какво е избрано. Ако е избран диапазон, тогава ще получим съобщение, което ни казва, че диапазон е избран, но ако диапазон не е избран, ще получим различно съобщение.
Нека изберете някои клетки в нашия работен лист.
Сега, ако изпълним макроса по -долу, ще ни бъде казано, че сме избрали диапазон.
12345678 | Sub TestSelection ()Затъмняване като обектАко TypeOf Selection е Range, тогаваMsgBox "Избран е диапазон!"ИначеMsgBox "Избрано е нещо друго"Край АкоEnd Sub |
Ако обаче не изберем диапазон и не изберем нещо друго - може би диаграма - и след това изпълним макроса, ще получим различен резултат!
Използване на TypeOf за контрол на формуляри
VBA ни позволява да създаваме интерактивни формуляри, които потребителят може да попълва и да връща данни в кода, които да се използват по различни начини. Можем да използваме оператора TypeOf, за да определим типа контроли, които се използват във формуляр.
В примера по -долу създадох потребителски формуляр с разнообразни контроли върху него - няколко текстови полета, комбинирано поле, 2 бутона за опции, 2 квадратчета за отметка и 3 командни бутона.
Използвайки кода по -долу, мога да определя какъв тип контроли са във формуляра, като преминавам през всички контроли във формуляра. Използвах функцията TypeName, за да върна съобщение с типа на контролата и използвах VBA IF изявление, използвайки Тип функция за да проверите какъв тип контрол е избран и след това допълнително поле за съобщение, за да върнете този тип контрол.
12345678910111213141516171819202122 | Sub WhatControlType ()Затъмнете ctl като обектЗа всеки ctl в мен.КонтролиMsgBox (TypeName (ctl))'Използвайте функцията TypeOf, за да определите типа на обекта.Ако TypeOf ctl е msforms.TextBox ТогаваMsgBox ("Контролът е TextBox.")ElseIf TypeOf ctl е msforms.ComboBox ТогаваMsgBox ("Контролът е ComboBox.")ElseIf TypeOf ctl е msforms.Label ТогаваMsgBox ("Контролът е етикет.")ElseIf TypeOf ctl е msforms.CommandButton ТогаваMsgBox ("Контролът е команден бутон.")ElseIf TypeOf ctl е msforms.CheckBox ТогаваMsgBox ("Контролът е квадратче за отметка.")ElseIf TypeOf ctl е msforms.OptionButton ТогаваMsgBox ("Контролът е бутон за опция/радио.")ИначеMsgBox ("Обектът е някакъв друг вид контрол.")Край АкоСледващ ctlEnd Sub |
Този тип код може да бъде много полезен, ако искаме да активираме или деактивираме контролите. В кода по -долу, когато формулярът се отваря за първи път, бутоните с опции и квадратчетата за отметка са деактивирани.
123456789101112 | Частен подпотребителForm_Initialize ()Затъмнете ctl като обектЗа всеки ctl в мен.КонтролиАко TypeOf ctl е msforms.CheckBox Тогаваctl.Enabled = FalseElseIf TypeOf ctl е msforms.OptionButton Тогаваctl.Enabled = FalseИначеctl.Enabled = ВярноКрай АкоСледващ ctlEnd Sub |
За да активирам бутоните и квадратчетата за опции, написах допълнителен код зад бутона Enable Controls.
12345678910 | Частен под cmdEnable_Click ()Затъмнете ctl като обектЗа всеки ctl в мен.КонтролиАко TypeOf ctl е msforms.CheckBox Тогаваctl.Enabled = Не ctl.EnabledElseIf TypeOf ctl е msforms.OptionButton Тогаваctl.Enabled = Не ctl.EnabledКрай АкоСледващ ctlEnd Sub |
Сега, когато щракнем върху бутона Enable Controls, ако контролите са деактивирани, те ще станат активирани и ако са активирани, те ще бъдат деактивирани. Това се постига с помощта на Не Оператор, който ни позволява да превключваме между деактивиран и активиран.