Тип VBA

В этой статье будет продемонстрировано использование оператора VBA TypeOf.

Оператор VBA TypeOf используется для определения типа объекта. Это может быть полезно для включения или отключения элементов управления в форме VBA или для управления потоком кода в зависимости от того, какой тип объекта используется.

Использование TypeOf для управления кодом

Мы можем использовать TypeOf, чтобы гарантировать, что выбранный нами тип конкретного объекта, который нам нужен - например, мы можем выбрать диапазон, а затем использовать оператор IF, чтобы увидеть, что выбрано. Если диапазон выбран, мы получим сообщение о том, что диапазон выбран, но если диапазон не выбран, мы получим другое сообщение.

Давайте выберем несколько ячеек на нашем листе.

Теперь, если мы запустим макрос, показанный ниже, нам сообщат, что мы выбрали Range.

12345678 Sub TestSelection ()Dim rng As ObjectЕсли TypeOf Selection является диапазоном, тоMsgBox "Диапазон выбран!"ЕщеMsgBox "Выбрано что-то еще"Конец, еслиКонец подписки

Однако, если мы не выберем диапазон и не выберем что-то еще, например диаграмму, а затем запустим макрос, мы получим другой результат!

Использование TypeOf в элементах управления формой

VBA позволяет нам создавать интерактивные формы, которые пользователь может заполнять и возвращать данные в код для использования различными способами. Мы можем использовать оператор TypeOf, чтобы определить тип элементов управления, которые используются в форме.

В приведенном ниже примере я создал пользовательскую форму с различными элементами управления - парой текстовых полей, полем со списком, 2 кнопками выбора, 2 флажками и 3 кнопками команд.

Используя приведенный ниже код, я могу определить, какой тип элементов управления находится в форме, пройдя цикл по всем элементам управления в форме. Я использовал функцию TypeName, чтобы вернуть сообщение с типом элемента управления, и использовал оператор IF VBA, используя Функция TypeOf чтобы проверить, какой тип элемента управления выбран, а затем еще одно окно сообщения, чтобы вернуть этот тип элемента управления.

12345678910111213141516171819202122 Sub WhatControlType ()Dim ctl как объектДля каждого ctl в Me.ControlsMsgBox (имя типа (ctl))'Используйте функцию TypeOf, чтобы определить тип объекта.Если TypeOf ctl - это msforms.TextBox, тоMsgBox («Элемент управления - TextBox.»)ElseIf TypeOf ctl Is msforms.ComboBox ТогдаMsgBox («Элемент управления - ComboBox.»)ElseIf TypeOf ctl - это msforms.Label ThenMsgBox («Элемент управления - это метка.»)ElseIf TypeOf ctl - это msforms.CommandButton ThenMsgBox («Элемент управления - это командная кнопка.»)ElseIf TypeOf ctl Is msforms.CheckBox ThenMsgBox («Элемент управления - это флажок.»)ElseIf TypeOf ctl Is msforms.OptionButton ThenMsgBox («Элемент управления - это опция / переключатель.»)ЕщеMsgBox («Объект представляет собой элемент управления другого типа.»)Конец, еслиСледующий ctlКонец подписки

Этот тип кода может быть очень полезен, если мы хотим включить или отключить элементы управления. В приведенном ниже коде при первом открытии формы переключатели и флажки отключены.

123456789101112 Частная подписка UserForm_Initialize ()Dim ctl как объектДля каждого ctl в Me.ControlsЕсли TypeOf ctl - это msforms.CheckBox, тоctl.Enabled = ЛожьElseIf TypeOf ctl - это msforms.OptionButton Thenctl.Enabled = ЛожьЕщеctl.Enabled = TrueКонец, еслиСледующий ctlКонец подписки

Чтобы включить переключатели и флажки, я написал дополнительный код за кнопкой «Включить элементы управления».

12345678910 Частная подпрограмма cmdEnable_Click ()Dim ctl как объектДля каждого ctl в Me.ControlsЕсли TypeOf ctl - это msforms.CheckBox, тоctl.Enabled = Не ctl.EnabledElseIf TypeOf ctl - это msforms.OptionButton Thenctl.Enabled = Не ctl.EnabledКонец, еслиСледующий ctlКонец подписки

Теперь, когда мы нажимаем кнопку «Включить элементы управления», если элементы управления отключены, они станут активными, а если они включены, они станут отключенными. Это достигается с помощью Нет Оператор, который позволяет нам переключаться между отключенным и включенным.

wave wave wave wave wave