Как остановить сбой PowerPoint 2013 при копировании слайдов в VBA или с помощью CTRL + C

Итак, у меня есть довольно сложный PowerPoint, над которым я работал - это сложная программа обучения в сочетании с частью тестирования, в которой представлены вопросы с несколькими вариантами ответов, некоторые из которых являются просто текстовыми, некоторые из них являются графическими, некоторые из них являются анимированными. , а некоторые из них являются синтезированной речью и звуком и т. д. Когда пользователь неправильно отвечает на слайд, код VBA копирует слайд в конец презентации, так что пользователь должен снова ответить на пропущенные вопросы, чтобы убедиться в правильности ответа.

Так или иначе, я добавил около 200 слайдов, и тут у меня возникла проблема. После запуска определенного слайда код VBA, который скопировал слайд, начал вызывать ошибку «недопустимая функция» для простой строки кода: oSld.Copy. Затем я попытался вручную скопировать слайд, используя CTRL + C в окне редактирования слайда, и получил аналогичную ошибку, но сформулировал ее по-другому; что-то вроде этого: «Сожалеем, что-то пошло не так, что могло сделать PowerPoint нестабильным. Сохраните презентацию и перезапустите PowerPoint».

Я был полностью сбит с толку этим странным поведением и подумал, что, возможно, PowerPoint отказывался от количества слайдов, поэтому я сократил количество слайдов до 15 или около того, но тот же слайд по-прежнему вызывал проблемы в oSld.Copy и CTRL + С.


person DRC    schedule 19.11.2015    source источник


Ответы (1)


Я потратил часы, пытаясь сузить область появления ошибки, и долгое время казалось, что она постоянно связана с этим слайдом. Но потом я получил ту же ошибку на другом слайде. Общность заключалась в том, что у них обоих была необычная анимация на слайдах. В частности, на обоих слайдах у меня была группа фигур, и группа была анимирована с помощью анимации «Линии», которая перемещала группу фигур из одной точки в другую.

Когда я удалил анимацию с этих слайдов, больше не было ошибок ни для oSld.Copy, ни при использовании CTRL + C.

Мое обходное решение (которое на данный момент сработало) заключалось в том, что я добавил код для удаления анимации из исходного слайда после копирования исходного слайда в конец презентации. К счастью, ошибка с копированием возникает только при попытке скопировать второй слайд со сложной анимацией, а не после копирования первого слайда со сложной анимацией. Таким образом, удалив сложную анимацию после копирования слайда, анимация была правильно скопирована на слайд в конце презентации, но, очевидно, удаление анимации из исходного слайда предотвратило проблемы при копировании следующего слайда сложной анимации.

Я модифицировал код Джона Уилсона из PowerPoint Alchemy, чтобы удалить анимацию следующим образом:

Sub DeleteAnimations()
    Dim i As Integer
    Dim t As Integer
    Dim osld As Slide

    'delete anims from just the current slide
    Set osld = ActivePresentation.Slides(ActivePresentation.SlideShowWindow.View.CurrentShowPosition)

    'Remove normal animations
    For i = osld.TimeLine.MainSequence.Count To 1 Step -1
        osld.TimeLine.MainSequence(i).Delete
    Next i

    'Remove triggers
    For i = osld.TimeLine.InteractiveSequences.Count To 1 Step -1
        For t = osld.TimeLine.InteractiveSequences(i).Count To 1 Step -1
            osld.TimeLine.InteractiveSequences(i).Item(t).Delete
        Next t
    Next i
End Sub

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

person DRC    schedule 19.11.2015
comment
Рад, что вы нашли обходной путь для этой сложной ошибки. Однако есть ли причина, по которой вы не можете собрать номера индексов слайдов с неправильными ответами в массиве, а затем отправить пользователя на каждый слайд в массиве позже или добавить слайды с неверными ответами в настраиваемое шоу, которое вы отправляете пользователю? Это было бы намного легче и избавило бы от необходимости копировать слайды. - person Steve Rindsberg; 20.11.2015
comment
Хорошие идеи, Стив. До этой ошибки было очень просто скопировать слайд до конца (конечно, это больше работы для ЦП). Конечно, можно было бы создать массив - обходной путь, который я не рассматривал. Я действительно хочу отслеживать слайды, на которых пользователь дважды ошибается, и это легко сделать, скопировав слайд до конца, но это можно сделать и с массивом. Создание отдельного шоу не сработало бы для моих нужд, потому что мне нужно резюмировать их общую производительность в рамках шоу в конце после того, как они завершат как стандартные, так и повторяющиеся слайды. - person DRC; 22.11.2015
comment
Создание отдельного шоу не сработало бы для моих нужд, потому что мне нужно резюмировать их общую производительность в рамках шоу в конце после того, как они завершат как стандартные, так и повторяющиеся слайды. Я не предлагал отдельное шоу; настраиваемое шоу - это выбранный набор слайдов в рамках более крупного шоу; это встроенная функция PPT. Посмотрите слайд-шоу | Пользовательское слайд-шоу. Может быть полезно в этой ситуации. - person Steve Rindsberg; 22.11.2015
comment
Большой! Я изучу эту особенность. Похоже, здесь может быть помощь. - person DRC; 23.11.2015