复制从多个工作簿的特定工作表,而不openeing工作簿

问题描述:

我有低于该副本的特定工作表形成所有活动或打开的工作簿代码。复制从多个工作簿的特定工作表,而不openeing工作簿

但如何复制同一工作表,而无需打开工作簿,就像如果我们能够提供的代码路径,它应该能够挑定的工作表从所有工作簿形成路径。

下面是我目前正在使用的代码。

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

可以确认,如果工作簿的名称是已知的,因此,该程序可以打开相应的工作簿和复制所需的纸张 – gr8tech

+0

与*** [Workbooks.Open方法](HTTPS工作:// msdn.microsoft.com/en-us/library/office/ff194819.aspx)在后台打开 - 示例'wkb Workbooks.Open(“c:\ temp \ bookname.xls”)'也使用'应用程序。 ScreenUpdating = FALSE' – 0m3r

+0

@ gr8tech工作簿名称不同,但工作表名称是在给定文件夹中的所有工作簿相同,代码应该选择具有特定名称(这是常见的所有工作簿文件夹中)在工作表。 – AayushmanR

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

如果是这样的话,你可以使用下面的一行代码

Application.ScreenUpdating = False 

    'open the new/target excel workbook and put all the sheets in there 

而在此之前继:

Application.ScreenUpdating = True 
+0

工作在情况下更容易,如果你想完全使用一个单独的进程 - 您可以使用VBS在看不见的应用模式http://stackoverflow.com/questions/15908553/编码如何对获得-工作簿名称的-磨合Excel的实例使用,VBScript中 – BabyGroot

Workbooks.Open Method工作,以在后台打开它,和隐藏与应用/ ScreenUpdating/enableEvents方法/ DisplayAlerts

0123的任何警报

Application.ScreenUpdating Property (Excel)关闭屏幕更新以加快您的宏代码。你将无法看到宏在做什么,但它会运行得更快。


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通常是一个更好的选择。

看来你必须手动打开工作簿。您可以如下在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:\文件夹\” 使得输入到Dir函数像“C:\文件夹*。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