有效地将工作表保存在新工作簿中

我有一个macros在特定文件夹中的新工作簿中保存三个特定工作表。 每次我需要保存大约20-30个工作簿。 但是,我可以看到,每次调用macros时,在任务行的下面都会生成一个新的工作簿,然后跟随一些新的工作簿(到目前为止,就像1500+一样),创build一个新的工作簿,之后它将被closures等等。 整件事情花费太多时间。 如果我必须一次生成20个新的工作簿,则需要30秒或更长的时间。 有什么办法可以让它更快?

Sheets(Array("Statement", "Current Run", "Stock")).Copy ActiveWorkbook.SaveAs Filename:="C:\solved\" & st & ".xlsx", Password:="", WriteResPassword:="", ReadOnlyRecommended:=False //Just adding some row before closing finalLine.Copy ActiveWorkbook.Sheets("Current Run").Range("A1").End(xlDown).Offset(1, 0).PasteSpecial ActiveWorkbook.Sheets("Current Run").Range("A2").CurrentRegion.Borders.LineStyle = xlContinuous ActiveWorkbook.Close SaveChanges:=True 

如果您减less对任何特定对象的调用次数,您可能会看到一些性能改进。 在你的情况下,你正在ActiveWorkbook对象上进行多个调用,这可以在With块中处理,正如其他人提到的那样,只使用一个对Save方法的调用:

 Sheets(Array("Statement", "Current Run", "Stock")).Copy With ActiveWorkbook //Just adding some row before closing finalLine.Copy With .Sheets("Current Run"). .Range("A1").End(xlDown).Offset(1, 0).PasteSpecial .Range("A2").CurrentRegion.Borders.LineStyle = xlContinuous End With .SaveAs Filename:="C:\solved\" & st & ".xlsx", Password:="", WriteResPassword:="", ReadOnlyRecommended:=False .Close End With 

这是否会有明显的改善,我不确定。 可能不会,除非你在循环中多次这么做。 但无论如何这是一个很好的做法。