VBA для PPT, я не могу сбросить слайды PPT, что я могу сделать? - PullRequest
0 голосов
/ 04 марта 2019

Хорошо, я делаю игру Power Point, и этот макрос на 100% нужен для того, чтобы игра работала как положено.

То, что я хочу сделать от макроса / кода, - сброс таймеравсе слайды в презентации (что приводит к перезапуску всех анимаций на слайде).Поскольку ядро ​​моей игры - это анимации, и большинство из них больше не воспроизводятся, если они уже играли один раз.

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

SlideShowWindows(1).View.ResetSlideTime

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

Теперь я не очень разбираюсь в VBA, я скорее парень из JavaSE, но я думаю, что есть способ получить некоторые из этих кодовна работу.

Sub RefreshSlides()

    Dim lSlideIndex As Long

    lSlideIndex = SlideShowWindows(1).View.CurrentShowPosition

    SlideShowWindows(1).View.GotoSlide lSlideIndex

    End Sub

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

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

[Объяснение игры] Хорошо, это сложно, но я сделаю все возможное, чтобы объяснить себя.Моя игра - это игра в жанре экшн, слайды - это «ядро» игры, скажем так: если вы хотите двигаться вперед, вы нажимаете на гиперссылку, эта гиперссылка отправляет вас в следующую «зону» игры, которая является еще одним слайдом сразличные объекты и анимации, в большинстве случаев эти анимации не заканчиваются до тех пор, пока вы не перейдете к следующему слайду (они зацикливаются). Но когда вы «сражаетесь» в игре, я не могу позволить этой анимации «зацикливаться»потому что я также использую таймер перехода, чтобы получить вас к следующему слайду.Перевести: вы ударили врага, он отображает анимацию один раз, по прошествии определенного времени переход отправляет вас на следующий слайд, если анимация находится в режиме «цикла», я не могу использовать таймер перехода, чтобы получитьВы к следующему слайду.Вот почему анимации воспроизводятся один раз, и если вы «проигрываете», вам придется снова сражаться, и эти анимации больше не воспроизводятся, это выглядит не так.

ВАЖНОЕ ОБНОВЛЕНИЕ

Sub Reiniciar()
  SlideShowWindows(1).View.ResetSlideTime
  SlideShowWindows(1).View.GotoSlide (3)
  SlideShowWindows(1).View.GotoSlide (2)
  SlideShowWindows(1).View.GotoSlide (1)
End Sub

Это работает, это очень примитивный метод, но он фактически перезапускает все выбранные мной слайды, но пока метод работает, у него есть недостаток, он показывает вам все выбранные слайды, даже если это на некоторое время,Должен быть способ перезапустить все слайды. 1) Без выбора всех слайдов.2) Не нужно совершать экскурсию по всем слайдам игры.

ОБНОВЛЕНИЕ № 2 В настоящее время я работаю над этим кодом, кто-то сделал этот код еще в 2014 году, но я не могу 'заставить его работать.

Sub testingSlideReset()
    For i = 1 To ActivePresentation.Slides.Count
        ActivePresentation.Slides(i).Select
        Application.CommandBars.ExecuteMso ("SlideReset")
        Next i
End Sub

Некоторые разработчики сказали автору, что код можно исправить с помощью «команды DoEvents» перед оператором Next i, но он просто не работает, я нене знаю почему.

Источник: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ad0270e2-16d4-46fa-96de-df3e6fa34e83/vba-8211-reseting-all-slides-in-powerpoint?forum=officegeneral

Это моя версия кода:

Sub SlidesReset()
    For i = 1 To ActivePresentation.Slides.Count
        ActivePresentation.Slides(i).Select
        DoEvents
        Application.CommandBars.ExecuteMso ("SlideReset")
        Next i
End Sub

(Не работает, я пытаюсь понятьпочему.)

Так что я буду продолжать обновлять это, пока у меня не будет более хорошего решения этой проблемы.

Если кто-то может мне помочь, я был бы очень признателен, и я имею в видумного всего

...