У цій статті буде продемонстровано використання оператора типу VBA.
Оператор VBA TypeOf використовується для визначення типу об’єкта. Це може бути корисним для включення або відключення елементів керування у формі VBA або для управління потоком коду залежно від того, який тип об’єкта використовується.
Використання TypeOf для керування кодом
Ми можемо використовувати TypeOf, щоб переконатися, що зроблений вибір - це тип конкретного об’єкта, який нам потрібен - наприклад, ми можемо захотіти вибрати діапазон, а потім використовувати оператор IF, щоб побачити, що вибрано. Якщо вибрано діапазон, то ми отримаємо повідомлення про те, що діапазон вибрано, але якщо діапазон не вибрано, ми отримаємо інше повідомлення.
Давайте виділимо деякі клітинки на нашому аркуші.
Тепер, якщо ми запустимо макрос нижче, нам скажуть, що ми вибрали діапазон.
12345678 | Sub TestSelection ()Затемнити як об’єктЯкщо тип вибору - діапазон, тодіMsgBox "Діапазон вибрано!"ІнакшеMsgBox "Вибрано щось інше"Закінчити ЯкщоEnd Sub |
Однак, якщо ми не виберемо діапазон і не виберемо щось інше - можливо, діаграму -, а потім запустимо макрос, ми отримаємо інший результат!
Використання TypeOf для елементів керування формою
VBA дозволяє нам створювати інтерактивні форми, які користувач може заповнювати та повертати дані до коду для використання різними способами. Ми можемо використовувати оператор TypeOf для визначення типу елементів керування, які використовуються у формі.
У наведеному нижче прикладі я створив форму користувача з різноманітними елементами керування - пару текстових полів, комбіноване вікно, 2 кнопки опцій, 2 прапорці та 3 кнопки команд.
Використовуючи наведений нижче код, я можу визначити, які типи елементів керування є у формі, перебираючи всі елементи керування у формі. Я використовував функцію TypeName для повернення повідомлення з типом елемента керування, а також використовував оператор IF VBA, використовуючи Тип функції щоб перевірити, який тип елемента керування вибрано, а потім ще одне вікно повідомлення, щоб повернути цей тип елемента керування.
12345678910111213141516171819202122 | Sub WhatControlType ()Dim ctl як об'єктДля кожного ctl In Me.ControlsMsgBox (Назва типу (ctl))'Використовуйте функцію TypeOf, щоб визначити тип об'єкта.Якщо TypeOf ctl Is msforms.TextBox ТодіMsgBox ("Елемент керування - це TextBox.")В іншому випадку, якщо TypeOf ctl є msforms.ComboBox ТодіMsgBox ("Елемент керування є ComboBox.")В іншому випадку, якщо TypeOf ctl є msforms.Label ТодіMsgBox ("Елемент керування - це мітка".)В іншому випадку, якщо TypeOf ctl - це msforms.CommandButton ТодіMsgBox ("Елемент управління - це кнопка команди".)В іншому випадку, якщо TypeOf ctl є msforms.CheckBox ТодіMsgBox ("Елемент управління - це прапорець".)В іншому випадку, якщо TypeOf ctl є msforms.OptionButton ТодіMsgBox ("Елемент управління - це кнопка опції/радіо".)ІнакшеMsgBox ("Об'єкт - це інший тип управління.")Закінчити ЯкщоДалі ctlEnd Sub |
Цей тип коду може бути дуже корисним, якщо ми хочемо увімкнути або вимкнути елементи керування. У наведеному нижче коді при першому відкритті форми кнопки опцій та прапорці вимкнено.
123456789101112 | Приватний підкористувач UserForm_Initialize ()Dim ctl як об'єктДля кожного ctl In Me.ControlsЯкщо TypeOf ctl є msforms.CheckBox Тодіctl.Enabled = НеправдаВ іншому випадку, якщо TypeOf ctl є msforms.OptionButton Тодіctl.Enabled = НеправдаІнакшеctl.Enabled = ПравдаЗакінчити ЯкщоДалі ctlEnd Sub |
Щоб увімкнути кнопки опцій та прапорці, я написав додатковий код за кнопкою Увімкнути елементи керування.
12345678910 | Приватний саб cmdEnable_Click ()Dim ctl як об'єктДля кожного ctl In Me.ControlsЯкщо TypeOf ctl є msforms.CheckBox Тодіctl.Enabled = Не ctl.EnabledВ іншому випадку, якщо TypeOf ctl є msforms.OptionButton Тодіctl.Enabled = Не ctl.EnabledЗакінчити ЯкщоДалі ctlEnd Sub |
Тепер, коли ми натискаємо кнопку Увімкнути елементи керування, якщо елементи керування вимкнені, вони стануть увімкненими, а якщо вони ввімкнені, вони стануть відключеними. Це досягається за допомогою Ні Оператор, який дозволяє нам перемикатися між вимкненим та увімкненим.