【问题标题】:How to combine same-named worksheets on different workbooks to a new workbook?如何将不同工作簿上的同名工作表合并到一个新工作簿中?
【发布时间】:2021-08-26 10:57:57
【问题描述】:

我想将文件夹中不同工作簿上的同名工作表合并到一个新工作簿中。

我想让工作表以从中复制它们的文件的名称命名。

Sub collectionOfSheets()

    Dim strF As String, strP As String
    strP = "path to source files folder"                                          
    strF = Dir(strP & "\*.xlsx")

    Workbooks.Add.SaveAs Filename:="filename of destination workbook"
  
    Do While strF <> vbNullString
      Workbooks.Open (strP & "\" & strF)
      ActiveWorkbook.Sheets("Sheet1").Copy Before:=Workbooks("filename of destination workbook").Sheets(1)
      Workbooks("filename of destination workbook").Sheets(1).Name = "strF"
      Workbooks("filename of destination workbook").Save
      strF = Dir()
    Loop

End Sub

【问题讨论】:

    标签: excel vba copy worksheet


    【解决方案1】:

    试试这个:

    Sub collectionOfSheets()
    
        Dim strF As String, strP As String
        Dim wbNew As Workbook, wb As Workbook
        
        Set wbNew = Workbooks.Add()  'for collecting the sheets
        wbNew.SaveAs Filename:="filename of destination workbook"
        
        strP = "path to source files folder"
        strF = Dir(strP & "\*.xlsx")
    
        Do While strF <> vbNullString
            Set wb = Workbooks.Open(strP & "\" & strF)
            wb.Sheets("Sheet1").Copy Before:=wbNew.Sheets(1)
            wbNew.Sheets(1).Name = Replace(strF, ".xlsx", "") 'without extension
            wbNew.Save
            wb.Close False 'close ?
            strF = Dir()
        Loop
    
    End Sub
    

    使用工作簿变量可以更轻松地管理流程...

    【讨论】:

    • 感谢一百万亲爱的蒂姆的回复。我收到一条错误消息,指出名称无效,列举了三种可能性 1. 名称包含>31 个字符? 2.名称中包含\/? * 3. 名称为空。我刚刚数了一下名字的长度,确实超过了31个字母。我需要名字的中间部分,所以会尝试查找并弄清楚如何做到这一点。再次感谢您!
    • 根据您需要的名称部分,您可能会使用Mid()Split() 来提取它。如果您可以发布更多详细信息,我会将其添加到我的答案中。
    猜你喜欢
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多