如何进一步提升大体积.xls数据导入主.xls的VBA性能?
大体积XLS数据块导入性能优化进阶提问
初始问题与代码
是否有办法提升将大体积.xls数据块导入主.xls文件的性能?
程序初始化设置(结束时恢复)
Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.EnableEvents = False Application.DisplayAlerts = False SaveChanges = False
初始导入代码
Workbooks.OpenXML (filePath & "chunkOfData001.xls") Set WBtemp = ActiveWorkbook Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy WBmain.Activate Sheets("ImportedChunkOfData").Activate Range("A1").Select ActiveSheet.Paste WBtemp.Close
优化后代码与进一步提问
我采纳了用户GWD的建议,获得了很好的优化效果。以下是当前的核心导入代码,请问还能进一步优化吗?
(注:保留了上述程序初始化设置)
当前导入核心代码
Dim WBmontagem As Workbook Dim WBsap As Workbook Dim v As Variant Set WBmain = ActiveWorkbook Set WBtemp = Workbooks.OpenXML(filePath & "chunkOfData.xls") v = WBtemp.ActiveSheet.Range("A1:I150000").Value WBmain.Sheets("ImportedChunkOfData").Range("A1").Value = v WBtemp.Close
可进一步优化的方向
明确指定工作表,避免依赖
ActiveSheet
依赖ActiveSheet可能因文件默认激活表不符导致错误,同时隐式操作会增加性能损耗,直接指定工作表更高效可靠:' 替换原获取数据的行,示例用第一个工作表,也可指定名称如Sheets("DataSheet") v = WBtemp.Sheets(1).Range("A1:I150000").Value动态获取实际数据范围,减少空单元格读取
固定A1:I150000会读取大量空行,浪费内存和时间,建议动态获取最后有效行:With WBtemp.Sheets(1) Dim lastRow As Long lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row v = .Range("A1:I" & lastRow).Value End With精准匹配目标区域,减少Excel自动判断开销
直接赋值时明确目标区域大小,避免Excel自动扩展的额外计算:With WBmain.Sheets("ImportedChunkOfData") .Range("A1").Resize(UBound(v, 1), UBound(v, 2)).Value = v End With打开临时文件时添加优化参数
以只读模式打开、禁用链接更新,减少文件加载时的额外操作:Set WBtemp = Workbooks.OpenXML( _ Filename:=filePath & "chunkOfData.xls", _ UpdateLinks:=xlUpdateLinksNever, _ ReadOnly:=True _ )及时释放内存
数据赋值完成后清空变体变量,避免内存占用:Erase v
内容的提问来源于stack exchange,提问作者William Cezar
相关产品推荐
相关产品推荐

