2016-05-09 8 views
2

In meinem aktuellen VBA-Code erzeuge ich eine Variable namens myFileName und möchte sie als Parameter verwenden, wenn ich überprüfe, ob die Datei existiert, aber ich bekomme eine Fehlermeldung "Runtime error 52, bad Dateiname oder Nummer "in der Zeile verwende ich den Befehl Dir.Wie Dir() in VBA funktioniert

Interessanterweise, wenn ich den Dateipfad manuell auf den Befehl Dir eingeben, anstatt die Variable MyFileName, dann funktioniert es ohne ein Problem. (kein Tippfehler, ich kann den myFileName beim Lesen oder Schreiben der Datei verwenden, er löscht nur einen Fehler für den Dir-Befehl)

Irgendwelche Ideen wie kann ich das Dir (myFileName) arbeiten lassen?

Set fs = CreateObject("Scripting.FileSystemObject") 

    myFileName = Environ("USERPROFILE") & "\Application Data\myFile.txt" 

    If Dir(myFileName) = "" Then 
     Set a = fs.CreateTextFile(myFileName, True) 
     a.Write ("0") 
     a.Close 
    End If 
+1

ist 'myFileName' als String deklariert? –

+1

Probieren Sie die .fileexists im FSO, da Sie eine haben, um die Textdatei zu erstellen/ –

Antwort

2

Die \Application Data ist kein Ordner, sondern eine Verknüpfung. Verwenden Sie LOCALAPPDATA oder APPDATA statt:

myFileName = Environ("LOCALAPPDATA") & "\myFile.txt" 
myFileName = Environ("APPDATA") & "\myFile.txt" 
+0

Ich habe nicht bemerkt, dass er eine Abkürzung verwendet. Gutes Auge! –

0

Ihr Problem ist:

myFileName = Environ("USERPROFILE") & "\Application Data\myFile.txt" 

soll es

myFileName = Environ("USERPROFILE") & "\Application Data" & "\" & "myFile" & ".txt" 

sein Dies ist eine häufig gestellte Frage und wirklich wert anerkannt wird, dass Sie den letzten Schrägstrich wie folgt eingefügt haben. IDK, warum VBA liest so, aber das ist die Arbeit um

Ich lief nur das ohne Problem und die Datei erstellt.

Private Sub createafile() 
    Set fs = CreateObject("Scripting.FileSystemObject") 

    myFileName = Environ("USERPROFILE") & "\Desktop" & "\" & Format(Date, "ddmmyyyy") & ".xlsm" 

    If Dir(myFileName) = "" Then 
     Set a = fs.CreateTextFile(myFileName, True) 
     a.Write ("0") 
     a.Close 
    End If 
End Sub 
+0

Ich hatte noch nie den letzten Backslash wie folgt einfügen. Können Sie einen Link zu einem Beispiel bereitstellen? –

+0

Wenn Sie zu dem wechseln, was Sie vorgeschlagen haben, gibt das Verzeichnis (myFileName) eine leere Zeichenfolge zurück, auch wenn die Datei existiert und dann eine Fehlermeldung "Laufzeitfehler 76, Pfad nicht gefunden" für die CreteTextFile-Zeile – Istvanb

+0

angezeigt wird Kommentar und fügte hinzu, ein zusätzliches kaufmännisches Und –

Verwandte Themen