Удаление файла в VBA
используя VBA, как я могу:
- проверьте, существует ли файл, и если да,
- удалить его?
9 ответов
1.) Проверка здесь. В основном сделайте это:
Function FileExists(ByVal FileToTest As String) As Boolean
FileExists = (Dir(FileToTest) <> "")
End Function
Я оставлю это вам, чтобы выяснить различные обработки ошибок, необходимых, но это среди ошибок обработки вещей, которые я буду рассматривать:
- проверьте, не передается ли пустая строка.
- проверить строку, содержащую символы, недопустимые в имени файла/пути
2.) Как удалить файл. Посмотреть этого. в основном используйте команду Kill, но вы должны учитывать возможность того, что файл доступен только для чтения. Вот функция для вас:
Sub DeleteFile(ByVal FileToDelete As String)
If FileExists(FileToDelete) Then 'See above
' First remove readonly attribute, if set
SetAttr FileToDelete, vbNormal
' Then delete the file
Kill FileToDelete
End If
End Sub
опять же, я оставлю обработку ошибок вам, и снова это то, что я бы рассмотрел:
Должно ли это вести себя по-разному для каталога и файла? Должен ли пользователь явно указывать, что он хочет удалить каталог?
вы хотите, чтобы код автоматически сбрасывал атрибут только для чтения или должен пользователю будет дано какое-то указание на то, что атрибут "только чтение" установлен?
EDIT: пометка этого ответа как Вики сообщества, чтобы любой мог изменить его, если это необходимо.
альтернативный способ код ответа Brettski, с которым я совершенно согласен, может быть
With New FileSystemObject
If .FileExists(yourFilePath) Then
.DeleteFile yourFilepath
End If
End With
тот же эффект, но меньше (ну, вообще нет) объявлений переменных.
FileSystemObject-действительно полезный инструмент, с которым стоит подружиться. Помимо всего прочего, для написания текстовых файлов он иногда может быть быстрее, чем устаревшая альтернатива, что может удивить нескольких людей. (По моему опыту, по крайней мере, YMMV).
Я, вероятно, вспыхну за это, но какой смысл тестировать существование, если вы просто собираетесь удалить его? Один из моих основных pet peeves-это приложение, бросающее диалог об ошибке с чем-то вроде "не удалось удалить файл, его не существует!"
On Error Resume Next
aFile = "c:\file_to_delete.txt"
Kill aFile
On Error Goto 0
return Len(Dir$(aFile)) > 0 ' Make sure it actually got deleted.
Если файл не существует, в первую очередь, миссия выполнена!
следующее Можно использовать для проверки наличия файла, а затем для его удаления.
Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
Kill aFile
End If
в VB его нормально Dir
чтобы найти каталог файла. Если он не пуст, то он существует, а затем использует Kill
чтобы избавиться от файла.
test = Dir(Filename)
If Not test = "" Then
Kill (Filename)
End If
задайте ссылку на сценарий.Библиотека времени выполнения а затем используйте FileSystemObject:
Dim fso as New FileSystemObject, aFile as File
if (fso.FileExists("PathToFile")) then
aFile = fso.GetFile("PathToFile")
aFile.Delete
End if
вот совет: вы повторно используя имя файла, или планируете сделать что-то, что требует немедленного удаления?
нет?
вы можете заставить VBA уволить команду DEL "C:\TEMP\scratchpad - ... txt " /F из командной строки асинхронно использование VBA.Шелл:
Оболочка " DEL "& chr (34) & strPath & chr (34) & "/F", vbHide
обратите внимание на двойные кавычки (символ ASCII 34) вокруг имени файла: я предполагаю, что у вас есть сетевой путь, или длинное имя файла, содержащее пробелы.
Если это большой файл, или он находится на медленном сетевом подключении, огонь и забыть-это путь. Конечно, вы никогда не увидите, сработало это или нет; но вы немедленно возобновляете свой VBA, и бывают моменты, когда это лучше, чем ждать сети.
вы можете установить ссылку на скрипт.Библиотека времени выполнения, а затем использовать FileSystemObject. Он имеет метод DeleteFile и метод FileExists.
см. статью MSDN здесь.
2 строки кода в VBA..
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(strPath) Then FSO.DeleteFile ("" & strPath & "")