Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Fehler in VBA Dir-Funktion?

Forumthread: Fehler in VBA Dir-Funktion?

Fehler in VBA Dir-Funktion?
18.11.2024 09:18:30
Niko26
Liebe Community,

ich hab hier mit Google-Hilfe ein Projekt erstellt, das XML-Dateien in CSV-Dateien umwandeln soll, was soweit auch super funktioniert. Aber: Nicht für eine Datei, sondern für alle Dateien in einem Ordner, wofür ich die Dir-Funktion gefunden habe. Allerdings funktioniert es damit nicht, ich lande immer beim Error.

Hier die Datei mit Code: https://www.herber.de/bbs/user/173684.xlsm

Die nächste Frage wäre dann noch: Das Projekt würde aus jeder Datei eine eigene CSV-Datei erstellen. Ich brauche aber alle Inhalte in einer einzigen CSV-Datei, untereinander. Wie geht das?

Vielen Dank für jede Hilfe!

Paul

Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler in VBA Dir-Funktion?
18.11.2024 10:11:45
MCO
Moin, Niko,

was du schreibst ist echt spannend, aber mysteriös, weil wir alle weder dein Verzeichnis, noch die Dateien oder den Fehler kennen.

Gruß, MCO
AW: Fehler in VBA Dir-Funktion?
18.11.2024 11:11:36
volti
Hallo Paul,

was mir beim Durchschauen (ohne Test natürlich) so aufgefallen ist:

Das Makro wird nach der Verarbeitung einer bzw. der ersten gültigen XML-Datei durch den Exit Sub-Befehl beendet und arbeitet die Dir-Funktion nur bei ungültigen Dateien weiter ab. Den Exit Sub-Befehl müsstest Du z.B. durch einen Sprung (GOTO) auf ein neues Label direkt vor dem Dir() setzen, also die Fehlerroutine überspringen, damit mehrere Dateien verarbeitet werden.

Der Dir-Befehl liefert die gefundenen Dateinamen ohne Pfad zurück. Den muss man beim Workbook-Open aber ggf. wieder vorsetzen. Das funktioniert ansonsten nur, wenn die Datei im aktuellen Verzeichnis liegt. Kann ja hier so sein, besser wäre aber die Vorsetzvariante.

Um alles in eine Datei zu bekommen, könnte man innerhalb von Excel in der gerade bearbeiteten Datei alles markieren und in die ebenfalls geöffnete Zieldatei (immer unten dran) kopieren oder per VBA (z.B. zeilenweise) in eine mit APPEND geöffnete Zieldatei anfügen. Natürlich führen hier zig Möglichkeiten zum Ziel.

Gruß
Karl-Heinz
Anzeige
AW: Fehler in VBA Dir-Funktion?
18.11.2024 14:23:50
Niko26
Hallo Karl-Heinz,

vielen Dank, das kann ich mir schon vorstellen, dass es daran liegt. Nur bekomme ich das als Nicht-Ganz-Experte noch nicht ganz hin. Setze ich das GoTo vor das Exit Sub, springt er direkt zum Dir für die nächste Datei und dort kommt dann ein Fehler. Kurz: Wo und wie genau im Code würdest du das GoTo setzen?

Danke!
Paul
Anzeige
AW: Fehler in VBA Dir-Funktion?
18.11.2024 15:47:09
volti
Hallo Paul,

Deine Aussage, dass alles schon ganz gut funktioniert, kann ich nicht nachvollziehen.

Die bereitgestellte XML-Datei kann bei mir mit dem Codebeispiel nicht geöffnet werden. Es öffnet nur, wenn ich Stylesheets:=Array(1) weglasse.
Der Code entfernt Leerzielen; es gibt aber gar keine Leerzeilen in der Datei.
Der Code sucht zwei Suchbegriffe und macht dann was. Die Suchbegriffe sind aber gar nicht in der Datei vorhanden.

Ich kenne mich mit XML-Datei nicht aus.
Wenn Du aber nur den von Excel erzeugten Inhalt je Datei in eine Ausgangsdatei schreiben möchtest, habe ich hier mal eine Idee.

Zu Fuß per VBA in eine CSV-Datei schreiben wie schon vor 30 Jahren. :-)
Ginge natürlich auch moderner, würde manch anderer schreiben. Aber der kann sich dann ja melden. :-)

PS: Wenn der Mittelteil wegfallen kann, kann auch Screenupdating und DisplayAlerts entfallen, denn mit dieser Schreibmethode wird ja nichts an der Tabelle verändert und es kommt zu keinerlei Verzögerungen

Code:


Option Explicit Sub XMLinCSV() Dim iZeile As Long, iZl As Long, iSP As Long Dim sDatei As String, sPfad As String, sDateiCSV As String Dim DS As String Dim oRngBgn As Range, oRngEnd As Range, WKb As Workbook ' sPfad = "C:\Users\Buchhaltung\Desktop\Download-Paket_20241101-20241112 CAMT\test\ " sPfad = ThisWorkbook.Path & "\" sDateiCSV = sPfad & "Zieldatei.csv" If Dir$(sDateiCSV) <> "" Then Kill sDateiCSV ' Alte Ausgabedatei löschen sDatei = Dir(sPfad & "*.xml") If sDatei = "" Then Exit Sub ' Keine XML-Dateien gefunden With Application .ScreenUpdating = False .DisplayAlerts = False End With Open sDateiCSV For Append As #1 Do On Error Resume Next Set WKb = Workbooks.OpenXML(Filename:=sPfad & sDatei) ', Stylesheets:=Array(1)) If WKb Is Nothing Then MsgBox "Die Datei '" & sDateiCSV & "' konnte nicht geöffnet werden!", vbCritical Else With ActiveSheet iZeile = .Range("A65536").End(xlUp).Row ' Letzte belegte Zeile .Cells.Hyperlinks.Delete ' Hyperlinks entfernen For iZl = iZeile To 1 Step -1 ' Leere Zeile entfernen With .Range("A" & iZl) If Len(.Value) = 0 And .End(xlToRight).Column > 255 Then .EntireRow.Delete End If End With Next iZl ' Finde die Tabelle mit Inhalt Set oRngBgn = .Range("a2:a" & iZeile).Find("Table of Contents", _ LookIn:=xlValues, LookAt:=xlWhole) If Not oRngBgn Is Nothing Then ' Find the last label in the table of contents ("Transfer of care") Set oRngEnd = .Range("a2:a" & iZeile).Find("Transfer of care", _ LookIn:=xlValues, LookAt:=xlWhole) If Not oRngEnd Is Nothing Then ' Delete the entire table of contents rows .Range(oRngBgn.Address & ":" & oRngEnd.Address).EntireRow.Delete End If End If ' Daten ausgeben in Zieldatei, nur wenn welche gefunden For iZl = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row ' Letzte Zeile in Spalte DS = "" For iSP = 1 To .Cells(iZl, Columns.Count).End(xlToLeft).Column DS = DS & .Cells(iZl, iSP) & ";" Next iSP Print #1, Left$(DS, Len(DS) - 1) ' Datensatz schreiben Next iZl ActiveWindow.Close ' XML-Datei schließen End With End If sDatei = Dir ' wählt die nächste Datei Loop Until sDatei = "" ' beendet die Schleife Close #1 ' Zieldatei schließen With Application .ScreenUpdating = True .DisplayAlerts = True End With MsgBox "Die CSV-Datei " & sDateiCSV & " wurde erstellt!", vbInformation End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
Anzeige
AW: Fehler in VBA Dir-Funktion?
18.11.2024 19:12:09
Niko26
Hallo Karl-Heinz,

ich glaube es nicht! Das ist ganz genau was ich suche. Und funktioniert so schön, auf einen Knopfdruck, schnell und fertig! Vielen, vielen Dank für ein quasi fix und fertiges Projekt! Danke für die schöne Feierabendüberraschung! Wenn ich mich mal revanchieren kann... :-)

Viele Grüße,
Paul
Anzeige
AW: Fehler in VBA Dir-Funktion?
19.11.2024 09:54:23
volti
Hallo Paul,

vielen Dank für die positive Rückmeldung und schön, wenn es so wie gedacht funktioniert.

Ggf. reicht ja dann auch dieses hier....

Code:


Sub XMLinCSV() Dim iZl As Long, iSP As Long Dim sDatei As String, sPfad As String, sDateiCSV As String, DS As String Dim WKb As Workbook sPfad = ThisWorkbook.Path & "\" sDateiCSV = sPfad & "Zieldatei.csv" If Dir$(sDateiCSV) <> "" Then Kill sDateiCSV ' Alte Ausgabedatei löschen sDatei = Dir(sPfad & "*.xml") If sDatei = "" Then Exit Sub ' Keine XML-Dateien gefunden Open sDateiCSV For Append As #1 Do On Error Resume Next Set WKb = Workbooks.OpenXML(sPfad & sDatei) If WKb Is Nothing Then MsgBox "Die Datei '" & sDateiCSV & "' konnte nicht geöffnet werden!", vbCritical Else ' Daten ausgeben in Zieldatei For iZl = 1 To Cells(Rows.Count, "A").End(xlUp).Row ' Letzte Zeile DS = "" For iSP = 1 To Cells(iZl, Columns.Count).End(xlToLeft).Column DS = DS & Cells(iZl, iSP) & ";" Next iSP Print #1, Left$(DS, Len(DS) - 1) ' Datensatz schreiben Next iZl ActiveWindow.Close ' XML-Datei schließen End If sDatei = Dir ' nächste Datei Loop Until sDatei = "" ' beendet die Schleife Close #1 ' Ausgabedatei schließen MsgBox "Die CSV-Datei " & sDateiCSV & " wurde erstellt!", vbInformation End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
Anzeige
AW: Fehler in VBA Dir-Funktion?
19.11.2024 14:04:57
Niko26
Ja, das funktioniert auch. Wirklich, ein großes Lob an dich. Auf Anhieb ohne jeglichen Fehler!
Um es mir ganz genau durchzudenken fehlen mir ja leider wirklich die Profikenntnisse, auch was das XML-Format betrifft, und hab ich mit der Weiterverarbeitung dieser Datei jetzt mal noch einiges zu tun (in Excel mit Formeln und VBA, aber womit ich selbst zurecht komme). Die Daten sollen in Excel automatisiert bearbeitet und anschließend wiederum in ein Programm importiert werden.
Anzeige
AW: Fehler in VBA Dir-Funktion?
22.11.2024 21:15:24
Niko26
Hallo Karl-Heinz, liebe Community,

eine Frage noch dazu: Ist es auch möglich, und wie, das alles nicht in ein CSV zu schreiben, sondern im aktuell geöffneten Arbeitsblatt einfach mit A1 beginnend in die Tabelle zu schreiben?
Sorry, ist eine Antwort auf den Ursprungsbeitrag (kwT)
18.11.2024 12:20:35
Der Steuerfuzzi
kwT
AW: Fehler in VBA Dir-Funktion?
18.11.2024 10:42:36
Niko26
Hallo MCO,

das Verzeichnis findet sich gleich am Anfang des VBAs. Ist ja nur beispielhaft bzw. müsstest du, falls du es probierst, ja entsprechend abändern. Im Verzeichnis befindet sich nur die Datei, und eine XML-Beispielsdatei.
C:\Users\Buchhaltung\Desktop\CCD_Converter\Neuer Ordner\

Die XML-Beispielsdatei konnte ich hier nicht direkt hochladen, aber hier:
https://drive.google.com/file/d/15ulyiuJLOOdlBWLnsMsR5Jid9NqhPfQ5/view?usp=sharing

Mit Error meinte ich den Error, der am Ende des Projekts definiert ist. Das Ausführen des Projekts führt leider dort hin:
NotOpened:
On Error GoTo 0


Ist das hilfreich?

Danke und LG
Paul
Anzeige
AW: Fehler in VBA Dir-Funktion?
18.11.2024 12:18:28
volti
Hallo Paul,

falls niemand (so wie ich) die Datei vom Google laden möchte, benenne sie in .txt um und lade sie hier hoch. Das ist doch eigentlich auch nur Text.

Gruß
KH
AW: Fehler in VBA Dir-Funktion?
18.11.2024 12:20:44
Niko26
Gute Idee, hier die XML-Beispieldatei (es ist wirklich nur Beispiel), bitte die Dateiendung von TXT auf XML umbenennen:
https://www.herber.de/bbs/user/173685.txt
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige