Тип VBA

У цій статті буде продемонстровано використання оператора типу 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

Тепер, коли ми натискаємо кнопку Увімкнути елементи керування, якщо елементи керування вимкнені, вони стануть увімкненими, а якщо вони ввімкнені, вони стануть відключеними. Це досягається за допомогою Ні Оператор, який дозволяє нам перемикатися між вимкненим та увімкненим.

wave wave wave wave wave