在目录中的随机文件列表中搜索并根据单元格值重命名文件

时间:2018-12-12 12:05:17

标签: excel vba

编辑:包括我的代码。

我对VBA还是比较陌生,所以请多多包涵:

我正在尝试编写一个代码,该代码将通过一个文件夹并遍历所有文件(文件名是随机的),并根据特定单元格的值(在我的情况下为C12)重命名它们。举个例子:

如果文件中的C12 = A,则文件名应为1,如果文件中的C12 = B,则文件名应为2,如果C = 3,依此类推。

我整理了以下代码:

Let Files = Dir(Path & "\*.xlsx")

Do While Files <> ""
Set X = Workbooks.Open(Path & "\*.xlsx", True, True)
X.Saved = True

If X.Sheets("Sheet1").Range("C12").Value = "VALUE1" Then
   Name Path & File As Path & NAME1
X.Close

ElseIf X.Sheets("Sheet1").Range("C12").Value = "VALUE2" Then
    Name Path & File As Path & NAME2
X.Close
End If

File = Dir()

Loop

以我的理解,代码应该遍历每个文件(由于File = Dir()),打开它并运行上面的IF语句,重命名该文件,然后继续进入目录中的下一个文件并做同样的事情。但是当我运行它时,它每次只会打开相同的文件。有什么想法吗?

希望如此。谢谢!

2 个答案:

答案 0 :(得分:0)

两个文件在同一目录中不能具有相同的名称,因此您不能将多个文件命名为“ 1”,这表示您要将文件重命名为之前的文件名加上“ 1” ?假设您愿意-并假设要在名称后加上1而不是扩展名,那么

Sub RenameFiles
Const dirholdingfiles = "C:\Test"
dim sFileName as string
dim postpend as string
postpend = asc(ucase(range("c12")))-64
sfilename=dir(dirholdingfiles)
do while sfilename <> ""
movefile dirholdingfiles & "\" & sfilename dirholdingfiles & "\" & left(sfilename,len(sfilename)-4) & postpend & right(sfilename,4)
sfilename = dir()
loop
end sub

(写在我的手机上-未测试,可能有错字)

答案 1 :(得分:0)

从一篇出色的解释中找到了解决方案,为什么它在这篇文章中不起作用:Excel VBA Dir loop fails when open and close command added within loop

按照YowE3K的建议添加了一个额外的子项,现在效果很好!