В этой статье будет продемонстрировано использование функции VBA TypeName.
VBA TypeName Функция используется для определения типа данных, хранящихся в ячейке, или типа выбранного объекта, например листа, диапазона или ячейки, или элемента управления в форме.
Определение типа данных в ячейке
Чтобы определить тип данных в ячейке, мы можем использовать функцию TypeName со свойством Cells.
123 | Sub TestCellDataType ()MsgBox "Тип данных в" & Cells (3, 2). Address & "is" & TypeName (Cells (3, 2) .Value)Конец подписки |
Если мы запустим этот код выше с листом ниже, окно сообщения сообщит нам, какой тип данных находится в ячейке.
Определение типа выбранного объекта
Мы также можем использовать TypeName, чтобы определить, какой тип объекта был выбран на листе - например, Range или Chart.
123 | Sub TestSelection ()MsgBox "Вы выбрали" & TypeName (Выбор)Конец подписки |
Или, если мы выберем диаграмму:
Мы можем углубиться еще дальше и выбрать объекты на диаграмме, и макрос вернет то, что мы выбрали.
Все это может быть наиболее полезно при создании нашего проекта VBA либо для управления потоком кода, либо для предотвращения ошибок путем тестирования, чтобы убедиться, что выбран правильный тип объекта или правильный тип данных вводится в ячейку. .
Использование TypeName в элементах управления формы
VBA позволяет нам создавать интерактивные формы, которые пользователь может заполнять и возвращать данные в код для использования различными способами. Мы можем использовать оператор TypeName, чтобы определить тип элементов управления, которые используются в форме.
В приведенном ниже примере я создал пользовательскую форму с различными элементами управления - парой текстовых полей, полем со списком, 2 кнопками выбора, 2 флажками и 3 кнопками команд.
Используя приведенный ниже код, я могу определить, какой тип элементов управления находится в форме, пройдя цикл по всем элементам управления в форме. Я использовал функцию TypeName, чтобы вернуть сообщение с типом элемента управления с помощью оператора IF VBA, чтобы проверить, какой тип элемента управления выбран.
123456 | Sub WhatControlType ()Dim ctl как объектДля каждого ctl в Me.ControlsMsgBox "Элемент управления" & TypeName (ctl)Следующий ctlКонец подписки |
Этот тип кода может быть очень полезен, если мы хотим включить или отключить элементы управления. В приведенном ниже коде при первом открытии формы переключатели и флажки отключены.
123456789101112 | Частная подписка UserForm_Initialize ()Dim ctl как объектДля каждого ctl в Me.ControlsЕсли TypeName (ctl) = "CheckBox", тоctl.Enabled = ЛожьElseIf TypeName (ctl) = "OptionButton" Тогдаctl.Enabled = ЛожьЕщеctl.Enabled = TrueКонец, еслиСледующий ctlКонец подписки |
Чтобы включить переключатели и флажки, я написал дополнительный код за кнопкой «Включить элементы управления».
12345678910 | Частная подпрограмма cmdEnable_Click ()Dim ctl как объектДля каждого ctl в Me.ControlsЕсли TypeName (ctl) = "CheckBox", тоctl.Enabled = Не ctl.EnabledElseIf TypeName (ctl) = "OptionButton" Тогдаctl.Enabled = Не ctl.EnabledКонец, еслиСледующий ctlКонец подписки |
Функциональные возможности в этом коде также можно создать с помощью оператора VBA TypeOf.