Не удается восстановить файл PowerPoint с помощью PowerPoint 2013 и 2016
Проблема
PowerPoint не удается восстановить поврежденный файл PowerPoint.
Пояснение
Файлы PowerPoint не получится восстановить, если к слайдам происходит обращение программными средствами до того, как PowerPoint исправит файлы. Однако, think-cell и, скорее всего, большинству других надстроек необходим доступ к слайдам при открытии файла, и у надстройки нет способа выяснить — поврежден ли файл.
Мы отправили заявку компании Microsoft, но на текущий момент Microsoft не предоставила решение. Если у вашей компании есть контракт на поддержку Microsoft Office и вы хотите обратиться в Microsoft за исправлением, вы можете указать номер обращения Microsoft 115040112590053. Ошибку можно воспроизвести и без надстройки think-cell.
Воспроизведение ошибки без think-cell
Ошибку можно воспроизвести без think-cell, если какой-либо код обращается к поврежденным слайдам до завершения восстановления. В следующем случае обработчик события PresentationOpen вызывает код, открывающий все слайды при открытии файла, то есть, до восстановления файла.
- Откройте в PowerPoint 2013 или 2016 новый пустой файл.
- В PowerPoint перейдите Insert > think-cell > Tools > Deactivate think-cell.
- Нажмите сочетание клавиш Alt + F11, чтобы открыть Microsoft Visual Basic для приложений.
-
Добавьте следующий код как модуль класса и укажите в качестве имени
cEventClass
:Public WithEvents PPTEvent As Application Private Sub Class_Initialize() MsgBox "EventHandler is now active." End Sub Private Sub PPTEvent_PresentationOpen(ByVal pres As Presentation) On Error GoTo errHandle: Debug.Print "open file: " & pres.Name Dim i As Integer For i = 1 To pres.Slides.Count Debug.Print "Slide " & pres.Slides.Item(i).SlideNumber; " / " _ & pres.Slides.Count Next i Exit Sub errHandle: Debug.Print ("VBA Error: " & Err.Number & " " & Err.Description) & vbCr End Sub
-
Добавьте следующий код в качестве Модуля:
Dim cPPTObject As New cEventClass Sub Initialize_Eventhandler() Set cPPTObject.PPTEvent = Application Debug.Print "**** EventHandler active ****" End Sub
- В окне презентации PowerPoint нажмите Alt + F8, чтобы открыть окно Макрос
- Запустите макрос Initialize_Eventhandler.
- Теперь откройте поврежденный файл PowerPoint и попробуйте его восстановить.
Такая проблема не возникает в Microsoft Office 2010.
Решение
Пока компания Microsoft не исправит эту ошибку, вы можете в качестве обходного решения временно деактивировать think-cell:
- Деактивируйте think-cell в PowerPoint: Insert > think-cell > Tools > Deactivate think-cell
- Откройте поврежденный файл и восстановите его
- Повторно активируйте think-cell в PowerPoint: Вставка → think-cell → Активировать