Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1864to1868
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

Dateinamen aus Verzeichnis kopieren

Dateinamen aus Verzeichnis kopieren
15.01.2022 06:02:53
Dennis
Hallo zusammen,
ich habe das unten stehende Makro um aus einem Verzeichnis die Namen der Dateien in eine Excel-Liste zu packen.
Jedoch suche ich nach einer Möglichkeit, die es mir erlaubt, dass 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.
Hier eine Beispieldatei
https://www.herber.de/bbs/user/150390.xlsm
Hier das Makro:

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
Für eine Lösung wäre ich sehr dankbar.
Mit freundlichen Grüßen
Dennis

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateinamen aus Verzeichnis kopieren
15.01.2022 09:05:18
volti
Hallo Dennis,
wolltest Du bei weiteren Einlesungen der Dateien diese komplett unter den in "C" bereits vorhandenen Dateien unten drunter schreiben lassen?
Ich nehme mal an, dass Deine bereits eingelesenen Dateien bei erneuten Einlesungen nur aktualisiert werden sollen?!
Hier ein Beispiel zum Testen. Vielleicht hilft es ja.
PS: Zwischenzeitlich weggefallene Dateien werden zur Zeit nicht aus "C" entfernt...
Code:

[Cc]

Sub Dateienliste() Dim vGefunden As Variant Dim objDatei As Object, sDatei As String With CreateObject("scripting.FileSystemObject").GetFolder(Range("N2")) For Each objDatei In .Files If Not objDatei Is Nothing Then sDatei = Replace(objDatei.Name, "~$", "") vGefunden = Application.Match(sDatei, Columns(3), 0) If IsError(vGefunden) Then Cells(Cells(Rows.Count, 3).End(xlUp).Row + 1, "C").Value = sDatei End If End If Next objDatei End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Dateinamen aus Verzeichnis kopieren
15.01.2022 11:17:59
dennis
Hallo Karl-Heinz,
danke für deine Hilfe.
Dein Makro funktioniert auf dem ersten Blick genau wie meins.
Ich versuche mein Problem anders zu erklären. In der Beispieldatei die ich geladen habe sind in Spalte B die Ordner ABC1, ABC2, ABC3....usw. mit der Hand eingetippt (das soll auch so bleiben).
Jeder Ordner hat mehrere Dateien.
In Spalte C sollen dann die Dateinamen auftauchen die im jeweiligen Ordner liegen.
Die Anzahl der Dateien in den jeweiligen Ordner kann unterschiedlich sein.
Sprich wenn mal in einem Ordner eine Datei neu hinzugekommen ist, darf die neue Datei bei der Übertragung keine alten Einträge überschreiben, sie dürfen also nur in der Liste für den jeweiligen Ordner ans Ende gestellt werden.
Ich hoffe du kannst mir helfen :-)
Mit freundlichen Grüßen
Dennis
Anzeige
AW: Dateinamen aus Verzeichnis kopieren
15.01.2022 12:52:43
volti
Hallo Dennis,
ich bin jetzt eine Weile weg, kann Dir aber später gerne wahrscheinlich helfen.
Wenn Du die Dateien je in "B" ausgewiesenen Unterordner in "C" aufgelistet haben möchtest, stellt sich mir die Frage:
Was ist, wenn mehr als 6 Dateien, also mehr als die jeweils vorgegebenen, Felder sind? Denn dann fängt ja schon der nächste Ordner an....
Gruß Karl-Heinz
AW: Dateinamen aus Verzeichnis kopieren
15.01.2022 13:20:48
dennis
Hallo Karl-Heinz,
danke für deine Zeit.
Was du beschreibst ist genau das Problem was ich habe.
"Was ist, wenn mehr als 6 Dateien, also mehr als die jeweils vorgegebenen, Felder sind? Denn dann fängt ja schon der nächste Ordner an..."
Die Felder müssten sich dann automatisch erweitern und der nächste Ordner erst da drunter anfangen.
Gruß
Dennis
Anzeige
AW: Dateinamen aus Verzeichnis kopieren
15.01.2022 16:15:43
volti
Hallo Dennis,
schau mal, ob es jetzt passt...
Code:

[Cc][+][-]

Option Explicit Option Compare Text Sub Dateienliste() Dim i As Long Dim oRng As Range Dim oDatei As Object, MA As Object, oFS As Object Dim sErw As String, sPfad As String Set oFS = CreateObject("scripting.FileSystemObject") sErw = "XLS*" ' Ggf. Einschränkungen beachten ' Alle Ordner-Felder durchgehen Application.ScreenUpdating = False For Each oRng In Range("B3:B" & Cells(Rows.Count, 2).End(xlUp).Row) If Not IsEmpty(oRng.Value) Then ' Ist Eintrag vorhanden? Set MA = oRng.MergeArea ' Verketteter Bereich sPfad = Replace(Range("N2").Value & "&bsol;" & oRng.Value, "&bsol;&bsol;", "&bsol;") If Dir$(sPfad, vbDirectory) <> "" Then ' Ist der gewünschte Pfad vorhanden? With oFS.GetFolder(sPfad) For Each oDatei In .Files ' Alle Dateien im Ordner durchgehen If Not oDatei Is Nothing Then If oDatei.Name Like "*." & sErw Then For i = oRng.Row To Rows.Count If oDatei.Name Like Cells(i, "C").Value Then Exit For If Cells(i, "C").Value = "" Then ' Zeile einfügen und neu verbinden If i >= (oRng.Row + oRng.MergeArea.Rows.Count) Then Cells(i, "C").EntireRow.Insert ' Zeile einfügen Range("B" & oRng.Row & ":B" & i).Merge End If Cells(i, "C").Value = oDatei.Name ' Wert einsetzen Exit For End If Next i End If End If Next oDatei End With End If End If Next oRng Application.ScreenUpdating = True End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Dateinamen aus Verzeichnis kopieren
15.01.2022 16:18:23
volti
Kleine Anpassung...
Code:

[Cc][+][-]

Option Explicit Option Compare Text Sub Dateienliste() Dim i As Long Dim oRng As Range Dim oDatei As Object, oFS As Object Dim sErw As String, sPfad As String Set oFS = CreateObject("scripting.FileSystemObject") sErw = "XLS*" ' Ggf. Einschränkungen beachten Application.ScreenUpdating = False ' Alle Ordner-Felder durchgehen For Each oRng In Range("B3:B" & Cells(Rows.Count, 2).End(xlUp).Row) If Not IsEmpty(oRng.Value) Then ' Ist Eintrag vorhanden? sPfad = Replace(Range("N2").Value & "&bsol;" & oRng.Value, "&bsol;&bsol;", "&bsol;") If Dir$(sPfad, vbDirectory) <> "" Then ' Ist der gewünschte Pfad vorhanden? With oFS.GetFolder(sPfad) For Each oDatei In .Files ' Alle Dateien im Ordner durchgehen If Not oDatei Is Nothing Then If oDatei.Name Like "*." & sErw Then For i = oRng.Row To Rows.Count If oDatei.Name Like Cells(i, "C").Value Then Exit For If Cells(i, "C").Value = "" Then ' Zeile einfügen und neu verbinden If i >= (oRng.Row + oRng.MergeArea.Rows.Count) Then Cells(i, "C").EntireRow.Insert ' Zeile einfügen Range("B" & oRng.Row & ":B" & i).Merge End If Cells(i, "C").Value = oDatei.Name ' Wert einsetzen Exit For End If Next i End If End If Next oDatei End With End If End If Next oRng Application.ScreenUpdating = True End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Dateinamen aus Verzeichnis kopieren
16.01.2022 13:27:15
dennis
Hallo Karl-Heinz,
das klappt fast perfekt, kann nur noch eine Kleinigkeit sein...ich weiß jetzt schon gar nicht wie ich dir danken soll :-).
Jedoch wenn ich eine neue Datei zum Beispiel in den Ordner Abc1 packe, so wird diese Datei ganz unten zu den letzten Ordner ins Verzeichnis eingetragen und nicht bei Abc1. Es kommt dann auch zur Fehlermeldung aufgrund der Verbundenen Zellen.
Hier die Meldung:
"Beim Verbinden von Zellen bleibt nur der oberste linke Wert erhalten, alle anderen Werte werden verworfen."
Oder muss ich noch irgendetwas beachten?
Gruß Dennis
AW: Dateinamen aus Verzeichnis kopieren
16.01.2022 20:54:11
volti
Hallo Dennis,
ich habe das noch mal neu aufgesetzt. Schau mal, ob es jetzt besser passt.
Code:

[Cc][+][-]

Option Explicit Option Compare Text Sub Dateienliste() Dim i As Long, iZeile As Long Dim oRng As Range Dim oDatei As Object, oFS As Object Dim sErw As String, sPfad As String Set oFS = CreateObject("scripting.FileSystemObject") sErw = "XLS*" ' Ggf. Einschränkungen beachten Application.ScreenUpdating = False ' Alle Ordner-Felder durchgehen iZeile = 3 Do Set oRng = Cells(iZeile, "B") If oRng.MergeArea.Count < 2 Then Exit Do ' Ende Datenbereich =>raus If Not IsEmpty(oRng.Value) Then ' Ist Eintrag vorhanden? sPfad = Replace(Range("N2").Value & "&bsol;" & oRng.Value, "&bsol;&bsol;", "&bsol;") If Dir$(sPfad, vbDirectory) <> "" Then ' Ist der gewünschte Pfad vorhanden? With oFS.GetFolder(sPfad) For Each oDatei In .Files ' Alle Dateien im Ordner durchgehen If Not oDatei Is Nothing Then If oDatei.Name Like "*." & sErw Then ' Gewünschte Datei? For i = iZeile To (iZeile + oRng.MergeArea.Rows.Count - 1) If oDatei.Name Like Cells(i, "C").Value Then Exit For ElseIf Cells(i, "C").Value = "" Then Cells(i, "C").Value = oDatei.Name ' Wert einsetzen Exit For End If Next i If i >= (oRng.Row + oRng.MergeArea.Rows.Count) Then ' Zeile einfügen und neu verbinden Cells(i, "C").EntireRow.Insert ' Zeile einfügen Range("B" & oRng.Row & ":B" & i).Merge Cells(i, "C").Value = oDatei.Name ' Wert einsetzen End If End If End If Next oDatei End With End If End If iZeile = iZeile + oRng.MergeArea.Count DoEvents Loop Application.ScreenUpdating = True End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Dateinamen aus Verzeichnis kopieren
17.01.2022 10:55:27
dennis
Hallo Karl-Heinz,
es klappt :-D
Vielen vielen Dank.
Kann man die eingefügten Dateinamen auch als Link zu der jeweiligen Datei darstellen?
Gruß Dennis
AW: Dateinamen aus Verzeichnis kopieren
15.01.2022 10:30:10
Herbert_Grom
Hallo Dennis,
das geht auch mit einer Formel:

=LINKS(ZELLE("Dateiname");FINDEN("[";ZELLE("Dateiname"))-2)
Servus
AW: Dateinamen aus Verzeichnis kopieren
15.01.2022 11:19:08
dennis
Hi, vielen Danl für deine Hilfe.
Jedoch bevorzuge ich VBA da ich dann leichtere Elemente abgreifen kann und der Code noch einiges erweitert werden muss.
Gruß Dennis

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige