【发布时间】:2014-11-09 02:09:07
【问题描述】:
我是 VBA 新手(只接受过一点 java 培训),但在此处的其他帖子的帮助下组装了这段代码并且碰壁了。
我正在尝试编写将循环浏览文件夹中每个文件的代码,测试每个文件是否符合特定标准。如果满足条件,则应编辑文件名,覆盖(或删除之前)任何现有的同名文件。然后应将这些新重命名的文件的副本复制到不同的文件夹中。我相信我已经很接近了,但是我的代码在运行时拒绝循环遍历所有文件和/或使 Excel 崩溃。请帮忙? :-)
Sub RenameImages()
Const FILEPATH As String = _
"C:\\CurrentPath"
Const NEWPATH As String = _
"C:\\AditionalPath"
Dim strfile As String
Dim freplace As String
Dim fprefix As String
Dim fsuffix As String
Dim propfname As String
Dim FileExistsbol As Boolean
Dim fso As Object
Set fso = VBA.CreateObject("Scripting.FileSystemObject")
strfile = Dir(FILEPATH)
Do While (strfile <> "")
Debug.Print strfile
If Mid$(strfile, 4, 1) = "_" Then
fprefix = Left$(strfile, 3)
fsuffix = Right$(strfile, 5)
freplace = "Page"
propfname = FILEPATH & fprefix & freplace & fsuffix
FileExistsbol = FileExists(propfname)
If FileExistsbol Then
Kill propfname
End If
Name FILEPATH & strfile As propfname
'fso.CopyFile(FILEPATH & propfname, NEWPATH & propfname, True)
End If
strfile = Dir(FILEPATH)
Loop
End Sub
如果有帮助,文件名以 ABC_mm_dd_hh_Page_#.jpg 开头,目标是将它们缩减为 ABCPage#.jpg
非常感谢!
【问题讨论】:
-
我认为在开始处理之前先收集数组或集合中的所有文件名是个好主意,特别是如果您要重命名它们。如果您不这样做,则无法保证您不会混淆 Dir(),导致它跳过文件或处理“相同”文件两次。同样在 VBA 中,不需要转义字符串中的反斜杠。
-
谢谢蒂姆!我不确定如何在 VBA 中做到这一点,但我认为基于我对 Java 的最少了解,您所说的内容具有直观意义。如果我不能让我当前的代码工作,我会尝试。您是否有机会以您所说的方式轻松地为创建数组提供帮助?
标签: vba excel excel-2013