我正在VBA中设置一个新的数据位置,我想存储所有结果以及这些结果的所有运行。
因此,例如,我创建了一个名为昨天20190403的文件夹。但是,我现在想存储在一个名为“ v0001”的子文件夹中,但是如果该文件夹已经存在,则我希望是“ v0002”,依此类推。
我的问题是,我不知道如何使用此迭代创建文件夹,而且我也不知道如何找到此文件夹的最新版本以在以后保存文件。因为这将是一个单独的过程。例如,我今天晚些时候跑步,我有两个问题:
1)我怎么知道创建一个将迭代到版本号的文件夹。即从v0001到v0016已完成,因此我应将v0017设为。 2)我想保存到最新版本号,我怎么知道最新版本是v0017,我应该将其保存在那里?
答案 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,则将不返回任何内容。