首页 > 解决方案 > 创建子文件夹并将文件移动到新的子文件夹

问题描述

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

我正在尝试将代码从循环遍历所有文件夹及其标记为已解决的所有子文件夹中调整为:

但是代码给出了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

标签: vbasubdirectory

解决方案


文件夹“C:\Users\xyz”不存在,无法通过使用Fso.GetFolder方法引用(只能用于已有文件夹)。

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

  • 如果文件夹“C:\Users”已经存在,您可以创建文件夹“C:\Users\xyz”
  • 您将无法直接创建文件夹“C:\Users\xyz\abc”。它会抛出同样的错误——找不到路径。为了创建文件夹"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


推荐阅读