Страницы: 1
RSS
Ошибка команды MkDir, Выдает ошибку на MkDir
 

При запуске сразу подчеркивает MkDir как "Wrong number of argument or invalid property assignment"

Переписывал уже двадцать раз в разных вариациях. Все равно MkDir подчеркивает ошибкой....
Помогите пожалуйста уважаемые форумчане.

Код
Sub CreateFolderFromCell()
    Dim folderName As String
    
    ' Получаем значение из активной ячейки A1 текущего листа
    folderName = ActiveSheet.Range("A1").Value

    If Len(folderName) > 0 Then
        On Error Resume Next
        
        ' Пробуем создать папку с данным именем
        MkDir ThisWorkbook.Path & "\" & folderName
        
        If Err.Number <> 0 Then
            MsgBox "Ошибка при создании папки: " & Err.Description
        Else
            MsgBox "Папка успешно создана!"
        End If
    Else
        MsgBox "Название папки не введено."
    End If
End Sub
 
Александр ///, Добрый день.
Ну пока никто не знает что там у Вас "на земле"...
А вообще удобнее использовать MakeSureDirectoryPathExists
А если в пути есть диакритика - тогда SHCreateDirectoryExW
 
Простая же команда....
Перемещал файл в корневик С, в корневик D...

Вытягивал код из разный нейронок....
ничего не пойму...

Код
Sub CreateFolderInCurrentDirectory12()

    Dim folderName As String
    Dim fullPath As String
    
    ' Получаем имя папки из активной ячейки
    folderName = ActiveCell.Value
    
    ' Проверка на пустое значение
    If Trim(folderName) = "" Then
        MsgBox "Выделите ячейку с именем папки", vbExclamation
        Exit Sub
    End If
    
    ' Удаляем недопустимые символы в имени папки
    folderName = CleanFileName(folderName)
    
    ' Создаем путь в той же папке, где находится файл Excel
    fullPath = ThisWorkbook.path & "\" & folderName
    
    ' Проверяем, существует ли уже такая папка
    If Dir(fullPath, vbDirectory) = "" Then
        MkDir fullPath
        MsgBox "Папка создана: " & fullPath, vbInformation
    Else
        MsgBox "Папка уже существует!", vbExclamation
    End If
    
End Sub
 
Цитата
Александр /// написал:
Перемещал файл в корневик С,
Что-то я очень сомневаюсь в этом из-за прав доступа к корневую директорию диска C. Возможно простым Copy - Paste вы делали это, но скриптом врядли вам это удастся.
 
Цитата
написал:
А вообще удобнее использовать MakeSureDirectoryPathExists
Пробую, но что-то опять идет не так...
Перенес файл с макросом в папку D:\LAPTOP\OneDrive\Документы\Vba

Код
Sub CreateFolderFromCel3()

    Dim folderPath As String
    Dim cellValue As String
    
    ' Получаем значение из ячейки B4
    cellValue = ThisWorkbook.Range("B4").Value
    
    ' Проверяем, что ячейка не пустая
    If Trim(cellValue) = "" Then
        MsgBox "Ячейка пустая!", vbExclamation
        Exit Sub
    End If
    
    ' Формируем полный путь (например, на рабочем столе)
    folderPath = Environ("USERPROFILE") & "\Desktop\" & cellValue & "\"
    
    ' Создаем папку
    If MakeSureDirectoryPathExists(folderPath) Then
        MsgBox "Папка успешно создана: " & folderPath, vbInformation
    Else
        MsgBox "Ошибка при создании папки", vbCritical
    End If
    
End Sub
 
Цитата
написал:
Что-то я очень сомневаюсь в этом из-за прав доступа к корневую директорию диска C. Возможно простым Copy - Paste вы делали это, но скриптом врядли вам это удастся.

Т.е. у меня где-то в Винде стоит запрет на создание папок с помощью макроса?
Подскажите, а есть рецепт как с этим бороться?
 
Александр ///, пример использования ИИ писал? ))
Вот так используется:
Код
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long
Sub bb()
    Const ROOT = "d:\"
    Dim c
    For Each c In Range("A1", Cells(Rows.Count, 1).End(xlUp)).Cells
         MakeSureDirectoryPathExists ROOT & c & "\"
    Next
End Sub
 
Цитата
написал:
Александр /// , пример использования ИИ писал? ))
Фигассе у вас талант видеть сквозь компьютер....  :D  :D  :D .
Я уже всеми способами пользуюсь, вот дошел до ИИ  :D  :D .
Да это я в Дипсике задавал запрос
 
Ну может быть и так можно, я не проверял, но декларировать использование API нужно, а Вы не показали.
 
Цитата
написал:
Александр /// , пример использования ИИ писал? ))
Спасибо большое, но я к сожалению этими конструкциями не умею пользоваться.
Примитивные макросы это пока максимум, что я могу  
 
Цитата
написал:
Вот так используется:
У меня этот код даже вставляется криво:
 
Александр ///, Private Declare первой строкой модуля пишите
P.S. вот проверил, отработало:

Изменено: Hugo - 09.01.2026 21:53:46
 
Цитата
написал:
Александр /// , Private Declare первой строкой модуля пишитеP.S. вот проверил, отработало:
Спасибо большое.
Вот у себя сделал вот так.
Заработало! Делюсь решением:
Ещё раз спасибо!
Код
Sub CreateFolderFromCel5()

    Dim folderPath As String
    Dim cellValue As String
    
    ' Получаем значение из ячейки B4
     cellValue = ThisWorkbook.ActiveSheet.Range("B4").Value
    
    ' Проверяем, что ячейка не пустая
    'If Trim(cellValue) = "" Then
        'MsgBox "Ячейка пустая!", vbExclamation
        'Exit Sub
    'End If
    
    ' Формируем полный путь (например, на рабочем столе)
    folderPath = "D:\L???\???\???\???\???\??????\" & cellValue & "\"
    
    ' Создаем папку
    If MakeSureDirectoryPathExists(folderPath) Then
        MsgBox "Папка успешно создана: " & folderPath, vbInformation
    Else
        MsgBox "Ошибка при создании папки", vbCritical
    End If
    
End Sub
 
Для MakeSureDirectoryPathExists также нужно учесть 64-битный VBA.
Код
Option Explicit
#If VBA7 Then
Private Declare PtrSafe Function MakeSureDirectoryPathExists _
        Lib "imagehlp.dll" (ByVal lpPath As String) As Long
#Else
Private Declare Function MakeSureDirectoryPathExists _
        Lib "imagehlp.dll" (ByVal lpPath As String) As Long
#End If
 
Обсуждалось здесь.

P.S. Как справедливо заметил выше уважаемый Hugo (и это есть в документации), архаичная функция MakeSureDirectoryPathExists не поддерживает юникод, поэтому надо использовать SHCreateDirectoryExW.
Изменено: sokol92 - 11.01.2026 17:00:01
Владимир
Страницы: 1
Читают тему
Наверх