создание атрибутов xml из Excel VBA - PullRequest
1 голос
/ 10 марта 2011

Я пытаюсь написать XML-файл из Excel VBA, используя Microsoft XML 6.0.Пока что работает нормально, за исключением некоторых атрибутов.Это выдержка из моего кода:

Dim block,knoten,subknoten, subknoten2 As MSXML2.IXMLDOMNode
Dim attribut, attribut2 As MSXML2.IXMLDOMAttribute

'...'
Set knoten = block.appendChild(.createNode(NODE_ELEMENT, "name", ""))
Set attribut = .createAttribute("id")
attribut.nodeValue = "Knotentext"
knoten.setAttributeNode attribut ' works fine so far '

Set subknoten = knoten.appendChild(.createNode(NODE_ELEMENT, "unterknoten", ""))
Set subknoten2 = subknoten.appendChild(.createNode(NODE_ELEMENT, "unterknoten2", ""))
subknoten2.nodeTypedValue = "Knotentext"
Set attribut = .createAttribute("id")
attribut.Value ="Attributstext"
subknoten2.setAttributeNode attribut  ' this line creates an error, rest is ok
'...'

Последняя строка приводит к сообщению компилятора «Метод или объект не найден». Это соответствует тому, что «setAttributeNode» отсутствует в списке выбора при вводе subknoten2.,Но в чём разница с кнотен?Они оба были определены и созданы одинаково.В окне мониторинга (Überwachungsfenster) я вижу следующие типы: knoten: Variant / Object / IXMLDOMElement subknoten2: IXMLDOMNODE / IXMLDOMElement

Кто-нибудь имеет представление о том, что здесь происходит, и как я могу прикрепить атрибут к subknoten2?Спасибо за ваше время ...

Ответы [ 2 ]

1 голос
/ 08 декабря 2016

Вы можете добавить атрибуты к существующему узлу, используя следующий код

Dim pairList As IXMLDOMNodeList
Dim pairNode As IXMLDOMNode
Dim objAttr As IXMLDOMAttribute

Set pairList = objDom.selectNodes("/PairList/*")



For Each pairNode In pairList
           '--------------------------------------------------
           ' Setting Target Positions
           '-------------------------------------------------
            Set objAttr = objDom.createAttribute("TX")
            pairNode.Attributes.setNamedItem(objAttr).Text = tPoint.X
           Set objAttr = objDom.createAttribute("TY")
            pairNode.Attributes.setNamedItem(objAttr).Text = tPoint.Y
           Set objAttr = objDom.createAttribute("TZ")
            pairNode.Attributes.setNamedItem(objAttr).Text = tPoint.Z


Next pairNode
1 голос
/ 10 марта 2011

проблема может быть в объявлениях DIM:
когда вы dim без предложения as, переменная объявляется как вариант

Dim block,knoten,subknoten, subknoten2 As MSXML2.IXMLDOMNode
Dim attribut, attribut2 As MSXML2.IXMLDOMAttribute

block,knoten,subknoten,attribut все варианты

Это объясняет разницу, которую вы видите в окне монитора, но не решает основную проблему.

Причина, по которой вы получаете ошибку, заключается в том, что setAttributeNode - это метод IXMLDOMElement, а не IXMLDOMNode

Трудно быть уверенным из размещенного фрагмента, но может потребоваться использовать .createElement вместо .createNode

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