将多个Excel工作簿合并到一个工作簿中

将多个Excel工作簿合并到一个工作簿中

问题描述:

我是Visual Basic的新手。我可以使用Excel 2010或Excel 2013来执行此任务。将多个Excel工作簿合并到一个工作簿中

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

我需要将来自每个工作簿的Sheet1上的信息合并到单个工作簿中,工作簿中的工作簿是从原始工作簿的文件名命名的。因此,例如combined.xlsx将有4张名为“一,二,三,四”的纸张。在任何情况下,所有关于基础工作表的信息都应复制并合并到新工作簿中,如下所示。

  • 的格式,我需要

enter image description here

我发现这个宏/附加在网上说让我接近我需要使用打开的文件中添加选择。

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

打开的文件添加,在成功地让我来汇总各种工作簿的工作表到一个单一的工作簿。但是,这些选项卡并未从原始文件的名称命名。

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

enter image description here

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

以下任务完成。

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 
+0

是'import-sheets.xlsm'我正在运行宏的文件? – wviana 2016-07-15 20:21:14

+0

您可以添加一些评论吗? – wviana 2016-07-18 12:23:19

+0

不再需要,谢谢你的发布。帮助我很多。我做了一些改进,我应该分享一下吗? https://gist.github.com/wviana/31d8dac7718b952e1ccf43eb3ee062be我解决了一些变数,以方便操作,无需每次调用​​'Workbooks(fileName)'。对不起,葡萄牙语评论。 – wviana 2016-07-18 14:54:05

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

文章http://www.excel-spreadsheet.com/vba/debugging.htm解释了一些基本知识如何使用它。

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

使用F1将光标放在您不理解的字词中,以了解它的含义。

一旦你明白了代码的作用,你可以根据你的需要量身定做。

+0

我所期待的一些类似的代码来实现我的目标,而不是从头开始 – 2014-10-20 17:01:56

+0

@JayC代码是存在的,就在宏,改变它来创建新的工作簿或重命名表是简单的俏皮话。但堆栈溢出是**没有代码写入服务**。你必须展示一些努力,编写一些代码,展示它,Stack Overflow可以帮助你诊断和克服具体的编码问题。我建议你开始解决你的任务,试着理解Merge-Macro.xlsm中的那些〜50行代码,并可能产生一些新的更具体的编码问题。到目前为止,你做得很好 – xmojmr 2014-10-20 17:56:57

+0

谢谢,我同意并理解一些努力和问题的模板是必要的。不幸的是,链接的宏不可编辑,所以我不能用它来引导我。在这种情况下,一位同事能够让我开始工作,并进一步修改它以满足我的需求。 – 2014-10-20 20:29:07