清除存储在存储器中的数据还是进一步简化此子程序?

时间:2019-03-14 19:26:45

标签: excel vba performance optimization

在运行该子程序时,我在某个地方遇到问题。我通过另一个子程序调用它,但是我的整个PC在此例程期间崩溃了。

1-有一种方法可以比我现有的方法进一步简化它,并且

2-在此之前,我找不到删除存储在存储器中的任何内容的命令,或者在适当的地方可以在此代码中插入类似的内容。

Sub Splitbook()
Dim xPath As String, xWs As Worksheet, Box As String
xPath = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Box = Application.InputBox("Set?")

For Each xWs In ActiveWorkbook.Sheets
    If xWs.Name <> "Master" Then
        xWs.Copy
        Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xWs.Name & " " & Box & ".xlsx"
        Application.ActiveWorkbook.Close False
    Else

    End If
Next

Application.DisplayAlerts = True
End Sub

如果这不是一个合适的话题,请先抱歉。

1 个答案:

答案 0 :(得分:1)

我建议您尝试使用VBA.DoEvents。自打开和关闭excel工作簿以来,可能由于使用大量系统内存而出现问题。当您流通的工作簿过多时,原始的excel就会变成“不响应” 使用VBA.DoEvents可能会降低整体速度,但应防止原始工作簿“不响应”

For Each xWs In ActiveWorkbook.Sheets
If xWs.Name <> "Master" Then
vba.DoEvents
    xWs.Copy
    Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xWs.Name & " " & Box & _
".xlsx"
    Application.ActiveWorkbook.Close False
Else

End If
Next