Thema Datum  Von Nutzer Rating
Antwort
Rot Cases bei Nodes einer XML unterscheiden
24.07.2019 15:27:56 Simon
NotSolved
24.07.2019 16:25:09 Gast9684
NotSolved
24.07.2019 16:32:37 Simon
NotSolved
24.07.2019 16:55:48 Gast76546
NotSolved
25.07.2019 10:43:54 Simon
NotSolved
25.07.2019 11:21:30 Gast38037
*****
Solved
25.07.2019 12:28:14 Gast6678
Solved
25.07.2019 12:42:56 Simon
NotSolved
25.07.2019 12:49:12 Gast27235
NotSolved

Ansicht des Beitrags:
Von:
Simon
Datum:
24.07.2019 15:27:56
Views:
773
Rating: Antwort:
  Ja
Thema:
Cases bei Nodes einer XML unterscheiden

Hey Leute,

 

ich hab folgendes Problem.

Ich habe ein Makro programmiert (mit Excel VBA), das eine XML-Datei einliest und den Bereich zwischen 2 definierten Nodes weiterverwendet.

also <data> und </data>

Die XML Datei können aber auch auf Deutsch vorliegen, also mit <daten> und </daten>

Gibt es eine Möglichkeit, dies so zu machen, dass kontrolliert wird ob es "daten" oder "data" ist um dann den jeweiligen Weg zu gehen?

Vielen Dank im Voraus!

 

Ich habe bisher folgende Subs:

______________________________________________________


Private Sub CommandButton3_Click() 'Mainmethod

 'required data types
  Dim r As Object
  Dim vnt As Variant
  Dim h As Long
 

 

   
  Set r = CreateObject("VBScript.RegExp")
   
  r.IgnoreCase = True
  r.Global = False
  r.MultiLine = False
   

   
  'XML-Datei
  With Application.FileDialog(msoFileDialogOpen)
   .AllowMultiSelect = False
   If .Show = 1 Then Exit Sub
      vnt = .SelectedItems(1)
   End With
   
  'Einlesen der XML-Datei
  h = FreeFile
  Open vnt For Input As #h
    vnt = StrConv(InputB(FileLen(vnt), #h), vbUnicode)
  Close #h
 

 
  Call Werte(vnt, h)
   
 

  End Sub

 

____________________________________________________________

 

Private Sub Werte(vnt As Variant, i As Long) 'private Methode zum Einfügen der XML Werte
 
  Dim r As Object
 
   
   
  Set r = CreateObject("VBScript.RegExp")
   
  r.IgnoreCase = True
  r.Global = True
  r.MultiLine = False
 

   
  'Zeilenvorschub entfernen
  While InStr(1, vnt, vbCr) > 0 Or InStr(1, vnt, vbLf) > 0
    vnt = Replace$(Replace$(vnt, vbCr, ""), vbLf, "")
  Wend
   
  'versuche Datenbereich zu lesen
 
  ' r.Pattern = "<data>(.*)</data>"  ' r.Pattern = "<daten>(.*)</daten>"
 

 
 r.Pattern = "<data>(.*)</data>"
 

 
  Set vnt = r.Execute(vnt)
   
    If vnt.Count > 0 Then
   'Daten zwischen Tags in Array umwandeln (Trennzeichen := Komma)
    vnt = Split(vnt(0).SubMatches(0), ",")
 
     
    'ersten drei Daten werden ignoriert
    If UBound(vnt) > 0 Then 'eig 3
       
      'Daten nach oben verschieben und dabei Information(en) filtern
      'z.B. 1x23 -> 23
      For i = 0 To UBound(vnt)
        vnt(i) = Right$(vnt(i), Len(vnt(i)) - InStr(1, vnt(i), "x"))
        If i > UBound(vnt) Then vnt(i) = "" 'letzten drei sind leer
      Next
       
      'Daten ausgeben
      With ThisWorkbook.ActiveSheet.Range("B2").Resize(UBound(vnt) + 1)
        .NumberFormat = "@" 'Zellenformat: Text
        .Value = WorksheetFunction.Transpose(vnt)
      End With
       
    End If
     
    End If

    End If
    
End Sub

______________________________________________

Dankeschön! :)


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
Rot Cases bei Nodes einer XML unterscheiden
24.07.2019 15:27:56 Simon
NotSolved
24.07.2019 16:25:09 Gast9684
NotSolved
24.07.2019 16:32:37 Simon
NotSolved
24.07.2019 16:55:48 Gast76546
NotSolved
25.07.2019 10:43:54 Simon
NotSolved
25.07.2019 11:21:30 Gast38037
*****
Solved
25.07.2019 12:28:14 Gast6678
Solved
25.07.2019 12:42:56 Simon
NotSolved
25.07.2019 12:49:12 Gast27235
NotSolved