Thema Datum  Von Nutzer Rating
Antwort
18.05.2020 14:47:47 Luke
NotSolved
18.05.2020 14:52:58 Gast61613
NotSolved
19.05.2020 07:15:14 Gast65459
NotSolved
19.05.2020 07:18:24 Luke
NotSolved
19.05.2020 08:09:05 Gast61613
NotSolved
19.05.2020 08:33:39 Luke
NotSolved
19.05.2020 09:06:31 Gast61613
NotSolved
19.05.2020 09:28:37 Gast98102
NotSolved
19.05.2020 09:58:09 Luke
NotSolved
19.05.2020 10:31:02 Gast14146
NotSolved
19.05.2020 10:56:00 Gast13666
****
NotSolved
19.05.2020 12:47:02 Gast61613
NotSolved
19.05.2020 13:41:46 Luke
NotSolved
19.05.2020 14:09:13 Gast46603
NotSolved
19.05.2020 15:04:16 Luke
NotSolved
19.05.2020 15:39:45 Gast16307
NotSolved
19.05.2020 16:20:19 Gast62864
NotSolved
Blau gesucht, gekramt, gefunden ...
19.05.2020 23:29:14 Gast61613
*****
Solved
25.05.2020 08:15:16 Luke
NotSolved

Ansicht des Beitrags:
Von:
Gast61613
Datum:
19.05.2020 23:29:14
Views:
597
Rating: Antwort:
 Nein
Thema:
gesucht, gekramt, gefunden ...

... natürlich etwas umgeschrieben.

Luke, so zielstrebig wie Du bist - das kenne ich - das schätze ich - möchte Ich unterstützen. Behalte den Elan, aber beginne Deine Ziele durch Eigenleistung zu erreichen. Wenn es VBA dazu braucht, dann fang an zu lesen.

 

In diesem Sinner:

Folgendes schreibst Du in eine neue XLSM-Mappe; in ein allgemeines Modul. In demselben Ordner befinden sich Deine einzulesenden XML-Dateien.

Wenn Du das hast -> main() ausführen:

 

Option Explicit

    Const m_sVehicleIdentificationNumber As String = "VehicleIdentificationNumber"
    Const m_sTypeApprovalNumber As String = "TypeApprovalNumber"
    Const m_sTechnicallyPermMassAxle As String = "TechnicallyPermMassAxle"
    Const m_sTechPermMassAxleGroup As String = "TechPermMassAxleGroup"

Sub main()
    Dim sXMLFileName As String
    sXMLFileName = Dir(ThisWorkbook.Path & Application.PathSeparator & "*.xml")
    'jede XML im selben Ordner wie diese XLSM einlesen und verarbeiten
    While sXMLFileName <> ""
        Call XmlZugriffViaXPathAufCollection(ThisWorkbook.Path & Application.PathSeparator & sXMLFileName)
        sXMLFileName = Dir()
    Wend
    '
End Sub

Sub XmlZugriffViaXPathAufCollection(ByVal sXmlPfad As String)
    Dim wks As Excel.Worksheet
    Dim arr(3) As String
    Dim xmlDoc As Object
    Dim xmlNode As Object
    Dim i As Byte
    'LateBindeing Objektreferenz
    Set xmlDoc = CreateObject(class:="MSXML2.DomDocument")
    'Minimale Fehlerbehandlung
    On Error GoTo FinishErr
    'neues Arbeitsblatt für XML-Import benennen
    Set wks = ThisWorkbook.Worksheets.Add
    wks.Name = "ImportXML"
    'XML parsen/laden
    Call xmlDoc.Load(sXmlPfad)
    xmlDoc.validateOnParse = True
    xmlDoc.setProperty "SelectionLanguage", "XPath"
    'arrString für Node-Collection
    arr(0) = "/InitialVehicleInformation/Body/DataGroup/VehicleIdentificationNumber"
    arr(1) = "/InitialVehicleInformation/Body/DataGroup/TypeApprovalNumber"
    arr(2) = "/InitialVehicleInformation/Body/DataGroup/AxleTable/AxleGroup/TechnicallyPermMassAxle"
    arr(3) = "/InitialVehicleInformation/Body/DataGroup/AxleGroupTable/AxleGroupGroup/TechPermMassAxleGroup"
    'durch Nodes schleifen und die Werte im neuen Arbeitsblatt hinterlegen
    For i = LBound(arr) To UBound(arr)
        For Each xmlNode In xmlDoc.SelectNodes(arr(i))
            Debug.Print xmlNode.nodeName
            Select Case xmlNode.nodeName
                Case Is = m_sVehicleIdentificationNumber
                    Call setValueInWorksheet(wks, m_sVehicleIdentificationNumber, xmlNode.Text)
                Case Is = m_sTypeApprovalNumber
                    Call setValueInWorksheet(wks, m_sTypeApprovalNumber, xmlNode.Text)
                Case Is = m_sTechnicallyPermMassAxle
                    Call setValueInWorksheet(wks, m_sTechnicallyPermMassAxle, xmlNode.Text)
                Case Is = m_sTechPermMassAxleGroup
                    Call setValueInWorksheet(wks, m_sTechPermMassAxleGroup, xmlNode.Text)
                Case Else
            End Select
        Next
    Next i
    'Überschriften im neuen Arbeitsblatt nach http://www.vba-forum.de/forum/View.aspx?ziel=59350-es_muss_nicht_VBA_sein
    Call setÜberschrift(wks)
FinishErr:
Select Case Err.Number
    Case 1004 'Falls Arbeitsblattname schon vorhanden, wks.name = Import + Rnd()
        wks.Name = "ImportXML" & wks.Name
        Resume Next
    Case Else
        'Debug.Print Err.Number; Err.Description
End Select
    'Objektreferenzen entlassen
    Set xmlNode = Nothing: Set xmlDoc = Nothing: Set wks = Nothing
End Sub

Sub setValueInWorksheet(wks As Excel.Worksheet, sNodeName As String, sWriteValue As String)
    With wks
        Select Case sNodeName
            Case Is = m_sVehicleIdentificationNumber
                .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Value = sWriteValue
            Case Is = m_sTypeApprovalNumber
                .Cells(.Rows.Count, 2).End(xlUp).Offset(1).Value = sWriteValue
            Case Is = m_sTechnicallyPermMassAxle
                .Cells(.Rows.Count, 3).End(xlUp).Offset(1).Value = sWriteValue
            Case Is = m_sTechPermMassAxleGroup
                .Cells(.Rows.Count, 4).End(xlUp).Offset(1).Value = sWriteValue
        End Select
    End With
End Sub
Sub setÜberschrift(wks As Excel.Worksheet)
    With wks
        .Cells(1, 1).Value = m_sVehicleIdentificationNumber
        .Cells(1, 2).Value = m_sTypeApprovalNumber
        .Cells(1, 3).Value = m_sTechnicallyPermMassAxle
        .Cells(1, 4).Value = m_sTechPermMassAxleGroup
    End With
End Sub

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:

 
 

  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
18.05.2020 14:47:47 Luke
NotSolved
18.05.2020 14:52:58 Gast61613
NotSolved
19.05.2020 07:15:14 Gast65459
NotSolved
19.05.2020 07:18:24 Luke
NotSolved
19.05.2020 08:09:05 Gast61613
NotSolved
19.05.2020 08:33:39 Luke
NotSolved
19.05.2020 09:06:31 Gast61613
NotSolved
19.05.2020 09:28:37 Gast98102
NotSolved
19.05.2020 09:58:09 Luke
NotSolved
19.05.2020 10:31:02 Gast14146
NotSolved
19.05.2020 10:56:00 Gast13666
****
NotSolved
19.05.2020 12:47:02 Gast61613
NotSolved
19.05.2020 13:41:46 Luke
NotSolved
19.05.2020 14:09:13 Gast46603
NotSolved
19.05.2020 15:04:16 Luke
NotSolved
19.05.2020 15:39:45 Gast16307
NotSolved
19.05.2020 16:20:19 Gast62864
NotSolved
Blau gesucht, gekramt, gefunden ...
19.05.2020 23:29:14 Gast61613
*****
Solved
25.05.2020 08:15:16 Luke
NotSolved