Clever-Excel-Forum

Normale Version: IF Abfrage fs.FileExist
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,
ich möchte Ordner erstellen mit einem aus einer Zeile erstellten Namen. Das funktioniert soweit...
Beim zweiten Ausführen des Makros bekomme ich logischer Weise einen Laufzeitfehler, da der Ordner bereits bestehet. Soweit auch ok...
Das ganze will ich mit einer IF Abfrage umgehen, so das kein Ordner erstellt wird, wenn dieser bereits vorhanden ist. Dafür habe ich mir folgendes ausgedacht.

Code:
Sub Ordner_erstellen()

    Dim intzeile As Integer
    Dim fs As Object
        Set fs = CreateObject("Scripting.FileSystemObject")
   
    'intzeile auf die zeile setzen in der der erste datensatz steht
    intzeile = 3
    With Worksheets("Tabelle1")
        
        Do While Not IsEmpty(.Range("D" & intzeile))
       
            If fs.FileExists("C:\Excel\" & .Range("D" & intzeile) & " " & .Range("E" & intzeile)) = False Then
            GoTo Weiter
           
            Else

            fs.createfolder ("C:\Excel\" & .Range("D" & intzeile) & " " & .Range("E" & intzeile))
           
Weiter:
            intzeile = intzeile + 1
            End If
        Loop
    End With
  End Sub


Durch das Makro werden die Ordner, so wie es sein soll generiert. Leider bekomme ich bei der IF Abfrage immer ein FALSE zurück...Hat jemand eine Idee woran es liegen kann?
Besten Dank und viele Grüße!
Es gib FileExist und FolderExist

Ohne es ausprobiert zu haben, wird FileExist bei einem Verzeichnis wohl False zurückgeben.
Hallo,

hier eine Variante mit Dir und MkDir:
Sub Ordner_erstellen_Kuwer()
Dim intzeile As Integer

'intzeile auf die zeile setzen in der der erste datensatz steht
intzeile = 3
With Worksheets("Tabelle1")
Do While Not IsEmpty(.Cells(intzeile, 4))
If Dir("C:\Excel\" & .Cells(intzeile, 4) & " " & .Cells(intzeile, 5), vbDirectory) = "" Then
MkDir "C:\Excel\" & .Cells(intzeile, 4) & " " & .Cells(intzeile, 5)
End If
intzeile = intzeile + 1
Loop
End With
End Sub
Gruß Uwe
Geht das nicht schief, wenn die Verzeichnisstruktur noch nicht komplett ist?

Hier reiner VBA Code, um ein Verzeichnis ggf. mit vorhergehenden Verzeichnissen anzulegen

PHP-Code:
Function CreateDir(createPath As String) As Boolean

Dim vPath 
As Variant
Dim checkPath 
As String

   On Error 
GoTo EH

   checkPath 
""
   For Each vPath In Split(createPath"")
       checkPath checkPath vPath ""
       If Len(Dir(checkPathvbDirectory)) = 0 Then
           MkDir checkPath
       End 
If
   Next

   CreateDir 
True
   Exit 
Function
EH:
   'Debug.Print Err.Description
End Function 
Hallöchen,

alternativ noch das Anlege eines kompletten Pfades mit einer API:

Code:
Option Explicit
Option Private Module
' ---------------------------------------------------------
' Funktion myDrives
' Eingestellt von: Andre Schau
' Datum: 2011-09-10
' Kommentar:
' Parameter: Pfad
' Rückgabe: Erfolg = 1, ansonsten 0
' Aufruf:
' Sub Call_CreatePath()
' CreatePath "D:\Test\Ordner1\O2"
' End Sub
' Hinweis: durch die Kürze sollte die Funktion direkt im Sub
' integriert werden
' Beachte: Pfadangabe wird interpretiert bis zum letzten
' Backslash - die Zeichenfolge nach dem letzten Backslash
' wird als Datei interpretiert!
' d.h. bei "D:\Test\Ordner1\O2" erfolgt die
' Anlage des kompletten Pfades bis D:\Test\Ordner1\

'API-Deklaration
Declare Function MakePath Lib "imagehlp.dll" Alias _
       "MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long

'Aufruf
Sub CreatePath_()
'Variablendeklaration
'String
Dim strPath$
strPath = "D:\Test\Ordner1\O2"
If CreatePath(strPath) = 0 Then
  MsgBox "Pfad konnte nicht angelegt werden."
Else
  MsgBox "Pfad wurde erfolgreich angelegt."
End If
End Sub

Function CreatePath(ByVal strPath As String) As Long
'API-Parameter Pfad, Anlage bis zum letzten Backslash
'Rueckgabewert zuweisen
CreatePath = MakePath(strPath)
End Function
Hi André,

da Du extra diese krasse Function kreiert hast - funktioniert sie bei Dir so wie angenommen?
Aber auch wenn ich es einfach direkt so schreibe:
If MakePath(strPath) = 0 Then
kommt immer nur 1.  :17:

Gruß Uwe
Hi Uwe

Muss ich mir mal in Ruhe anschauen, ist ja auch schon fast 8 Jahre her... Bin jetzt nur am Smartphone.

Könnte sein, dass die 0 nur kommt wenn was gar nicht geht. Also wenn z.B. keine Berechtigung besteht, den Pfad zu erzeugen. Wenn er schon da ist, ist für die Funktion genau so ok wie wenn er erzeugt werden muss. Du kannst praktisch mit der 1 davon ausgehen, dass Dir das letzte Verzeichnis im Pfad zur Verfügung steht, egal, ob es gerade angelegt wurde oder schon da war.
Hallo M8ner,

warum erst prüfen?

'Den Pfad übergeben.

strPath = "C:\Excel\" & .Range("D" & intzeile) & " " & .Range("E" & intzeile)

'Ist der vollständige Pfad nicht vorhanden, wird er neu erstellt und das auch ohne On Error.

MakePath strPath

'Anschließend deine Datei speichern, im strPath

Gruß Karl