excel VBA导入多个工作表速度较慢
我使用以下代码从另一个工作簿导入多个工作表并进行一些处理。导入时间太长。有谁能建议一种更有效的进口方式吗?我应该在源文件中查找更多信息以进行复制吗excel VBA导入多个工作表速度较慢,excel,vba,import,Excel,Vba,Import,我使用以下代码从另一个工作簿导入多个工作表并进行一些处理。导入时间太长。有谁能建议一种更有效的进口方式吗?我应该在源文件中查找更多信息以进行复制吗 Sub SKR_Import() On Error GoTo errorhandler Application.ScreenUpdating = False Application.DisplayAlerts = False Dim wb1 As Workbook Dim wb2 As Workbook
Sub SKR_Import()
On Error GoTo errorhandler
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim Sht As Worksheet
Set wb1 = ActiveWorkbook
Dim fd As FileDialog
Dim filechosen As Integer
Dim filename As String
Dim i As Long
Set fd = Application.FileDialog(msoFileDialogOpen)
fd.AllowMultiSelect = True
fd.Title = "Select Excel workbooks to import all sheets"
filechosen = fd.Show
If filechosen = -1 Then
For i = 1 To fd.SelectedItems.Count
Set wb2 = Workbooks.Open(fd.SelectedItems(i))
For Each Sht In wb2.Sheets
Sht.Activate
ActiveSheet.Copy after:=wb1.Sheets(wb1.Sheets.Count)
Next Sht
wb2.Close SaveChanges:=False
Next i
End If
wb1.Activate
Application.ScreenUpdating = True
Exit Sub
errorhandler:
msgBox Error, vbCritical, "Error"
wb2.Close SaveChanges:=False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
您可以尝试使用
sheets
(使用s
)的复制方法立即复制它们,而不是在wb2
的工作表上循环:
这也将去掉Activate
语句,它不是必需的,只是浪费了一些时间
我似乎没有找到其他方法来进一步加速代码。您可以尝试使用
sheets
的复制方法(使用s
)立即复制它们,而不是在wb2
的工作表上循环:
这也将去掉Activate
语句,它不是必需的,只是浪费了一些时间
我似乎找不到其他方法来进一步加速您的代码。是否有必要激活
Sht.
?你能不能不抄写一下?嗨,亚当,谢谢你的时间。我希望没有必要激活,我直接使用了Sht.copy。。。仍然对时间没有影响。。。有什么猜测吗?如果你有只需要改进的工作代码,那么你可能在这篇文章中的位置不对。是他们处理现有/正在工作的代码并尽最大努力在速度、安全性、可持续性和寿命方面改进代码的地方,包括最佳实践。试试看。他们很好!好的,拉尔夫,我试试看。我不是一个专业人士,只是开始使用VBA。。。堆栈溢出是一个很大的帮助,虽然!我找到了解决办法。秘密在源文件工作表中。他们受到保护,并有很多参考其他工作表和工作手册。我在源工作表中的“复制粘贴特殊”中使用了一个简单的修改,并将工作表复制到目标工作簿。关闭源代码簿时,保存要提供的更改为false。这很有魅力!是否有必要启动?你能不能不抄写一下?嗨,亚当,谢谢你的时间。我希望没有必要激活,我直接使用了Sht.copy。。。仍然对时间没有影响。。。有什么猜测吗?如果你有只需要改进的工作代码,那么你可能在这篇文章中的位置不对。是他们处理现有/正在工作的代码并尽最大努力在速度、安全性、可持续性和寿命方面改进代码的地方,包括最佳实践。试试看。他们很好!好的,拉尔夫,我试试看。我不是一个专业人士,只是开始使用VBA。。。堆栈溢出是一个很大的帮助,虽然!我找到了解决办法。秘密在源文件工作表中。他们受到保护,并有很多参考其他工作表和工作手册。我在源工作表中的“复制粘贴特殊”中使用了一个简单的修改,并将工作表复制到目标工作簿。关闭源代码簿时,保存要提供的更改为false。这很有魅力!谢谢你的建议A.S.H.我尝试了你的建议:wb2.Sheets.Copy after:=wb1.Sheets(wb1.Sheets.Count)。当然这是一个更好的方法,但所花的时间仍然太长。不知道为什么。源表中还有其他猜测吗?谢谢你的建议A.S.H.我尝试了你的建议:wb2.Sheets.Copy after:=wb1.Sheets(wb1.Sheets.Count)。当然这是一个更好的方法,但所花的时间仍然太长。不知道为什么。源代码表中还有其他猜测吗?
Set wb2 = Workbooks.Open(fd.SelectedItems(i))
' For Each Sht In wb2.Sheets
' Sht.Activate
' ActiveSheet.Copy after:=wb1.Sheets(wb1.Sheets.Count)
' Next Sht
wb2.Sheets.Copy after:=wb1.Sheets(wb1.Sheets.Count)
wb2.Close SaveChanges:=False