Как закрыть вид из слайд-шоу в заданный интервал времени в PowerPoint VBA? - PullRequest
0 голосов
/ 03 июля 2019

Я недавно запустил VBA и пытаюсь создать проект, который откроет файл powerpoint (compute_dashboard.pptx) и разместит его в режиме слайд-шоу. Он будет проходить через слайды и петлю, пока не достигнет определенного временного диапазона; в этом коде ниже он должен выйти в 10:10:00 - 10:10:10 и выйти из powerpoint. У меня есть две разные реализации, каждая со своими проблемами, если бы вы могли найти способ исправить любую из них, это было бы замечательно.

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

    Sub OpenFile()
    Set pptApp = CreateObject("PowerPoint.Application")
    pptApp.Visible = True
    Set pptPres = pptApp.Presentations.Open("Compute_Dashboard.pptx")
    ActivePresentation.SlideShowSettings.Run

    Dim b As Boolean
    b = True
        While b = True
        If Time() > TimeValue("10:10:00") And Time() < TimeValue("10:10:10") Then
                b = False
                ActivePresentation.SlideShowWindow.view.Exit
                Application.Quit
        End If
            With ActivePresentation.Slides(1).SlideShowTransition
                    .AdvanceOnTime = msoTrue
                     .AdvanceTime = 3         
            End With 
        Wend

Во 2-й реализации он открывает файл, и слайд-шоу проходит правильно, но затем я не могу заставить слайд-шоу и PowerPoint завершить работу в моем временном диапазоне.


     Sub OpenFile()
     Set pptApp = CreateObject("PowerPoint.Application")
     pptApp.Visible = True
     Set pptPres = pptApp.Presentations.Open("Compute_Dashboard.pptx")
     ActivePresentation.SlideShowSettings.Run
     For Each s In ActivePresentation.Slides
         With s.SlideShowTransition
              .AdvanceOnTime = msoTrue
              .AdvanceTime = 3

      If Time() > TimeValue("10:10:00") And Time() < TimeValue("10:10:10") Then
                ActivePresentation.SlideShowWindow.view.Exit
                Application.Quit
      End If
      End With
     Next

1 Ответ

1 голос
/ 03 июля 2019

Попробуйте это

Sub OpenFile()
Set pptApp = CreateObject("PowerPoint.Application")
pptApp.Visible = True
Set pptPres = pptApp.Presentations.Open("Compute_Dashboard.pptx")
ActivePresentation.SlideShowSettings.Run
For Each s In ActivePresentation.Slides
     With s.SlideShowTransition
          .AdvanceOnTime = msoTrue
          .AdvanceTime = 3
     End With
Next s

Dim b As Boolean
b = True
    While b = True
    If Time() > TimeValue("10:10:00") And Time() < TimeValue("10:10:10") Then
            b = False
            ActivePresentation.SlideShowWindow.view.Exit
            Application.Quit
    End If
    Wend

Я не на 100% уверен в ваших намерениях - думаю, вы просто хотите установить время продвижения слайда в 3 секунды для каждого слайда и выйти в определенное время.

Настройка слайда время продвижения не , запускающее слайд для продвижения .Это просто установка этого свойства для этого слайда - продвижение через 3 секунды.

Поскольку он устанавливает эти свойства для ВСЕХ слайдов в мгновение ока во время выполнения программы, он эффективно проверяет требования QUIT в тот момент, когдаПрограмма работает, поэтому никогда не завершается.

...