Удаление файла в VBA

Используя VBA, как я могу:

  1. проверьте, существует ли файл, и если да,
  2. удали это?

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: Отметьте этот ответ как вики сообщества, чтобы любой мог его модифицировать, если это необходимо.

Альтернативный способ кодирования ответа Бретцкого, с которым я в целом согласен, может быть

 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 & "") 
  • Как я могу получить количество строк в файле эффективным способом?
  • Как создать пустой текстовый файл из пакетного файла?
  • Автоматическое удаление файлов / папок
  • Как проверить, существует ли файл?
  • Чтение и запись двоичного файла
  • В C # проверьте, что имя файла * возможно * действительное (не то, что оно существует)
  • Java NIO FileChannel и производительность и полезность FileOutputstream
  • Запись данных в CSV-файл в C #
  • Скачать файл с помощью libcurl в C / C ++
  • Google Chrome - отключен доступ к файлам для файлов Chrome для бета-версии 8
  • Запись в начале текстового файла Java
  • Interesting Posts
    Давайте будем гением компьютера.