Передача значения из подпрограммы (древовидного представления) в другую подпрограмму - ошибка времени выполнения 438 - PullRequest
0 голосов
/ 17 июня 2020

У меня есть подпрограмма (AddChildrenToTreeView), которая загружает файл xml, исследует xml дочерний элемент и добавляет его в древовидное представление, как показано ниже. Я хотел бы передать значение (дочерний элемент) другой подпрограмме (здесь tvwTest_NodeClick). т.е. я хочу щелкнуть любой дочерний узел и отфильтровать всех дочерних узлов. Я получаю run-time error 438: Object doesn't support this property or method. Есть идеи, как это исправить?

' Load a TreeView control from an XML file.
Private Sub LoadTreeViewFromXmlFile(ByVal file_name As String, ByVal trv As TreeView)
Dim xml_doc As DOMDocument60

' Load the XML file into the DOMDocument.
Set xml_doc = New DOMDocument60
xml_doc.Load file_name

' Add the root node's children to the TreeView.
trv.Nodes.Clear
AddChildrenToTreeView trv, Nothing, xml_doc.DocumentElement
End Sub


'-----
' Add XML node's children to the indicated TreeView node.
Private Sub AddChildrenToTreeView(ByVal trv As TreeView, _
    ByVal treeview_parent As Node, ByVal xml_node As IXMLDOMElement)
Dim xml_child As IXMLDOMElement
Dim new_node As Node

' Examine each XML child.
For Each xml_child In xml_node.ChildNodes
    ' Add the child to the TreeView.
    If treeview_parent Is Nothing Then
        Set new_node = trv.Nodes.Add(, , , xml_child.Attributes.Item(0).Text)
    Else
        Set new_node = trv.Nodes.Add(treeview_parent, tvwChild, , xml_child.Attributes.Item(0).Text)

    ' Calling subroutine
    Call tvwTest_NodeClick(new_node)

    End If

    new_node.EnsureVisible

    ' Add the child's children.
    AddChildrenToTreeView trv, new_node, xml_child

Next xml_child

End Sub

'-----
' Location of the xml file
Private Sub cmdLoadXML_Click()
LoadTreeViewFromXmlFile 
"C:\Users\myfile.xml", tvwTest
End Sub


'-----
Private Sub tvwTest_NodeClick(ByVal Node As MSComctlLib.Node)
Me.Caption = Node.Text

Dim xml_child As Object
Set xml_child = ActiveSheet.ListObjects("Table1")

' Apply Filtering (Here I get run-time error!!!)
ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=3, Criteria1:=xml_child.Attributes.Item(1).Text

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