David有几个工作簿,每个工作簿中都有几个工作表。他希望将每个工作簿中的某个工作表(仅一个)合并到一个新的工作簿中。他知道如何使用“移动”或“复印表”手动进行此操作,但是他希望有一种更自动的方法,特别是因为可能需要以这种方式“组合”许多工作簿。

您可以采用多种方法来解决此问题,并且所有方法都涉及到宏的使用。 (这不足为奇-宏旨在快速完成繁琐的手动任务。)

下面的宏设计简单;它循环浏览所有当前打开的工作簿,并为每个工作簿(包含宏的工作簿除外)将名为“ Sheet1”的工作表从该工作簿复制到包含代码的工作簿。

Sub CopySheets1()

Dim wkb As Workbook     Dim sWksName As String

sWksName = "Sheet1"

For Each wkb In Workbooks         If wkb.Name <> ThisWorkbook.Name Then             wkb.Worksheets(sWksName).Copy _               Before:=ThisWorkbook.Sheets(1)

End If     Next     Set wkb = Nothing End Sub

如果希望宏捕获与Sheet1不同的工作表,只需更改sWksName变量的值即可反映所需的工作表名称。如果您不知道工作表的名称,但是您知道要复制的工作表将始终是每个工作簿中的第二个工作表,则可以在宏上使用此变体:

Sub CopySheets2()

Dim wkb As Workbook     Dim sWksName As String

For Each wkb In Workbooks         If wkb.Name <> ThisWorkbook.Name Then             wkb.Worksheets(2).Copy _               Before:=ThisWorkbook.Sheets(1)

End If     Next     Set wkb = Nothing End Sub

到目前为止,这些方法的最大缺点可能是所有工作簿都需要打开。这可能并不总是可行的。例如,一个文件夹中可能有一百个不同的工作簿,并且您需要从每个工作簿中合并一个工作表。在技​​术上可行的情况下,打开一百本工作簿对于大多数人来说可能不切实际。在这种情况下,您需要采用其他方法。

下面的宏CombineSheets本质上是交互式的。它要求您提供一些信息,然后根据您的回复将工作表添加到工作簿中。它首先要求找到工作表的路径(不包括斜杠),然后要求为工作簿使用模式。您可以使用常规星号()和问号(?)通配符指定工作簿模式。例如,一个模式将匹配所有工作簿,而一个预算模式20?

将仅返回开头带有“ Budget20”且之后带有任何两个字符的工作簿。

Sub CombineSheets()

Dim sPath As String     Dim sFname As String     Dim wBk As Workbook     Dim wSht As Variant

Application.EnableEvents = False     Application.ScreenUpdating = False     sPath = InputBox("Enter a full path to workbooks")

ChDir sPath     sFname = InputBox("Enter a filename pattern")

sFname = Dir(sPath & "\" & sFname & ".xl*", vbNormal)

wSht = InputBox("Enter a worksheet name to copy")

Do Until sFname = ""

Set wBk = Workbooks.Open(sFname)

Windows(sFname).Activate         Sheets(wSht).Copy Before:=ThisWorkbook.Sheets(1)

wBk.Close False         sFname = Dir()

Loop     ActiveWorkbook.Save     Application.EnableEvents = True     Application.ScreenUpdating = True End Sub

当您运行宏时,还会要求您从每个匹配的工作簿中复制工作表的名称。提供一个名称,如果该工作表在工作簿中存在,则将其复制到当前工作簿的开头。

如果您不想创建自己的宏来合并工作表,则可以考虑使用Excel MVP Ron de Bruin创建的RDBMerge加载项。

您可以在这里免费找到它:

http://www.rondebruin.nl/win/addins/rdbmerge.htm

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(7425)适用于Microsoft Excel 97、2000、2002和2003。