Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel VBA导入多个工作表速度较慢_Excel_Vba_Import - Fatal编程技术网

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