2011-03-10 3 views
0

Microsoft XML 6.0을 사용하여 Excel VBA에서 xml 파일을 작성하려고합니다. 지금까지는 일부 속성을 제외하고는 정상적으로 작동합니다.Excel VBA에서 xml 특성 만들기

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 
'...' 

마지막 줄은 컴파일러 메시지로 연결 "방법 또는 개체를 찾을 수 없습니다"이것은 subknoten2를 입력 할 때 "setAttributeNode는"선택 목록에없는 사실로 맞는 : 이 내 코드에서 발췌 한 것입니다 . 그러나 knoten의 차이점은 무엇입니까? 그들은 둘 다 정의되고 동일한 방식으로 창조되었습니다. knoten : 변형/오브젝트/IXMLDOMElement subknoten2 : 모니터링 창 (Überwachungsfenster) 나는 다음과 같은 유형의 볼에 IXMLDOMNODE을/IXMLDOMElement

사람이 여기에 무슨 일이 일어나고 있는지 그리고 내가 subknoten2에 속성을 첨부 할 수있는 방법을 생각을 가지고 있는가 ? 시간에 대한 감사합니다 ...

답변

1

문제는 DIM 선언에있을 수 있습니다 :
당신이이 절로 변수가 변형으로 선언하지 않고 어두워 때

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

block,knoten,subknoten,attribut 모든 변종은

이것은 모니터 창에 표시되는 차이점을 설명하지만 근본적인 문제를 해결하지는 못합니다.

오류가 발생하는 이유는 setAttributeNode이 조각을 게시해야합니다 형태로 IXMLDOMElement하는 방법이 아닌 IXMLDOMNode

하드 때문이다, 그러나 당신이 .createNode

+0

안녕하세요 Chris, 정말 고마워요! 선언문이 마지막 변수에만 사용된다는 사실을 알지 못했습니다. 이제 block, knoten, subknoten 및 subknoten2를 IXMLDOMElement로 정의했으며 완벽하게 작동합니다. – Adrian

0

보다는 .createElement를 사용할 필요가있을 수 있습니다 다음 코드를 사용하여 기존 노드에 속성을 추가 할 수 있습니다.

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 
관련 문제