我是Visual Basic的新手。我可以使用Excel 2010或Excel 2013执行此任务。
我有几十个工作簿,每个工作表上都有数据。例如,One.xlsx,Two.xlsx,Three.xlsx,Four.xlsx各自包含有关其各自Sheet1的信息。
我需要将每个工作簿中Sheet1的信息组合到一个工作簿中,工作簿中的工作表是从原始工作簿的文件名中命名的。因此,例如combined.xlsx将有4张名为One,Two,Three,Four的表。在每种情况下,应在新工作簿中复制和组合基础工作表的所有信息,如下所示。
我在网上找到了这个Macro / Add-In,让我接近我需要的东西,使用开放文件添加选择。
http://www.excelbee.com/merge-excel-sheets-2010-2007-2013#close
Open Files Add-In成功地允许我将各种Workbook的工作表聚合到一个工作簿中。但是,选项卡不是从原始文件的名称中命名的。
现在所有底层工作簿都在同一个文件夹中。如果这种情况发生变化,浏览和选择文件的能力会很好,但如果这太难了,只需在Visual Basic代码中指明目录路径即可。由此产生的组合输出可能应该是一个新的工作簿,新工作簿的文件名并不重要。例如,它可以被称为combined.xlsx。
答案 0 :(得分:7)
以下完成任务。
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
答案 1 :(得分:1)
在Excel中按Alt+F11
,这将打开Excel VBA编辑器。
文章http://www.excel-spreadsheet.com/vba/debugging.htm解释了如何使用它的一些基础知识。
在Module1
中,有2个短子程序opensheets
和merge
包含约50行代码。
将F1
用光标放在您不理解的单词中,以了解其含义。
了解代码的作用后,您可以根据自己的需要进行定制。