检索目录中最后一个文件夹的文件夹名称

时间:2016-07-10 10:40:51

标签: excel vba excel-vba directory

我正致力于通过Excel工作簿自动执行采购订单的保存程序。而不是用户必须将模板复制到正确的目录,并使用序列中的下一个正确的订单号重命名它与日期(例如,之前的订单是订单号SJ-K1880放置在2016年7月7日的文件名KO_SJ-K1880_070716,所以下一个订单号将是2016年7月11日放置的SJ-K1881,文件名为KO_SJ-K1881_110716),用户只需单击“保存”按钮,它就会将工作簿保存在右下方的正确目录中文件名自动跟随序列。以下是一个此类文件的完整目录示例:

C:\Users\User\Desktop\Kyocera Order Doc\
Kyocera Orders\Orders 2016\07 July 2016\
KO SJ-K1880 070716\KO_SJ-K1880_070716.xlsm

使用当前日期,我已设法检查目录是否存在,直到07 July 2016并创建它,如果它不存在。我的问题在于找到该目录中的最后一个文件夹(在此示例中为KO SJ-K1880 070716)并使用它来确定下一个订单号将是什么。

1 个答案:

答案 0 :(得分:1)

这似乎可以为您提供所需的内容,但它依赖于升级的文件夹名称。

Option Explicit

Sub main()
    Dim fldr As String

    fldr = Environ("USERPROFILE") & _
        "\Desktop\Kyocera Order Doc\Kyocera Orders\Orders 2016\07 July 2016"

    Debug.Print mostRecentFolderNdx(fldr)
End Sub

Function mostRecentFolderNdx(base As String)
    Dim f As String, lstndx As String

    f = Dir(base & "\*", vbDirectory)
    Do While CBool(Len(f))
        If Not CBool(InStr(1, f, Chr(46))) Then
            lstndx = Split(f, Chr(32))(UBound(Split(f, Chr(32))))
        End If
        f = Dir
    Loop

    mostRecentFolderNdx = lstndx
End Function

如果您要依赖升序排序,最好让您的文件夹使用\20160707\而不是\07 July 2016\等命名约定。