Макрос excel удаление папок

Хитрости »

28 Июль 2017              20508 просмотров


Предположим, что ежедневно во временную папку поступают файлы отчетов от филиалов. Они могут собираться из почты кодом вроде такого: Сохранить вложения из Outlook в указанную папку или добавляться в папку иными средствами. Далее Вы собираете данные из этих файлов неким кодом(вроде этого — Как собрать данные с нескольких листов или книг?). Но с каждым днем файлов все больше и больше и приходится заходить в папку и руками чистить её от лишних файлов, чтобы при сборе данных не приходилось каждый раз искать и отбирать только новые файлы.
Если надо удалять только конкретные файлы(например только файлы Excel, содержащие в имени слово «отчет»), то можно использовать такой код:

Sub Remove_AllFilesFromFolder()
    Dim sFolder As String, sFiles As String
    'диалог запроса выбора папки с файлами
    'подробнее про диалоги выбора папки или файла:
    '       http://www.excel-vba.ru/chto-umeet-excel/dialogovoe-okno-vybora-fajlovpapki/
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    'отбирать только файлы Excel, содержащие в имени слово "отчет"
    sFiles = Dir(sFolder & "*отчет*.xls*")
    'цикл по всем файлам в папке
    On Error Resume Next
    Do While sFiles <> ""
        'удаляем файл
        Kill sFolder & sFiles
        If Err.Number = 70 Then
            MsgBox "Невозможно удалить файл '" & sFiles & "'. Возможно файл открыт в другой программе или нет прав на удаление", vbCritical, "www.excel-vba.ru"
            Err.Clear
        End If
        'на всякий случай передаем управление системе,
        'чтобы дождаться удаления
        DoEvents
        'получаем имя следующего файла в папке
        sFiles = Dir
    Loop
End Sub

Чтобы удалять полностью все файлы в папке(а не только файлы Excel), а саму папку оставить, то строку sFiles = Dir(sFolder & «*отчет*.xls*») надо записать так: sFiles = Dir(sFolder & «*»)

Если необходимо удалять файлы по дате создания/изменения(например, только файлы, созданные раньше 01.03.2017), то можно использовать такой код:

Sub Remove_FilesFromFolder_AfterDate()
    Dim sFolder As String, sFiles As String
    Dim dd As Date, dKill As Date
 
    'задаем дату. Если файл был создан/изменен до этой даты - он будет удален
    dKill = CDate("01.03.2017") 'можно задать проще: dKill = #3/1/2017#
    'диалог запроса выбора папки с файлами
    'подробнее про диалоги выбора папки или файла:
    '       http://www.excel-vba.ru/chto-umeet-excel/dialogovoe-okno-vybora-fajlovpapki/
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    sFiles = Dir(sFolder & "*")
    'цикл по всем файлам в папке
    On Error Resume Next
    Do While sFiles <> ""
        'получаем дату создания или изменения файла
        dd = FileDateTime(sFolder & sFiles)
        'если дата файла меньше заданной для удаления(был создан раньше)
        If dd < dKill Then
            'удаляем файл
            Kill sFolder & sFiles
            If Err.Number = 70 Then
                MsgBox "Невозможно удалить файл '" & sFiles & "'. Возможно файл открыт в другой программе или нет прав на удаление", vbCritical, "www.excel-vba.ru"
                Err.Clear
            End If
            'на всякий случай передаем управление системе,
            'чтобы дождаться удаления
            DoEvents
        End If
        'получаем имя следующего файла в папке
        sFiles = Dir
    Loop
End Sub

Если необходимо всегда удалять файлы, дата создания которых раньше текущей, то строку dKill = CDate(«01.03.2017») нужно заменить на такую: dKill = Date. Если удалить надо файлы недельной давности, то: dKill = Date-7


Если же необходимо удалить папку полностью, а не только файлы в ней, то лучше использовать такой код:

Sub RemoveFolderWithContent()
    Dim sFolder As String, sFiles As String
    'диалог запроса выбора папки на удаление
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    'путь к папке можно задать статично, если он заранее известен и не изменяется
    '    sFolder = "C:tempЕжедневные отчеты10072017" 'путь к папке, которую надо удалить
    Shell "cmd /c rd /S/Q """ & sFolder & """"
End Sub

Этот код удалить папку вместе со всеми файлами буквально за секунду.
Вообще в VBA есть специальная команда для удаления директорий(папок) RmDir. Но она способна удалить только пустую папку, поэтому редко когда можно найти её практическое применение. Если в файле есть хоть один файл то команда RmDir выдаст ошибку ’75’ — File/Path access error.

Так же см.:
Как средствами VBA переименовать/переместить/скопировать файл
Просмотреть все файлы в папке
Как собрать данные с нескольких листов или книг?
Как удалить книгу из самой себя


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Создание, копирование, перемещение и удаление папок в VBA Excel методами объекта FileSystemObject. Удаление папок с помощью оператора RmDir.

Создание папки (метод CreateFolder)

CreateFolder – это метод объекта FileSystemObject, предназначенный для создания новой папки.

Синтаксис

object.CreateFolder (foldername)

Параметр foldername можно в скобки не заключать.

Параметры

Параметр Описание
object Переменная, возвращающая объект FileSystemObject.
foldername Строковое выражение, указывающее папку, которую необходимо создать.

Если папка, указанная параметром foldername уже существует, произойдет ошибка.

Копирование папки (метод CopyFolder)

CopyFolder – это метод объекта FileSystemObject, предназначенный для копирования папки из одного расположения в другое.

Синтаксис

object.CopyFolder source, destination, [overwrite]

Параметры

Параметр Описание
object Переменная, возвращающая объект FileSystemObject.
source Строковое выражение, указывающее папку, которую требуется скопировать в другое расположение. Для копирования нескольких папок используются подстановочные знаки.
destination Строковое выражение, задающее конечное расположение, куда требуется скопировать папку (папки) со всеми вложениями из элемента source. Подстановочные знаки не допускаются.
overwrite Логическое значение, которое указывает, требуется ли перезаписывать существующие папки и файлы в конечном расположении. True – папки и файлы будут перезаписаны, False – перезапись не выполняется. Необязательный параметр. По умолчанию – True.

Перемещение папки (метод MoveFolder)

MoveFolder – это метод объекта FileSystemObject, предназначенный для перемещения папки из одного расположения в другое.

Синтаксис

object.MoveFolder (source, destination)

Параметры

Параметр Описание
object Переменная, возвращающая объект FileSystemObject.
source Строковое выражение, указывающее папку, которую требуется переместить в другое расположение. Для перемещения нескольких папок используются подстановочные знаки.
destination Строковое выражение, задающее конечное расположение, куда требуется переместить папку (папки) со всеми вложениями из элемента source. Подстановочные знаки не допускаются.

Удаление папки (метод DeleteFolder)

DeleteFolder – это метод объекта FileSystemObject, предназначенный для удаления папки с диска со всем ее содержимым.

Синтаксис

object.DeleteFolder folderspec, [force]

Параметры

Параметр Описание
object Переменная, возвращающая объект FileSystemObject.
folderspec Строковое выражение, указывающее папку, которую следует удалить. Для удаления нескольких папок используются подстановочные знаки.
force Значение типа Boolean: True – удаляются все папки, False (по умолчанию) – не удаляются папки с атрибутом «только для чтения» (необязательный параметр).

Метод DeleteFolder удаляет папки независимо от того, есть ли в них содержимое или нет.

Удаление папки (оператор RmDir)

RmDir – это оператор, предназначенный для удаления пустых папок и каталогов.

Синтаксис

  • path – строковое выражение, определяющее каталог или папку, которую необходимо удалить.

Если удаляемый каталог или папка содержит файлы, произойдет ошибка.

Примеры

Пример 1
Создание папок в VBA Excel с помощью метода CreateFolder:

Sub Primer1()

Dim fso As Object, i As Integer

‘Создаем новый экземпляр FileSystemObject

Set fso = CreateObject(«Scripting.FileSystemObject»)

‘Создаем несколько новых папок

    With fso

        .CreateFolder («C:Папка главная»)

            For i = 1 To 5

                .CreateFolder «C:Папка главнаяПапка « & i

            Next

    End With

End Sub

В результате работы этого кода на диске C будет создана Папка главная и в ней еще 5 папок, которые будем использовать для копирования, перемещения и удаления.

Пример 2
Копирование папок в VBA Excel с помощью метода CopyFolder:

Sub Primer2()

Dim fso As Object

Set fso = CreateObject(«Scripting.FileSystemObject»)

‘Копируем папки

    With fso

        .CopyFolder «C:Папка главнаяПапка 2», «C:Папка главнаяПапка 1»

        .CopyFolder «C:Папка главнаяПапка 3«, «C:Папка главнаяПапка 1Папка 2«

    End With

End Sub

Код этого примера копирует папки следующим образом: Папка 2 в Папка 1, а Папка 3 в расположение Папка 1Папка 2.

Пример 3
Перемещение папок в VBA Excel с помощью метода MoveFolder:

Sub Primer3()

Dim fso As Object

Set fso = CreateObject(«Scripting.FileSystemObject»)

‘Перемещаем папки

    With fso

        .MoveFolder «C:Папка главнаяПапка 3», «C:Папка главнаяПапка 2»

        .MoveFolder «C:Папка главнаяПапка 4«, «C:Папка главнаяПапка 2«

        .MoveFolder «C:Папка главнаяПапка 5», «C:Папка главнаяПапка 2Папка 4«

    End With

End Sub

Пример 4
Удаление папок в VBA Excel с помощью метода DeleteFolder:

Sub Primer4()

Dim fso As Object

Set fso = CreateObject(«Scripting.FileSystemObject»)

‘Удаляем папки с содержимым

    With fso

        .DeleteFolder «C:Папка главнаяПапка 1»

        .DeleteFolder «C:Папка главнаяПапка 2»

    End With

End Sub

Пример 5
Удаление пустой папки в VBA Excel с помощью оператора RmDir:

Sub Primer5()

‘Удаляем пустую папку

    RmDir «C:Папка главная»

End Sub

Содержание

  1. Метод DeleteFolder
  2. Синтаксис
  3. Замечания
  4. См. также
  5. Поддержка и обратная связь
  6. Как удалить папку или все файлы из папки через VBA
  7. Как удалить папку или все файлы из папки через VBA
  8. Удаление файлов с помощью VBA в Excel
  9. Удаление файлов с помощью VBA в Excel
  10. Объект FileSystemObject
  11. Синтаксис
  12. Примечания
  13. Методы
  14. Свойства
  15. См. также
  16. Поддержка и обратная связь

Метод DeleteFolder

Удаляет указанную папку и ее содержимое.

Синтаксис

object. DeleteFolderfolderspec, [ force ]

Синтаксис метода DeleteFolder содержит следующие элементы:

Part Описание
object Обязательно. Всегда имя объекта FileSystemObject.
folderspec Обязательно. Имя папки, подлежащей удалению. Элемент folderspec может содержать подстановочные знаки в последнем компоненте пути.
force Необязательный параметр. Логическое значение (True, если папки с атрибутом «только для чтения» подлежат удалению; False (используется по умолчанию), если их удаление не требуется).

Замечания

Метод DeleteFolder не различает папки с содержимым и папки, в которых нет. Указанная пака удаляется в любом из этих случаев.

Если совпадения по папкам не найдены, возникает ошибка. Выполнение метода DeleteFolder останавливается при обнаружении первой ошибки. До возникновения ошибки попыток отката или отмены каких-либо изменений не выполняется.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Как удалить папку или все файлы из папки через VBA

Предположим, что ежедневно во временную папку поступают файлы отчетов от филиалов. Они могут собираться из почты кодом вроде такого: Сохранить вложения из Outlook в указанную папку или добавляться в папку иными средствами. Далее Вы собираете данные из этих файлов неким кодом(вроде этого — Как собрать данные с нескольких листов или книг?). Но с каждым днем файлов все больше и больше и приходится заходить в папку и руками чистить её от лишних файлов, чтобы при сборе данных не приходилось каждый раз искать и отбирать только новые файлы.
Если надо удалять только конкретные файлы(например только файлы Excel, содержащие в имени слово «отчет»), то можно использовать такой код:

Sub Remove_AllFilesFromFolder() Dim sFolder As String, sFiles As String ‘диалог запроса выбора папки с файлами ‘подробнее про диалоги выбора папки или файла: ‘ http://www.excel-vba.ru/chto-umeet-excel/dialogovoe-okno-vybora-fajlovpapki/ With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, «», Application.PathSeparator) ‘отбирать только файлы Excel, содержащие в имени слово «отчет» sFiles = Dir(sFolder & «*отчет*.xls*») ‘цикл по всем файлам в папке On Error Resume Next Do While sFiles <> «» ‘удаляем файл Kill sFolder & sFiles If Err.Number = 70 Then MsgBox «Невозможно удалить файл ‘» & sFiles & «‘. Возможно файл открыт в другой программе или нет прав на удаление», vbCritical, «www.excel-vba.ru» Err.Clear End If ‘на всякий случай передаем управление системе, ‘чтобы дождаться удаления DoEvents ‘получаем имя следующего файла в папке sFiles = Dir Loop End Sub

Чтобы удалять полностью все файлы в папке(а не только файлы Excel), а саму папку оставить, то строку sFiles = Dir(sFolder & «*отчет*.xls*») надо записать так: sFiles = Dir(sFolder & «*»)

Если необходимо удалять файлы по дате создания/изменения(например, только файлы, созданные раньше 01.03.2017), то можно использовать такой код:

Sub Remove_FilesFromFolder_AfterDate() Dim sFolder As String, sFiles As String Dim dd As Date, dKill As Date ‘задаем дату. Если файл был создан/изменен до этой даты — он будет удален dKill = CDate(«01.03.2017») ‘можно задать проще: dKill = #3/1/2017# ‘диалог запроса выбора папки с файлами ‘подробнее про диалоги выбора папки или файла: ‘ http://www.excel-vba.ru/chto-umeet-excel/dialogovoe-okno-vybora-fajlovpapki/ With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, «», Application.PathSeparator) sFiles = Dir(sFolder & «*») ‘цикл по всем файлам в папке On Error Resume Next Do While sFiles <> «» ‘получаем дату создания или изменения файла dd = FileDateTime(sFolder & sFiles) ‘если дата файла меньше заданной для удаления(был создан раньше) If dd dKill = CDate(«01.03.2017») нужно заменить на такую: dKill = Date . Если удалить надо файлы недельной давности, то: dKill = Date-7

Если же необходимо удалить папку полностью, а не только файлы в ней, то лучше использовать такой код:

Sub RemoveFolderWithContent() Dim sFolder As String, sFiles As String ‘диалог запроса выбора папки на удаление With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, «», Application.PathSeparator) ‘путь к папке можно задать статично, если он заранее известен и не изменяется ‘ sFolder = «C:tempЕжедневные отчеты10072017» ‘путь к папке, которую надо удалить Shell «cmd /c rd /S/Q «»» & sFolder & «»»» End Sub

Этот код удалить папку вместе со всеми файлами буквально за секунду.
Вообще в VBA есть специальная команда для удаления директорий(папок) RmDir . Но она способна удалить только пустую папку, поэтому редко когда можно найти её практическое применение. Если в файле есть хоть один файл то команда RmDir выдаст ошибку ’75’ — File/Path access error .

Статья помогла? Поделись ссылкой с друзьями!

Источник

Как удалить папку или все файлы из папки через VBA

Предположим, что ежедневно во временную папку поступают файлы отчетов от филиалов. Они могут собираться из почты кодом вроде такого: Сохранить вложения из Outlook в указанную папку или добавляться в папку иными средствами. Далее Вы собираете данные из этих файлов неким кодом(вроде этого — Как собрать данные с нескольких листов или книг?). Но с каждым днем файлов все больше и больше и приходится заходить в папку и руками чистить её от лишних файлов, чтобы при сборе данных не приходилось каждый раз искать и отбирать только новые файлы.
Если надо удалять только конкретные файлы(например только файлы Excel, содержащие в имени слово «отчет»), то можно использовать такой код:

Sub Remove_AllFilesFromFolder() Dim sFolder As String, sFiles As String ‘диалог запроса выбора папки с файлами ‘подробнее про диалоги выбора папки или файла: ‘ http://www.excel-vba.ru/chto-umeet-excel/dialogovoe-okno-vybora-fajlovpapki/ With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, «», Application.PathSeparator) ‘отбирать только файлы Excel, содержащие в имени слово «отчет» sFiles = Dir(sFolder & «*отчет*.xls*») ‘цикл по всем файлам в папке On Error Resume Next Do While sFiles <> «» ‘удаляем файл Kill sFolder & sFiles If Err.Number = 70 Then MsgBox «Невозможно удалить файл ‘» & sFiles & «‘. Возможно файл открыт в другой программе или нет прав на удаление», vbCritical, «www.excel-vba.ru» Err.Clear End If ‘на всякий случай передаем управление системе, ‘чтобы дождаться удаления DoEvents ‘получаем имя следующего файла в папке sFiles = Dir Loop End Sub

Чтобы удалять полностью все файлы в папке(а не только файлы Excel), а саму папку оставить, то строку sFiles = Dir(sFolder & «*отчет*.xls*») надо записать так: sFiles = Dir(sFolder & «*»)

Если необходимо удалять файлы по дате создания/изменения(например, только файлы, созданные раньше 01.03.2017), то можно использовать такой код:

Sub Remove_FilesFromFolder_AfterDate() Dim sFolder As String, sFiles As String Dim dd As Date, dKill As Date ‘задаем дату. Если файл был создан/изменен до этой даты — он будет удален dKill = CDate(«01.03.2017») ‘можно задать проще: dKill = #3/1/2017# ‘диалог запроса выбора папки с файлами ‘подробнее про диалоги выбора папки или файла: ‘ http://www.excel-vba.ru/chto-umeet-excel/dialogovoe-okno-vybora-fajlovpapki/ With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, «», Application.PathSeparator) sFiles = Dir(sFolder & «*») ‘цикл по всем файлам в папке On Error Resume Next Do While sFiles <> «» ‘получаем дату создания или изменения файла dd = FileDateTime(sFolder & sFiles) ‘если дата файла меньше заданной для удаления(был создан раньше) If dd dKill = CDate(«01.03.2017») нужно заменить на такую: dKill = Date . Если удалить надо файлы недельной давности, то: dKill = Date-7

Если же необходимо удалить папку полностью, а не только файлы в ней, то лучше использовать такой код:

Sub RemoveFolderWithContent() Dim sFolder As String, sFiles As String ‘диалог запроса выбора папки на удаление With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, «», Application.PathSeparator) ‘путь к папке можно задать статично, если он заранее известен и не изменяется ‘ sFolder = «C:tempЕжедневные отчеты10072017» ‘путь к папке, которую надо удалить Shell «cmd /c rd /S/Q «»» & sFolder & «»»» End Sub

Этот код удалить папку вместе со всеми файлами буквально за секунду.
Вообще в VBA есть специальная команда для удаления директорий(папок) RmDir . Но она способна удалить только пустую папку, поэтому редко когда можно найти её практическое применение. Если в файле есть хоть один файл то команда RmDir выдаст ошибку ’75’ — File/Path access error .

Статья помогла? Поделись ссылкой с друзьями!

Источник

Удаление файлов с помощью VBA в Excel

Удаление файлов с помощью VBA в Excel

Добрый день, уважаемые читатели блога! Как водится, сегодня мы поговорим о программе Excel, но в не совсем привычной для нас функции — файловом менеджере. Постараюсь ответить на вопрос — может ли Excel с помощью макросов удалять файлы?

Ответ однозначный — да. Для этого в языке VBA есть специальный оператор — kill. Для нас он и представляет определённый интерес.

Давайте посмотрим как его можно использовать. Имеется папка (в моём примере это C:Для всех), её нужно очистить от файлов с расширением *.xlsx.

Создадим новую книгу и, как обычно, добавим в неё стандартный модуль. Мы рассматривали этот алгоритм в предыдущих статьях.

  • вкладка «Разработчик», кнопка «Visual basic»;
  • вставляем новый модуль и помещаем следующий код макроса.

Sub DF()
‘ Удаление всех файлов из папки с расширением .xlsx
Kill «C:Для всех» & «*.xlsx»
End Sub

Будьте внимательны — макрос не удаляет файлы в «Корзину», а полностью стирает их с жёсткого диска компьютера!

Аналогично сочетанию клавиш Shift+Delete.

Проверим работоспособность нашего кода. Запустим окно выбора макросов комбинацией клавиш Alt+F8 и нажмём «Выполнить».

Результат на лицо — в папке остался только один файл «Изменение листа.xlsm» потому что у него разрешение не совпадает с указанным в макросе.

Также хочется отметить, что привычное сочетание клавиш Ctrl+Z не поможет восстановить файлы.

Необходимая оговорка — макрос можно использовать для всех типов файлов. Для этого необходимо изменить в макросе расширение *.xlsx на нужное для удаления вам.

Источник

Объект FileSystemObject

Предоставляет доступ к файловой системе компьютера.

Синтаксис

Scripting.FileSystemObject

Примечания

Приведенный ниже код иллюстрирует использование объекта FileSystemObject для возврата объекта TextStream, который можно читать, и в который можно записать данные.

  • Функция CreateObject возвращает объект FileSystemObject ( fs ).
  • Метод CreateTextFile создает файл в качестве объекта TextStream ( a ).
  • Метод WriteLine записывает строку текста в созданный текстовый файл.
  • Метод Close опустошает буфер и закрывает файл.

Методы

Метод Описание
BuildPath Добавляет имя в существующий путь.
CopyFile Копирует один или несколько файлов из одного расположения в другое.
CopyFolder Копирует одну или несколько папок из одного расположения в другое.
CreateFolder Создает новую папку.
CreateTextFile Создает текстовый файл и возвращает объект TextStream, который можно использовать для чтения или записи в файл.
DeleteFile Удаляет один или несколько указанных файлов.
DeleteFolder Удаляет одну или несколько указанных папок.
DriveExists Проверяет, существует ли указанный диск.
FileExists Проверяет, существует ли указанный файл.
FolderExists Проверяет, существует ли указанная папка.
GetAbsolutePathName Возвращает полный путь из корневого каталога диска для указанного пути.
GetBaseName Возвращает базовое имя указанного файла или папки.
GetDrive Возвращает объект Drive, соответствующий диску в указанном пути.
GetDriveName Возвращает имя диска указанного пути.
GetExtensionName Возвращает имя расширения файла для последнего компонента в указанном пути.
GetFile Возвращает объект файла для указанного пути.
GetFileName Возвращает имя файла или папки для последнего компонента в указанном пути.
GetFolder Возвращает объект Folder для указанного пути.
GetParentFolderName Возвращает имя родительской папки последнего компонента в указанном пути.
GetSpecialFolder Возвращает путь к некоторым специальным папкам Windows.
GetTempName Возвращает созданный случайным образом временный файл или папку.
Move Перемещает заданный файл или указанную папку из одного места в другое.
MoveFile Перемещает один или несколько файлов из одного места в другое.
MoveFolder Перемещает одну или несколько папок из одного места в другое.
OpenAsTextStream Открывает указанный файл и возвращает объект TextStream, который можно использовать для считывания, записи и дополнения данных в файле.
OpenTextFile Открывает файл и возвращает объект TextStream, который можно использовать для доступа к файлу.
WriteLine Записывает заданную строку и символ новой строки в файл TextStream.

Свойства

Свойство Описание
Drives Возвращает коллекцию всех объектов Drive на компьютере.
Name Устанавливает или возвращает имя указанного файла или заданной папки.
Path Возвращает путь для указанного файла, диска или указанной папки.
Size Для файлов возвращает размер указанного файла в байтах; для папок возвращает размер всех файлов и вложенных папок в байтах.
Type Возвращает сведения о типе файла или папки (например, для файлов с расширением .TXT возвращается «Text Document»).

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

 

gerbera

Пользователь

Сообщений: 42
Регистрация: 02.11.2016

#1

28.07.2017 10:33:15

Добрый день! Подскажите, как удалить папку со всем содержимым. Перепробовала кучу способов, но ни один не работает. Прилагаю макрос, с помощью которого удаляю файлы, а как его переделать под удаление папки не пойму

Код
Sub KillDir()
    Dim sDirName As String
 
    sDirName = "C:Рабочий столПапка для удаления" ' для удаления файла добавляю имя файла
 
    If Dir(sDirName, 16) = "" Then MsgBox "Нет такой папки", vbCritical, "Ошибка": Exit Sub
 
    Kill sDirName
End Sub

.

 

kuklp

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Почитайте справку по RmDir

Я сам — дурнее всякого примера! …

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

gerbera, добрый день) ИМХО в названии темы не хватает «VBA» или «макросом», а то решение кажется донельзя очевидным)))

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Nordheim

Пользователь

Сообщений: 3154
Регистрация: 18.04.2017

#4

28.07.2017 11:02:31

Что-то типа этого!

Код
Sub test()
On Error Resume Next
With Application.FileDialog(msoFileDialogFolderPicker)
    If .Show = -1 Then RmDir (.SelectedItems(1))
End With
End Sub

«Все гениальное просто, а все простое гениально!!!»

 

gerbera

Пользователь

Сообщений: 42
Регистрация: 02.11.2016

Спасибо, но мне нужно прописать адрес конкретной папки как в моем примере.

 

Nordheim

Пользователь

Сообщений: 3154
Регистрация: 18.04.2017

#6

28.07.2017 11:37:28

Так это еще проще

Код
RmDir("C:Рабочий столПапка для удаления")

Изменено: Nordheim28.07.2017 11:38:02

«Все гениальное просто, а все простое гениально!!!»

 

gerbera

Пользователь

Сообщений: 42
Регистрация: 02.11.2016

Так RmDir работает только если папка пустая, а если с содержимым…

 

kuklp

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Как туго-то.. Сначала очищаете папку(kill) потом удаляете. Что еще неясно?

Я сам — дурнее всякого примера! …

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

#9

28.07.2017 11:59:42

Цитата
kuklp написал:
Как туго-то..

Держись, братишка.
:D  

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#10

28.07.2017 12:00:21

Можно и проще:

Код
Dim sPathToRemove As string
sPathToRemove = "C:Папка для удаления"
Shell "cmd /c rd /S/Q """ & sPathToRemove & """"

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

gerbera

Пользователь

Сообщений: 42
Регистрация: 02.11.2016

#11

28.07.2017 12:11:39

The_Prist,  Спасибо, все работает! Очень выручили!

bodeaux

3 / 3 / 0

Регистрация: 20.07.2012

Сообщений: 27

1

Создание и удаление папки

23.07.2012, 14:45. Показов 16222. Ответов 6

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

требуется создать папку Fold в активной директории CurDir, а если папка с таким именем
Уже существует — удалить ее, а затем создать снова

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Function createMainDir() As String
 
  Dim path As String
  path = CurDir + "Fold"
  
  If Not (Dir(path) = "") Then
    RmDir (path)
  End If
  
  MkDir (path)
  createMainDir = path
  
End Function

при первом запуске функция создает нужную папку,
при втором запуске (папка не удалена) функция останавливает работу с ошибкой
Path access error в точке MkDir (path)

почему существующая папка Fold не удаляется?



0



аналитика

здесь больше нет…

3372 / 1670 / 184

Регистрация: 03.02.2010

Сообщений: 1,219

23.07.2012, 15:21

2

Visual Basic
1
Dir(path, vbDirectory) = ""



2



1702 / 189 / 19

Регистрация: 20.11.2011

Сообщений: 281

23.07.2012, 16:02

3

А зачем Вам удалять, потом создавать? Если папка не пуста, ее надо очистить. Иначе до лампочки Ваш RmDir. А в очищенной папке и MkDir не нужен:-)



1



Catstail

Модератор

Эксперт функциональных языков программированияЭксперт Python

34709 / 19230 / 4040

Регистрация: 12.02.2012

Сообщений: 32,197

Записей в блоге: 13

23.07.2012, 19:04

4

Лучший ответ Сообщение было отмечено как решение

Решение

Удалить папку не так-то просто… RmDir удаляет пустые папки. Чтобы удалить непустую папку, нужно сначала удалить ее содержимое. А в содержимом, в свою очередь, могут быть подпапки. Короче — придется обойти и вычистить все подпапки текущей папки.

Другой вариант — использовать FSO:

Visual Basic
1
2
3
Set myFSO=CreateObject("Scripting.FileSystemObject")
Set Fld=myFSO.GetFolder(CurDir & "Fold")
Fld.Delete

папка уничтожится со всем содержимым.



5



Dragokas

Эксперт WindowsАвтор FAQ

17993 / 7619 / 890

Регистрация: 25.12.2011

Сообщений: 11,352

Записей в блоге: 17

24.07.2012, 01:46

5

Еще вариант:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub ReCreate_Dir()
Dim ret&, sPath$
sPath = "e:2 а"
If FolderExists(sPath) Then
  ret = CreateObject("WScript.Shell").Run("cmd /c rd /s /q """ & sPath & """", 0, True)
End If
If Not FolderExists(sPath) Then MkDir sPath
End Sub
 
Public Function FolderExists(ByVal strPathName As String) As Boolean
On Error Resume Next
FolderExists = GetAttr(strPathName) And vbDirectory
End Function

‘какой-то ret неадыкватный: заюзал два раза функцию, чтоб наверняка. Наверно по тому что код возврата идет через CMD, а не RmDir напрямую (когда удаляет все в папке, кроме заблокированных возвращает ret=0).



3



bodeaux

3 / 3 / 0

Регистрация: 20.07.2012

Сообщений: 27

24.07.2012, 08:21

 [ТС]

6

вставил вместо RmDir(path) этот код:

Цитата
Сообщение от Catstail
Посмотреть сообщение

Visual Basic
1
2
3
Set myFSO = CreateObject("Scripting.FileSystemObject")
Set Fld = myFSO.GetFolder(path)
Fld.Delete

ситуация не изменилась — Path access error в точке MkDir (path)

Добавлено через 5 минут
Всем спасибо.

Рабочий код получился такой

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub createDir()
 
  Dim path As String
  path = CurDir + "Fold"
  
  Set fs = CreateObject("Scripting.FileSystemObject")
  
  If fs.folderexists(path) Then
         Call fs.DeleteFolder(path)
  End If
 
  MkDir (path)
  
End Sub



1



Эксперт WindowsАвтор FAQ

17993 / 7619 / 890

Регистрация: 25.12.2011

Сообщений: 11,352

Записей в блоге: 17

24.07.2012, 11:02

7

bodeaux, а если в папке окажутся заблокированные файлы получите error от последней команды. Не забываем о проверках.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

24.07.2012, 11:02

7

Понравилась статья? Поделить с друзьями:
  • Макрос excel типы данных
  • Макрос excel текущая папка
  • Макрос excel считает количество
  • Макрос excel сумма прописью с копейками в excel
  • Макрос excel сумма по строкам