Используя VBA, как я могу:
- проверьте, существует ли файл, и если да,
- удалить его?
Используя VBA, как я могу:
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: Отметьте этот ответ как вики сообщества, чтобы любой мог его изменить, если это необходимо.
Альтернативный способ кодирования ответа Бреттского, с которым я в целом согласен, может быть
With New FileSystemObject
If .FileExists(yourFilePath) Then
.DeleteFile yourFilepath
End If
End With
Тот же эффект, но меньше (ну, вообще-то) никаких объявлений переменных.
FileSystemObject - действительно полезный инструмент, и стоит позаботиться о дружелюбности. Помимо всего прочего, для написания текстовых файлов это может иногда быть быстрее, чем альтернатива, которая может удивить некоторых людей. (По моему опыту, по крайней мере, YMMV).
Я, вероятно, поплачу за это, но в чем смысл тестирования на существование, если вы просто собираетесь его удалить? Одним из моих главных мошенников для домашних животных является приложение, отображающее диалоговое окно с ошибкой с чем-то вроде "Не удалось удалить файл, его не существует!"
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
установите ссылку на библиотеку Scripting.Runtime, а затем используйте 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.Shell:
Shell "DEL" и chr (34) и strPath и chr (34) и "/F", vbHide
Обратите внимание на двойные кавычки (символ ASCII 34) вокруг имени файла: я предполагаю, что у вас есть сетевой путь или длинное имя файла, содержащее пробелы.
Если это большой файл, или он при медленном сетевом подключении, это способ пойти и забыть. Конечно, вы никогда не узнаете, работает ли это или нет; но вы немедленно возобновляете свой VBA, и есть моменты, когда это лучше, чем ждать сети.
Вы можете установить ссылку на библиотеку Scripting.Runtime, а затем использовать FileSystemObject. Он имеет метод DeleteFile и метод FileExists.
См. статью MSDN здесь.
2 строки кода в VBA..
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(strPath) Then FSO.DeleteFile ("" & strPath & "")