Я создал макросы PowerPoint для запуска пакетного файла при запуске слайд-шоу. Это мой код

Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
    If SSW.View.CurrentShowPosition = _
        SSW.Presentation.SlideShowSettings.StartingSlide Then
    Dim argh As Double
    argh = Shell("D:\test.bat", vbNormalFocus)
    End If
End Sub

Моя проблема - после того, как я закрываю и открываю Power Point и запускаю слайд-шоу, пакетный файл не запускается. После открытия слайда после того, как я нажму Alt+F11, а затем вернусь обратно в точку питания, затем при запуске слайд-шоу загрузится макрос, запустив пакетный файл. Я хочу загрузить макросы в Power Point при запуске. Есть идеи, где я ошибся?

1 ответ1

1

Я много работал с VBA, но не с PowerPoint, поэтому у меня нет полного ответа.

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

Событие, которое вы хотите, называется SlideShowBegin.

ОБНОВЛЕНИЕ: заставить SlideShowBegin работать немного сложнее, чем простая подпрограмма, потому что она должна ссылаться на класс application . Однако следующее работает так, как вы хотите.

Sub OnSlideShowPageChange()
    Dim i As Integer
    i = ActivePresentation.SlideShowWindow.View.CurrentShowPosition
    If i <> 1 Then Exit Sub
    ' Insert any code you want activated on slide 1 after here
    MsgBox "This is slide 1"
End Sub

Чтобы использовать другой метод, вам нужно сначала добавить следующее в обычный модуль:

вариант

Option Explicit
' Class1 is the name of the class module you create
Dim X As New Class1
Sub InitializeApp()
    Set X.App = Application
End Sub

Затем вам нужно добавить модуль класса (в этом примере он должен называться Class1) со следующим:

Option Explicit
Public WithEvents App As Application
Private Sub App_SlideShowBegin(ByVal Wn As SlideShowWindow)
    Dim argh As Double
    Debug.Print "Slideshow started"
    argh = Shell("D:\test.bat", vbNormalFocus)
End Sub

Очевидно, что первый пример намного проще в использовании!

ОБНОВЛЕНИЕ 2:

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

Затем вызовите этот макрос с панели инструментов разработчика (или создайте свою собственную панель инструментов с макросом на нем), чтобы он запустил слайд-шоу и вызвал ваш код.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .