Страницы: 1
RSS
удаление содержимого папки макросом
 
здравствуйте. есть папка, которую надо очистить от возможно имеющихся папок и файлов.так как макросы не пишу, а только пользуюсь ими, то подобрал для выполнения этого действия два макроса.первый макрос удаляет папку со всем содержимым, а второй копирует папку с тем же именем на место удаленной папки. так и пользуюсь.
проблема в том, что запуск вместе первого и второго макроса не дает результат. только отдельно запуск первого макроса, а затем запуск второго макроса.есть ли возможность запустить сразу два макроса? или есть возможность написать макрос очистки без удаления папки?
 
Код
Sub DelCopyFolder()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
    With fso
        .deletefolder "C:\200", 1
        .CopyFolder "C:\Program Files\200", "C:\200"
     End With
End Sub
По вопросам из тем форума, личку не читаю.
 
Как-то так:
Код
Sub KillThemAll()
Dim qq$, qq1$, ww&, FSO, SF, FLD, iFile As Object
    With Application.FileDialog(msoFileDialogFolderPicker)
      .Show
      qq = .SelectedItems(1) & "\"
    End With
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set FLD = FSO.GetFolder(qq)
    ww = FSO.GetFolder(qq).Files.Count
    If FSO.GetFolder(qq).subfolders.Count > 0 Then
      For Each SF In FLD.subfolders
        qq1 = qq & SF.Name
        If FSO.GetFolder(qq1 & "\").subfolders.Count < 1 Then
          If FSO.GetFolder(qq1 & "\").Files.Count < 1 Then RmDir (qq1)
        End If
      Next
    End If
    If ww < 1 Then Exit Sub
    For Each iFile In FLD.Files
      Kill qq & iFile.Name
    Next
End Sub
Удаляет подпапки только при отсутствии в них файлов либо других папок.
 
БМВ, СПАСИБО. то что надо.
Anchoret, спасибо. пригодится.
 
Anchoret, If FSO.GetFolder(qq).subfolders.Count > 0 Then лишнее . For Each SF In FLD.subfolders сам все отработает.
qq1 = qq & SF.Name тоже заменит SF.Path
FSO.GetFolder(qq1 & "\").subfolders.Count тоже SF.subfolders.Count
FSO.GetFolder(qq1 & "\").Files.Count  - SF.Files.Count
По вопросам из тем форума, личку не читаю.
 
БМВ, спасибо за коррективы)
 
Вдруг пригодится - здесь выкладывал коды удаления файлов в папке по условию и простой код удаления всей папки: Как удалить папку или все файлы из папки через VBA
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий Щербаков, а почему через   Shell "cmd /c rd /S/Q """ & sFolder & """" , а не FileScripting?   Просто тут подвох есть, на сколько я помню Shell  в отличии от собрата управляемого WshShell, не ждет окончания выполнения, ну и результат непонятен, толь удалили , толь нет.  
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
а почему через   Shell
для простоты :) Это встроенная в VBA команда, которая в том числе работает и на MAC. WshShell только на Windows. Да и приведенный пример является лишь примером и не претендует на универсальный. Но Вы правы - учту и дополню нюансы.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Offtop
Цитата
Дмитрий Щербаков написал:
и на MAC
ну тут cmd /c rd /S/Q тоже бессильна   ;) .
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх