VBA Xml: Импорт xml файлов в Excel
Формулировка задачи:
Нижеследующий код выполняет поиск всех .xml файлов в папке и импортирует в excel необходимые атрибуты. Проблема в том, что не все xml файлы имеют одинаковый тег(возможны 4 варианта). Если в папку положить xml файлы только с "правильными" тегами все работает, но если там окажется "неправильный" xml файл, то программа вылетает с ошибкой (Run time Error 91). Это случается по причине того, что функция SelectNode не может возвращать значение Nothing. Вопрос в том, можно ли каким-либо образом сделать так чтобы программа перебирала 4 варианта возможных тегов.
В xml файлах возможны только 4 варианта(loc1,loc2,loc3,loc4). Пробовал через оператор управления ошибками не получается. Буду признателен за пример.
В xml файлах возможны только 4 варианта(loc1,loc2,loc3,loc4). Пробовал через оператор управления ошибками не получается. Буду признателен за пример.
Решение задачи: «VBA Xml: Импорт xml файлов в Excel»
textual
Листинг программы
Private Enum SearchResult Present NotPresent PresentComplete End Enum Private Function CheckNodeName(ChildList As MSXML2.IXMLDOMNodeList, names() As String, index As Long) As SearchResult Dim Node As MSXML2.IXMLDOMNode Dim attr As MSXML2.IXMLDOMAttribute For Each Node In ChildList If Node.nodeName = names(index) Then If index = UBound(names) Then CheckNodeName = PresentComplete Exit Function Else If Mid(names(index + 1), 1, 1) = "@" Then For Each attr In Node.Attributes If attr.baseName = Right(names(index + 1), Len(names(index + 1)) - 1) Then If UBound(names) = index + 1 Then CheckNodeName = PresentComplete Exit Function Else CheckNodeName = Present End If End If Next End If CheckNodeName = CheckNodeName(Node.childNodes, names, index + 1) If CheckNodeName = PresentComplete Then Exit Function End If End If Else CheckNodeName = False End If Next End Function Private Function CheckPath(doc As MSXML2.DOMDocument, path As String) As SearchResult Dim i As Long Dim names() As String For i = 1 To Len(path) If Mid(path, i, 1) <> "\" Then names = Split(Right(path, Len(path) - i + 1), "\") Exit For End If Next i CheckPath = CheckNodeName(doc.childNodes, names, 0) End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д