VBA循环MsgBox只出现一次

时间:2016-04-18 12:53:53

标签: xml vba excel-vba import excel

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-1A-X)中找到的每个节点,并将其写入excel文件。

到目前为止,“守则”运作正常,但是:

我想在Node为空时弹出消息ox。 在片刻,它只会弹出一次。

我希望你能帮助我。

2 个答案:

答案 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