Vba 加快Excel宏的打开速度
因此,此Excel文件的整个范围是将其他27个外部文件逐个复制并粘贴到当前Excel文件。为了说明我的意思,下面是代码示例和模拟捕获图片 宏(行#包括空格行): 1。导入子组件 在我的档案里,我有27个这样的潜艇。它比这个例子长。我真正的宏总共有179行。在本例中,它只有51行 唯一要更改的是第6行VBA代码中的行号作为单词行Vba 加快Excel宏的打开速度,vba,excel,Vba,Excel,因此,此Excel文件的整个范围是将其他27个外部文件逐个复制并粘贴到当前Excel文件。为了说明我的意思,下面是代码示例和模拟捕获图片 宏(行#包括空格行): 1。导入子组件 在我的档案里,我有27个这样的潜艇。它比这个例子长。我真正的宏总共有179行。在本例中,它只有51行 唯一要更改的是第6行VBA代码中的行号作为单词行 Sub Import_NJ() Dim Row As Integer, PathFileOpen As String, NameFileOpen As
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
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
我尝试的是:
关于打开文件并运行它,有没有办法加快宏的速度?如果我需要更多地讨论这个问题,请告诉我。提前感谢您,并通读我的问题。:) 您只是在粘贴值;而是直接传输值,并从考虑中删除剪贴板。源或目标都可以在具有。。。以…结束 这个, 变成
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二进制文件)以减少加载时间。您可以通过定义工作表对象变量进一步澄清代码 这是与@Jeeped post相同的代码部分
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
.Cells(“9”,“C”)
而不是.Cells(9,“C”)
实际工作吗?我不知道。你的问题是你与电子表格本身的交互太多,这就是为什么它需要一段时间才能运行。根据经验,您应该避免复制和粘贴、选择、激活。。。。任何直接“接触”对象/应用程序的行为都应该避免costs@Jeeped-是的!我也不知道,只是检查了一下,它就行了。漂亮的“把戏”@嘲笑。那确实管用!哈索,上面的代码有效,是吗?只是速度慢/可以改进吗?这可能比现在更好。另外,正如@DougCoats所提到的,不要。复制
/。粘贴
,尤其是当您只需要值时。您可以这样做:Range([destination Range])。Value=Range([copy Range])。Value
哪个应该更快。为什么使用“Value2”而不是“Value”。或者就是这样?在我更改代码后,我会尝试使用XLSB。Value2是没有区域货币或日期标记的原始基础值。它比.Value稍微快一点,但您可能会将日期(如2017年8月14日)更改为42961,您可以将其格式化回2017年8月14日。这一个非常优雅!我试试看。
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