创建子文件夹并将文件移动到新的子文件夹

时间:2020-12-28 11:10:20

标签: vba subdirectory

创建子文件夹并将文件移动到新的子文件夹

我正在尝试将 Loop Through All Folders and All its Subfolders 中标记为已解决的代码修改为:

  • 在一系列子文件夹中创建一个 2020 子文件夹
  • 将现有子文件夹中的所有文件移动到新的 2020 子文件夹

但是代码给出了 Path not found 错误。 MoveFile 也给出了 Path not found 错误。

有人可以指出代码中的错误吗?

Sub Create_subfolders_move_files()

Dim Fso As Object, objFolder As Object, objSubFolder As Object
Dim FromPath As String
Dim FileInFolder As Object

FromPath = "C:\Users\xyz\"
Set Fso = CreateObject("Scripting.filesystemobject")
Set objFolder = Fso.GetFolder(FromPath)

For Each objSubFolder In objFolder.subfolders
    For Each FileInFolder In objSubFolder.Files

            FileInFolder.Move (objSubFolder.path & "\2020\")

    Next FileInFolder
    
Next objSubFolder

End Sub

1 个答案:

答案 0 :(得分:0)

文件夹 "C:\Users\xyz" 不存在,因此您无法使用 Fso.GetFolder 方法引用它(它只能用于现有文件夹)。< /p>

首先,您必须创建它,您可以使用方法 Fso.CreateFolder 来创建它。但是,如果要添加嵌套文件夹,则此方法不起作用,即:

  • 如果文件夹 "C:\Users" 已经存在,您可以创建文件夹 "C:\Users\xyz"
  • 您将无法直接创建文件夹“C:\Users\xyz\abc”。它会抛出同样的错误 - Path not found。为了创建文件夹"C:\Users\xyz\abc",首先你必须创建文件夹"C:\Users\xyz":
    Call fso.CreateFolder("C:\Users\xyz")
    Call fso.CreateFolder("C:\Users\xyz\abc")

正如您所猜测的,这不是硬编码这样的东西的好习惯,更好的方法是创建一个递归工作的通用函数并创建所有文件夹,无论它需要多少级别。碰巧我已经创建了这样的函数,你可以随意使用它: http://mielk.pl/en/download/code/system/createFolder.php