Выберите узел в TreeView с VBA - PullRequest
5 голосов
/ 20 января 2009

У меня есть TreeView в UserForm в Excel. Когда в TreeView выбран узел, ListBox заполняется данными.
При двойном щелчке по элементу в ListBox отображается отдельный UserForm, который позволяет пользователю делать вещи.
Как только пользователь вернется к TreeView UserForm, я хочу, чтобы Node, который был выбран ранее, был выделен.

Проблема в том, что UserForm в основном сбрасывается, и я не могу понять, как выбрать Node с VBA.

Сейчас я спорю о том, могу ли я просто вручную запустить событие NodeClick, так как все остальное, что я пробовал, не удалось.

Какие-нибудь советы?

Ответы [ 4 ]

3 голосов
/ 26 июня 2013

Я знаю, что это старый вопрос, но у меня были проблемы с поиском приличного ответа, поэтому мы пошли. Индекс или ключи не всегда доступны. При создании я помещаю полный путь узла в node.tag. При двойном щелчке я вспоминаю значение тега, затем я ищу тег в коллекции узлов дерева. Слишком много? не эффективно? возможно, но его работы каждый раз любят очарование, и я могу использовать свои собственные идентификаторы в теге в зависимости от цели дерева. Код поиска:

Sub MyTreeview_FindNode(strKey As String)
Dim myNode As Node

   For Each myNode In Me.Treeview.Nodes
       If myNode.Tag = strKey Then
          myNode.Selected = True
          myNode.EnsureVisible
          End If
       Next
End Sub 
2 голосов
/ 07 ноября 2016

В моем Excel работает:

TreeView1.Nodes(key).Selected = True
1 голос
/ 20 января 2009

У вас есть несколько вариантов. Во-первых, когда TreeForm UserForm отображает вторую UserForm, вам нужно либо:

  1. Сохранить идентификатор выбранного узла (используйте переменную уровня формы или уровня модуля). Затем вам нужно написать метод для выбора узла по возвращении в форму. IIRC, вам нужно иметь уникальный «Ключ» или ID для каждого элемента узла, а затем использовать TreeView.Select для узла, возвращаемого из TreeView.FindNode. - или -
  2. Скрыть пользовательскую форму TreeView вместо ее закрытия (Me.Hide). Когда вторая пользовательская форма закрыта (или нажата OK / Cancel), снова отобразите пользовательскую форму TreeView (TreeViewForm.Show).
0 голосов
/ 18 сентября 2015

Попробуйте это: objTreeview.Object.Nodes (KEY_NAME) .selected = TRUE * * +1001

Где KEY_NAME - это ключ (строка), который вы использовали для создания узла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...