【发布时间】:2017-03-14 16:17:35
【问题描述】:
我使用以下代码从另一个工作簿导入多个工作表并进行一些处理。导入时间过长。有人可以建议一种更有效的导入方式吗?我应该查看源文件中的更多信息以进行复制吗?
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
【问题讨论】:
-
有必要
Sht.Activate吗?你能不只是Sht.Copy吗? -
嗨,亚当,感谢您的宝贵时间。我希望 Sht.Activate 不是必需的,我直接使用了 Sht.copy ......仍然对时间没有影响......有什么猜测吗?
-
如果你有工作代码,只是需要改进,那么你可能在这篇文章的错误地方。 Code Review 是他们处理现有/工作代码的地方,并在速度、安全性、可持续性和寿命方面尽最大努力改进它,包括最佳实践。试试看。他们很好!
-
当然拉尔夫,我会试一试。我不是专业人士,刚开始使用 VBA...不过 Stack Overflow 帮了大忙!
-
我找到了解决方案。秘密就在源文件工作表中。它们受到保护,并且有很多对其他工作表和工作簿的引用。我在复制中使用了一个简单的修改 - 在原始工作表中粘贴特殊内容,并将工作表复制到目标工作簿。关闭源书时,保存更改以提供 false。这就像一个魅力!