База знаний KB0209

Не удается восстановить файл PowerPoint с помощью PowerPoint 2013 и 2016

Проблема

PowerPoint не удается восстановить поврежденный файл PowerPoint.

Пояснение

Файлы PowerPoint не получится восстановить, если к слайдам происходит обращение программными средствами до того, как PowerPoint исправит файлы. Однако, think-cell и, скорее всего, большинству других надстроек необходим доступ к слайдам при открытии файла, и у надстройки нет способа выяснить — поврежден ли файл.

Мы отправили заявку компании Microsoft, но на текущий момент Microsoft не предоставила решение. Если у вашей компании есть контракт на поддержку Microsoft Office и вы хотите обратиться в Microsoft за исправлением, вы можете указать номер обращения Microsoft 115040112590053. Ошибку можно воспроизвести и без надстройки think-cell.

Воспроизведение ошибки без think-cell

Ошибку можно воспроизвести без think-cell, если какой-либо код обращается к поврежденным слайдам до завершения восстановления. В следующем случае обработчик события PresentationOpen вызывает код, открывающий все слайды при открытии файла, то есть, до восстановления файла.

  1. Откройте в PowerPoint 2013 или 2016 новый пустой файл.
  2. В PowerPoint перейдите Insert > think-cell > Tools значок «Меню инструментов». > Deactivate think-cell.
  3. Нажмите сочетание клавиш Alt + F11, чтобы открыть Microsoft Visual Basic для приложений.
  4. Добавьте следующий код как модуль класса и укажите в качестве имени 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

  5. Добавьте следующий код в качестве Модуля:

    Dim cPPTObject As New cEventClass
    
    Sub Initialize_Eventhandler()
        Set cPPTObject.PPTEvent = Application
        Debug.Print "**** EventHandler active ****"
    End Sub

  6. В окне презентации PowerPoint нажмите Alt + F8, чтобы открыть окно Макрос
  7. Запустите макрос Initialize_Eventhandler.
  8. Теперь откройте поврежденный файл PowerPoint и попробуйте его восстановить.

Такая проблема не возникает в Microsoft Office 2010.

Решение

Пока компания Microsoft не исправит эту ошибку, вы можете в качестве обходного решения временно деактивировать think-cell:

  1. Деактивируйте think-cell в PowerPoint: Insert > think-cell > Tools значок «Меню инструментов». > Deactivate think-cell
  2. Откройте поврежденный файл и восстановите его
  3. Повторно активируйте think-cell в PowerPoint: Вставкаthink-cellАктивировать

Поделиться