加速Excelmacros打开

所以这个Excel文件的全部范围是从其他27个外部文件复制并粘贴到当前的Excel文件中。 展示我的意思,下面是代码示例和一个刺激的捕获图片。 在这里输入图像说明

macros(包含空行的行号):

1.导入分组

在我的文件中,我有这样的27个子。 它比这个例子长。 我真正的macros观总共有179行。 在这个例子中,它只有51行。

唯一会改变的是第6行VBA代码中的行号。

Sub Import_NJ() Dim Row As Integer, PathFileOpen As String, NameFileOpen As String, TypeFileOpen As String, FullFileName As String, TabCopy As String, ModelFileName As String Let Row = Worksheets("Control_Table").Cells("2", "D").Value Let PathFileOpen = Worksheets("Control_Table").Cells(Row, "A").Text Let NameFileOpen = Worksheets("Control_Table").Cells(Row, "B").Text Let TypeFileOpen = Worksheets("Control_Table").Cells(Row, "C").Text Let FullFileName = PathFileOpen & "\" & NameFileOpen & TypeFileOpen Let TabCopy = Worksheets("Control_Table").Cells(Row, "J").Text Let ModelFileName = Worksheets("Control_Table").Cells("10", "B").Text Application.AskToUpdateLinks = False Application.DisplayAlerts = False Application.Calculation = xlCalculationManual Workbooks.Open FileName:=FullFileName, UpdateLinks:=0 'Copy Income Statement Workbooks(NameFileOpen).Worksheets("Total_Reports").Cells("9", "C").Resize(5, 120).Copy 'Revenues Workbooks(ModelFileName).Worksheets(TabCopy).Cells("4", "AW").Resize(5, 120).PasteSpecial xlPasteValues Workbooks(NameFileOpen).Worksheets("Total_Reports").Cells("18", "C").Resize(4, 120).Copy 'Prod Costs Workbooks(ModelFileName).Worksheets(TabCopy).Cells("11", "AW").Resize(4, 120).PasteSpecial xlPasteValues Workbooks(NameFileOpen).Worksheets("Total_Reports").Cells("25", "C").Resize(26, 120).Copy 'Employee Related thru maintenance Workbooks(ModelFileName).Worksheets(TabCopy).Cells("17", "AW").Resize(26, 120).PasteSpecial xlPasteValues Workbooks(NameFileOpen).Worksheets("Total_Reports").Cells("53", "C").Resize(3, 120).Copy 'D&A Workbooks(ModelFileName).Worksheets(TabCopy).Cells("46", "AW").Resize(3, 120).PasteSpecial xlPasteValues Application.CutCopyMode = False Workbooks(NameFileOpen).Close Application.DisplayAlerts = True End Sub 
  1. 批量导入子

尽pipe它只显示了7个呼叫,但我有27个呼叫在我的文件中

  Sub batch_import() With Application Call Import_NJ Call Import_MD Call Import_PA Call Import_OKC Call Import_CA Call Import_HI Call Import_IN End With Application.Calculation = xlCalculationAutomatic ActiveWorkbook.Save Application.DisplayAlerts = True MsgBox _ ("Batch loading Completed.") End Sub 

我试过的:

  1. closures每个Sub中的自动计算,就像在第一个示例macros中看到的那样。 还有其他应用尽可能多。

  2. 我没有closures屏幕更新,因为我的经理想看到它。

  3. 我激活了补丁子结尾处的自动计算。

我想这个复杂的过程放慢了整个过程,就是我在模块中有27个以上的子集。另外,在工作表中还有一堆公式。

有什么办法来加快macros打开文件并运行它? 让我知道是否需要在这个问题上进一步阐述。 感谢您提前阅读我的问题。 :)

你只是在粘贴价值; 直接传递值,并考虑删除剪贴板。 可以在With … End With中引用源或目标。

这个,

  Workbooks(NameFileOpen).Worksheets("Total_Reports").Cells("9", "C").Resize(5, 120).Copy 'Revenues Workbooks(ModelFileName).Worksheets(TabCopy).Cells("4", "AW").Resize(5, 120).PasteSpecial xlPasteValues Workbooks(NameFileOpen).Worksheets("Total_Reports").Cells("18", "C").Resize(4, 120).Copy 'Prod Costs Workbooks(ModelFileName).Worksheets(TabCopy).Cells("11", "AW").Resize(4, 120).PasteSpecial xlPasteValues Workbooks(NameFileOpen).Worksheets("Total_Reports").Cells("25", "C").Resize(26, 120).Copy 'Employee Related thru maintenance Workbooks(ModelFileName).Worksheets(TabCopy).Cells("17", "AW").Resize(26, 120).PasteSpecial xlPasteValues Workbooks(NameFileOpen).Worksheets("Total_Reports").Cells("53", "C").Resize(3, 120).Copy 'D&A Workbooks(ModelFileName).Worksheets(TabCopy).Cells("46", "AW").Resize(3, 120).PasteSpecial xlPasteValues 

变,

 With Workbooks(NameFileOpen).Worksheets("Total_Reports") Workbooks(ModelFileName).Worksheets(TabCopy).Cells("4", "AW").Resize(5, 120) = _ .Cells("9", "C").Resize(5, 120).Value2 'Revenues Workbooks(ModelFileName).Worksheets(TabCopy).Cells("11", "AW").Resize(4, 120) = _ .Cells("18", "C").Resize(4, 120).Value2 'Prod Costs Workbooks(ModelFileName).Worksheets(TabCopy).Cells("17", "AW").Resize(26, 120) = _ .Cells("25", "C").Resize(26, 120).Value2 'Employee Related thru maintenance Workbooks(ModelFileName).Worksheets(TabCopy).Cells("46", "AW") = _ .Cells("53", "C").Resize(3, 120).Value2 'D&A End With 

如注释中所述,如果外部文件位于或超过1Mb文件大小的区域,请将其保存为.XLSB(excel二进制文件)以减less加载时间。

您可以通过定义工作表对象variables来进一步阐明您的代码

这是@Jeeped发布的相同的代码段

 Dim wsTR As Worksheet Dim wsTC As Worksheet Set wsTR = Workbooks(NameFileOpen).Worksheets("Total_Reports") Set wsTC = Workbooks(ModelFileName).Worksheets(TabCopy) wsTC.Cells(4, "AW").Resize(5, 120) = wsTR.Cells(9, "C").Resize(5, 120).Value2 ' Revenues wsTC.Cells(11, "AW").Resize(4, 120) = wsTR.Cells(18, "C").Resize(4, 120).Value2 ' Prod Costs wsTC.Cells(17, "AW").Resize(26, 120) = wsTR.Cells(25, "C").Resize(26, 120).Value2 ' Employee Related thru maintenance wsTC.Cells(46, "AW") = wsTR.Cells(53, "C").Resize(3, 120).Value2 ' D&A