2016-05-09 2 views
2

В моем текущем коде VBA я генерирую переменную, называемую myFileName, и хотел бы использовать ее в качестве параметра, когда я проверяю, существует ли файл, но появляется сообщение об ошибке «Runtime error 52, bad имя файла или номер "в строке Я использую команду Dir.Как работает Dir() в VBA

Интересно, если я набираю путь к команде Dir вручную вместо использования переменной myFileName, то она работает без проблем. (нет опечатки, я могу использовать myFileName при чтении или записи файла, это только приводит к ошибке для команды Dir)

Любые идеи, как я могу заставить Dir (myFileName) работать?

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

является 'myFileName' объявлена ​​как строка? –

+1

Попробуйте использовать .fileexists в FSO, так как у вас есть один для создания текстового файла/ –

ответ

2

\Application Data не является папкой, а ярлыком. Используйте LOCALAPPDATA или APPDATA вместо:

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

Я не заметил, что он использовал ярлык. хороший глаз! –

0

ваш вопрос:

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

должно быть

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

Это общий вопрос, и на самом деле стоит признать, что вы должны вставить последнюю косую черту, как это. IDK, почему vba читается вот так, но это работа вокруг

Я просто запускал это без проблем и создавал файл.

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

Мне никогда не приходилось вставлять последнюю обратную косую черту, подобную этой. Можете ли вы предоставить ссылку на пример? –

+0

Изменение на то, что вы предложили, заставляет Dir (myFileName) возвращать пустую строку, даже если файл существует, и затем я получаю сообщение об ошибке «Ошибка времени выполнения 76, путь не найден» для строки CreteTextFile – Istvanb

+0

Я также редактировал мой оригинал комментарий и добавил дополнительный амперсанд –

Смежные вопросы