Member 13902663 Ответов: 1

Excel VBA treeview control


Я вставил в TreeView в Excel, однако на вкладке "свойства" у меня нет вариантов, перейти по ссылке на источник управления. В принципе, я хотел бы знать, какой родительский узел и дочерний узел выбраны.

Что я уже пробовал:

Private Sub CommandButton1_Click()
    Unload Me
End Sub

Private Sub UserForm_Initialize()
    Worksheets("Sheet1").Activate
    '=======================
    ' PARENT NODES
    '=======================
    
    TreeView1.Nodes.Add Key:=Sheet1.Cells(1, 1).Value, Text:=Sheet1.Cells(1, 1).Value
    TreeView1.Nodes.Add Key:=Sheet1.Cells(1, 2).Value, Text:=Sheet1.Cells(1, 2).Value
    TreeView1.Nodes.Add Key:=Sheet1.Cells(1, 3).Value, Text:=Sheet1.Cells(1, 3).Value
    TreeView1.Nodes.Add Key:=Sheet1.Cells(1, 4).Value, Text:=Sheet1.Cells(1, 4).Value
    TreeView1.Nodes.Add Key:=Sheet1.Cells(1, 5).Value, Text:=Sheet1.Cells(1, 5).Value
    
    '=======================
    ' CHILD NODES
    '=======================
    
    Call FillChildNodes(1, "Africa")
    Call FillChildNodes(2, "Americas")
    Call FillChildNodes(3, "Asia")
    Call FillChildNodes(4, "Australasia")
    Call FillChildNodes(5, "Europe")
End Sub

Sub FillChildNodes(ByVal col As Integer, ByVal continent As String)
    '=====================================================
    '   GET THE LAST ROW DITH DATA IN IT FOR COLUMN col1
    '=====================================================
    
    Dim LastRow As Long
    With Sheet1
        LastRow = .Cells(.Rows.Count, col).End(xlUp).Row
    End With
    
    Dim counter As Integer
    counter = 1
    
    '=====================================================
    '   LOOP ROUND AND ADD CHILD NODES
    '=====================================================
    For Each country In Range(Cells(2, col), Cells(LastRow, col))
    
        TreeView1.Nodes.Add Sheet1.Cells(1, col).Value, tvwChild, continent + CStr(counter), country
        counter = counter + 1
    
    Next country
    
End Sub

Private Sub TreeView1_NodeClick(ByVal node As MSComctlLib.node)
    If node.Key = "Africa" Or node.Key = "Americas" Or node.Key = "Asia" _
        Or node.Key = "Australasia" Or node.Key = "Europe" Then
            
    Else
        Dim LastRowID As Long
        LastRowID = Sheet2.Cells(Sheet2.Rows.Count, "A").End(xlUp).Row
        
        For Each ID In Range(Sheet2.Cells(2, 1), Sheet2.Cells(LastRowID, "A"))
               
        If ID.Value = node.Text Then
            
                Label6.Caption = ID.Offset(, 1).Value
                Label7.Caption = ID.Offset(, 2).Value
                Label8.Caption = ID.Offset(, 3).Value
                Label9.Caption = ID.Offset(, 4).Value
                TextBox1.Text = ID.Offset(, 5).Value
                   
            End If
        Next ID
    End If
End Sub

Member 13902663

Private Sub TreeView1_NodeClick(ByVal Node As Mscomctlib.Node)

Если Узел.Ключ = "Mjpahfkk;" Или Узел.Ключ = "ahj;jpuhfkk;" или узел.Ключ = "Nytpauhfkk;" _
Или Узел.Ключ = "vz;zhfkk;" или узел.Ключ = "cghfkk;" или узел.Ключ = "NahRth" _
Или Узел.Ключ = "epahahjpgjpfs;" Или Узел.Ключ = "&j;" или узел.Ключ = "1 rhKNty;" _
Или Узел.Ключ = "2 rhKNty;" или узел.Ключ = "1 ,uh[hf;fs;" или узел.Ключ = "2 ,uh[hf;fs;" _
Или Узел.Ключ = "1 ehshfkk;" или узел.Ключ = "2 ehshfkk;" или узел.Ключ = "v];wh" _
Или Узел.Ключ = "neNfkpah" или узел.Ключ = "v];jh;" или узел.Ключ = "NahG" _
Или Узел.Ключ = "rq;fPjk;" или узел.Ключ = "ePjpnkhopfs;" Или Узел.Ключ = "gpurq;fp" _
Или Узел.Ключ = "cd;djg;ghl;L" или узел.Ключ = "Vrhah" Или Узел.Ключ = "внукпа" _
Или Узел.Ключ = "Gyk;gy;" Или Узел.Ключ = "vNrf;fpNay;" или узел.Ключ = "jhdpNay;" _
Или Узел.Ключ = "Xrpah" Или Узел.Ключ = "NahNty;" Или Узел.Ключ = "Мнх];" _
Или Узел.Ключ = "xgjpah" или узел.Ключ = "Nahdh" Или Узел.Ключ = "kPfh" _
Или Узел.Ключ = "eh$k;" или узел.Ключ = "Mg$f;" Или Узел.Key = "nrg;gdpah" _
Или Узел.Ключ = "Mfha;" Или Узел.Ключ = "rfhpah" или узел.Ключ = "ky;fpah" _
Или Узел.Ключ = "kj;NjA" или узел.Ключ = "khw;F" или узел.Ключ = "Y}f;fh" _
Или Узел.Ключ = "Nahthd;" Или Узел.Ключ = "mg;Ngh];jyUila elgbfs;" или узел.Ключ = "Нуххх" _
Или Узел.Ключ = "1 nfhhpe;jpaH" или узел.Ключ = "2 nfhhpe;jpaH" или узел.Ключ = "fyhj;jpaH" _
Или Узел.Ключ = "vNgrpaH" или узел.Ключ = "gpypg;gpaH" или узел.Ключ = "nfhNyhnraH" _
Или Узел.Ключ = "1 njrNyhdpf;NfaH" или узел.Ключ = "2 njrNyhdpf;NfaH" или узел.Ключ = "1 jPNkhj;NjA" _
Или Узел.Ключ = "2 jPNkhj;NjA" или узел.Ключ = "jPj;J" или узел.Ключ = "гпнынхд;" _
Или Узел.Ключ = "вгпнуах" или узел.Ключ = "ahf;NfhG" или узел.Ключ = "1 NgJU" _
Или Узел.Ключ = "2 NgJU" Или Узел.Ключ = "1 Nahthd;" Или Узел.Ключ = "2 Nahthd;" _
Или Узел.Ключ = "3 Nahthd;" Или Узел.Ключ = "A+jh" или узел.Ключ = "ntspg;gLj;jpd tpNr\k;" Затем

Еще

Тусклый Ластровид Так Же Долго

LastRowID = Sheet2.Cells(Sheet2.Rows.Count, "A").End(xlUp).Row

Для каждого идентификатора в диапазоне(Sheet2.Cells(2, 1), Sheet2.Cells(LastRowID, "A"))

Если ID.Value = узел.Ключ &ампер; ":" &амп; узел.Текст &ампер; ":" &амп; элемента spinbutton1.Значение Тогда

Label6.Caption = ID.Offset(, 1).Value
Label7.Caption = ID.Offset(, 2).Value
Label8.Caption = ID.Offset(, 3).Value
Label9.Caption = ID.Offset(, 4).Value
Текстовое поле textbox1.Текст = идентификатор.Смещение(, 5).Значение

Конец, Если
Следующий код

Конец, Если

Конец Подводной Лодки



1 Ответов

Рейтинг:
2

CHill60

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

У вас уже есть покрытое событие NodeClick - смотрите тот параметр, который передается в node .. это и есть выбранный узел. Вы можете получить полный путь для этого узла например

Debug.Print node.FullPath
может производить
Africa\Benin

Чтобы найти родителя, используйте свойство Parent узла, но будьте осторожны с узлами верхнего уровня, которые не имеют родителя...
If Not node.Parent Is Nothing Then
    Debug.Print node.Parent
End If
Дать бы
Africa
Возможно, самый простой способ увидеть, что доступно, - это поставить точку останова на линии
If node.Key = "Africa" Or node.Key = "Americas" Or node.Key = "Asia" _
        Or node.Key = "Australasia" Or node.Key = "Europe" Then
а затем щелкните правой кнопкой мыши на node переменная и добавьте ее в окно просмотра. Вы сможете увидеть все свойства, такие как FirstSibling и LastSibling К сожалению, ссылки в официальной документации MS, как правило, направляют вас к документации .NET TreeView, которая не всегда полностью совпадает с версиями, доступными для Excel .

Другие моменты для рассмотрения - вы упускаете
Option Explicit
в верхней части вашего модуля формы. У вас всегда должен быть этот набор (Вы можете настроить его свои параметры так, чтобы он включался автоматически)
- Это хорошая идея, чтобы описать, как вы настроили свою рабочую книгу, чтобы помочь нам быстро добраться до проблемы. например, здесь я бы сказал
Цитата:
"У меня есть рабочая тетрадь с двумя листами, на листе 1 у меня есть колонки, озаглавленные "Африка", "Америка", "Азия", "Австралазия" и "Европа". Под заголовками этих столбцов находятся списки стран на этих континентах. Лист2 содержит ... (что угодно), но не имеет отношения к этому вопросу"