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

Forumthread: Überprüfen, ob Ordner existiert

Überprüfen, ob Ordner existiert
29.12.2015 20:19:26
Jürgen
Hallo,
meine Prozedur setzt einen existierenden Ordner voraus. Das wird durch eine Funktion überprüft. pre>

Function OrdnerVorhanden(ByVal strPfad As String) As Boolean
On Error GoTo Fehler
OrdnerVorhanden = True
ChDir (strPfad)
On Error GoTo 0
Exit Function
Fehler:
OrdnerVorhanden = False
On Error GoTo 0
End Function

Durch einen Zufall wurde beim Auslesen einer Zelle mit dem Speicherort ein Backslash zuviel eingefügt:
D:\Mxxxc\Lagerhaltung\\Backup\
Die Funktion hat diesen String ohne Probleme erkannt und ein True zurückgegeben, der anschließende Speichern-Aufruf brachte einen Laufzeitfehler '1004: "Überprüfen, ob Speichort korrekt ist."
Frage: Warum erkennt die Funktion die falsche Schreibweise nicht und wie kann man solche Fehler abfangen?
Vielen Dank für eure Hilfe.
LG Jürgen

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Überprüfen, ob Ordner existiert
29.12.2015 22:10:25
Luschi
Hallo Jürgen,
dieser vba-internen Funktionen haben sicherlich eigene Prüfroutinen und schmeißen doppelte/ _ dreifache Backslashs einfach raus. ich mache das immer so:

Sub test1()
Dim s1 As String, s2 As String
Dim i As Integer
s1 = "H:\\\\Daten\\\\\1\\\\1"
For i = 5 To 2 Step -1
s1 = Replace(s1, String(i, "\"), "\", 1, -1, vbTextCompare)
Next i
MsgBox s1
s2 = Dir(s1, vbDirectory)
If s2  "" Then
MsgBox "Verzeichnis '" & s1 & "' existiert!", vbSystemModal + 48, "Hinweis..."
Else
MsgBox "Verzeichnis '" & s1 & "' existiert  NICHT!", vbSystemModal + 16, "Hinweis..."
End If
End Sub
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Überprüfen, ob Ordner existiert
30.12.2015 02:47:04
Jürgen
Hallo Luschi,
ich habe dein Makro getestet, es funktioniert, ich habe nur noch nicht verstanden warum. So wie ich das verstehe ersetzt der Teil count=-1 der Replace-Funktion alle möglichen Zeichenfolgen, in dem Fall alle "\" durch ein einziges "\". Wozu dient dann die For-Next-Schleife und warum String(i,"\") für den Teil "find", wenn count=-1 alle Zeichenfolgen findet? Oder werden durch count=-1 sämtliche Zeichen im String durch "\" ersetzt? Kannst du mir bitte auf die Sprünge helfen. Wenn ich Code in ein Makro einbaue, möchte ich auch verstehen, was da passiert. Wie gesagt, funktioniert super, werde ich auch verwenden, ich möchte es nur verstehen.
LG Jürgen
aus der Heide
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Überprüfen, ob ein Ordner existiert


Schritt-für-Schritt-Anleitung

Um in Excel VBA zu überprüfen, ob ein Ordner existiert, kannst Du folgende Funktion verwenden:

Function OrdnerVorhanden(ByVal strPfad As String) As Boolean
    On Error GoTo Fehler
    OrdnerVorhanden = True
    ChDir (strPfad)
    On Error GoTo 0
    Exit Function
Fehler:
    OrdnerVorhanden = False
    On Error GoTo 0
End Function
  1. Fügen Sie diese Funktion in ein Modul ein: Öffne den Visual Basic-Editor mit ALT + F11, füge ein neues Modul hinzu und kopiere den obigen Code hinein.
  2. Verwende die Funktion: Rufe die Funktion in Deinem Code auf, indem Du den Pfad des Ordners übergibst, den Du überprüfen möchtest.
  3. Fehlerbehandlung: Beachte, dass die Funktion aufgrund von Pfadfehlern (z.B. doppelter Backslash) möglicherweise nicht immer korrekt funktioniert.

Häufige Fehler und Lösungen

Ein häufiges Problem ist, dass die Funktion OrdnerVorhanden auch dann True zurückgibt, wenn der Pfad ungültig ist, etwa durch doppelte Backslashes. Hier ist eine Lösung:

Sub test1()
    Dim s1 As String
    Dim i As Integer
    s1 = "H:\\\\Daten\\\\\1\\\\1"
    For i = 5 To 2 Step -1
        s1 = Replace(s1, String(i, "\"), "\", 1, -1, vbTextCompare)
    Next i
    MsgBox s1
    If Dir(s1, vbDirectory) <> "" Then
        MsgBox "Verzeichnis '" & s1 & "' existiert!", vbSystemModal + 48, "Hinweis..."
    Else
        MsgBox "Verzeichnis '" & s1 & "' existiert NICHT!", vbSystemModal + 16, "Hinweis..."
    End If
End Sub

Die Dir Funktion überprüft nun, ob der korrigierte Pfad tatsächlich existiert.


Alternative Methoden

Eine alternative Methode, um die Existenz eines Ordners zu überprüfen, besteht darin, die FileSystemObject-Klasse zu verwenden. Hier ein Beispiel:

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists("D:\Dein\Ordner\Pfad") Then
    MsgBox "Ordner existiert."
Else
    MsgBox "Ordner existiert nicht."
End If

Diese Methode ist besonders nützlich, wenn Du umfangreiche Datei- und Ordneroperationen durchführen möchtest.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du die oben genannten Techniken verwenden kannst:

  1. Überprüfung vor dem Speichern:

    If Not OrdnerVorhanden("D:\Dein\Ordner") Then
        MsgBox "Der Ordner existiert nicht. Bitte überprüfe den Pfad."
    Else
        ' Speichern Sie hier Ihre Datei
    End If
  2. Löschen eines Ordners:

    If fso.FolderExists("D:\Dein\Ordner") Then
        fso.DeleteFolder "D:\Dein\Ordner"
    End If

Diese Beispiele zeigen, wie wichtig es ist, vor bestimmten Operationen die Existenz von Ordnern zu überprüfen.


Tipps für Profis

  • Fehlerbehandlung: Achte darauf, dass Du immer eine Fehlerbehandlung in Deinen VBA-Skripten implementierst, um Laufzeitfehler zu vermeiden.
  • Verwende FileSystemObject: Diese Methode bietet mehr Flexibilität und Optionen für Datei- und Ordneroperationen.
  • Korrektur von Pfaden: Implementiere eine Funktion, die Pfade standardisiert, indem sie überflüssige Backslashes entfernt, bevor Du die Existenz überprüfst.

FAQ: Häufige Fragen

1. Warum erkennt die Funktion OrdnerVorhanden doppelte Backslashes nicht?
Die Funktion verwendet die ChDir Methode, die nicht in der Lage ist, mehrere Backslashes zu verarbeiten. Die Verwendung von Dir zur Überprüfung des Pfades ist hier effektiver.

2. Wie kann ich sicherstellen, dass mein Code für verschiedene Excel-Versionen funktioniert?
Verwende Funktionen, die in allen Versionen von Excel VBA unterstützt werden, und teste Deinen Code in der Zielumgebung.

3. Gibt es eine Möglichkeit, den Code zu optimieren?
Ja, Du kannst die Fehlerbehandlung verfeinern und redundante Codeabschnitte eliminieren, um die Leistung zu verbessern.

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