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

时间:2014-07-19 23:16:19

标签: excel vba excel-vba

我有一个宏可以在特定文件夹中的新工作簿中保存三个特定工作表。每次我需要保存大约20-30个工作簿。但是,我可以看到每次调用宏时,在下面的任务行中生成一个新的工作簿并跟随一些新的工作簿(到目前为止它就像1500 + - ),创建一个新的工作簿,然后它被关闭等等。整件事需要太多时间。如果我必须同时生成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

1 个答案:

答案 0 :(得分:1)

如果减少对任何特定对象的调用次数,您可能会看到一些性能改进。在您的情况下,您正在对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

这是否会有明显改善,我不确定。除非你在循环中多次这样做,否则可能不会。但无论如何这都是好习惯。