创建一个无限制修订版本的文件夹

时间:2019-04-04 15:18:24

标签: excel vba

我正在VBA中设置一个新的数据位置,我想存储所有结果以及这些结果的所有运行。

因此,例如,我创建了一个名为昨天20190403的文件夹。但是,我现在想存储在一个名为“ v0001”的子文件夹中,但是如果该文件夹已经存在,则我希望是“ v0002”,依此类推。

我的问题是,我不知道如何使用此迭代创建文件夹,而且我也不知道如何找到此文件夹的最新版本以在以后保存文件。因为这将是一个单独的过程。例如,我今天晚些时候跑步,我有两个问题:

1)我怎么知道创建一个将迭代到版本号的文件夹。即从v0001到v0016已完成,因此我应将v0017设为。 2)我想保存到最新版本号,我怎么知道最新版本是v0017,我应该将其保存在那里?

2 个答案:

答案 0 :(得分:0)

下面是一个函数示例,该函数可以在发送给它的文件夹中找到最大版本文件夹:

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对象来创建目录。

答案 1 :(得分:0)

以下函数返回子文件夹的最新版本。将第二个参数设置为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,则将不返回任何内容。