Элемент управления пользовательской формы TreeView, предназначенный для создания древовидной (иерархической) структуры. Примеры кода VBA Excel с TreeView.
Элемент управления TreeView
Каждый узел (пункт, ветвь) в древовидной структуре может содержать вложенные ветви, которые называются дочерними узлами. Узлы, содержащие дочерние пункты, называются родительскими. Их можно показывать как в развернутом, так и в свернутом виде.
Пункты элемента управления TreeView можно выбирать и привязывать к этому событию другие процедуры или строки кода VBA Excel. Рядом с ветвями иерархической структуры можно включить отображение флажков (CheckBox).
Добавление TreeView на Toolbox
Изначально на панели инструментов Toolbox нет ссылки на элемент управления TreeView, поэтому ее нужно добавить самостоятельно.
Чтобы добавить TreeView на панель инструментов Toolbox, кликните по ней правой кнопкой мыши и выберите из контекстного меню ссылку «Additional Controls…»:
В открывшемся окне «Additional Controls» из списка дополнительных элементов управления выберите строку «Microsoft TreeView Control»:
Нажмите кнопку «OK» и значок элемента управления TreeView появится на панели инструментов Toolbox:
Для работы кода VBA Excel с элементом управления TreeView необходимо добавить ссылку на библиотеку Microsoft Windows Common Controls 6.0 (SP6)
(цифры у вас могут быть другие). Подключается ссылка в окне «References VBAproject», перейти в которое можно через главное меню редактора: Tools–>References…
Свойства древовидной структуры
Свойство | Описание |
---|---|
Appearance | Внешний вид древовидной структуры (наличие 3D-рамки). По умолчанию cc3D (1) — рамка есть, ccFlat (0) — рамки нет. |
BorderStyle | Отображение границ элемента управления TreeView. По умолчанию ccNone (0) — границ нет, ccFixedSingle (1) — границы есть. |
CheckBoxes | Отображение флажков (CheckBox) рядом с узлами иерархической структуры. По умолчанию False — флажков нет, True — флажки есть. |
ControlTipText | Текст всплывающей подсказки при наведении курсора на TreeView. |
Enabled | Возможность раскрытия узлов и их выбора. True — перечисленные опции включены, False — выключены. |
Font | Шрифт, начертание и размер текста узлов древовидной структуры. |
FullRowSelect | Определяет область выбора и подсвечивания выбранной строки. По умолчанию False — область выбора ограничена текстом, True — область выбора распространяется на всю строку. |
Height | Высота элемента управления TreeView. |
HotTracking | Выделение узла подчеркиванием при наведении на него курсора. По умолчанию False — нет подчеркивания, True — есть подчеркивание. |
Left | Расстояние от левого края внутренней границы пользовательской формы до левого края иерархической структуры. |
LineStyle | Задает стиль веток. По умолчанию tvwTreeLines (0) — навигационные линии отображаются только у дочерних узлов, tvwRootLines (1) — навигационные линии отображаются у всех узлов. |
Nodes | Возвращает коллекцию узлов. |
SelectedItem | Возвращает выделенный пункт. |
Sorted | Задает или отменяет автоматическую сортировку узлов элемента управления TreeView. По умолчанию False — сортировка отключена, True — сортировка включена. |
Style | Задает стиль древовидной структуры. Она может состоять только из текста или из текста с дополнениями в разных комбинациях: навигационные линии, раскрывающие ветку плюсы, иконки — всего 8 задающих стиль констант. |
TabIndex | Определяет позицию элемента управления в очереди на получение фокуса при табуляции, вызываемой свойством AutoTab или нажатием клавиш «Tab», «Enter». Отсчет начинается с 0. |
Top | Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края элемента управления. |
Visible | Видимость элемента управления. True – TreeView отображается на пользовательской форме, False – TreeView скрыт. |
Width | Ширина элемента управления. |
Программное создание узлов
Создание узлов элемента управления TreeView программным способом в VBA Excel.
Синтаксис
1 |
TreeView.Nodes.Add Relative, Relationship, Key, Text, Image, SelectedImage |
Свойство Nodes объекта TreeView возвращает коллекцию узлов, а метод Nodes.Add добавляет в коллекцию новый узел. Обязательным параметром является только Text.
Параметры
Параметр | Описание |
---|---|
Relative | Уникальный ключ (Key) узла, относительно положения которого будет размещен новый пункт в соответствии с аргументом Relationship. |
Relationship | Задает положение добавляемого узла относительно ветки, указанной аргументом Relative. |
Key | Уникальный ключ (имя) создаваемого узла. |
Text | Отображаемый текст узла (ветки, пункта). Обязательный параметр. |
Image | Рисунок (иконка), который будет отображается перед узлом по умолчанию |
SelectedImage | Рисунок (иконка), который заменит Image при выборе узла. |
Константы, которые применяются в качестве аргументов параметра Relationship:
Константа | Значение | Описание |
---|---|---|
tvwFirst | 0 | Новый узел помещается перед всеми узлами того уровня, на котором находится узел, указанный аргументом Relative. |
tvwLast | 1 | Новый узел помещается после всех узлов того уровня, на котором находится узел, указанный аргументом Relative. |
tvwNext | 2 | Новый узел помещается после узла, указанного аргументом Relative (значение по умолчанию). |
tvwPrevious | 3 | Новый узел помещается перед узлом, указанным аргументом Relative. |
tvwChild | 4 | Новый узел создается как дочерний для узла, указанного аргументом Relative. |
Примеры кода VBA Excel с TreeView
Пример 1
Пример создание одного узла первого уровня. Для реализации примера необходима пользовательская форма с размещенным на ней элементом управления TreeView1.
1 2 3 4 |
Private Sub UserForm_Initialize() Me.Caption = "TreeView" TreeView1.Nodes.Add , , , "Текст узла первого уровня" End Sub |
Результат работы кода:
Пример 2
Генерация пяти узлов первого уровня с помощью кода VBA Excel. Для реализации примера необходима пользовательская форма с размещенным на ней элементом управления TreeView1.
1 2 3 4 5 6 7 8 9 |
Private Sub UserForm_Initialize() Me.Caption = "TreeView" Dim i As Byte With TreeView1.Nodes For i = 1 To 5 .Add , , , "Узел первого уровня №" & i Next End With End Sub |
Результат работы кода:
Пример 3
Создание узлов первого, второго и третьего уровней. Для реализации примера необходима пользовательская форма с размещенным на ней элементом управления TreeView1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Private Sub UserForm_Initialize() Me.Caption = "TreeView" With TreeView1.Nodes 'Создание узла "Node1" и трех его дочерних узлов .Add , , "Node1", "Text Node1" .Add "Node1", tvwChild, "Node1-Child1", "Text Node1-Child1" .Add "Node1", tvwChild, "Node1-Child2", "Text Node1-Child2" .Add "Node1", tvwChild, "Node1-Child3", "Text Node1-Child3" 'Создание двух дочерних узлов ветки "Node1-Child1" .Add "Node1-Child1", tvwChild, "Node1-Child11", "Text Node1-Child11" .Add "Node1-Child1", tvwChild, "Node1-Child12", "Text Node1-Child12" 'Создание узла "Node2" и трех его дочерних узлов .Add , , "Node2", "Text Node2" .Add "Node2", tvwChild, "Node2-Child1", "Text Node2-Child1" .Add "Node2", tvwChild, "Node2-Child2", "Text Node2-Child2" .Add "Node2", tvwChild, "Node2-Child3", "Text Node2-Child3" 'Раскрываем свернутые по умолчанию узлы .Item("Node1").Expanded = True .Item("Node2").Expanded = True .Item("Node1-Child1").Expanded = True End With With TreeView1 'Отображаем навигационные линии и знаки плюс/минус .Style = tvwTreelinesPlusMinusText .LineStyle = tvwRootLines End With End Sub |
Результат работы кода:
Пример 4
Заполнение текстового поля в зависимости от выбранного пункта древовидной структуры с помощью кода VBA Excel. Для реализации примера необходима пользовательская форма с размещенными на ней элементами управления TreeView1 и TextBox1.
Данные для иерархической структуры и текстового поля содержатся в следующей таблице, размещенной на активном рабочем листе:
Код VBA Excel для создания узлов элемента управления TreeView1 с текстом из ячеек первого столбца таблицы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Private Sub UserForm_Initialize() Me.Caption = "Каталог с описаниями" With TreeView1.Nodes 'Добавляем ветки .Add , , "Node1", Cells(1, 1) .Add "Node1", tvwChild, "Node1-Child1", Cells(2, 1) .Add "Node1", tvwChild, "Node1-Child2", Cells(3, 1) .Add , , "Node2", Cells(4, 1) .Add "Node2", tvwChild, "Node2-Child1", Cells(5, 1) .Add "Node2", tvwChild, "Node2-Child2", Cells(6, 1) 'Раскрываем свернутые по умолчанию узлы .Item("Node1").Expanded = True .Item("Node2").Expanded = True End With With TreeView1 'Отображаем навигационные линии и знаки плюс/минус .Style = tvwTreelinesPlusMinusText .LineStyle = tvwRootLines End With With TextBox1 .MultiLine = True .WordWrap = True .Text = "Выберите животное или растение" End With End Sub |
Код VBA Excel для заполнения текстового поля TextBox1 в зависимости от выбранного пункта древовидной структуры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) With TreeView1 Select Case .SelectedItem Case Is = .Nodes("Node1") TextBox1.Text = "Выберите животное или растение" Case Is = .Nodes("Node1-Child1") TextBox1.Text = Cells(2, 2) Case Is = .Nodes("Node1-Child2") TextBox1.Text = Cells(3, 2) Case Is = .Nodes("Node2") TextBox1.Text = "Выберите животное или растение" Case Is = .Nodes("Node2-Child1") TextBox1.Text = Cells(5, 2) Case Is = .Nodes("Node2-Child2") TextBox1.Text = Cells(6, 2) End Select End With End Sub |
Результат работы кода: