VBA重命名文件夹中的文件,保持正确顺序

时间:2019-01-10 16:12:24

标签: excel vba sorting sequence rename

我发现此代码将所有文件重命名到一个特定的文件夹中。

Const FolderLoc = "C:\Users\chf000\Desktop\AAA\"
Dim x As Long
x = 1
Dim s As String
s = Dir(FolderLoc & "*.*")
Do While s <> ""
       Name FolderLoc & s As FolderLoc & "ANIMATIC-" & x & ".png"
    s = Dir()
    x = x + 1
Loop

它可以工作,但是重命名过程中出现了问题。基本上,我将png的序列放入文件夹中,如下所示:SHOT001_00.png和SHOT001_01.png等等。 该序列有100多个帧。 该脚本将名称从SHOT001_00.png更改为ANIMATIC-0.png,以此类推。 当我运行脚本时,文件以错误的顺序重命名。 例如,名为ANIMATIC-12.png的文件包含属于帧101的图像。 我想这是脚本如何对文件夹中的文件进行排序的问题,是按字母顺序而不是数字顺序进行排序。 有谁知道我该如何编辑脚本以重命名并保持正确的顺序? 谢谢

1 个答案:

答案 0 :(得分:0)

我认为您应该首先将所有名称放入一个数组,然后从该列表中重命名它们。
我使用以下代码将文件列表放入数组:

Private Function GetFileList(FileSpec As String) As Variant
'   Returns an array of filenames that match FileSpec
'   If no matching files are found, it returns False

    Dim FileArray() As Variant
    Dim FileCount As Integer
    Dim FileName As String

    On Error GoTo NoFilesFound

    FileCount = 0
    FileName = Dir(FileSpec)
    If FileName = "" Then GoTo NoFilesFound

    'Loop until no more matching files are found
    Do While FileName <> ""
        FileCount = FileCount + 1
        ReDim Preserve FileArray(1 To FileCount)
        FileArray(FileCount) = FileName
        FileName = Dir()
    Loop
    GetFileList = FileArray
    Exit Function

    '   Error handler
NoFilesFound:
    GetFileList = False
End Function