Удаление файлов по списку
Добрый ночи, подскажите что делаю не правильно, есть два макроса, один загружает список всех файлов из подкаталога, записывает в диапазон B путь к файлу, далее я в диапазоне F проставляю удалять данный файл или нет (ДА или НЕТ) запускаю второй макрос который должен пробежаться по диапазону F и если там стоит ДА обратиться к файлу по заданому пути в диапазоне B и собственно удалить его, вот собственно со вторым у меня проблемы, подскажите пожалуйста
1 2 3 4 5 6 7 8 9 10 11 12
Sub Delete_File2() Dim objFSO As Object, objFile As Object Dim sFileName As String Dim s As String For Each Cell In Range("F2:F100") If Cell = "ДА" Then s = Cell.Offset(0, -4).Value sFileName = s Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.GetFile(sFileName) objFile.Delete Next End Sub
Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Поиск файлов по списку
Добрый день всем, в процессе работы столкнулся с проблемой выборки большого кол-ва файлов по именам.
Переименование папок/файлов по списку
Добрый день уважаемые гуру VBA! Нашел старый макрос, которым когда-то пользовался на работе и.

Перемещение файлов из одной папки по разным по списку
Есть Папка в которой лежат файлы. Есть ексель список в котором есть имена имена файлов и путь для.

Нужно создать документы exel по определённому списку файлов
Доброе время суток нужно что бы макрос создал 109 документов exel с определённым названием и менял.

Отбор файлов по списку и вывод на печать
Помогите автоматизировать задачу Есть список фрагментов названий файлов (колонка в Excel), по.
61 / 60 / 16
Регистрация: 13.02.2017
Сообщений: 172
Kill sFileName
Файл удаляется этой строчкой
Добавлено через 1 минуту
1 2 3 4 5 6 7 8 9 10
Sub Delete_File2() Dim objFSO As Object, objFile As Object Dim sFileName As String Dim s As String For Each Cell In Range("F2:F100") If Cell = "ДА" Then s = Cell.Offset(0, -4).Value sFileName = s Kill sFileName Next End Sub
26798 / 14477 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782

Сообщение было отмечено snipe как решение
Решение
В Вашем коде попытка удаления происходит независимо от значения sFileName. Содержится ли там «ДА» или иное значение неважно, попытка удалить некий файл все равно производится. Поэтому иногда будет команда удалить уже удаленный файл (когда в переменной не «ДА»), или переменная будет пустая. Чтобы всего этого не было надо команду удаления поместить в блок IF, проверяющий значение
1 2 3 4 5 6 7 8 9 10
Set objFSO = CreateObject("Scripting.FileSystemObject") For Each Cell In Range("F2:F100") If Cell = "ДА" Then sFileName = Cell.Offset(0, -4).Value On Error Resume Next 'Обход в случае отсутствия файла Set objFile = objFSO.GetFile(sFileName) objFile.Delete On Error Goto 0 End If Next
4053 / 1436 / 397
Регистрация: 07.08.2013
Сообщений: 3,582

Сообщение было отмечено Vladimir287 как решение
Решение
1 2 3 4 5 6 7 8
Sub Delete_File2() Dim FSO As Object, s$, Cell as Object Set FSO = CreateObject("Scripting.FileSystemObject") For Each Cell In Range("F2:F100") If Cell = "ДА" Then FSO.DeleteFile Cell.Offset(0, -4).Value Next Set FSO=Nothing End Sub
в Cell.Offset(0, -4).Value должен содержаться полный путь к файлу с его именем
если без FSO то так
1 2 3 4 5 6
Sub Delete_File2() Dim Cell as Object For Each Cell In Range("F2:F100") If Cell = "ДА" Then Kill Cell.Offset(0, -4).Value Next End Sub
Зачем эти лишние телодвижения
s = Cell.Offset(0, -4).Value
sFileName = s
и теперь к обоим Vladimir287 и smeckoi77
смотрите что вы творите
если в ячейке да то некой переменной присваиваем путь
причем условие прописано в одну строку — т.е. если условие выполнится или не выполнится в любом случае будет в обработку взята следующая строка
1. если условие было ложное то путь будет равен «»
2. если значение пути уже ранее было установлено и при ложном условии будет повторная попытка удалить файл
тот же вопрос — зачем лишние телодвижения и провокации на ошибку?
Добавлено через 34 секунды
апаздал )))))
Как удалить файлы из директории с помощью VBA

Доброй ночи всем. Ищу помощи уже третий день.
Есть макрос в экселе который запускает ворд файлы находящиеся с ним в папке и выгружает инфу. Нужно сделать так, что бы потом все отработанные файлы удалялись. Мне уже кажется что это не возможно так как нашел я лишь одну команду за 3 дня. Kill. и ту преминить не получается((
Буду благодарен, если кто то сможет помочь.
Private Sub йцу 1 ( )
Dim i %, j %, k %, LastRow &, s$ , MyPath$ , MyFileName$ , MyFullName$ , Arr , WA As Object , oMyDoc As Object
LastRow = Cells ( Rows . Count , «C» ) . End ( xlUp ) . Row
Arr = Range ( «C1:C» & LastRow ) . Value ‘ Массив с номерами заказов
MyPath = ActiveWorkbook.Path & «» ‘ Файлы word ищутся в той же папке , где лежит заполняемый файл Excel
Set WA = CreateObject ( «Word.Application» )
WA . Visible = True
For i = 3 To UBound ( Arr )
Arr ( i , 1 ) = Trim ( Arr ( i , 1 ) )
Arr ( i , 1 ) = Replace ( Arr ( i , 1 ) , «/» , «?» )
MyFileName = Dir ( MyPath & Arr ( i , 1 ) & «.doc*» )
Do Until MyFileName = «»
MyFullName = MyPath & MyFileName
Set oMyDoc = WA . Documents . Open ( MyFullName )
For j = 1 To 50 : DoEvents : Next
For j = 1 To oMyDoc . Tables ( 1 ) . Columns . Count
s = oMyDoc . Tables ( 1 ) . cell ( 1 , j ) . Range . Text
s = Replace ( s , Chr ( 7 ) , «» ) ‘Удаление символа конца ячейки Word
Cells(i, j + 4) = s
Next j
oMyDoc.Close 0
MyFileName = Dir
Loop
Next i
WA.Quit False
Set oMyDoc = Nothing: Set WA = Nothing
Как в vba excel удалить файл

Данная книга предназначена для пользователей Microsoft Excel и содержит описание приемов и методов работы, которые из-за своей специфичности недостаточно представлены (либо вообще не представлены) в пользовательской, справочной и иной соответствующей документации. Изучение приведенных в книге примеров позволит читателю открыть для себя не известные ранее возможности Excel. Предлагаемый материал легко усваивается благодаря тому, что излагается доступным и понятным языком.
Книги автора: Excel. Трюки и эффекты HTML: Популярный самоучитель
Книга: Excel. Трюки и эффекты
Автоматизация удаления файлов
Скрыть рекламу в статье
Разделы на этой странице:
- Листинг 3.49. Удаление файла
- Листинг 3.50. Удаление группы файлов
Автоматизация удаления файлов
Используя средства VBA, можно удалять как отдельные файлы, так и группы файлов в соответствии с заданными параметрами.
Чтобы удалить отдельный файл, можно воспользоваться следующим макросом (листинг 3.49).
Листинг 3.49. Удаление файла
В результате выполнения данного макроса будет удален файл primer.xls, расположенный по адресу С: Документы.
Для удаления группы файлов с определенным расширением можно использовать следующий макрос (листинг 3.50).
Листинг 3.50. Удаление группы файлов
‘ Удаление всех файлов с расширением XLS из заданной папки
Kill «C:Документы» & «*.xls»
После выполнения этого макроса из папки Документы на диске С: будут удалены все файлы, имеющие расширение XLS.
Как в vba excel удалить файл
Добрый день, форумчане!
Может кто подсказать, как можно удалить файл макросом? Суть следующая, сначала макрос переносит из архива на ресурс файл, затем с файлом занимается также макрос и потом необходимо его удалить. При попытке удалить через Kill и FSO,FileDelete появляется Debug, что невозможно удалить. А это все потому, что при переносе запускается WINRAR и файл получается им занят.
Вот и вопрос можно как-то жестко его жестко снести?
Сообщений: 22111 Регистрация: 28.12.2016
Excel 2013, 2016
20.03.2021 08:45:55
| Цитата |
|---|
| nor написал: А это все потому, что при переносе запускается WINRAR и файл получается им занят. |
вы сами ответили на свой вопрос. Если файл занят, то ничем его не удалить. Только вот вопрос, почему он занят? Если он был извлечен, то RAR не должен его держать.
По вопросам из тем форума, личку не читаю.
Пользователь
Сообщений: 81 Регистрация: 11.09.2016
20.03.2021 08:51:29
БМВ, и я так думал, что RaR после работы должен отцепиться от него, а нет. Приходится через Диспетчер задач снимать процесс с WINRAR.EXE и потом можно делитнуть файл
Сообщений: 22111 Регистрация: 28.12.2016
Excel 2013, 2016
20.03.2021 09:15:38
значит некорректно извлекаете
По вопросам из тем форума, личку не читаю.
Пользователь
Сообщений: 11891 Регистрация: 22.12.2012
Excel 2016, 365
20.03.2021 09:17:23
Доброе время суток.
А зачем использовать WinRar, если там же есть unrar — консольное приложение только для извлечения файлов?
unrar e "d:\sourceFilePath\sourceFile.rar" "d:\pathToExtract\"
Сообщений: 22111 Регистрация: 28.12.2016
Excel 2013, 2016
20.03.2021 09:41:48
Андрей VG, Андрей, утро доброе. Так у WinRar те же консольные команды есть. Так что это не так важно.
По вопросам из тем форума, личку не читаю.
Пользователь
Сообщений: 11891 Регистрация: 22.12.2012
Excel 2016, 365
20.03.2021 10:03:10
| Цитата |
|---|
| БМВ написал: у WinRar те же консольные команды есть |
Привет, Михаил.
Знаю. Ну, мало — проблемы и ключ может какой-лишний в собачен. А тут всё же меньше шансов начудить.
Пользователь
Сообщений: 81 Регистрация: 11.09.2016
20.03.2021 10:24:14
| Цитата |
|---|
| БМВ написал: значит некорректно извлекаете |
я извлекаю командой Е (извлечь файл из архива) и использую 2 ключа -о+ (перезапись) и -inul (не выводить ошибку)
получается = путьRar & «E -o+ -inul»
Сообщений: 22111 Регистрация: 28.12.2016
Excel 2013, 2016
20.03.2021 11:02:35
Что происходит если руками это запустить? Есть ощущение что ожидает чего то прлграмма.
По вопросам из тем форума, личку не читаю.
Пользователь
Сообщений: 81 Регистрация: 11.09.2016
20.03.2021 12:58:43
Да не, процедура завершается, я в конце даю ожидания, чтобы файл отразился на ресурсе (Application.Wait (3 секунды)) и все
| Цитата |
|---|
| Андрей VG написал: есть unrar — консольное приложение только для извлечения файлов? |
Не могли подсказать как использовать , на сколько я понимаю это Shell или нет? не встречал такого подхода ранее.
Сообщений: 22111 Регистрация: 28.12.2016
Excel 2013, 2016
20.03.2021 14:03:12
| Цитата |
|---|
| nor написал: Application.Wait (3 секунды) |
а кто сказал что этого хватит? используйте Wscript.Shell и run с ожиданием.
По вопросам из тем форума, личку не читаю.
Пользователь
Сообщений: 961 Регистрация: 31.12.2012
20.03.2021 16:04:52
| Цитата |
|---|
| Приходится через Диспетчер задач снимать процесс с WINRAR.EXE |
Завершите макросом
Пользователь
Сообщений: 81 Регистрация: 11.09.2016
20.03.2021 16:32:21
не подскажите как макросом завершить процессс?
Пользователь
Сообщений: 4817 Регистрация: 06.01.2013
20.03.2021 23:42:14
Sub Test2() If TaskKill("notepad.exe") = 0 Then MsgBox "Terminated" Else MsgBox "Failed" End Sub Function TaskKill(sTaskName) TaskKill = CreateObject("WScript.Shell").Run("taskkill /f /im " & sTaskName, 0, True) End Function
Sub Test3() Dim oServ As Object Dim cProc As Variant Dim oProc As Object Set oServ = GetObject("winmgmts:") Set cProc = oServ.ExecQuery("Select * from Win32_Process") For Each oProc In cProc 'NOTE: It is 'case sensitive If LCase(oProc.Name) = LCase("notepad.exe") Then 'or EXCEL.EXE oProc.Terminate MsgBox "KILLED!" ' used to display a message for testing pur Exit For End If Next End Sub
P.S. I have tested «Test2» and «Test3» — they work fine. Good luck!