У меня есть макрос, который запускается из Excel. Этот макрос открывает слайды PowerPoint, выполняет некоторую работу, а затем закрывает их. Проблема, с которой я столкнулся, заключается в следующем:
Это сообщение об ошибке появляется случайным образом на протяжении всего времени выполнения макроса. Эту ошибку нельзя защитить с помощью On Error GoTo Label, и кажется, что она зависит от времени (в зависимости от некоторого состояния гонки), поскольку на более позднем этапе, опять же, по-видимому, случайно, линия будет работать без проблем.
Конкретный код, вызывающий эту ошибку, выглядит следующим образом:
myPresentation.Close


Вещи, которые я тестировал:
myPresentation.saved=true
myPresentation.Close
Это не решило проблему
myPresentation.saved=true
myPresentation.windows(1).activate
myPresentation.Close
Тоже не сработало. В конце концов, наиболее стабильное решение, с которым я столкнулся, следующее:
'This function is implemented as a fix for an issue where VBA reports "Presentation.Close: Failed"
'@param pres as Object<PowerPoint.Presentation> - The presentation to close.
'@docs https://stackoverflow.com/questions/78156015/vba-powerpoint-run-time-error-2147467259-80004005-presentation-close-fail/78156016#78156016
Public Sub ClosePresentation(ByVal pres As Object)
pres.windows(1).Activate
While Not pres.Saved
pres.Saved = True
Wend
stdWindow.CreateFromApplication(pres.Application).Quit
End Sub
При этом используется библиотека stdWindow, которая является библиотекой с открытым исходным кодом, которую я поддерживаю. В конечном итоге это означает косвенное сообщение о закрытии окна (через Windows API), что кажется более стабильным, поскольку я предполагаю, что именно так пользователи обычно закрывают окна.
Важно отметить, что сохраненные настройки, похоже, имеют состояние гонки, отсюда и цикл.