Mit einem kleinen Makro können Sie ganz bequem sämtliche Dateinamen inklusive der Dateiendungen in Excel schreiben. Das nachfolgende Makro brauchen Sie hierfür lediglich in ein Modul Ihrer Exceldatei hinzufügen. Alternativ können Sie auch die im Anschluss an diesen Beitrag anghängte Musterdatei nutzen um Dateinamen mit VBA auslesen zu können.
Bevor Sie starten gibt es zwei Wichtige Punkte zu beachten. Vor dem Ausführen des Makros müssen Sie den Ordnername im VBA Code noch abhändern. Im Beispiel würde das Makro ansonsten im Laufwerk „C:\“ den Ordner mit dem Namen „Ordnername“ suchen und falls vorhanden die Dateien dieses Ordners in Spalte A ab Zeile 1 auflisten. Sofern der Ordnerpfad nicht vorhanden ist, erhalten Sie die Fehlermeldung „Laufzeitfehler ’76‘: Pfad nicht gefunden“.
Dateinamen mit VBA auslesen
Achten Sie zudem darauf, dass in der Tabelle keine Inhalte in Spalte A vorhanden sind, da diese sonst ggf. überschrieben werden! Möchten Sie die Dateinamen nicht schon ab Zeile 1, sondern z.B. erst ab Zeile 5 schreiben. Ändern Sie im VBA Code zudem den Code von
lngZeile = 1
auf
lngZeile = 5
ab.
Der gesamte Quellcode für dieses Makro lautet wie folgt:
Sub DateienAuflisten() Dim lngZeile As Long Dim objFileSystem As Object Dim objVerzeichnis As Object Dim objDateienliste As Object Dim objDatei As Object Set objFileSystem = CreateObject("scripting.FileSystemObject") Set objVerzeichnis = objFileSystem.GetFolder("C:\Ordnername") Set objDateienliste = objVerzeichnis.Files lngZeile = 1 For Each objDatei In objDateienliste If Not objDatei Is Nothing Then ActiveSheet.Cells(lngZeile, 1) = objDatei.Name lngZeile = lngZeile + 1 End If Next objDatei End Sub
Möchten Sie zudem nicht alle Dateinamen in Excel schreiben, können Sie auch anhand einer weiteren kleinen Modifikation bestimmte Dateiendungen oder Dateinamen ausschließen. Ändern Sie hierfür die Zeile mit dem VBA Code:
If Not objDatei Is Nothing Then
in
If Not objDatei Is Nothing And Right(LCase(objDatei.Name), 4) = ".jpg" Then
ab.
Die Ergänzung And Right(LCase(objDatei.Name), 4) = „.jpg“ führt zu der Einschränkung, dass nur Dateien mit der Endung „.jpg“ in Excel geschrieben werden. Möchten Sie alle Dateinamen außer einer bestimmten Endung in Excel schreiben, fügen Sie noch den Befehl „Not“ hinzu. Beispiel: And Not Right(LCase(objDatei.Name), 4) = „.jpg“
Das hier vorgestellte Makro liest nur die Dateinamen des aktuellen Ordners aus. Die Namen von Unterordnern und darin liegender Dateien werden nicht berücksichtigt. Die Dateien von Unterordnern können selbstverständlich grds. auch berücksichtigt werden. In diesem Fall ist dann jedoch eine etwas umfangreichere Änderung am VBA Quellcode erforderlich.
Dateien aus Unterverzeichnissen auslesen
Um auch die Dateinamen aus Unterordnern auslesen zu können ist eine zusätzliche Prozedur erforderlich, die für jeden einzelnen Unterordner aufgerufen wird. Weil in diesem Beispiel die Dateien des Hauptordners nicht berücksichtigt werden, sind die beiden Makros ggf. zu kombinieren. Rufen Sie hierzu die zweite Prozedur am Ende des ersten Makros über den Befehl
Call UnterOrdnerAuslesen(objVerzeichnis)
auf. Über diese Programmzeile wird dann benötigte zusätzliche VBA Prozedur aufgerufen.
Sub UnterOrdnerAuslesen(ByVal strDateipfad As String) Dim objFileSystem As Object Dim objVerzeichnis As Object Dim objUnterordner As Object Dim objDatei As Object Dim i As Long Set objFileSystem = CreateObject("Scripting.FileSystemObject") Set objVerzeichnis = objFileSystem.getfolder(strDateipfad) If Cells(Rows.Count, 1).End(xlUp).Row > 1 Then i = Cells(Rows.Count, 1).End(xlUp).Row + 1 Else i = 2 End If For Each objUnterordner In objVerzeichnis.subfolders For Each objDatei In objUnterordner.Files If Not objDatei Is Nothing And Not Right(LCase(objDatei.Name), 4) = ".jpg" Then ActiveSheet.Cells(i, 1) = objDatei.Name ActiveSheet.Cells(i, 2) = objUnterordner.Path i = i + 1 End If Next objDatei Call UnterOrdnerAuslesen(objUnterordner.Path) If Cells(Rows.Count, 1).End(xlUp).Row > 1 Then i = Cells(Rows.Count, 1).End(xlUp).Row + 1 Else i = 2 End If Next objUnterordner End Sub
Excel Mustermappe:
Hallo,
ich möchte statt Endung „.jpg“ ein TextBox haben (zum Beispiel „textbox1“) In TextBox werde ich der Name eintippen, danach folgt die Suche. Ich suche immer nach verschiedene Dateien, meistens sind PDF.
VG
@Ilario: Dazu benötigen Sie eine zusätzliche Variable in der Sie den Wert aus einer Inputbox speichern und dann in der If-Bedingungen übergeben.
zusätzlich also diese beiden Zeilen:
Dim strDateiendung As String
strDateiendung = InputBox(„Dateiendung eingeben:“)
und zudem diese Zeile anpassen:
If Not objDatei Is Nothing And Right(objDatei.Name, 4) = strDateiendung Then
Super! Vielen Dank für die schnelle Antwort.
Hallo,
gibt es auch die Möglichkeit das Makro so abzuändern, dass auch Dateigröße und Datum der letzten Änderung ausgelesen werden können?
@Dietmar: Ja, das geht. Mit den folgenden zusätzlichen Zeilen können weitere Informationen abgerufen werden.
ActiveSheet.Cells(lngZeile, 2) = objDatei.DateCreated ‚Erstellungsdatum
ActiveSheet.Cells(lngZeile, 3) = objDatei.DateLastModified ‚letztes Änderungsdatum
ActiveSheet.Cells(lngZeile, 4) = objDatei.DateLastAccessed ‚letzter Zugriff
ActiveSheet.Cells(lngZeile, 5) = objDatei.Size ‚Größe
ActiveSheet.Cells(lngZeile, 6) = objDatei.Type ‚Dateityp
Hallo Marco
ich hatte vor Jahren 2013 die gleich Fragestellung „Verzeichnisse und Unterverzeichnisse“ nach Excel einlesen, damit ich sie dort lesen, drucken etc. kann. Es gab keine komplette Lösung in den Foren.
Daraufhin habe ich mit VBA beigebracht
Sende mir Deine eMail Adresse und ich sende Dir das Excel VBA Tool zurück
Hallo zusammen,
ich finde es echt super das hier Profis so Anfänger wie mir alles super erklären und noch beispiele anhängen!
Gibt es auch ein Beispiel wo die Unterordenr berücksichtigt weren?
Danke
@Alfred Unterweger: Vielen Dank für die Rückmeldung. Den Beitrag werde ich in Kürze um eine Variante für die Berücksichtigung der Unterordner ergänzen.
@Alfred Unterweger: Der Beitrag wurde nun um eine Variante ergänzt. Nun können auch die Dateinamen aus Unterordnern ausgelesen werden.
Hammer, DANKE!
Hallo. Sehr interessantes Thema. Wie würde der Code aussehen, wenn ich das „Laufwerk“ über eine Inputbox eingeben möchte.
Danke im Voraus. Viele Grüße.
@Andreas: Dazu wäre eine zusätzliche Variable nötig, die mit dem Wert aus der Inputbox gefüllt wird. Anschließend übergibt man den Wert dann dem Objekt objVerzeichnis. Mehr muss hier nicht getan werden.
strPfad = InputBox(„Bitte Ordnerpfad eingeben:“)
Set objVerzeichnis = objFileSystem.GetFolder(strPfad)
Hallo Marco. Ich bin begeistert. Herzlichen Dank…
Hallo Herr Schade. Vielen Dank erst mal allgemein für Ihre große Hilfe. Ich bin völliger VBA-Anfänger. Über Ihren Code (ganz oben) kann ich die Dateinamen aus einem festgelegten Pfad auslesen, allerdings würde ich gern diesen Pfad über ein Fenster auswählen können.
Haben Sie dafür eine Lösung?
Vielen Dank und viele Grüße.
Hallo,
An welcher stelle muß ich den code für den code der Inputbox einfügen?
MfG
Mike
@Mike: Wie oben schon im Beispiel gezeigt, übergibt man den Wert z.B. in der Zeile vorher. Je nach Nutzung kann das aber auch anders gelöst werden.
strPfad = InputBox(„Bitte Ordnerpfad eingeben:“)
Set objVerzeichnis = objFileSystem.GetFolder(strPfad)
Hallo. Sicherlich habe ich einen Denkfehler. Ich möchte den Pfad zum Auslesen eines Ordners über eine Inputbox eingeben. Hierzu habe ich den folgenden Code erstellt, welcher aber nicht funktioniert 🙁
‚########################
Sub Einlesen()
Dim zeile As Variant
Dim sFile As String, sPattern As String, sPath As String
Dim iRow As Integer
Columns(1).ClearContents
strPfad = InputBox(„Bitte Ordnerpfad eingeben:“)
Set objVerzeichnis = objFileSystem.GetFolder(strPfad)
‚If Right(strPfad, 1) „\“ Then strPfad = sPath & „\“
If Right(strPfad, 1) „\“ Then strPfad = strPfad & „\“
sPattern = „*.*“
sFile = Dir(strPfad & sPattern) ‚(strPfad & sPattern)
Do Until strPfad = „“ ’sFile = „“
iRow = iRow + 1
Cells(iRow, 1).Value = sFile
strPfad = Dir()
Loop
For zeile = 1 To Cells.SpecialCells(xlLastCell).Row
Next
End Sub ‚Bei erneutem Aufruf werden die alten Funde überschrieben
So, ich hab‘s dann doch noch hinbekommen. Dennoch vielen Dank für die vielen Hilfreichen Kommentare in diesem Forum…
Diesen VBA Code in ein Modul:
Sub Einlesen()
Dim zeile As Variant
Dim sFile As String, sPattern As String, sPath As String
Dim iRow As Integer
Columns(1).ClearContents
Dim sTxt As String
sTxt = InputBox(„Bitte Eingabe tätigen:“)
If sTxt = „“ Then Exit Sub
‚MsgBox sTxt
Range(„A3“).Value = sTxt
If Right(sTxt, 1) „\“ Then sTxt = sTxt & „\“
sPattern = „*.*“
sFile = Dir(sTxt & sPattern)
Do Until sTxt = „“
iRow = iRow + 1
Cells(iRow, 1).Value = sFile
sFile = Dir()
Loop
For zeile = 1 To Cells.SpecialCells(xlLastCell).Row
Next
End Sub ‚Bei erneutem Aufruf werden die alten Funde überschrieben
@Andreas Wolff: Der VBA Code ist aber nicht sauber programmiert. Ich würde deshalb empfehlen, den funktionierenden Code aus dem Beitrag zu verwenden. Wurde die Variable für die Inputbox bewusst nicht deklariert?
Hallo.
gibt es einen Grund, warum die Objekt-Variable nicht auf Nothing gesetzt werden?
@Josh: In welchem der Makros und an welcher Stelle?
General am Ende einer Sub? 😉
@Josh: Allgemein kann man das nicht beantworten. Kommt immer darauf an, was im Makro gemacht wird. Wenn z.B. eine Schleife die Objekt-Variable nutzt, könnte es erst danach die Variable geleert werden. Ganz am Ende eines Makros macht es überhaupt keinen Sinn die Variable zu leeren, denn am Ende des Makros wird die Variable sowieso gelöscht. Es gibt aber natürlich bestimmte Konstellationen, wo eine Leerung sinnvoll ist. Wenn die Objekt-Variable z.B. erst innerhalb einer Schleife mit einem Wert gefüllt wird, und vermieden werden soll, dass ein alter Wert noch in der Variable gespeichert ist.
Ich leere in meinen Makros die Objekt-Variablen nur, wenn dies wirklich erforderlich ist. Das spart (minimal) Rechenleistung und macht den VBA-Code insgesamt lesbarer. Von unnötig vielen Zeilen sollte grds. abgesehen werden.
Hallo Herr Schade,
leider übersieht das Programm aus ihrer Vorlage einige Unterordner. Selbst wenn ich einen neuen Ordner anlege findet er ihn und den Inhalt nicht. Es wäre schön wenn sie sich den Code nochmal ansehen könnten.
(Es sind keine .jpg Dateien in den Ordnern enthalten)
@Wolfgang Schmid: Haben Sie den Beitrag eigentlich nicht gelesen? Da sind beide Fragen direkt beantwortet und verschiedene Anpassungsmöglichkeiten beschrieben.
Im Beispiel wurden Bilddateien mit der Dateiendung „.jpg“ ausgeschlossen:
Und auch die Lösung bei Verwendung von Unterordnern ist im Beitrag beschrieben!
Da Sie leider keine Emailadresse angegeben haben, habe ich auch keine Möglichkeit mit Ihnen direkt in Kontakt zu treten.
Hallo,
danke für die tolle Anleitung. Klappt wunderbar und löst ein riesen Problem. Aber irgendwie nur bis zur ersten Unterordner-Ebene (vermute ich).
Hat das Makro die maximale Anzahl an Unterordnern des 1. Unterordners (nennen wir ihn Fritz) durchlaufen, hüpft die Schleife zum 2. Unterordner (Max). Die Schleife hat sich hier aber (anscheinend) die Zeilennummer gemerkt bei der Fritz geendet hat und fängt nun an, 1 Zeile weiter die Dateien und Ordner von Max aufzulisten. D.h. die Werte von Fritz werden überschrieben.
Kann man das Makro noch so anpassen, dass es diesen Umstand berücksichtigt? Ich weiß nämlich, dass ich in einem Ordner > 500 Dateien des Typs X habe, durch dieses Überschreiben jedoch, bekomme ich ein Ergebnis von nur 240 (oder so). Also ein verfälschtes Ergebnis.
Nochmals danke, a) für die Lösung an sich und b) für dich sicherlich hilfreiche Antwort im Voraus 🙂
LG Marco
@Marco: Ich habe die Funktion nochmal überprüft. Es werden alle Dateien aufgelistet.
Hallo,
ich kann das Problem von Marco bestätigen.
Es werden zwar alle Dateien korrekt gelesen, aber beim schreiben in das Excelblatt werden ab und zu Zeilen überschrieben was daran liegt, das die Variable i unter bestimmten Umständen einen falschen bzw. nicht aktuellen Wert hat. Habe es gelöst, indem ich Variable i einfach nochmal neu bestimme zwischen der Anweisung „Call UnterordnerAuslesen“ und „next objUnterordner“, da dort der Fehler passiert. Jetzt werden alle Dateien auch angezeigt.
.
.
.
Call UnterOrdnerAuslesen(objUnterordner.Path)
If Cells(Rows.Count, 1).End(xlUp).Row > 1 Then
i = Cells(Rows.Count, 1).End(xlUp).Row + 1
Else
i = 1
End If
Next objUnterordner
.
.
.
Gruß und Danke für den Code. Hat mir sehr geholfen 🙂
@Jens Hanschke: Unter welchen Umständen soll das der Fall sein? Die Variable i wird immer dann hochgezählt, wenn ein Eintrag in das Tabellenblatt geschrieben wird.
Damit ist ein Überschreiben der Zeile ausgeschlossen.
Hallo, warum der Fehler passiert, kann ich nicht rausfinden. Ich kann es nur versuchen zu Beschreiben.
In meinem Fall ist es so: Wenn zb. keine Datei mehr in einem Unterordner ist die es in Excel zu schreiben gilt, springt der Code auf „End Sub“ (i = 12 in meinem Beispiel). Dann springt er auf „Next objUnterordner“ und dann wieder auf „End Sub“ (i ist immernoch 12). Dann springt er wieder auf „Next objUnterordner“ und auf einmal ist i = 10 ! und die For Each Schleife geht wieder los. Und somit werden zwei Zeilen überschrieben wo vorher was stand.
Das ergibt überhaupt kein Sinn da es keinerlei Code gibt der i verändert zwischen „Next objUnterordner“ und „End Sub“ Trotzdem passiert es.
Scheint wohl nur zu sein, wenn im OrdnerTree 2 oder mehr Unterordner hintereinander „zurück“ gesprungen wird.
Ich hoffe das war nicht zu verwirrend.
Gruß
Hm … dann verhält sich mein Excel (Version 2007) anders als das Ihre. Je verschachtelter bzw. je mehr Ebenen eine Ordner-Struktur ist/enthält desto mehr steigt die Gefahr, dass Zeilen überschrieben werden.
Ich hab das nun aber so gelöst, dass die Abfrage der Zeilennummer innerhalb der zweiten For-Each-Schleife statt findet. Damit ist das Problem für mich behoben und alle Dateien werden angezeigt 🙂
Trotzdem Danke für die Hilfe und Mühen.
Hallo Marco
Tolles Makro welches (fast) alles (oder mehr?) Gewünschte ausliest…
Ich habe einen Ordner mit Musik aus den 60-ern und 11 Unterordner. Erstaunlicherweise habe ich in der ausgelesenen Liste mit deinem angepassten Makro auch 4 „jpg“ und 1 „ini“ (sonst gut 140 „mp3“). Die 4 „jpg“ zeigt es aber auch mit suchen nicht an…
Jtzt aber das grössere Problem. Wenn ich auch den Zusatzcode mit den wirklich nützlichen Inputboxen genau so hineinschreibe, kommt immer die Meldung
> Erwartet: Listentrennzeichen oder )!!!
Hast du einen Tipp oder kann ich dir sogar diese kleine Datei senden?
Besten Dank für die Hilfe
Gruss
Adrian
PS: Wäre auch die Auflistung sogar mit den Ordnernamen möglich (damit gut sichtbar evtl. mit fetter Schrift)
@Adrian: Es handelt sich bei dem bereitgestellten VBA-Code um ein Beispiel. Natürlich kann man dies beliebig ändern und anpassen. Im Beispiel werden Dateien mit der Dateiendung .jpg nicht berücksichtigt. Ist im Beitrag auch erklärt. Kann selbstverständlich geändert werden. Manuelle Auftragsprogrammierungen biete ich gerne an, allerdings handelt es sich hierbei um eine professionelle Dienstleistung, die nicht kostenlos angeboten wird.
Hallo Marco,
vielen dank für deine Mühen, dass Programm läuft super.
Was ich nun machen möchte ist, dass die Dateiendungen auch direkt weg sind, was muss ich dafür nun eingeben?
Vielen Dank
Gruß
Mirko
Hallo Marco Schade,
erst einmal ein unglaublich großes Dankeschön für deine Mühe. Schön, dass es noch Menschen gibt, die anderen helfen (und das sogar noch freiwillig und ohne Bezahlung)!
Ich habe deinen Code zum auslesen von bestimmten Dateien in einer Ordnerstruktur (mit Unterordnern) soweit umschreiben können, dass auch nur entsprechende aufgelistet werden. Jedoch habe ich nun das Problem, dass zwar in einem bestimmten Ordner auch der Unterordner durchsucht wird, jedoch „eben nur“ in diesem einen Unterordner.
Kann man den Code relativ leicht so umgestalten, dass nach dem Auslesen eines Unterordners wieder zurück in den Ursprungspfad gesprungen wird und von dort aus weitere Unterordner ausgelesen werden?
Bsp: UrsprungsPfad = C:\Testordner
– C:\Testordner\OrdnerA\OrdnerA.1
– C:\Testordner\OrdnerB\OrdnerB.1
… and so on
(Dateien in jeweils allen Ordnernebenen vorhanden)
Ich danke dir und wünsche einen angenehnem Tag.
Mit freundlichsten Grüßen,
Sascha
Hallo,
erste einmal vielen Dank für das Skript. Eine Frage habe ich:
Set objVerzeichnis = objFileSystem.GetFolder(„C:\Ordnername“)
Ich möchte gerne den Pfad variabel gestalten. Der Pfad soll um den Namen des aktiven Arbeitsblattes erweitert werden. Also die Excel Datei liegt in C:\Ordnername. Dort gibt es noch die Ordner AAA und BBB. Im Excel File gibt es jetzt das Arbeitsblatt AAA und BBB. Entsprechend soll der Pfad also je nach Arbeitsblatt C:\Ordnername\AAA oder \BBB heißen. Gibt es hier eine Möglichkeit.
Danke und Gruß
@Dome: Natürlich. Der Teil in der Klammer kann entsprechend ergänzt werden. Den Namen des aktuellen Arbeitsblattes hängt man dafür z.B. wie folgt an: „C:\Ordnername\ & ActiveSheet.Name
Hallo mal eine Frage. Unter Set objVerzeichnis = objFileSystem.GetFolder(“C:\Ordnername”) gebe ich ja den genauen Pfad an. Ich würde aber gerne den Pfad aus einer Excel Zelle auslesen lassen. So könnte man später einfach die Zelle ändern und müsste nicht dafür noch in die VBA. Hab da nämlich mehrere Arbeitsblätter.
Danke!!
@Florian: Das geht natürlich auch. Innerhalb der Klammer können alternativ zu einem fixen Ordnerpfad auch Variablen oder Zellen angesprochen werden. Variablen bieten sich an, wenn aus unterschiedlichen Arbeitsblättern unterschiedliche Ordnerpfade angesprochen werden sollen.
Hallo, und wie gebe ich das ein? Hatte es z.B. mit Set objVerzeichnis = objFileSystem.GetFolder(“A1”)versucht. Funktionierte aber nicht.
@Florian: Das sind Basics, die man eigentlich kennen sollte, wenn man VBA-Codes anpassen will. Es gibt mehrere Möglichkeiten, aber die einfachste für Anfänger ist aus meiner Sicht diese: Range(„B5“).Value
Mehr zu diesem Thema ist auch im Microsoft Support zu finden: https://support.microsoft.com/de-de/help/291308/how-to-select-cells-ranges-by-using-visual-basic-procedures-in-excel
Hallo, danke schonmal für die Hilfe :-). Ich möchte nun aber noch eins. Ich habe in einer Tabelle mehrere Arbeitsblätter. Für jedes Arbeitsblatt hab ich das oben stehende Makro mit jeweils unterschiedlichn Verzeichnissen (Blatt1 soll aus Ordner1 die Daten ziehen, Blatt2 aus Ordner2 usw.).
Ich möchte jetzt das jedes der Makros beim Start der Datei ausgeführt wird.
Alternativ könnte ich aber auch ein Arbeitsblatt haben wo in Festgelegten Zeilenbereichen die Daten eingetragen werden (Zeile 1 bis 100 die Daten aus Ordner1, Zeile 101 – 201 die Daten aus Ordner2…). Ich hätte damit ja dann nur ein Makro. Dieses müsste sich dann aber auch beim Start aktualisieren.
Vielen Dank für die Hilfe :-).
Florian
Hallo Marco Schade,
ich beschäftige mich gerade mit dem Thema Dateinamen und Verzeichnisnamen
eines definierten Ordnerpfades in Excel auszugeben.
Ihr Beitrag ist hier sehr hilfreich und super beschrieben.
Mein Problem besteht darin, das ich gerne die Verzeichnisnamen von Unterverzeichnissen ebenfalls ausgeben möchte.
Mein Ansatz ist aus dem „objVerzeichnis“ in den „SubFolders“ unter den
„Item 1“ die Variable „Name“ zu nutzen.
Hier ist der „Name“ der Variable x_1 zugewiesen:
x_1 = objVerzeichnis.subfolders.Item 1.Name
Irgendwie bekomme ich das „Item 1“ nicht angesprochen.
> Laufzeitfehler ‚5‘
> Ungültiger Prozeduraufruf oder ungültiges Argument
Ist die Syntax falsch geschrieben, oder lässt sich der Verzeichnisname so nicht greifen?
Gruß Oliver
@Oliver: Ohne den vollständigen Code zu kennen kann ich nicht viel dazu sagen. Allerdings kann eine Variable „Item 1“ und „Name“ und die Syntax so nicht funktionieren.
Hallo und vielen Dank für deine Mühe. Ich wollte fragen ob es auch eine Möglichkeit gibt unter der Ausgabe des Pfades etwas auszuschließen. Z.B. alles das in Ordner „Fertig“ ist nicht zu berücksichtigen. So wie es mit der Endung der Datei geschieht.
@Sebastian: Der letzte Satz ist schon der richtige Lösungsansatz. Auch hier kann mit einer Wenn, Dann Bedingung der entsprechende Unterordner übersprungen werden.
If Not objUnterordner Is Nothing And Not Right(objUnterordner.Name, 6) = „Fertig“ Then
Vielen Dank für die wirklich schnelle Antwort. Leider sehe ich hier irgendwie den Wald vor lauter Bäumen nicht. Das Script funktioniert, nur schließt er bei mir die Ordner „fertig“ nicht mit aus. Da ich ein absoluter Anfänger bin sehe ich den Fehler leider nicht. Die Änderung bei mir sieht wie folgt aus:
For Each objUnterordner In objVerzeichnis.subfolders
For Each objDatei In objUnterordner.Files
If Not objUnterordner Is Nothing And Not Right(objUnterordner.Name, 6) = „Fertig“ Then
ActiveSheet.Cells(i, 1) = objDatei.Name
ActiveSheet.Cells(i, 2) = objUnterordner.Path
ActiveSheet.Cells(i, 3) = objDatei.DateCreated
i = i + 1
End If
Next objDatei
Call UnterOrdnerAuslesen(objUnterordner.Path)
Next objUnterordner
Was mache ich Falsch?
Es fehlt ein weiteres End if vor Next objDatei um die Bedingung wieder zu schließen und die Anführungszeichen sind ggf. von Hand einzutippen und nicht zu kopieren. Die müssen nämlich oben stehen. Hier in den Blogkommentaren wird ein anderer Zeichensatz genutzt. Die Zeile kann deshalb nicht einfach kopiert werden.
Hallo Marco,
in der VBA Welt bin ich erst seit ca 4 Wochen dabei und seitdem ein passendes Makro für mein Problem zu finden.
Mein Problem ist ähnlich wie oben:
Ich habe ein Verzeichnis mit 223 Ordnern, in denen sich wiederum bis zu 5 Unterordner befinden, in denen sich wiederum einige Dateien befinden (.pdf, .xls, .tif., .doc,.jpeg..)
Mein Ziel ist diese Dateien zugeordnet nach den Ordnernamen sowie Unterordnernamen aufzulisten.
Die Ordner und Unterodner sollten jeweils Fett abgebildet sein.
Leider habe ich im Netz keine passende VBA gefunden.
Könntest du mir behilflich sein?
Danke im Vorab für alle die was beitragen
Grüße aus Heilbronn
Hallo,
der Code funktioniert sehr gut, jedoch möchte ich die Systemdateien z.B. ~$Test.xlsm nicht aufgelistet bekommen. Wie muss der Code dazu umgeschrieben werden? Vielen Dank schon einmal…
Sub DateienAuflisten()
Dim lngZeile As Long
Dim objFileSystem As Object
Dim objVerzeichnis As Object
Dim objDateienliste As Object
Dim objDatei As Object
Set objFileSystem = CreateObject(„scripting.FileSystemObject“)
Set objVerzeichnis = objFileSystem.GetFolder(„C:\Ordnername“)
Set objDateienliste = objVerzeichnis.Files
lngZeile = 1
For Each objDatei In objDateienliste
If Not objDatei Is Nothing Then
ActiveSheet.Cells(lngZeile, 1) = objDatei.Name
lngZeile = lngZeile + 1
End If
Next objDatei
End Sub
Viele Grüß Tom
Ich hab die gleiche Frage – hat den keiner eine Idee?
Hallo zusammen,
erstmal vielen Dank für dieses Makro es hat mir schon einige male geholfen.
Ich würde mich aber gerne der Frage von Tom anschließen. Bei mir sind es z.B. versteckte Dateien welche auch aufgelistet werden. Ist es mit diesem Makro möglich diese auszuschließen?
Mit freundlichen Grüßen
Mike
@Mike: Ich würde es mal mit den Dateiattributen versuchen. Zunächst mal das gesamte Verzeichnis und in einer weiteren Spalte das jeweilige Dateiattribut ausgeben.
Anschließend kann dann der Ausschluss erweitert werden. Dazu den Nummerncode des auszuschließenden Dataiattributes an Stelle der drei Fragezeichen einfügen:
Im Endeffekt würde das Makro dann beispielsweise so aussehen:
Hallo Herr Schade,
das hat super funktioniert! Vielen vielen Dank. Bei mir stand überall 32 außer bei der versteckten Datei bei dieser stand 34 diese hab ich nun ausgeschlossen und sie ist weg. Danke sehr, funktioniert tadellos.
Mit freundlichen Grüßen
Mike
Servus
kann es sein dass die Sub UnterOrdnerAuslesen an Ordnernamen scheitert, wenn diese ein Leerzeichen enthalten?
viele Grüße
@Bernhard: Nein, damit sollte das Makro kein Problem haben.
Hey Marco,
wie kann man das Makro so programmieren, dass man den Ordner, dessen Name eingepflegt werden soll, über Windows Explorer auswählen kann?
Viele Grüße
Saleh
@Saleh: Dazu kann man im Vorfeld über den folgenden VBA-Code den Dateipfad in eine Variable speichern.
Hallo, Herr Schade,
grundsätzlich ein gutes Beispiel.
Ich wollte mit diesem Werkzeug eine Auflistung meiner externen Festplatte machen. Leider scheitert das mit einem Laufzeitfehler 70; Zugriff verweigert.
Über die bereits erstellte Liste und die Auflistung aus dem Explorer habe ich auch den „Sünder“ gefunden:
„System Volume Information“
Wie kann man dieses Problem lösen?
Darf ich auch noch einen Verbesserungsvorschlag machen, der sehr viel zur Beschleunigung beiträgt: den Bildschirmupdate ausschalten!
Danke und viele Grüße
Werner T.
@Werner T.: Systemordner sollten möglichst ausgeschlossen werden. Wenn Sie dennoch die ganze Festplatte auflisten wollen, dann würde ich ggf. eine Fehlerroutine einbauen, die Laufzeitfehler verhindert.
In den Beispielen beschränke ich mich immer auf den notwendigsten Code für die spezielle Aufgabe. Wie die Laufzeit des Makros optimiert werden kann, kann in diesem Beitrag nachgelesen werden: https://www.makro-excel.de/2011/07/31/excel-makros-beschleunigen/
Hallo Herr Schade, tolles tool. Kann man auch in einer dritten Spalte die Dateieigenschaften mit auslesen? Titel Ersteller ?
Vielen Dank
@psjunkey: Mit etwas Anpassung geht das natürlich auch. Ungefähr so:
Set objShell = CreateObject(„Shell.Application“)
Set fso = CreateObject(„Scripting.Filesystemobject“)
strFilePath = „C:\Ordnername\Dateiname.xlsx“
strAutoren = GetFileProperty(strFilePath,20)
Die Codes (Autor = 20) finden Sie in dieser Aufstellung.
Gibt es die Möglichkeit die Dateinamen ohne Dateiendung z.b. .docx
auszulesen und das Dateiformat – also z.B. .docx
in einer separaten Spalte aufzulisten ?
Wie kann ich die Dateinamen ohne Endung, also .docx anzeigen lassen?
Bzw. kann ich in einer weiteren Tabellenspalte nur die Dateiendungen, also .docx anzeigen lassen?
Hallo!
Ich bin neu in der VBA-Welt und habe lange nach einer Lösung gesucht, bin jedoch nicht fündig geworden.
Wir haben folgende Ordnerstruktur:
Projekt1 > Unterordner1 > Unterunterordner1
Projekt1 > Unterordner2 > Unterunterordner1
Sowohl im Unterordner 1/2 und Unterunterordner1 sind PDF Dateien.
Ich möchte gerne nur die PDF-Dateien der Unterordner 1 und 2 als Liste (inkl. Dateipfad) ausgegeben haben. Bisher kann ich allerdings nur einen der beiden Ordner auswählen (siehe unten) und kopiere manuell den zweiten Teil in Excel dazu.
Oder, wenn ich die Subfolder-Variante wähle, dann werden alle Unterunterordner auch berücksichtigt.
Würde mich nach stundenlangem googeln sehr über Hilfe freuen!
Danke!
Sub DateienAuflisten1()
Dim lngZeile As Long
Dim objFileSystem As Object
Dim objVerzeichnis As Object
Dim objDateienliste As Object
Dim objDatei As Object
‚Start Zelleninhalte löschen
Dim c As Range
Application.ScreenUpdating = False ‚Geschwindigkeit erhöht
For Each c In Range(„A2:A1000“)
c.Select
If c „“ Then ActiveCell.ClearContents
Next
Application.ScreenUpdating = True
‚Ende Zelleninhalte löschen
Set objFileSystem = CreateObject(„scripting.FileSystemObject“)
Set objVerzeichnis = objFileSystem.getfolder(Range(„A1“).Value) ‚Pfad für Unterordner1
Set objDateienliste = objVerzeichnis.Files
lngZeile = 2
For Each objDatei In objDateienliste
If Not objDatei Is Nothing Then
ActiveSheet.Cells(lngZeile, 1) = objDatei.Path
lngZeile = lngZeile + 1
End If
Next objDatei
End Sub
Danke für die hilfreichen Hinweise.
Ich möchte aus den eingelesenen Dateien den Inhaltsstatus abfragen
ActiveSheet.Cells(lngZeile, 7) = objDatei.ContentStatus ‚Inhaltsstatus
Wenn ich diese Zeile einfüge, funktioniert es nicht.
@Ralle: So wird das auch nicht funktionieren. Im Forum bei administrator.de hat colinardo
eine Funktion für das Auslesen von Datei-Eigenschaften und eine Liste der möglichen Dateieigenschaften veröffentlicht. Damit sollte das Vorhaben gelingen.
Guten Tag zusammen
@Marco Schade
Ein super Thema, seit ich das einsetze ist meine Arbeit um einiges effizienter geworden. Danke für die super Seite, Erklärungen und Beispiele.
Ich habe versucht die Inputbox für die Pfad Eingabe zu erstellen.
Bin mir auch mit den Erklärungen hier nicht sicher wo ich den Code
strPfad = InputBox(„Bitte Ordnerpfad eingeben:“)
Set objVerzeichnis = objFileSystem.GetFolder(strPfad)
einfügen muss. Mein Code sieht so aus:
Sub DateienAuflisten()
Dim lngZeile As Long
Dim objFileSystem As Object
Dim objVerzeichnis As Object
Dim objDateienliste As Object
Dim objDatei As Object
Set objFileSystem = CreateObject(„scripting.FileSystemObject“)
‚Ich habe versucht den Code hier einzufügen bekam aber eine Fehlermeldung
Set objVerzeichnis = objFileSystem.getfolder(„C:\temp“)
Set objDateienliste = objVerzeichnis.Files
lngZeile = 3
For Each objDatei In objDateienliste
If Not objDatei Is Nothing Then
ActiveSheet.Cells(lngZeile, 1) = objDatei.Name
lngZeile = lngZeile + 1
End If
Next objDatei
Call UnterOrdnerAuslesen(objVerzeichnis)
End Sub
Sub UnterOrdnerAuslesen(ByVal strDateipfad As String)
Dim objFileSystem As Object
Dim objVerzeichnis As Object
Dim objUnterordner As Object
Dim objDatei As Object
Dim i As Long
Set objFileSystem = CreateObject(„Scripting.FileSystemObject“)
Set objVerzeichnis = objFileSystem.getfolder(strDateipfad)
If Cells(Rows.Count, 1).End(xlUp).Row > 1 Then
i = Cells(Rows.Count, 1).End(xlUp).Row + 1
Else
i = 1
End If
For Each objUnterordner In objVerzeichnis.subfolders
For Each objDatei In objUnterordner.Files
If Not objDatei Is Nothing And Not Right(LCase(objDatei.Name), 4) = „.jpg“ Then
ActiveSheet.Cells(i, 1) = objDatei.Name
ActiveSheet.Cells(i, 2) = objUnterordner.Path
i = i + 1
End If
Next objDatei
Call UnterOrdnerAuslesen(objUnterordner.Path)
If Cells(Rows.Count, 1).End(xlUp).Row > 1 Then
i = Cells(Rows.Count, 1).End(xlUp).Row + 1
Else
i = 1
End If
Next objUnterordner
End Sub
über Rückmeldungen zu meinem Problem würde ich mich freuen.
Grüsse
Andy
@Andy: Am Anfang des Makros ist noch die Variable strPfad zu deklarieren.
Dim strPfad As String
und die Zeile
Set objVerzeichnis = objFileSystem.getfolder("C:\temp")
muss natürlich ersetzt werden.
@Marco
Danke für deinen Hinweis, habe ich versucht umzusetzen. Die InputBox kommt jetzt. Aber bei Set objVerzeichnis = objFileSystem.GetFolder(strPfad) kommt Laufzeitfehler 91. Ich das ganze auch nochmal selbst eingegeben, bringt mich leider nicht weiter.
Ich habe auch die Variante mit dem Auswählen versucht, komme da auch nicht weiter erhalte auch hier Laufzeitfehler 91
Code sieht so aus:
Sub DateienAuflisten()
Dim lngZeile As Long
Dim objFileSystem As Object
Dim objVerzeichnis As Object
Dim objDateienliste As Object
Dim objDatei As Object
Dim strPfad As String
Dim strOrdnerpfad As String
‚Pfad in InputBox eingeben
strPfad = InputBox(„Bitte Ordnerpfad eingeben:“)
Set objVerzeichnis = objFileSystem.GetFolder(strPfad)
‚Pfad im Explorer Fenster auswählen
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.ButtonName = „auswählen“
.Show
strOrdnerpfad = .SelectedItems(1)
End With
Set objVerzeichnis = objFileSystem.GetFolder(strOrdnerpfad)
Set objDateienliste = objVerzeichnis.Files
lngZeile = 3
For Each objDatei In objDateienliste
If Not objDatei Is Nothing Then
ActiveSheet.Cells(lngZeile, 1) = objDatei.Name
lngZeile = lngZeile + 1
End If
Next objDatei
Wo liegt der Fehler was mache ich bei meinen Überlegungen falsch?
Grüsse
Andy
@Andy: Jetzt fehlt die Zeile:
Set objFileSystem = CreateObject("scripting.FileSystemObject")
Hallo Marco
Nun funktioniert es, einfach genial deine Seite und Hilfe.
Ich noch eine Frage,eventuell hast du einen Lösungsansatz.
Es gibt Daten die sehen so aus:
03400.600_0001_EHA_Ort
03400.600_0011_0014_EHA_Ort
Das Ergebnis sollte so sein.
03400.600_0001
03400.600_0011_0014
Ich habe folgende Code erstellt.
Sub ZeichenketteBearbeiten()
‚Variablen definieren
Dim Text As String
Dim Auszug As String
Dim i As Integer
For i = 1 To 20
Cells(i, 1).Value = Left(Cells(i, 1).Value, 19)
Next i
End Sub
Dieser funktioniert auch, leider aber nur mit dem Wert 14 oder 19. Das Ziel wäre dieses Makro unten nach dem einlesen auszuführen.
Gruss
Andy
Hallo Herr Schade,
ich habe gerade mal die komplette Beitragsseite gelesen und muss sagen das ich es klasse finde das Sie sich über so lange Zeit damit auseinander setzen und Leuten helfen.
Ich hoffe dass Sie mir auch weiterhelfen können.
Im Grunde genommen ist das Skript genau was ich brauche, leider muss es auf einen Ordner bei uns im Betrieb zugreifen welcher #übergreifend benannt ist. Und den scheint VBA im Pfad so natürlich nicht zu akzeptieren. Wie kann ich VBA diesen Ordner entsprechen angeben?
Pfad Wäre in Windows Q:\#übergreifend\Standort\Tag_Monat
Ich habe jetzt ein wenig im Internet gesucht aber eine eindeutige Lösung dazu habe ich leider nicht finden können (da ich Google wahrscheinlich einfach nicht die richtige Frage gestellt habe)
Mit freundlichen Grüßen
Tobias
@Tobias: Ich kann das Problem nicht nachvollziehen. Bei mir lief ein Test mit einem # im Ordnername problemlos.
Bitte vielleicht mal prüfen, ob der Ordnerpfad auch im Makro für das Auslesen der Unterordner geändert wurde.
Sub DateienMitUnterordnernAuflisten()
…
Set objVerzeichnis = objFileSystem.getfolder(„C:\Ordnername„)
Hallo Herr Schade,
danke für Ihre Antwort.
Ich habe Ihnen gerade den Code schreiben wollen als mir dabei ein wirklich blöder Tippfehler aufgefallen ist.
Ich entschuldige mich für Ihre mühen, jetzt klappt alles.
Mit freundlichen Grüßen
Cremer
Hallo Herr Schade,
ich verwende den Code zum auslesen bestimmter Ordner von Bildern. Funktioniert wunderbar. Wäre es auch noch möglich die HÖHE und die BREITE der Bilder in diesem Ordner auszulesen und in Spalte 5 bzw. 6 einzutragen?
Ich habe es so probiert, klappt aber nicht, leider.
Sub DateienH200()
‚https://www.makro-excel.de/2017/01/31/dateinamen-eines-verzeichnisses-mit-vba-auslesen-und-in-excel-schreiben/
Dim lngZeile As Long
Dim objFileSystem As Object
Dim objVerzeichnis As Object
Dim objDateienliste As Object
Dim objDatei As Object
Dim objPicture As Object
Dim t As Double
t = Timer
With Worksheets(„H200“)
Sheets(„H200“).Select
ActiveSheet.Unprotect
Range(„A4:A3200“).ClearContents
Range(„A2“).Select
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Set objFileSystem = CreateObject(„scripting.FileSystemObject“)
Set objVerzeichnis = objFileSystem.getfolder(„F:\Excel\KK\H\Bilder\200×200\“)
Set objDateienliste = objVerzeichnis.Files
lngZeile = 4
For Each objDatei In objDateienliste
‚If Not objDatei Is Nothing And Not Right(LCase(objDatei.Name), 4) = „.jpg“ Then
If Not objDatei Is Nothing And Right(LCase(objDatei.Name), 4) = „.jpg“ Then
‚If Not objDatei Is Nothing Then
ActiveSheet.Cells(lngZeile, 1) = objDatei.Name
ActiveSheet.Cells(lngZeile, 5) = objPicture.Height
lngZeile = lngZeile + 1
End If
Next objDatei
End With
ActiveSheet.Protect
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox Timer – t & “ sec“, , „Makrolaufzeit“
End Sub
Hallo zusammen,
ich verwende den ersten Code auf dieser Seite zum Auslesen von Dateinamen aus einem Verzeichnis und Schreiben in eine Exceltabelle. Alles funktioniert gut. Nun möchte ich die in die Tabelle geschriebenen Dateinamen ergänzen um ein vorangestelltes http://download.firma.de/download/
Der ausgelesene Dateiname lautet liesmich.txt
Als Ergebnis möchte ich dann den Link erzeugen: http://download.firma.de/download/liesmich.txt
Habt Ihr eine Idee für mich
Schöne Grüße Nick
Sub DateienAuflisten()
Dim lngZeile As Long
Dim objFileSystem As Object
Dim objVerzeichnis As Object
Dim objDateienliste As Object
Dim objDatei As Object
Set objFileSystem = CreateObject(„scripting.FileSystemObject“)
Set objVerzeichnis = objFileSystem.GetFolder(„\\testbetrieb.de\tb\tbShare\tbUpload\download“)
Set objDateienliste = objVerzeichnis.Files
lngZeile = 11
For Each objDatei In objDateienliste
If Not objDatei Is Nothing Then
ActiveSheet.Cells(lngZeile, 20) = objDatei.Name
lngZeile = lngZeile + 1
End If
Next objDatei
End Sub
Hallo Herr Schade,
vielen, vielen Dank für dieses Makro. Das ist für mich wirklich sehr hilfreich. Ich bin absoluter VBA Anfänger und kenne mich hier leider überhaupt nicht aus. Ich war auf der Suche nach einem Makro, mit der ich alle Dateien aus meinem Ordner auflisten kann.
In meiner Excel Datei möchte ich jetzt noch zusätzlich eine Spalte hinzufügen, in der ich dann immer manuell ein Datum eintragen kann (Datum, wann ich das Dokument verschickt habe).
Ich habe versucht die Spalte einfach manuell hinzuzufügen. Wenn jetzt jedoch neue Dokumente in meinem Ordner abliegen und ich die Excel Liste aktualisiere, dann wird hier leider keine neue Zeile hinzugefügt, somit stimmen dann die Daten natürlich nicht mehr überein.
Gibt es hier eine Möglichkeit, dass, sobald ein neues Dokument im Ordner ist und dieses in der Excel Liste aktualisiert wird, eine komplett neue Zeile eingefügt wird?
Ideal wäre, dass ich dann filtern kann und somit sehe, für welche Dokumente noch kein Datum drinnen steht (diese Dokumente wurden ergo also noch nicht verschickt).
Über Hilfe wäre ich wirklich sehr sehr dankbar 🙂
@Sonja: Das geht nicht ohne größere Anpassung. Das Makro kann nur Die Dateinamen eines Verzeichnisses auflisten. Nicht mehr und nicht weniger. Führt man das Makro mehrfach aus, werden bestehende Einträge natürlich wieder überschrieben. Es soll nur als Muster dienen. Wenn Sie bisher mit VBA nicht selbst programmieren, würde ich als Alternative empfehlen, die erneute Auflistung in einem getrennten Tabellenblatt durchzuführen. Dann können Sie anschließend über die Sverweis-Formelfunktion auch ohne VBA Makro die Spalten mit dem Datum aus dem ursprünglichen Tabellenblatt zuspielen. Danach können Sie noch die über kopieren und Werte einfügen die Formeln wieder entfernen. Überall wo der Eintrag #NV vorkommt, war der Dateiname dann in der ursprünglichen Auflistung nicht vorhanden.
Hallo Herr Schade
Ich habe den Code von Andy (vom 29. März 2020, 01:11) verwendet und dann noch versucht Ihre Zeile
Set objFileSystem = CreateObject(„scripting.FileSystemObject“)
an mehreren Stellen einzufügen, eber es kommt nur der Fehler wie von Andy erwähnt…
Wo gehört Ihre Zeile hin?
PS: Ich nehme an die 8 letzten Zeilen von Andys Code (vom 28. März, 7:07) müssen auch noch abschliessend drin stehen?
besten Dank für Hilfe
Adrian
@Adrian: Die Zeile muss natürlich zwischen der Deklaration der Objektvariablen „objFileSystem“ und der ersten Programmzeile in der die Variable genutzt wird eingefügt werden.
Dim objFileSystem As Object
…
Set objFileSystem = CreateObject(„scripting.FileSystemObject“)
…
Set objVerzeichnis = objFileSystem.GetFolder(strPfad)
Hallo zusammen,
ich habe mir das Makro soweit anpassen können.
Jedoch suche ich nach einer Möglichkeit, die es mir erlaubt, das das kopierte Verzeichnis mehrfach untereinander in der Spalte c steht.
Eintragungen die bereits in den anderen Spalten gemacht wurden sollten dabei die gemachten Eintragungen behalten.
Sprich wenn das Verzeichnis sich in der Spalte C mal verlängert oder aktualisiert, sollten sich die Werte die zum Dateinamen in den Nachbarspalten eingetragen wurden weiterhin passen.
Sub Dateienliste()
Dim lngZeile As Long
Dim objFileSystem As Object
Dim objVerzeichnis As Object
Dim objDateienliste As Object
Dim objDatei As Object
Dim Qpfad As Object
Dim i As Long
Set Qpfad = ActiveSheet.Range(„N2“)
Set objFileSystem = CreateObject(„scripting.FileSystemObject“)
Set objVerzeichnis = objFileSystem.GetFolder(Qpfad)
Set objDateienliste = objVerzeichnis.Files
lngZeile = 3
For Each objDatei In objDateienliste
If Not objDatei Is Nothing Then
ActiveSheet.Cells(lngZeile, 3) = objDatei.Name
lngZeile = lngZeile + 1
End If
Next objDatei
End Sub
@Dennis: Das habe ich jetzt nicht wirklich verstanden. In Spalte C wird der jeweilige Dateiname aufgelistet, nicht der Dateipfad. Der Dateipfad steht in Ihrem Beispielcode in Zelle N2. Wenn der Dateipfad jetzt jeweils in eine Zelle neben dem Dateinamen erscheinen soll, kann das ganz einfach mit einer zusätzlichen Programmzeile erfolgen.
alternativ:
Hallo,
ganz herzlichen Dank für das Makro. Es hat mir enorm weitergeholfen!
Ich hatte auch das Problem, dass beim Durchsuchen der Unterodner in der ersten Zeile erst einige Werte überschrieben wurden bevor dann das Auflsiten funktionierte. Ich habe das gelöst, indem ich den ersten Wert in die zweite Zeile schreibe.
Ich vermute, dass Problem taucht auf, weil ich keine Dateien in dem obersten Verzeichnis habe und nur jeweils eine in den ersten Unterordnern, die durchsucht werden. Dadurch wird
Cells(Rows.Count, 1).End(xlUp).Row > 1
am Anfang nicht sofort erfüllt und es wird die erste Zeile wird erneut beschrieben. Ich hoffe das hilft, das Problem zu indentifizieren und sorry, falls meines Vermutung quatsch ist.
Viele Grüße
Ute
@Ute: Vielen Dank für den Hinweis mit den Ordnern ohne Dateien oder mit nur einer Datei. Das war genau der Hinweis, der mir geholfen hat den Bug nachstellen zu können.
Der Fehler steckte in der Zeile:
Richtig ist natürlich
da die Überschrift in Zeile 1 nicht überschrieben werden soll. Den Bericht und die Mustermappe werde ich entsprechend aktualisieren.
Hallo,
kann man das Makro so umschreiben, dass die Dateiliste in eine Dropdown-Liste eingelesen wird, so dass man eine Datei auswählen kann, die dann in einem neuen Tabellenblatt geöffnet wird?
Lieben Dank für einen Hinweis
Dominik
Moin,
Vorab, super geiles Makro. Es funktioniert bei mir Lokal absolut perfekt. Nun Möchte ich damit aber ein Netzlaufwerk auslesen und das funktioniert leider nicht? Ich habe es mit einem Laufwerkspfad „H:\XXX\XXX“ probiert, sowie mit einem UTC-Pfad. Gibt es dafür eine Erklärung?
Ich habe verschieden Netz-Pfade getestet, auch sind natürlich Lese- und Schreibrechte vorhanden.
@helmed: UTC-Pfad? Oder UNC? Mit der Angabe der UNC-Adresse (Bsp: \\IP-Adresse\Freigabename\Pfad) funktioniert es grds. auf jeden Fall. Allerdings kann es auch sein, dass Zugriffe vom System-Administrator/Firewall eingeschränkt sind.
So, die Pfade und die Berechtigung war nicht das Problem. Ich wollte es so haben, das nur bestimmte Dateien gefunden werden, mit PDF klappte das problemlos. Wenn ich allerdings nur nach „.abcdefgh“ Dateien Suche, geht das nicht. Deswegen lasse ich ihn nun nach allen Dateien in dem entsprechenden Ordner suchen und schließe PDF aus. Zum Glück liegen dort nur diese beiden Dateien Typen. „.abcdefh“ ist natürlich symbolisch, entspricht aber der tatsächlichen String-Länge nach dem Punkt. Ungewöhnlich, aber daran liegt es wohl vermutlich.
Die nächste Herausforderung liegt nun für mich darin, auch noch ein entsprechendes Datum der Datei in eine Zeile rauszuschreiben.
Und auch das konnte ich Aufgrund der Kommentare hier problemlos lösen. Wirklich super 🙂 Am ende lasse ich es per Makro noch so sortieren, das die aktuellste Datei immer ganz oben steht.
@helmded: Die Dateiendung „.abcdefgh“ umfasst inklusive Punkt 9 Zeichen. Daher müsste dann der Teil
in
geändert werden.
Hallo Herr Schade, vielen Dank für das Makro. Lässt sich das Makro so abändern, dass bei dem Dateipfad auch alle leeren Verzeichnisse mit dargestellt werden?
Hallo,
bei mir (Excel 2019) funktioniert das Auslesen von Unterordnern nur teilweise. Ich habe 450 Unterordner und es werden nur 299 ausgelesen. Dazu kommt die Meldung ‚Laufzeitfehler 70, Zugriff verweigert‘.
Wie lässt sich das beheben, so dass alle 450 ausgelesen werden?
@Erik: Das Tool kann natürlich nur die Ordner auslesen, auf die auch eine Zugriffsberechtigung besteht. Zugriffsberechtigungen für die Ordner, müssen vom Administrator für die benötigten Ordner eingerichtet werden.