Сначала я бы рекомендовал использовать библиотеку «Microsoft XML, vx.x», где x обозначает самую новую версию, доступную вам (должна быть 6.0). После этого вы хорошо пойдете. Но то, что следует учитывать при работе с XML в VBA, должно быть широким, чтобы покрыть ответ. Я приведу код здесь, чтобы получить желаемый результат, хотя:
Sub parse_xml()
Dim XmlFileName As String: XmlFileName = "C:\Path\Filename.xml"
Dim XmlDocument As New MSXML2.DOMDocument60
Dim NodeA As IXMLDOMNode
Dim NodeB As IXMLDOMNode
Dim NodeC As IXMLDOMNode
XmlDocument.Load XmlFileName
For Each NodeA In XmlDocument.DocumentElement.ChildNodes
For Each NodeB In NodeA.ChildNodes
For Each NodeC In NodeB.ChildNodes
Debug.Print NodeC.ParentNode.ParentNode.BaseName & NodeC.ParentNode.BaseName & NodeC.BaseName
Next NodeC
Next NodeB
Next NodeA
End Sub
Пожалуйста, обратите внимание, что я должен был расширить свой файл немного, чтобы сделать это правильный XML-файл, который может быть загружен в переменную XmlDocument , Xml-файл я использовал для этого примера заключается в следующем:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<A1>
<B1>
<c1>value</c1>
<c2>value</c2>
<c3>value</c3>
</B1>
<B2>
<c1>value</c1>
<c2>value</c2>
<c3>value</c3>
</B2>
</A1>
<A2>
<B1>
<c1>value</c1>
<c2>value</c2>
<c3>value</c3>
</B1>
<B2>
<c1>value</c1>
<c2>value</c2>
<c3>value</c3>
</B2>
</A2>
</data>
Это сгенерирует следующий вывод (я использовал только Debug.Print как вы можете видеть):
A1B1c2
A1B1c3
A1B2c1
A1B2c2
A1B2c3
A2B1c1
A2B1c2
A2B1c3
A2B2c1
A2B2c2
A2B2c3
Боковой примечание в end: В отличие от того, что прокомментировал Пьер, я думаю, что синтаксический анализ XML в VBA - вполне достижимая задача. По моему опыту вам нужна только библиотека, которую я рекомендовал в верхней части сообщения, чтобы выполнить фактический синтаксический разбор файла. Я работал с довольно сложными XML-файлами, используя только эту библиотеку для синтаксического анализа.
Edit: Это код, который будет только извлечь значения для нужного критерия:
Sub parse_xml()
Dim XmlFileName As String: XmlFileName = "C:\Path\Filename.xml"
Dim XmlDocument As New MSXML2.DOMDocument60
Dim NodeA As IXMLDOMNode
Dim NodeB As IXMLDOMNode
Dim NodeC As IXMLDOMNode
Dim DesiredA As String: DesiredA = "A2" 'Enter your desired A here
XmlDocument.Load XmlFileName
For Each NodeA In XmlDocument.DocumentElement.ChildNodes
If NodeA.BaseName = DesiredA Then 'This is the new line that selects your desired A
For Each NodeB In NodeA.ChildNodes
For Each NodeC In NodeB.ChildNodes
Debug.Print NodeC.ParentNode.ParentNode.BaseName & NodeC.ParentNode.BaseName & NodeC.BaseName
Next NodeC
Next NodeB
End If 'End of the If-Statement
Next NodeA
End Sub
Вы пытаетесь разобрать документ XML в VBA, и я должен сказать, у вас есть ухабистая дорога впереди вас , вы можете посмотреть [эту тему] (http://stackoverflow.com/questions/11305/how-to-parse-xml-using-vba) и [этот] (http://stackoverflow.com/ вопросы/21491736/как к синтаксическому-ан-XML-файл и запись-в-данных, то сохранение этого). Анализ XML в VBA кошмарный, попробуйте взглянуть на XPath также, но нет практического пути к этому легко. –
У вас означает, что мы не можем делать в VBA ??? – user2155454
Видимо, вы не открыли ссылки, которые я предоставил, но я вам все равно объясню. Вы можете, но это чрезвычайно сложно, и вам придется использовать всевозможные библиотеки и инструменты для этого, например [XPath щелкните по ссылке] (https://msdn.microsoft.com/en-us/library/ms256086 (v = vs.110) .aspx). Попытайтесь начать поиск ответов и сообщите нам что-нибудь, чтобы пожевать, иначе ваше сообщение скорее всего будет удалено. –