复制从多个工作簿的特定工作表,而不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
我假设您不想将打开的工作簿显示给用户,以便操作在屏幕上不可见。
如果是这样的话,你可以使用下面的一行代码
Application.ScreenUpdating = False
'open the new/target excel workbook and put all the sheets in there
而在此之前继:
Application.ScreenUpdating = True
工作在情况下更容易,如果你想完全使用一个单独的进程 - 您可以使用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
可以确认,如果工作簿的名称是已知的,因此,该程序可以打开相应的工作簿和复制所需的纸张 – gr8tech
与*** [Workbooks.Open方法](HTTPS工作:// msdn.microsoft.com/en-us/library/office/ff194819.aspx)在后台打开 - 示例'wkb Workbooks.Open(“c:\ temp \ bookname.xls”)'也使用'应用程序。 ScreenUpdating = FALSE' – 0m3r
@ gr8tech工作簿名称不同,但工作表名称是在给定文件夹中的所有工作簿相同,代码应该选择具有特定名称(这是常见的所有工作簿文件夹中)在工作表。 – AayushmanR