编辑:包括我的代码。
我对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语句,重命名该文件,然后继续进入目录中的下一个文件并做同样的事情。但是当我运行它时,它每次只会打开相同的文件。有什么想法吗?
希望如此。谢谢!
答案 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的建议添加了一个额外的子项,现在效果很好!