Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Sortierung beim Auslesen eines Ordners

Sortierung beim Auslesen eines Ordners
24.06.2020 11:20:36
Erik
Liebe Gemeinde,
ich versuche mit folgender Funktion einen Ordner auszulesen, was sehr gut klappt. Allerdings habe ich festgestellt, dass die Funktion die Dateien in einer anderen Reihenfolge einliest, als Sie mir bspw. im Explorer angezeigt wird.
Weiß jemand woran das liegt bzw. wie man das in Einklang bringen kann (Sortierung im Explorer wird beim Einlesen übernommen z.Bsp.)?

Public Function Ordner_auslesen( _
ByRef Dateien As Collection, _
ByVal Ordnerpfad As String, _
Optional ByVal Dateifilter As String = "*", _
Optional ByVal Unterordner_auslesen As Boolean = False _
) As Collection
'Quelle: http://www.ms- _
office-forum.net/forum/showthread.php?t=267029
'# PARAMETERINFO:
'# Files: Datenfeld zur Ausgabe der Suchergebnisse
'# Ordnerpfad: String der das zu durchsuchende Verzeichnis angibt
'# Dateifilter: String der den gesuchten Dateityp oder Dateinamen enthält (Optional,  _
Standard="*.*" findet alle Dateien)
'# Beispiele: "*.txt" - Findet alle Textdateien
'# "*name*" - Findet alle Dateien mit "name" im Dateinamen
'# "*.avi;*.mpg" - Findet .avi und .mpg Dateien (Dateitypen mit ; trennen)
'# Unterordner_auslesen: Boolean gibt an, ob Unterordner durchsucht werden sollen ( _
Optional, Standard=False)
Dim objFilesystem As Object
Dim objFolder As Object
Dim objSubfolder As Object
Dim objFile As Object
Dim n As Long
Dim varFiles As Variant
Dim Datei As New Collection
Set objFilesystem = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFilesystem.GetFolder(Ordnerpfad)
'Filter als Array gestalten
If InStr(1, Dateifilter, ";") > 0 Then
varFiles = Split(Dateifilter, ";")
Else
ReDim varFiles(0)
varFiles(0) = Dateifilter
End If
For Each objFile In objFolder.Files
If Not objFile Is Nothing Then
For n = 0 To UBound(varFiles)
If LCase(objFilesystem.GetFilename(objFile)) Like LCase(varFiles(n)) Then
With Datei
.Add objFile.Name, "Dateiname"
.Add objFile.ParentFolder.Path & "\", "Ordnerpfad"
End With
Dateien.Add Datei
Set Datei = Nothing
Exit For
End If
Next n
End If
Next
If Unterordner_auslesen = True Then
For Each objSubfolder In objFolder.Unterordner_auslesen
Ordner_auslesen Dateien, objSubfolder, Dateifilter, Unterordner_auslesen
Next objSubfolder
End If
Set Ordner_auslesen = Dateien
End Function
Besten Dank für jeden Tipp!
Liebe Grüße aus dem Elbflorenz
Erik
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sortierung beim Auslesen eines Ordners
24.06.2020 11:28:48
Martin
Hallo Erik,
die Sortierreihenfolge im Explorer ist nach vielen verschiedenen Attributen möglich (Dateiname, Dateigröße, Speicherdatum, usw.). Genau dieses Attribut müsste per VBA ebenfalls ausgelesen werden, um die ausgelesenen Dateien danach zu sortieren.
Viele Grüße
Martin
AW: Sortierung beim Auslesen eines Ordners
24.06.2020 12:18:30
Erik
Hallo Martin,
vielen Dank für deine Rückmeldung. Ich habe mich wahrscheinlich nicht ganz gut ausgedrückt: Ich wollte gern wissen, nach welchem Prinzip die Prozedur die Dateien überhaupt einliest. Also die Listung in objFolder.Files sozusagen. Weißt du das zufällig?
LG Erik
Anzeige
AW: Mehr oder weniger Zufall (owT)
24.06.2020 12:57:44
EtoPHG

AW: Mehr oder weniger Zufall (owT)
24.06.2020 15:51:48
Erik
Hallo EtoPHG,
ok, meine Vermutung wäre jetzt noch die Sortierung nach der Inode gewesen, aber das gibts auf Windows-BS ja nicht. Danke für die Antwort!.
LG Erik
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Dateien in Ordner sortieren: Tipps und Tricks


Schritt-für-Schritt-Anleitung

Um Dateien in einem Ordner auszulesen und sie in der gleichen Reihenfolge wie im Explorer anzuzeigen, kannst du die folgende VBA-Funktion verwenden. Diese Funktion liest die Dateien in einem angegebenen Ordner aus und gibt sie in einer Collection zurück.

Public Function Ordner_auslesen( _
ByRef Dateien As Collection, _
ByVal Ordnerpfad As String, _
Optional ByVal Dateifilter As String = "*", _
Optional ByVal Unterordner_auslesen As Boolean = False _
) As Collection
    Dim objFilesystem As Object
    Dim objFolder As Object
    Dim objSubfolder As Object
    Dim objFile As Object
    Dim varFiles As Variant
    Dim Datei As New Collection

    Set objFilesystem = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFilesystem.GetFolder(Ordnerpfad)

    If InStr(1, Dateifilter, ";") > 0 Then
        varFiles = Split(Dateifilter, ";")
    Else
        ReDim varFiles(0)
        varFiles(0) = Dateifilter
    End If

    For Each objFile In objFolder.Files
        If Not objFile Is Nothing Then
            For n = 0 To UBound(varFiles)
                If LCase(objFilesystem.GetFilename(objFile)) Like LCase(varFiles(n)) Then
                    With Datei
                        .Add objFile.Name, "Dateiname"
                        .Add objFile.ParentFolder.Path & "\", "Ordnerpfad"
                    End With
                    Dateien.Add Datei
                    Set Datei = Nothing
                    Exit For
                End If
            Next n
        End If
    Next

    If Unterordner_auslesen = True Then
        For Each objSubfolder In objFolder.Subfolders
            Ordner_auslesen Dateien, objSubfolder, Dateifilter, Unterordner_auslesen
        Next objSubfolder
    End If

    Set Ordner_auslesen = Dateien
End Function

Häufige Fehler und Lösungen

  1. Unzureichende Berechtigungen
    Problem: Wenn der VBA-Code nicht die nötigen Berechtigungen hat, um auf den Ordner zuzugreifen, kann es zu Fehlern kommen.
    Lösung: Stelle sicher, dass du über die richtigen Berechtigungen für den Ordner verfügst.

  2. Falscher Ordnerpfad
    Problem: Ein falscher oder nicht existierender Ordnerpfad führt zu einem Fehler.
    Lösung: Überprüfe den angegebenen Ordnerpfad auf Richtigkeit.

  3. Dateifilter funktioniert nicht
    Problem: Wenn der Dateifilter nicht korrekt gesetzt ist, werden nicht die gewünschten Dateien angezeigt.
    Lösung: Achte darauf, dass der Filter die richtigen Dateiendungen hat.


Alternative Methoden

Falls du eine PHP-Lösung suchst, um Ordner und Unterordner auszulesen, kannst du die scandir-Funktion verwenden. Hier ist ein einfaches Beispiel:

$dir = 'dein/pfad/zum/ordner';
$files = scandir($dir);

foreach ($files as $file) {
    if ($file != '.' && $file != '..') {
        echo $file . "<br>";
    }
}

Diese Methode ist einfach und effektiv, wenn du Dateien in einem Ordner sortieren und auflisten möchtest.


Praktische Beispiele

Hier ist ein Beispiel, wie du die oben genannte Funktion nutzen kannst, um alle .txt-Dateien in einem bestimmten Ordner auszulesen:

Dim Dateien As New Collection
Dim OrdnerPfad As String

OrdnerPfad = "C:\Dein\Pfad\Zum\Ordner\"
Set Dateien = Ordner_auslesen(Dateien, OrdnerPfad, "*.txt")

For Each Datei In Dateien
    Debug.Print Datei("Dateiname") & " - " & Datei("Ordnerpfad")
Next Datei

Dieses Beispiel zeigt, wie du alle .txt-Dateien in einem Ordner auslesen und deren Namen zusammen mit dem Ordnerpfad ausgeben kannst.


Tipps für Profis

  • Verwende Dateiattribute: Um die Sortierung der Dateien zu verbessern, kannst du Attribute wie Dateigröße oder Speicherdatum in die Funktion einfügen, damit du die Dateien gemäß diesen Attributen sortieren kannst.

  • Optimierung der Leistung: Wenn du mit großen Ordnern arbeitest, kannst du die Funktion so anpassen, dass sie nur bestimmte Dateitypen oder -größen einliest, um die Performance zu steigern.

  • Debugging: Nutze Debug.Print, um den Inhalt der Collection während der Ausführung anzuzeigen. Das hilft dir, Fehler schneller zu identifizieren.


FAQ: Häufige Fragen

1. Wie kann ich die Sortierung der Dateien anpassen?
Du kannst die Sortierung anpassen, indem du die Attribute der Dateien in der Funktion ausliest und die Collection entsprechend sortierst.

2. Gibt es eine Möglichkeit, Unterordner automatisch einzulesen?
Ja, indem du den Parameter Unterordner_auslesen auf True setzt, werden auch Unterordner durchsucht und deren Dateien in die Collection hinzugefügt.

3. Welche Excel-Version wird benötigt?
Die bereitgestellte VBA-Funktion sollte in Excel 2007 und höher funktionieren, da sie auf der Scripting.FileSystemObject basiert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige