As macros não carregam na inicialização do powerpoint

0

Eu criei uma macro de powerpoint para executar um arquivo em lote quando a apresentação de slides é iniciada. Este é o meu código

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

Meu problema é depois que eu fecho e abro o power point e executo o slideshow que o arquivo batch não roda. Depois de abrir o slide depois de pressionar Alt + F11 e, em seguida, retornar ao ponto de energia, a execução da apresentação de slides carrega a macro e executa o arquivo em lotes. Eu quero carregar as macros no ponto de energia na inicialização. Alguma idéia de onde cometi erro?

    
por Dragonborn 30.03.2015 / 14:14

1 resposta

1

Eu fiz muito VBA, mas não com o PowerPoint, então não tenho a resposta completa.

No entanto, vejo que você está tentando detectar um evento de alteração de slide e restringir a ação apenas ao primeiro slide. Eu suspeito que o problema é que, na inicialização, o evento de alteração de slide não dispara. Assim, você nunca verá uma combinação de mudança de slide + primeiro slide, a menos que você volte do segundo para o primeiro slide. Obviamente, você pode provar isso facilmente indo até o 2º slide e depois retornando ao primeiro.

O evento que você deseja é chamado SlideShowBegin .

ATUALIZAÇÃO: Colocar SlideShowBegin para trabalhar é um pouco mais complexo que um sub simples, porque precisa referenciar a classe application . No entanto, o seguinte funciona como você deseja.

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

Para usar o outro método, primeiro você precisa adicionar o seguinte em um módulo normal:

Opção

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

Em seguida, você precisa adicionar um módulo de classe (deve ser chamado de Class1 neste exemplo) com o seguinte:

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

Claramente, o primeiro exemplo é muito mais fácil de usar!

UPDATE 2:

Eu disse que não usei o VBA no PP! Descobri que o PP não tem um recurso de inicialização automática para o VBA, a menos que você acesse seu código de um suplemento. A maneira mais fácil de fazer as coisas funcionarem é mudar o seu código (no módulo comum e não no módulo de classe) para incluir uma linha para realmente iniciar a apresentação de slides.

Em seguida, chame essa macro da barra de ferramentas do desenvolvedor (ou crie sua própria barra de ferramentas com a macro nela) para que ela inicie a apresentação de slides e chame seu código.

    
por 30.03.2015 / 14:34