从多个工作簿中复制特定的工作表,而无需打开工作簿

我有一个代码下面复制一个特定的工作表forms所有活动或打开工作簿。

但是如何在不打开工作簿的情况下复制相同的工作表,就像我们可以在代码中提供path一样,应该能够从所有工作簿表单中select给定的工作表。

以下是目前使用的代码。

Sub CopySheets1() Dim wkb As Workbook Dim sWksName As String sWksName = "SHEET NAME" 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 

使用Workbooks.Open方法在后台打开它,并使用Application / ScreenUpdating / EnableEvents / DisplayAlerts隐藏任何警报


Application.ScreenUpdating属性(Excel)closures屏幕更新以加快您的macros代码。 您将无法看到macros在做什么,但运行速度会更快。


 Sub CopySheets1() Dim wkb As Workbook Dim sWksName As String With Application .ScreenUpdating = False .EnableEvents = False .DisplayAlerts = False End With wkb Workbooks.Open("C:\temp\bookname.xls") sWksName = "SHEET NAME" For Each wkb In Workbooks wkb.Worksheets(sWksName).Copy _ Before:=ThisWorkbook.Sheets(1) Next With Application .ScreenUpdating = True .EnableEvents = True .DisplayAlerts = True End With Set wkb = Nothing End Sub 

假设您的文件夹名称是C:\Temp\然后循环,直到文件夹返回一个空的


  Dim FileName As String ' Modify this folder path as needed FolderPath = "C:\Temp\" ' Call Dir the first time to all Excel files in path. FileName = Dir(FolderPath & "*.xl*") ' Loop until Dir returns an empty . Do While FileName <> "" ' Open a workbook in the folder Set wkb = Workbooks.Open(FolderPath & FileName) '--->> Do your copy here ' Close the source workbook without saving changes. wkb.Close savechanges:=False ' next file name. FileName = Dir() Loop 

当你想重复一组语句的次数不确定时,使用Do … Loop结构,直到条件满足。 如果你想重复这些陈述的次数, For … Next Statement通常是更好的select。

我假设你不想显示打开的工作簿给用户,所以操作在屏幕上不可见。

如果是这种情况,可以在代码之前使用以下行

  Application.ScreenUpdating = False 'open the new/target excel workbook and put all the sheets in there 

之后:

  Application.ScreenUpdating = True 

这似乎是,你必须手动打开工作簿。 您可以在VBA中自动执行此过程,如下所示:

 Sub CopySheets1() Dim wkb As Workbook Dim dirPath As String ' Path to the directory with workbooks dim wkbName as String dirPath="C:\folder\" sWksName = "SHEET NAME" wkbName=Dir(dirPath & "*.xlsx") 

例如:dirPath =“C:\ folder \”因此,对Dir函数的input就像“C:\ folder * .xlsx”

 Application.DisplayAlerts = False do while wkbName <> "" Set wkb=Application.Workbooks.Open(dirPath & wkbName) wkb.Worksheets(sWksName).Copy _ Before:=ThisWorkbook.Sheets(1) wk.Close False wkbName = Dir loop Application.DisplayAlerts = True End Sub