Jun*_*Dev 5 excel vba excel-vba
我知道这个问题之前被问了很多次,我已经检查过以前的建议,但我无法让我的代码运行.
所以,我有一个名为"报告"的文件夹,其中也包含多个文件夹.这些文件夹包含.xlsx和.zip文件.
每个文件还包含一个名为"2016"的文件夹,在其下面有12个文件夹"January","February",...,"December".
我想要做的是,循环遍历所有这些子文件夹并将.xlsx和.zip文件移动到基于createdDate的月度文件夹.
例如,在11月创建的位置中的所有.xlsx和.zip将被移动到位于相同位置的"2016"中的文件夹"November".
我创建了这个宏,但这很耗时,因为每次我需要更改每个子浮动的路径并为每个子文件夹运行它.
Sub Move_Files_To_Folder()
Dim Fso As Object
Dim FromPath As String
Dim ToPath As String
Dim FileInFromFolder As Object
'Change Path
FromPath = "C:\Report\Shipment\"
ToPath = "C:\Report\Shipment\2016\"
Set Fso = CreateObject("scripting.filesystemobject")
For Each FileInFromFolder In Fso.GetFolder(FromPath).Files
'Change month and year
If (Month(FileInFromFolder.DateCreated)) = 11 And (year(FileInFromFolder.DateCreated)) = 2016 _
And (InStr(1, FileInFromFolder.name, ".xlsx") Or InStr(1, FileInFromFolder.name, ".zip")) Then
FileInFromFolder.Move (ToPath & MonthName(Month(FileInFromFolder.DateCreated)) & "\")
End If
Next FileInFromFolder
End Sub
Run Code Online (Sandbox Code Playgroud)
我想自动化我的宏,以便它可以在所有子文件夹上工作不是一个接一个,每次都改变路径.有什么建议吗?非常感谢你.
与@luke_t和@Lowpar不同,我不认为递归循环,查看所有子文件夹和文件在这里是正确的答案,因为当你到达底部文件夹(即C:\Report\Shipment\2016\May\
)时,你将获得并移动已经在正确位置的文件.
由于事实,你有固定的文件夹结构,你可以通过每一个回路.xlsx
和.zip
文件中的主文件夹的子文件夹每(C:\Report\
).
Sub Move_Files_To_Folder()
Dim Fso As Object, objFolder As Object, objSubFolder As Object
Dim FromPath As String
Dim FileInFolder As Object
FromPath = "C:\Report\"
Set Fso = CreateObject("Scripting.filesystemobject")
Set objFolder = Fso.GetFolder(FromPath)
For Each objSubFolder In objFolder.subfolders
For Each FileInFolder In objSubFolder.Files
If InStr(1, FileInFolder.Name, ".xlsx") Or InStr(1, FileInFolder.Name, ".zip") Then
FileInFolder.Move (objSubFolder.path & "\2016\" & MonthName(Month(FileInFolder.DateCreated)) & "\")
End If
Next FileInFolder
Next objSubFolder
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,如果文件夹的结构是动态的,那么提出@luke_t的方法会更合适.