【问题标题】:How do I write a VBA code to rename all folders under a root folder?如何编写 VBA 代码来重命名根文件夹下的所有文件夹?
【发布时间】:2015-06-17 21:38:43
【问题描述】:

我对 VBA 非常陌生,并且一直在搞乱一些工作代码。本质上,我有一个文件夹,其中包含 1000 多个不同名称的文件夹——我需要重命名每个文件夹。我有一个 Excel 表,其中设置了原始文件路径、旧文件夹名称和所需文件夹名称。我发现此代码适用于父文件夹,但不适用于其中的文件夹:

Sub rename_folder()
Dim old_name, new_name As String
For i = 2 To Sheets(1).Range("a1").End(xlDown).Row
new_name = Left(Sheets(1).Cells(i, 1).Value, Len(Sheets(1).Cells(i, 1).Value) - Len(Sheets(1).Cells(i, 2).Value))
new_name = new_name & Sheets(1).Cells(i, 3).Value
old_name = Sheets(1).Cells(i, 1).Value
Name old_name As new_name
Next i
End Sub 

如何获取它以便此代码重命名父文件夹中的所有文件夹?任何帮助将非常感激!谢谢。

【问题讨论】:

标签: vba excel


【解决方案1】:

有两种方法可以解决这个问题。第一个(也是慢得多)是用旧名称打开每个文件,用新名称另存为,然后移动到下一个。

我会推荐脚本风格的方法,使用文件系统对象,您可以在循环中移动文件(重命名它们)。

假设新旧文件名与某个父文件夹具有相对路径:

Dim fso As New FileSystemObject, ParentFolder as string
ParentFolder = "C:\Users\Me\ThisProject\"

For i = 2 To Sheets(1).Range("a1").End(xlDown).Row
    new_name = Left(Sheets(1).Cells(i, 1).Value, Len(Sheets(1).Cells(i, 1).Value) - Len(Sheets(1).Cells(i, 2).Value))
    new_name = new_name & Sheets(1).Cells(i, 3).Value
    old_name = Sheets(1).Cells(i, 1).Value

    'This will move (rename) the old file to the new one
    fso.MoveFile (ParentFolder & old_name), (ParentFolder & new_name)
Next i

【讨论】:

  • 如果要将 fso 定义为文件系统对象,则需要将 vba 项目的引用添加到 Microsoft Scripting.Runtime 引用。此参考还包含许多其他有用的对象,例如您可以使用的文件夹和文件。我更喜欢先定义 fso(DIM fso as FileSystemObject),然后将其设置为一个新实例(SET fso = new FileSystemObject)并通过销毁 fso 对象来关闭子例程(SET fso = Nothing)这有点整洁.. . 但也不过是我的喜好。
  • 是的,忘了在我的答案中添加这个,但汤姆是正确的。您将需要添加参考。 Here is a good answer on how to do that
  • 感谢您的帮助;所以这就是我现在出去的地方。 1) 对于代码“For i = 2 To Sheets(1); 我输入了工作表的名称——这仍然有效吗?2) 另外,对于代码:Range("a1") .End(x1Down)。行——我需要在那个框中放一个字母来完成一个数组吗?
  • Sheets("SheetName") 和不雅一样有效。我不确定我是否遵循第二个问题。 Range 可以是一个单元格,因此 Range("A1") 是合法的。
  • 当我尝试运行宏时,我收到以下消息:“运行时错误'5':无效的过程调用或争论——它指的是这行代码:”new_name = Left(Sheets (1).Cells(i, 1).Value, Len(Sheets(1).Cells(i, 1).Value) - Len(Sheets(1).Cells(i, 2).Value))"跨度>
猜你喜欢
  • 1970-01-01
  • 2018-08-01
  • 2012-08-02
  • 1970-01-01
  • 2013-04-24
  • 2011-11-04
  • 1970-01-01
相关资源
最近更新 更多