Создать папку с неограниченными номерами ревизий - PullRequest
0 голосов
/ 04 апреля 2019

Я настраиваю новое местоположение данных в VBA и хочу сохранить все свои результаты и все прогоны этих результатов.

Так, например, я создаю папку с именем вчерашнего 20190403. ОднакоТеперь я хочу сохранить в подпапке «v0001», однако, если она уже есть, я хочу быть «v0002» и т. Д.

Моя проблема в том, что я не знаю, как создать папку с этой итерациейи я также не знаю, как найти последнюю версию этой папки, чтобы сохранить файлы позже.Как это будет отдельный процесс.Например, я запускаю позже в тот же день, у меня есть 2 вопроса:

1) Как я знаю, создать папку, которая будет перебирать номер версии.т.е. с v0001 до v0016 был сделан, при этом я должен был сделать v0017.2) Я хочу сохранить номер последней версии, откуда мне знать, что последняя версия v0017, и я должен сохранить ее там

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Следующая функция возвращает последнюю версию подпапки.Когда вы установите для второго параметра значение True, он создаст новую папку со следующим свободным номером.

Function GetLatestFolder(BaseFolder As String, createNew As Boolean) As String

    Dim dirName As String, i As Long

    If Right(BaseFolder, 1) <> "\" Then BaseFolder = BaseFolder & "\"

    For i = 1 To 9999
        dirName = Format(i, "V0000")
        If Dir(BaseFolder & dirName, vbDirectory) = "" Then
            ' This folder doesn't exist.
            ' If requested, created it
            If createNew Then
                 MkDir BaseFolder & dirName
                 GetLatestFolder = dirName
            Else
                ' Return the folder with last found number
                GetLatestFolder = Format(i - 1, "V0000")
            End If
            Exit Function
        End If
    Next i
End Function

Обратите внимание, что в настоящее время обработка ошибок не выполняется, поэтому, если подпапка вообще не существует, онавернет неверный путь "v0000" и, если количество папок достигнет 9999, ничего не вернет.

0 голосов
/ 04 апреля 2019

Вот пример функции, которая найдет папку максимальной версии в папке, которую вы ей отправляете:

Function findLastVersion(versionFolder As String) As String
    ''Reference Windows Script Host Object Model in Tools>>References

    Dim fso As New FileSystemObject
    Dim folderRoot As Folder
    Dim folderSub As Folder
    Dim maxVersionFolder As String

    Set folderRoot = fso.GetFolder(versionFolder)

    For Each folderSub In folderRoot.SubFolders
        If folderSub.Name Like "v*" And (folderSub.Name > maxVersionFolder Or maxVersionFolder = "") Then maxVersionFolder = folderSub.Name
    Next

    findLastVersion = maxVersionFolder
End Function

Вы можете назвать ее так:

Dim maxVersion As String
maxVersion = findLastVersion("C:\some\folder\") 

ИПредполагая, что это папка, в которой вы храните эти подкаталоги с номерами версий, вы получите максимальную версию.Вы можете использовать этот fso объект для создания каталогов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...