Удаление файла в VBA
Используя VBA, как я могу:
- проверьте, существует ли файл, и если да,
- удалить его?
Ответы
Ответ 1
1.) Проверьте здесь. В основном это:
Function FileExists(ByVal FileToTest As String) As Boolean
FileExists = (Dir(FileToTest) <> "")
End Function
Я оставлю это вам, чтобы выяснить, нужна ли обработка ошибок, но они относятся к обработке ошибок, которые я бы рассматривал:
- Проверьте, не прошла ли пустая строка.
- Проверьте, что строка, содержащая символы, незаконна в имени файла/пути
2.) Как удалить файл. Посмотрите на this. В основном используйте команду 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
Опять же, я оставлю вам обработку ошибок, и снова это то, что я подумал бы:
-
Должно ли это вести себя по-другому для каталога или файла? Должен ли пользователь явно указывать, что он хочет удалить каталог?
-
Вы хотите, чтобы код автоматически reset атрибут только для чтения или пользователь должен был указать какой-то признак того, что атрибут только для чтения установлен?
EDIT: Отметьте этот ответ как вики сообщества, чтобы любой мог его изменить, если это необходимо.
Ответ 2
Альтернативный способ кодирования ответа Бреттского, с которым я в целом согласен, может быть
With New FileSystemObject
If .FileExists(yourFilePath) Then
.DeleteFile yourFilepath
End If
End With
Тот же эффект, но меньше (ну, вообще-то) никаких объявлений переменных.
FileSystemObject - действительно полезный инструмент, и стоит позаботиться о дружелюбности. Помимо всего прочего, для написания текстовых файлов это может иногда быть быстрее, чем альтернатива, которая может удивить некоторых людей. (По моему опыту, по крайней мере, YMMV).
Ответ 3
Я, вероятно, поплачу за это, но в чем смысл тестирования на существование, если вы просто собираетесь его удалить? Одним из моих главных мошенников для домашних животных является приложение, отображающее диалоговое окно с ошибкой с чем-то вроде "Не удалось удалить файл, его не существует!"
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.
Если файл не существует в первую очередь, миссия выполнена!
Ответ 4
Для проверки наличия файла можно использовать следующее: а затем удалить его.
Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
Kill aFile
End If
Ответ 5
В VB его обычно Dir
найти каталог файла. Если он не пуст, он существует, а затем используйте Kill
, чтобы избавиться от файла.
test = Dir(Filename)
If Not test = "" Then
Kill (Filename)
End If
Ответ 6
установите ссылку на библиотеку Scripting.Runtime, а затем используйте FileSystemObject:
Dim fso as New FileSystemObject, aFile as File
if (fso.FileExists("PathToFile")) then
aFile = fso.GetFile("PathToFile")
aFile.Delete
End if
Ответ 7
Вот совет: вы повторно используете имя файла или планируете сделать что-то, требующее немедленного удаления?
Нет?
Вы можете заставить VBA запускать команду DEL "C:\TEMP\scratchpad.txt" /F из командной строки асинхронно с помощью VBA.Shell:
Shell "DEL" и chr (34) и strPath и chr (34) и "/F", vbHide
Обратите внимание на двойные кавычки (символ ASCII 34) вокруг имени файла: я предполагаю, что у вас есть сетевой путь или длинное имя файла, содержащее пробелы.
Если это большой файл, или он при медленном сетевом подключении, это способ пойти и забыть.
Конечно, вы никогда не узнаете, работает ли это или нет; но вы немедленно возобновляете свой VBA, и есть моменты, когда это лучше, чем ждать сети.
Ответ 8
Вы можете установить ссылку на библиотеку Scripting.Runtime, а затем использовать FileSystemObject. Он имеет метод DeleteFile и метод FileExists.
См. статью MSDN здесь.
Ответ 9
2 строки кода в VBA..
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(strPath) Then FSO.DeleteFile ("" & strPath & "")