У меня есть подпрограмма (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