Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1948to1952
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA-Import

VBA-Import
12.10.2023 20:17:15
LordWuffel
Hi Forum,

in einem Youtube-Video habe ich gesehen, wie xml-Daten in eine Excel-Datei importiert werden
Das möchte ich gerne mit KOSTRA-Daten machen

Den code hab ich abgeschrieben aber den Teil mit dem Einlesen der Daten kriege ich einfach nicht hin:




Private Sub CommandButton1_Click()
'
'benötigt den Verweis: Microsoft XML, V6.0
'
Dim fd As Office.FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
.Title = "KOSTRA-Daten auswählen"
.Filters.Add "XML File", "*.xml", 1
.AllowMultiSelect = False

If .Show = True Then
xmlFi1eName.Selectedltems (1)
'xml einlesen und umwandeln
Dim xDox As Object
Set xdoc = CreateObject("MSXML2.DOMDocument")
xdoc.async = False: xdoc.validateOnParse = False
xdoc.Load (xmlFileName)

Set D = xdoc.DocumentElement
row_number = 1
column_number = 2
'nach jedem T eine Spalte nach rechts, nach jedem D eine Zeile runter

For Each D In Daten.ChildNodes
For Each T In Daten.ChildNodes
' For Each RN In Daten.ChildNodes
' 'ausgabe von RN in Excel-Zelle
' 'Aplication.Range("KostraDaten").Cells(r,s)
' Next RN
' column_number = column_number + 1
Next T
Debug.Print "lauf:" & D.ChildNodes(1).Text
row_number = row_number + 1
Next D


End If

End With
End Sub


es passiert schlicht nix, und ich verstehe die For (to) Schleife nicht. könnt ihr mir bitte helfen?
die xml hab ich in die anlage gepackt - als txt, die "Konvertierung" sollte euch nicht schwer fallen. allerdings hab ich keinen Plan wie das mit Rechten ist, darum bitte erst ermahnen, dann abmahnen

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Import
12.10.2023 21:02:29
Fennek
Hallo,

dieser Code liefert die Daten:

 

$xml = [xml](Get-Content C:UsersUserDesktopDWD.xml)

$d = $xml.dwd.Daten.D
$d.ForEach('T')


Deine Daten werden auf dem Desktop unter "DWD.xml" gespeichert. Die ersten Zeilen sind:

PS C:UsersUser> $d.ForEach('T')

a hN RN
- -- --
1.0 6.3 210.0
2.0 7.7 256.7
3.0 8.5 283.3
5.0 9.6 320.0
10.0 11.2 373.3
20.0 12.9 430.0
30.0 13.9 463.3
50.0 15.3 510.0
100.0 17.4 580.0
1.0 8.2 136.7
2.0 10.0 166.7
3.0 11.1 185.0

(Powershell)
Anzeige
AW: VBA-Import
12.10.2023 21:19:27
LordWuffel
Hey Danke,

leider ist das nicht die Lösung, die ich brauche.

in EXCEL soll in einer Tabelle der XML-Datensatz eingefügt werden. ich bin nicht sicher, ob ich dazu zunächst ein leeres Tabellenblatt erzeuge, das könnte grundsätzlich auch in dem Bestandsblatt eingefügt werden. ist grade noch egal

das Ergebnis muss/soll so aussehen:
T
D RN

also:

1 2 3 5
5 210,0 256,7 283,3 320,0
10 136,7 166,7 185,0 208,3
usw.

Der Aufbau der Ausgabetabelle ist ziemlich wichtig, das hat einen fachlichen Grund für die Anwendung der Daten

hier der Link zum video, die Lösung fänd ich prima
https://www.youtube.com/watch?v=M8vwRj5XK-M&t=548s

DAnke @all
Anzeige
AW: VBA-Import
12.10.2023 21:39:01
Yal
Hallo Lord,

dann musst Du in den PQ-Behandlung wie unten 2 Schritte hinzufügen:
_ Spalten "hN", "Attribute:einheit" markieren und entfernen,
_ Spalte "Attribute:a" auswählen und in Menü "Transformieren", "Spalte pivotieren"
Ergebnis sieht dann so aus:
Userbild

VG
Yal
AW: VBA-Import
12.10.2023 21:44:44
LordWuffel
hi Yal,

Danke für deine Geduld, hab das grade nachgebaut und deine Schritte hinzugefügt. passt.

kann ich mit arbeiten. aber ich würde doch noch gerne wissen, was an dem VBA-code nicht stimmt, da die daten nicht ausgelesen werden. ist mittlerweile so, dass ich es gerne verstehen möchte

Gruß

Wuffel
Anzeige
AW: VBA-Import
13.10.2023 00:37:01
ralf_b
".. was an dem VBA-code nicht stimmt, da die daten nicht ausgelesen werden. ..." du hast dich verschrieben und beim Umbauen ein bisschen was vermurkst. versuch mal das. Vielleicht noch interessant für dich. Excel/vba macht aus 1.0 eine 10 wenn man den Punkt nicht durch ein Komma ersetzt.

Private Sub CommandButton1_Click()

'
'benötigt den Verweis: Microsoft XML, V6.0
'
Dim fd As Office.FileDialog
Dim xmlFileName, Daten, D, row_number&, column_number&, T

Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
.Title = "KOSTRA-Daten auswählen"
.Filters.Add "XML File", "*.xml", 1
.AllowMultiSelect = False

If .Show = True Then

xmlFileName = .SelectedItems(1)
If xmlFileName = "" Then Exit Sub
Else
Exit Sub
End If
End With
'xml einlesen und umwandeln
Dim xDoc As Object
Set xDoc = CreateObject("MSXML2.DOMDocument")
xDoc.async = False: xDoc.validateOnParse = False
xDoc.Load (xmlFileName)

Set Daten = xDoc.SelectNodes("/dwd:dwd/Daten/D")
row_number = 2
column_number = 2
'nach jedem T eine Spalte nach rechts, nach jedem D eine Zeile runter

For Each D In Daten
Cells(row_number, column_number) = CInt(D.Attributes(0).Text)

For Each T In D.ChildNodes
column_number = column_number + 1
If row_number = 2 Then Cells(row_number - 1, column_number) = CInt(Replace(T.Attributes(0).Text, ".", ","))
Cells(row_number, column_number) = CDbl(Replace(T.SelectSingleNode("RN").Text, ".", ","))
Next
column_number = 2
row_number = row_number + 1
Next
End Sub
Anzeige
AW: VBA-Import
13.10.2023 06:20:56
LordWuffel
COOL!! danke, ich brauche noch einen Moment, ums zu verstehen, aber das funst

ok, eine Änderung an der Berechnung der Zelle hab ich noch gemacht.



For Each D In Daten
column_number = 2
Cells(row_number, column_number) = CInt(D.Attributes(0).Text)

For Each T In D.ChildNodes
column_number = column_number + 1
If row_number = 2 Then Cells(row_number - 1, column_number) = CInt(Replace(T.Attributes(0).Text, ".", ","))
Cells(row_number, column_number) = CDbl(Replace(T.SelectSingleNode("RN").Text, ".", ","))
Next
'column_number = column_number + 1
row_number = row_number + 1
Next

so ergab es eine "Treppe"

die Zeile


If row_number = 2 Then Cells(row_number - 1, column_number) = CInt(Replace(T.Attributes(0).Text, ".", ","))

verstehe ich in dem Zusammenhang nicht, die soll doch die erste Zelle in der Zeile festlegen?

Gruß Wuffel
Anzeige
AW: VBA-Import
13.10.2023 06:52:06
ralf_b
die Überschrift braucht es nur einmal. hier wenn die row_number mit der ersten Zeilennummer übereinstimmt.
Du kannst das auch anders machen wenn du willst. Mir ging es hier nicht um perfekt oder elegant, sondern um Funktion.
Ich erhalte keine "Treppe" bei dem Code. Weis nicht was du meinst.


Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDEFGHIJKL
1  123510203050100 
2 5210256,7283,3320373,3430463,3510580 
3 10136,7166,7185208,3241,7278,3301,7331,7375 
4 15104,4126,7140158,9184,4212,2228,9252,2285,6 
5 2085,8104,2115130151,7173,3188,3207,5234,2 
6 3064,478,386,797,8113,9130,6141,7156,1176,1 
7 4548,158,564,873,385,697,8105,9116,7132,2 
8 6039,247,552,859,769,479,486,195107,2 
9 9029,335,639,344,451,759,364,370,780 
10 12023,828,831,93641,948,152,157,464,9 
11 18017,621,423,726,831,235,738,742,648,2 
12 24014,317,319,221,725,32931,434,539 
13 36010,612,914,316,118,821,523,325,629 
14 5407,99,510,611,913,91617,31921,5 
15 7206,47,78,69,711,312,91415,417,4 
16 10804,75,76,47,28,49,610,411,412,9 
17 14403,84,65,15,86,87,78,49,210,5 
18 28802,32,83,13,54,14,655,56,3 
19 43201,72,12,32,633,43,74,14,7 
20            
Anzeige
AW: VBA-Import
12.10.2023 21:17:41
Yal
Hallo Lord (wir sprechen im Forum mit Vorname an ;-)

XML mit VBA behandeln zu wollen ist löblich, aber nicht mehr notwendig.

Unter Menü "Daten", "Daten abrufen", "Aus Datei", "Aus XML"
Du bist in Power Query.
xml-Datei auswählen,
auf "Bearbeiten" klicken,
Es hat sich eine Abfrage aufgebaut, die die Struktur der Datei abbildet.
Zuerst siehst Du nur eine Zeile mit "Namespace" und "Table".
auf dem Table (in der erste Zeile, nicht im Überschrift) rechtsklicken und "Als neue Abfrage hinzufügen",
Es fügt sich eine neue Abfrage ;-)
in diese Abfrage hast Du die 4 xml-Node unter dem "Namespace": "Programm", "Kostra", "Daten", "Grunddaten"
Auf dem "Table" von "Daten" klicken. Es führt einen Drilldown auf die nächste xml-Ebene.
Hier auf dem Überschrift der erste Spalte "T" auf der Fläche mit den 2 Pfeilen klicken, Präfix abwählen (kann man auch lassen. Einfach probieren)
Spalten "hN", "RN" und "Attribut:a" markieren, rechtsklicken, "Typ ändern", "Dezimalzahl"
Menü "Datei", "Schliessen & laden in..."
"nur Verbindung" auswählen.
In der Auflistung der Abfrage auf der linke Seite, Abfrage "Daten" rechtklicken und "Laden in..." anklicken, "Tabelle" und "als neue Arbeitsblatt" wählen. ok.
Fertig.

Solltest Du auch die Information von "Kostra" oder "Grunddaten", auf der Abfrage "Namespace" gehen, Rechtsklick aus Table, "Als neue Abfrage hinzufügen",
Dann auf "Kostra" oder "Grunddaten" anstatt "Daten" doppeklicken. usw.

Es hat sich vielleicht nicht so angefüllt, aber hiermit wurde programmiert. Ist morgen eine neue Datei mit demselbe Namen, einfach auf die Ergebnistabelle rechtklicken und "aktualisieren".
Weitere Erklärung über PQ zum bsp mit dem sehr guten Tutorial https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/

VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige