Страницы: 1
RSS
Создать новую папку с добавлением к имени номера, Необходимо макросом проанализировать имена существующих папок и создать следующую по порядку номеров папку
 
 Доброго времени суток! Прошу помощи! Помогите написать макрос:
Есть папка по адресу «G:\Департамент\06.2016\ », в ней папки с именами:
«0 Файлы »
«99 Иванов»
«100 Петров »
«101 Сидоров »
«102 Соколов »
«Все »
«Общие »
Есть имя «Орлов». Необходимо макросом создать
следующую по порядку номеров папку «103 Орлов», а если папка «… Орлов» уже есть выдать сообщение:    MsgBox "Папка «Орлов» существует, с номером «…», Вы хотите создать новую папку «103 Орлов»?"

Знаю как создать папку по необходимому адресу, но как проанализировать имена существующих и определить следующий по порядку номер?!
 
Поиск не пробовали...?
Нашёл поиском по "проверить папки":
Проверить папку на наличие файлов
и думаю, что по первым двум ответам в теме можно сообразить ответ на Ваш вопрос.
Вот тут ещё есть то, что может помочь (посты 10 и 11, найдено по "содержимое папки"):
получить список файлов в виде гиперссылки
Изменено: Ренат - 02.06.2016 05:53:20
Успехов. И мне того же. Благодарю. :)
 
Ренат, Благодарю за ответ.
В ваших примерах описывается, как создавать, копировать и т.д. Но там нет ничего как проанализировать имена.
Как определить, что следующая папка должна быть с номером "103" ?!!!
 
смотрим примеры здесь
http://excelvba.ru/code/SubFoldersCollection

и пишем макрос типа такого
Код
Option Compare Text

Sub ВашМакрос()
    On Error Resume Next
    BaseFolder$ = "G:\Департамент\06.2016\"
    Person$ = "Орлов"

    Dim coll As Collection, MaxIndex&, ind&
    ' ищем папку Орлова
    Set coll = SubFoldersCollection(BaseFolder$, "* " & Person$)
    If coll.Count > 0 Then
        MsgBox "Уже есть папки для " & Person$ & " в количестве " & coll.Count & " шт"
        MsgBox "Используйте папку" & vbNewLine & coll(1)
        Exit Sub
    End If

    ' перебираем все элементы коллекции, содержащей пути к папкам
    For Each folder In SubFoldersCollection(BaseFolder$, "*")        ' подпапки с любыми именами
        FolderName = Split(folder, "\")(UBound(Split(folder, "\")) - 1)
        ind& = Val(FolderName)
        If ind& > MaxIndex& Then MaxIndex& = ind&
    Next

    NewFolderName$ = MaxIndex& + 1 & " " & Person$
    MkDir BaseFolder$ & NewFolderName$
    MsgBox "Создана новая папка: " & vbNewLine & BaseFolder$ & NewFolderName$

End Sub

Function SubFoldersCollection(ByVal FolderPath$, Optional ByVal Mask$ = "*") As Collection
    Set SubFoldersCollection = New Collection        ' создаём пустую коллекцию
    Set FSO = CreateObject("Scripting.FileSystemObject")        ' создаём экземпляр FileSystemObject
    If Right(FolderPath$, 1) <> "\" Then FolderPath$ = FolderPath$ & "\"
    On Error Resume Next: Set curfold = FSO.GetFolder(FolderPath$)
    For Each folder In curfold.SubFolders        ' перебираем все подпапки в папке FolderPath
        If folder.Path Like FolderPath$ & Mask$ Then SubFoldersCollection.Add folder.Path & "\"
    Next folder
    Set FSO = Nothing
End Function
 
DjAlex77, из вашего списка папок первым свободным номером будет 1 и папка была бы "1 Орлов".
На каком основании 103 - поясните?
 
Игорь, ОГРОМНОЕ СПАСИБО!!! Все работает.
Апострофф, Необходим не первый свободный номер, а следующий за самым большим.
 
Игорь, Подскажите пожалуйста как в сообщение
Код
MsgBox "Уже есть папки для " & Person$ & " в количестве " & coll.Count & " шт"
добавить номер уже существующей "Person$" папки?
Страницы: 1
Читают тему
Наверх