【问题标题】:Bulk rename worksheets to workbook (file) names in specfic folder将工作表批量重命名为特定文件夹中的工作簿(文件)名称
【发布时间】:2018-11-27 19:12:23
【问题描述】:

我在一个文件夹中有 90 张 Excel 工作表:每个 Excel 文件都有一个唯一的名称(公司编号)并且只包含 一个 工作表。但是,工作表名称在所有文件中通常命名为“Sheet1”。是否有 VBA 代码可以将此文件夹中的所有这些工作表重命名为各自的文件名,减去“.xlsx”?

基本上我想将所有工作表合并到一个文件中(我已经有了那个 VBA 脚本)。但是,在继续之前,我必须将所有 Excel 工作表名称重命名为其唯一标识符(即文件名)。

我已经在网上查看过,但还没有看到这个脚本,或者出于类似的其他目的看到了这个脚本。提前致谢!

【问题讨论】:

  • VBA 和 VBScript 不一样,一个内置在应用程序中,另一个独立。你也标记了批处理文件,你知道你想要什么吗?因为就目前而言,您似乎不是在寻求有关代码的帮助,而是寻求有关如何完成任务的建议。不幸的是,StackOverflow 是一个专门针对前者的网站。
  • “批处理”是指自动批量执行某些操作。好吧,这不是我第一次看到没有提供任何代码的问题。从来没有看到任何关于这个的评论。无论如何问题已经解决了,我认为这对其他用户的未来会有帮助。

标签: excel directory rename worksheet vba


【解决方案1】:

我在网上找到了一个解决方案,感谢 https://www.mrexcel.com/forum/excel-questions/660913-vba-code-bulk-rename-first-worksheet-dependent-workbook-name.html 上的 VoG 用户

这就是解决方案。将 MyFolder = "C:\example" 更改为相应的文件夹

Sub RenSheets()
Dim MyFolder As String
Dim MyFile As String
Dim wbname As String
MyFolder = "C:\example"
MyFile = Dir(MyFolder & "\*.xls")
Application.ScreenUpdating = False
Do While MyFile <> ""
    Workbooks.Open Filename:=MyFolder & "\" & MyFile
    With ActiveWorkbook
        wbname = Left(.Name, InStr(.Name, ".") - 1)
        .Sheets(1).Name = wbname
        .Close savechanges:=True
    End With
    MyFile = Dir
Loop
Application.ScreenUpdating = True
End Sub

【讨论】:

  • 这段代码的问题是如果文件名中有一个句号不是名称和后缀之间的分隔符,它会给你错误的结果。这是一个示例:?Activeworkbook.name This.Is.My.Test.File.Name.xlsx ?Left(Activeworkbook.Name, InStr(Activeworkbook.Name, ".") - 1) This 在此示例中,我会说使用“。”拆分 Activeworkbook.name 会更好。然后循环遍历结果数组到 ubound(arrayname)-1 加入或使用 Join 并取字符串的左 len 减去数组中最后一个元素的 len
  • 虽然您指定 *.xls,但您可以简单地执行 wbname = Left(.Name, Len(.Name) - 4),因为我们 100% 确信 .xls 有 4 个字符
  • 啊,我明白你的意思了。幸运的是我没有这个问题,因为文件名中没有任何额外的点。感谢您的洞察力
  • @DanDonoghue,VBA 没有像 Vbscript 那样获取没有扩展名的基本文件名而不是从文件名末尾减去 4 的方法吗?
  • 我以为是的,但是当我玩弄它时我找不到它:(。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
相关资源
最近更新 更多