Function Schaltfläche1_Klicken()
Dim Zeile As Integer
Zeile = 0
Dim Node As String
Dim pfad As String
Set dlg = Application.FileDialog(msoFileDialogOpen)
dlg.Title = "Bitte geben Sie den Pfad an"
dlg.ButtonName = "Laden"
dlg.Filters.Clear
dlg.Filters.Add "XML", "*.xml"
If dlg.Show Then
pfad = dlg.SelectedItems(1)
End If
If pfad = "" Then
MsgBox "Sie haben keine Datei ausgewählt."
End If
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.SetProperty "SelectionLanguage", "XPath"
xmlDoc.Async = False
xmlDoc.Load (pfad)
While Zeile <> 100
Zeile = Zeile + 1
Node = Cells(Zeile, 1).Value
Node = Replace(Node, ".", "/")
If Node = "" Then
Cells(Zeile, 2).Value = " "
Else
Set nodeXML = xmlDoc.getElementsByTagName(Node)
For i = 0 To nodeXML.Length - 1
Cells(Zeile, i + 2).Value = nodeXML(i).Text
If nodeXML(i).Text = "" Then
MsgBox ("Keinen Wert in Node: " & Node & " (Zeile: " & Zeile & ") gefunden. " & nodeXML(i).Text)
End If
Next
End If
Wend
End Function
Hello Community,
我编写了这个简单的代码,将 XML_Nodes 导入到Excel工作表中。
每次单击按钮Schaltfläche1
然后显示文件对话框时,函数应该启动,以便用户可以&#34;导入&#34; XML文件。
现在,函数继续迭代他可以在工作表(A-1
到A-X
)中找到的每个节点,并将其写入excel文件。
到目前为止,“守则”运作正常,但是:
我想在Node为空时弹出消息ox。 在片刻,它只会弹出一次。
我希望你能帮助我。
答案 0 :(得分:0)
Function Schaltfläche1_Klicken()
Dim Zeile As Integer
Zeile = 0
Dim Node As String
Dim pfad As String
Set dlg = Application.FileDialog(msoFileDialogOpen)
dlg.Title = "Bitte geben Sie den Pfad an"
dlg.ButtonName = "Laden"
dlg.Filters.Clear
dlg.Filters.Add "XML", "*.xml"
If dlg.Show Then
pfad = dlg.SelectedItems(1)
End If
If pfad = "" Then
MsgBox "Sie haben keine Datei ausgewählt."
End If
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.SetProperty "SelectionLanguage", "XPath"
xmlDoc.Async = False
xmlDoc.Load (pfad)
While Zeile <> 100
Zeile = Zeile + 1
Node = Cells(Zeile, 1).Value
Node = Replace(Node, ".", "/")
If Node = "" Then
Cells(Zeile, 2).Value = " "
Else
Set nodeXML = xmlDoc.getElementsByTagName(Node)
If (nodeXML.Length = 0) Then
MsgBox ("Keinen Wert in Node: " & Node & " (Zeile: " & Zeile & ") gefunden. ")
End If
For i = 0 To nodeXML.Length - 1
Cells(Zeile, i + 2).Value = nodeXML(i).Text
Next
End If
Wend
End Function
愚蠢的我,错误是,当Node为空时nodeXML.Length返回0,所以For循环不会运行,我重新编写代码,所以它有效,我希望你原谅我的哑巴。
答案 1 :(得分:0)
nodeXML是空的(长度= 0)还是子节点为空(nodeXML(i).Text = ""
)之间没有区别?所以可以检查两者:
While Zeile <> 100
Zeile = Zeile + 1
Node = Cells(Zeile, 1).Value
Node = Replace(Node, ".", "/")
If Node = "" Then
Cells(Zeile, 2).Value = " "
Else
Set nodeXML = xmlDoc.getElementsByTagName(Node)
If (nodeXML.Length = 0) Then
MsgBox ("Keinen Wert in Node: " & Node & " (Zeile: " & Zeile & ") gefunden. ")
Else
For i = 0 To nodeXML.Length - 1
If nodeXML(i).Text = "" Then
MsgBox ("Keinen Wert in Node(" & i &"): " & Node & " (Zeile: " & Zeile & ") gefunden. " & nodeXML(i).Text)
Else
Cells(Zeile, i + 2).Value = nodeXML(i).Text
End If
Next i
End If
End If
Wend