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

Feststellen ob ein Unterverzeichnis existiert

Forumthread: Feststellen ob ein Unterverzeichnis existiert

Feststellen ob ein Unterverzeichnis existiert
02.10.2003 22:18:21
Hans-Werner Schmidt
Hallo
Für eine Abrechnung speichere ich jeden Tag Dateien per Makro in ein Verzeichnis.Die Werte Jahr (2003),Monat(10),Tag(01) sind über ein Drehfeld vorgegeben z.B.
C:/Abrechnung/2003/10/01.xls
C:/Abrechnung/2003/10/02.xls
Frage: Wie kann ich Abfragen ob das vorgegebene Jahr und der Monat exestiert.Wenn nicht soll das Jahr bzw. der Monat erstellt werden.
Wer weiß Rat?
Vielen Dank im voraus. Werner
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Feststellen ob ein Unterverzeichnis existiert
02.10.2003 23:11:44
Franz W.
Hallo Werner,

mal fürs Jahr, entsprechend dann für den Monat:


Sub Neue_Datei()
Dim jZahl as Integer
jZahl = Year(Date)
'''  Neue Datei speichern
''  Prüfen ob Ordner C:\Abrechnung\jZahl\ existiert
Set Fso = CreateObject("Scripting.FileSystemObject")
Ordnername = "C:\Abrechnung\" & jZahl & "\"
If Not Fso.FolderExists(Ordnername) Then
' Ordner  ...\jZahl\  erstellen
MkDir "C:\Abrechnung\" & jZahl & "\"
End If
''  Speichern im Ordner C:\Abrechnung\jZahl\
ActiveWorkbook.SaveAs "C:\Abrechnung\" & jZahl & "\Dein_Dateiname" & ".xls"
End Sub


Grüße
Franz
Anzeige
Komplett und fehlerbereinigt
02.10.2003 23:25:44
Franz W.
Hallo Werner,

war zu schnell vorhin, aber so klappt er - getestet:

Option Explicit


Sub Neue_Datei()
Dim jZahl As Integer, mZahl As Byte, tZahl As Byte
Dim Fso, Ordnername
jZahl = Year(Date)
mZahl = Month(Date)
tZahl = Day(Date)
'''  Neue Datei speichern
''  Prüfen ob Ordner C:\Abrechnung\jZahl\ existiert:
Set Fso = CreateObject("Scripting.FileSystemObject")
Ordnername = "C:\Abrechnung\" & jZahl & "\"
If Not Fso.FolderExists(Ordnername) Then
' Ordner  C:\Abrechnung\jZahl\  erstellen:
MkDir "C:\Abrechnung\" & jZahl & "\"
End If
''  Prüfen ob Ordner C:\Abrechnung\jZahl\mZahl existiert:
Set Fso = CreateObject("Scripting.FileSystemObject")
Ordnername = "C:\Abrechnung\" & jZahl & "\" & mZahl & "\"
If Not Fso.FolderExists(Ordnername) Then
' Ordner  C:\Abrechnung\jZahl\mZahl  erstellen:
MkDir "C:\Abrechnung\" & jZahl & "\" & mZahl & "\"
End If
''  Speichern im Ordner C:\Abrechnung\jZahl\
ActiveWorkbook.SaveAs "C:\Abrechnung\" & jZahl & "\" & mZahl & "\" & tZahl & ".xls"
End Sub


Grüße
Franz
Anzeige
Alternative
02.10.2003 23:45:18
Franz W.
Hallo Werner,

hab grad noch mal gesehen, dass Du Jahr, Monat und Tag über ein Drehfeld in eine Zelle schreibst. Dann kannst Du Dir auch diese eingestellten Werte holen. Als Beispiel:
Jahr steht in A1
Monat steht in B1
Tag steht in C1

dann schreibst Du:


Sub Neue_Datei()
Dim jZahl As Integer, mZahl As Byte, tZahl As Byte
Dim Fso, Ordnername
jZahl = [A1]
mZahl = [B1]
tZahl = [C1]
'''  Neue Datei speichern
''  Prüfen ob Ordner C:\Abrechnung\jZahl\ existiert:
Set Fso = CreateObject("Scripting.FileSystemObject")
Ordnername = "C:\Abrechnung\" & jZahl & "\"
If Not Fso.FolderExists(Ordnername) Then
' Ordner  C:\Abrechnung\jZahl\  erstellen:
MkDir "C:\Abrechnung\" & jZahl & "\"
End If
''  Prüfen ob Ordner C:\Abrechnung\jZahl\mZahl existiert:
Set Fso = CreateObject("Scripting.FileSystemObject")
Ordnername = "C:\Abrechnung\" & jZahl & "\" & mZahl & "\"
If Not Fso.FolderExists(Ordnername) Then
' Ordner  C:\Abrechnung\jZahl\mZahl  erstellen:
MkDir "C:\Abrechnung\" & jZahl & "\" & mZahl & "\"
End If
''  Speichern im Ordner C:\Abrechnung\jZahl\
ActiveWorkbook.SaveAs "C:\Abrechnung\" & jZahl & "\" & mZahl & "\" & tZahl & ".xls"
End Sub

Anzeige
AW: Alternative
03.10.2003 15:04:25
Hans-Werner Schmidt
Franz du hast mein Problem erkannt und gelöst ich probiere es umgehend aus.
Hochachtung für so viel Können.
Danke
Vielen Dank für die Blumen, aber...
03.10.2003 16:48:39
Franz W.
Hallo Werner,

vielen Dank für die Rückmeldung. Die Blumen aber geb ich gerne an meine Helfre weiter. In dem Code ist nicht alles von mir, das ist viel Hilfe aus dem Forum (in diesem speziellen Fall von Hajo) drin. Hab's dann nur noch entsprechend zusammengestellt ;-)). Freut mich aber, wenn ich Dir damit helfen konnte.

Grüße
Franz
Anzeige
AW: Feststellen ob ein Unterverzeichnis existiert
02.10.2003 23:19:17
PeterW
Hallo Hans-Werner,

schau mal links unter Excel-FAQ - Datei - Name - Prüfen ob Name exisitiert.

Gruß
Peter
AW: Feststellen ob ein Unterverzeichnis existiert
03.10.2003 15:10:33
Hans-Werner Schmidt
Hallo Peter
das mit der Datei war klar, das habe ich mir auch schon von der Herber-CD geholt.
Wichtig war mir das der Ordner in den abgespeichert wird auch vorhanden ist.Bislang habe ich die Unterordner für das ganze Jahr angelegt.
Vielen Dank trotzdem
Werner
Anzeige
AW: Feststellen ob ein Unterverzeichnis existiert
02.10.2003 23:50:46
K.Rola
Hallo,

Option Explicit
Declare

Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub Pfad_existiert()
MakeSureDirectoryPathExists "c:\Abrechnung\spinbuttonJahr\SpinbuttonMonat\"
''Dein Speicherncode
End Sub


Gruß K.Rola
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

Infobox / Tutorial

Unterverzeichnis in Excel VBA überprüfen und erstellen


Schritt-für-Schritt-Anleitung

Um in Excel VBA zu prüfen, ob ein Unterverzeichnis existiert und es gegebenenfalls zu erstellen, kannst Du folgendes Vorgehen nutzen:

  1. Öffne den VBA-Editor: Drücke ALT + F11.
  2. Erstelle ein neues Modul: Klicke im Menü auf Einfügen > Modul.
  3. Füge den folgenden Code ein:
Sub Neue_Datei()
    Dim jZahl As Integer, mZahl As Byte, tZahl As Byte
    Dim Fso As Object, Ordnername As String

    ' Jahre, Monat und Tag definieren
    jZahl = Year(Date)
    mZahl = Month(Date)
    tZahl = Day(Date)

    ' FileSystemObject erstellen
    Set Fso = CreateObject("Scripting.FileSystemObject")

    ' Prüfen ob Ordner für das Jahr existiert
    Ordnername = "C:\Abrechnung\" & jZahl & "\"
    If Not Fso.FolderExists(Ordnername) Then
        MkDir Ordnername
    End If

    ' Prüfen ob Ordner für den Monat existiert
    Ordnername = "C:\Abrechnung\" & jZahl & "\" & mZahl & "\"
    If Not Fso.FolderExists(Ordnername) Then
        MkDir Ordnername
    End If

    ' Datei speichern
    ActiveWorkbook.SaveAs "C:\Abrechnung\" & jZahl & "\" & mZahl & "\" & tZahl & ".xls"
End Sub
  1. Führe das Makro aus: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Häufige Fehler und Lösungen

  • Fehler: "Pfad nicht gefunden"

    • Lösung: Überprüfe, ob der Hauptordner C:\Abrechnung\ existiert. Stelle sicher, dass Du die entsprechenden Berechtigungen hast, um in diesem Verzeichnis zu schreiben.
  • Fehler: "Komponente nicht gefunden"

    • Lösung: Stelle sicher, dass das Scripting.FileSystemObject korrekt referenziert wird. Möglicherweise musst Du es in deinen VBA-Referenzen aktivieren.

Alternative Methoden

Eine alternative Methode zur Überprüfung eines Unterverzeichnisses in Excel VBA ist die Verwendung einer benutzerdefinierten Funktion:

Function VerzeichnisExistiert(ByVal Verzeichnis As String) As Boolean
    Dim Fso As Object
    Set Fso = CreateObject("Scripting.FileSystemObject")
    VerzeichnisExistiert = Fso.FolderExists(Verzeichnis)
End Function

Sub TestVerzeichnis()
    If Not VerzeichnisExistiert("C:\Abrechnung\2003\10\") Then
        MkDir "C:\Abrechnung\2003\10\"
    End If
End Sub

Diese Funktion kann in anderen Makros verwendet werden, um die Existenz von Verzeichnissen zu prüfen.


Praktische Beispiele

Ein praktisches Beispiel wäre, wenn Du die Werte für Jahr, Monat und Tag aus bestimmten Zellen beziehst:

Sub Neue_Datei()
    Dim jZahl As Integer, mZahl As Byte, tZahl As Byte
    Dim Fso As Object, Ordnername As String

    jZahl = [A1] ' Jahr aus Zelle A1
    mZahl = [B1] ' Monat aus Zelle B1
    tZahl = [C1] ' Tag aus Zelle C1

    Set Fso = CreateObject("Scripting.FileSystemObject")

    Ordnername = "C:\Abrechnung\" & jZahl & "\"
    If Not Fso.FolderExists(Ordnername) Then
        MkDir Ordnername
    End If

    Ordnername = "C:\Abrechnung\" & jZahl & "\" & mZahl & "\"
    If Not Fso.FolderExists(Ordnername) Then
        MkDir Ordnername
    End If

    ActiveWorkbook.SaveAs "C:\Abrechnung\" & jZahl & "\" & mZahl & "\" & tZahl & ".xls"
End Sub

Tipps für Profis

  • Vermeide Duplikate: Wenn Du regelmäßig Daten speicherst, überlege, auch die Zeit im Dateinamen zu verwenden, um Duplikate zu vermeiden.

  • Fehlerbehandlung einfügen: Nutze On Error Resume Next und On Error GoTo 0, um potenzielle Fehler abzufangen, ohne dass das Makro abbricht.

  • Verzeichnisstruktur dynamisch anpassen: Passe den Speicherort dynamisch an, indem Du die Pfadstruktur in einer Excel-Tabelle verwaltest.


FAQ: Häufige Fragen

1. Wie prüfe ich, ob ein Ordner existiert? Um zu prüfen, ob ein Ordner existiert, kannst Du das FolderExists-Methode des FileSystemObject verwenden.

2. Was mache ich, wenn der Ordner nicht existiert? Wenn der Ordner nicht existiert, kannst Du ihn mit der MkDir-Anweisung erstellen.

3. Kann ich auch mehrere Unterverzeichnisse gleichzeitig prüfen? Ja, Du kannst in einer Schleife durch die gewünschten Verzeichnisse iterieren und mit FolderExists prüfen, ob sie vorhanden sind.

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