【发布时间】:2021-03-29 06:35:40
【问题描述】:
我们收到的 Word 文件包含 ISO 3 字母国家代码作为文件名中的字符串。我们希望将这些文件从保存文件夹移动到每个以国家名称命名的国家/地区的现有文件夹中。
我一直在兜圈子,试图让InStr 工作。 InStr 更可取,因为字符串在文件名中的位置可以改变。
有人可以告诉我我的代码有什么问题吗?它运行,但什么也不做。
还有很多国家文件(60 多个 ISO 代码)。还有比For Each和ElseIf更聪明的方法吗?
非常感谢!
Sub MoveFiles_SpecificFolders()
Dim SrepFSO As FileSystemObject
Dim Srep As File
Dim HldFolder As Folder
Dim HoldingFolder As String
Dim TargetFolder As String
Dim Fname As String
Fname = (HoldingFolder & "*.doc*")
HoldingFolder = "C:\Users\Temp\Test\"
TargetFolder = "C:\Users\DifferentPath\MSfolders\"
Set SrepFSO = New Scripting.FileSystemObject
Set HldFolder = SrepFSO.GetFolder(HoldingFolder)
For Each Srep In HldFolder.Files
If InStr(Fname, "ALB") <> 0 Then
SrepFSO.MoveFile Source:=SrepFSO.GetFile(Srep), _
Destination:=TargetFolder & "Albania\" & Srep.Name
ElseIf InStr(Fname, "AND") <> 0 Then
SrepFSO.MoveFile Source:=SrepFSO.GetFile(Srep), _
Destination:=DestinationFolder & "Andorra\" & Srep.Name
ElseIf InStr(Fname, "ARM") <> 0 Then
SrepFSO.MoveFile Source:=SrepFSO.GetFile(Srep), _
Destination:=DestinationFolder & "Armenia\" & Srep.Name
End If
Next Srep
End Sub
【问题讨论】:
-
Fname = (HoldingFolder & "*.doc*")- 这只是意味着Fname是"*doc*"- 你的InStr行都不会评估为真。 -
我会把它分解成子任务。创建一个字典,其中 3 个字母的代码是键,文件夹名称是值。然后在一个循环中,提取代码,从字典中获取文件夹名称并移动文件。
-
感谢@Kostas K,既然我的简单代码正在运行,那一定是下一步!
标签: vba string file filenames move