Запутался как правильно прописать MkDir ThisWorkbook.Path
В общем нужно создать папку и подпапки в тойже директории где лежит файл при этом 1.Создать общую папку "Сотрудники" в этой папке 2.Создать подпапки с именами сотрудников (по имени листов сотрудников) - причем листы сотрудников будут дополнятся потом листами новых сотрудников 3.Отдельная подпапка "Архив" рядом
Файл мой прилагаю - частично только папку Сотрудники сделал-подпапки не получается
Sub Создать_папки()
On Error Resume Next
' название папки,
Const folder$ = "Сотрудники"
' создаём папку для файла, если её ещё нет
MkDir ThisWorkbook.Path & "\" & folder$
' создаем подпапки для каждого листа
For Each sh In ThisWorkbook.Worksheets
MkDir ThisWorkbook.Path & "\" & folder$ & "\" & sh.Name
Next sh
' создаём папку АРХИВ
MkDir ThisWorkbook.Path & "\" & "Архив"
End Sub
Declare Function MakeSureDirectoryPathExists Lib "Imagehlp.dll" (ByVal strPath As String) As Long
'проверяет наличие папки с указанным путем и создает, если ее нет
'возвращает 0, если папку создать не удалось и не-0, если ОК
Sub Создать_папки()
Dim i&, fldr$
fldr = ThisWorkbook.Path & "\" & "Сотрудники\"
' создаём папку для файла, если её ещё нет
If MakeSureDirectoryPathExists(fldr) = 0 Then GoTo err
If MakeSureDirectoryPathExists(fldr & "Архив\") = 0 Then GoTo err
For i = 2 To Sheets.Count - 2
If MakeSureDirectoryPathExists(fldr & Sheets(i).Name & "\") = 0 Then GoTo err
Next
Exit Sub
err: MsgBox "ошибка"
End Sub
Сделал так - исключил из создания папок листы не относящиеся к сотрудникам Но при этом вылез другой косяк - папка Архив не создается - что не так сделал ?
Код
Sub Создать_папки()
On Error Resume Next
' название папки,
Const folder$ = "Сотрудники"
' создаём папку для файла, если её ещё нет
MkDir ThisWorkbook.Path & "\" & folder$
' создаём папку АРХИВ
MkDir ThisWorkbook.Path & "\" & "Архив"
' создаем подпапки для каждого листа
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> "Расписание" And sh.Name <> "Норма" And sh.Name <> "Общий" Then 'выбираем только листы сотрудников- остальные исключаем
MkDir ThisWorkbook.Path & "\" & folder$ & "\" & sh.Name
End If
Next sh
End Sub
мой косяк был - неправильно по заданию сделал - папка Архив вложена в папку Сотрудники рядом с папками сотрудников
Остался один вопрос - а почему в макросе уважаемого Казанский VBA ругается на функцию Declare Function MakeSureDirectoryPathExists Lib "Imagehlp.dll" (ByVal strPath As String) As Long красным ? у меня Office2010 x64 - может из-за этого ?
Код
Sub Создать_папки1()
On Error Resume Next
' название папки,
Const folder$ = "Сотрудники"
' создаём папку для файла, если её ещё нет
MkDir ThisWorkbook.Path & "\" & folder$
' создаём папку АРХИВ вложена в папку Сотрудники
MkDir ThisWorkbook.Path & "\" & folder$ & "\" & "Архив"
' создаем подпапки для каждого листа
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> "Расписание" And sh.Name <> "Норма" And sh.Name <> "Общий" Then 'выбираем только листы сотрудников- остальные исключаем
MkDir ThisWorkbook.Path & "\" & folder$ & "\" & sh.Name
End If
Next sh
End Sub
Вообще, эту функцию правильнее было бы объявлять так:
Код
#If VBA7 Then ' Office 2010-2013
Declare PtrSafe Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" _
(ByVal hwnd As LongPtr, ByVal pszPath As String, ByVal psa As Any) As LongPtr
#Else ' Office 2003-2007
Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" _
(ByVal hwnd As Long, ByVal pszPath As String, ByVal psa As Any) As Long
#End If
LongPtr вместо Long или LongLong
Но, зачем ето вообще надо? структура папок простейшая, - MkDir тут в самый раз
Игорь пишет: Declare PtrSafe Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" _ (ByVal hwnd As LongPtr, ByVal pszPath As String, ByVal psa As Any) As LongPtr
Ну и причём тут LongPtr? В документации сказано, что функция возвращает int.