mail mail

Создание папок с подпапками макросом VBA

Как известно, VBA-функция MkDir может создать только папку в существующем каталоге (папке).
 
Например, код MkDir "C:\Папка\" отработает корректно в любом случае (создаст указанную папку),
а код MkDir "C:\Папка\Подпапка\Каталог\" выдаст ошибку Run-time error '76': Path not found
(потому что невозможно создать каталог Подпапка в несуществующем ещё каталоге Папка)
 
Можно, конечно, использовать несколько функций MkDir подряд - но это усложняет код.
 
Самый простой способ решения проблемы - использование WinAPI-функции SHCreateDirectoryEx, которая может создать все нужные папки и подпапки за один запуск.

Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" _
                                     (ByVal hwnd As Long, ByVal pszPath As String, _
                                      ByVal psa As Any) As Long


Sub CreateFolderWithSubfolders(ByVal ПутьСоздаваемойПапки$)
    ' функция получает в качестве параметра путь к папке
   ' если такой папки ещё нет - она создаётся
   ' может создаваться сразу несколько подпапок
   If Len(Dir(ПутьСоздаваемойПапки$, vbDirectory)) = 0 Then    ' если папка отсутствует
       SHCreateDirectoryEx Application.hwnd, ПутьСоздаваемойПапки$, ByVal 0&    ' создаём путь
   End If
End Sub

Пример использования функции SHCreateDirectoryEx:

Sub ПримерИспользованияCreateFolderWithSubfolders()
    ' этот макрос создаст на диске C папку "Создаваемая папка",
   ' в ней - подпапку "Подпапка", а в последней - подпапку 1234
   Путь = "C:\Создаваемая папка\Подпапка\1234\"
   
    CreateFolderWithSubfolders Путь
End Sub

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

спасибо, помогли!

Отлично работает

Где найти SHCreateDirectoryEx?

Добавил код функции SHCreateDirectoryEx в текст статьи.

Где найти SHCreateDirectoryEx? При попытке выполнения указывает "sub or function not defined"

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
5 + 10 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.