Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

IF Abfrage fs.FileExist
#1
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!
Antworten Top
#2
Es gib FileExist und FolderExist

Ohne es ausprobiert zu haben, wird FileExist bei einem Verzeichnis wohl False zurückgeben.
Antworten Top
#3
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
Antworten Top
#4
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 
Antworten Top
#5
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
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
Antworten Top
#7
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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#8
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste