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! :)
|