Ошибка выполнения VBA PowerPoint «-2147467259» (80004005): Presentation.Close: Failed

У меня есть макрос, который запускается из Excel. Этот макрос открывает слайды PowerPoint, выполняет некоторую работу, а затем закрывает их. Проблема, с которой я столкнулся, заключается в следующем:

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

Конкретный код, вызывающий эту ошибку, выглядит следующим образом:

myPresentation.Close
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
203
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вещи, которые я тестировал:

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), что кажется более стабильным, поскольку я предполагаю, что именно так пользователи обычно закрывают окна.

Важно отметить, что сохраненные настройки, похоже, имеют состояние гонки, отсюда и цикл.

Другие вопросы по теме