【问题标题】:Combine multiple Excel workbooks into a single workbook将多个 Excel 工作簿合并为一个工作簿
【发布时间】:2014-12-14 19:28:15
【问题描述】:

我是 Visual Basic 的新手。我可以使用 Excel 2010 或 Excel 2013 来完成这项任务。

我有几十个工作簿,每个工作簿的第一个工作表上都有数据。例如 One.xlsx、Two.xlsx、Three.xlsx、Four.xlsx 每个都包含各自 Sheet1 上的信息。

我需要将每个工作簿中有关 Sheet1 的信息组合成一个工作簿,其中的工作表以原始工作簿的文件名命名。例如,combined.xlsx 将有 4 张表,分别命名为一、二、三、四。在任何情况下,基础工作表上的所有信息都应复制并合并到新工作簿中,如下所示。

  • 我需要的格式

我在网上找到了这个宏/加载项,它可以让我使用打开的文件添加选项接近我需要的内容。

http://www.excelbee.com/merge-excel-sheets-2010-2007-2013#close

打开文件加载项成功地允许我将各种工作簿的工作表聚合到一个工作簿中。但是,这些选项卡不是根据原始文件的名称命名的。

  • 工作表聚合正确,但工作表名称不正确。

目前所有基础工作簿都将位于同一文件夹中。如果这种情况发生变化,浏览和选择文件的能力会很好,但如果这太难了,只需在 Visual Basic 代码中指示目录路径就可以了。就结果组合输出可能应该是一个新工作簿而言,新工作簿的文件名并不那么重要。例如,它可以称为combined.xlsx。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    下面完成任务。

    Option Explicit
    
    Private Sub CommandButton1_Click()
    
    Dim directory As String, fileName As String, sheet As Worksheet, total As Integer
    Dim WrdArray() As String
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    directory = "c:\test\"
    fileName = Dir(directory & "*.xl??")
    
    Do While fileName <> ""
        Workbooks.Open (directory & fileName)
            WrdArray() = Split(fileName, ".")
            For Each sheet In Workbooks(fileName).Worksheets
            Workbooks(fileName).ActiveSheet.Name = WrdArray(0)
                total = Workbooks("import-sheets.xlsm").Worksheets.Count
                Workbooks(fileName).Worksheets(sheet.Name).Copy after:=Workbooks("import-sheets.xlsm").Worksheets(total)
    
                GoTo exitFor:
    
            Next sheet
    
    exitFor:
        Workbooks(fileName).Close
        fileName = Dir()
    Loop
    
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
    End Sub
    

    【讨论】:

    • import-sheets.xlsm 我正在运行宏的文件吗?
    • 你能在其中添加一些 cmets 吗?
    • 不需要了,谢谢你的帖子。帮我很多。我做了一些改进,我应该分享吗? gist.github.com/wviana/31d8dac7718b952e1ccf43eb3ee062be我设置了一些vars,方便操作,不用每次都调用Workbooks(fileName)。葡萄牙语的 cmets 很抱歉。
    • 我只遇到了一个问题,关于它所覆盖的床单的颜色。在源代码中,它具有与命运工作簿不同的颜色。
    • 带有代码的 xlsm 文件应命名为 import-sheets.xlsm
    【解决方案2】:

    在 Excel 中按 Alt+F11,这将打开 Excel VBA 编辑器。

    文章http://www.excel-spreadsheet.com/vba/debugging.htm解释了一些基本的使用方法。

    Module1 中有 2 个简短的子例程 opensheetsmerge 包含约 50 行代码。

    在您不理解的单词中使用F1 和光标,以了解其含义。

    一旦您了解了代码的作用,您就可以根据自己的需要对其进行调整。

    【讨论】:

    • 我希望有一些类似的代码来实现我的目标,而不是从头开始
    • @JayC 代码就在宏中,更改它以创建新工作簿或重命名工作表是简单的单行代码。但是 Stack Overflow 不是代码编写服务。你必须付出一些努力,编写一些代码,展示出来,Stack Overflow 可以帮助你诊断和克服具体的编码问题。我建议您通过尝试理解 Merge-Macro.xlsm 中大约 50 行代码来开始解决您的任务,并可能会产生一些新的更具体的编码问题。到目前为止,你做得很好
    • 谢谢,我同意并理解一些努力,并且需要解决问题的模板。不幸的是,链接的宏不可编辑,所以我不能用它来指导我。在这种情况下,一位同事帮助我开始,我进一步修改它以满足我的需求。
    • @JayC 很高兴你找到了自己的方式。发布self-answer 可能对未来的读者有用。顺便说一句:Merge-Macro.xlsm 中的宏 opensheetsmerge 源代码 可用,您可以使用我的答案中的方法进行调查,它是如何我发现我们正在谈论大约 50 行代码。我看到了代码。你也能看出来
    猜你喜欢
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多