Стереть данные, хранящиеся в памяти, или упростить эту подпрограмму? - PullRequest
0 голосов
/ 14 марта 2019

У меня возникла проблема где-то в этом сабе, когда я его запускаю.Я вызываю его через другой сабвуфер, но во время этой процедуры мой компьютер выходит из строя.

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 Ответ

1 голос
/ 15 марта 2019

Я предлагаю вам попробовать использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...