Dynamiczna prezentacja PowerPoint tworzona za pomocą VBA

0

Cześć,
Chciałbym opisać swoje zmagania i jednocześnie poprosić o pomoc przy projekcie związanym z dynamicznie tworzoną prezentacja PowerPoint. Aktualnie używam PowerPoint 2010, a Access’a z którego steruję PP w najnowszej wersji (Microsoft® Access® LTSC MSO (16.0.14332.20678) (64-bitowa)).Główne założenia są następujące:

  1. Mam prezentację PP zawierającą pierwszy slajd i potrzebne ustawienia co do tła, formatu itd.
  2. Prezentacja jest uruchomiona i wyświetla pierwszy slajd non stop.
  3. Zewnętrzną aplikacją (tutaj akurat Access) sprawdzam czy jest aktywna jakaś prezentacja i jak jest to podłączam się do niej.
  4. Dodaję nowy slajd i wszystko co trzeba na nim teksty, obrazki, muzykę i odpowiednie animacje i przejścia. Ustawiam efekt przejścia dla slajdu i flagę zabraniającą przejścia do kolejnego slajdu, tak aby po zakończeniu animacji na tym slajdzie prezentacja się zatrzymała i czekała na dalszą akcję czyli albo dołożenie kolejnego slajdu (od zachrystii za pomocą VBA z innej aplikacji) albo na zakończenie pracy.
  5. Zmieniam flagę na ostatnim (przed dodaniem) slajdzie zezwalającą na przejście do następnego slajdu po powiedzmy 2 sekundach, tak aby wystartował slajd dodany w punkcie 4 i wszystkie akcje na nim zaprojektowane.
  6. Nowy slajd jest uruchamiany ze wszystkimi animacjami i po jego zakończeniu jest nadal już statycznie pokazywany w oczekiwaniu na dalsze działania.
  7. Ponawiam działania z punktu 4.

I właściwie wszystko działa, opanowałem i podłączanie się do aktualnie trwającej prezentacji, dodawanie slajdu, dodawanie animacji i przejść i dokładne zgrywanie tego w czasie. Problem polega na tym, że PP zachowuje się dziwnie. Jeżeli tak stworzoną prezentację zapiszę i odtworzę od nowa działa wszystko idealnie, jednak w trakcie dynamicznego tworzenia pojawia się szereg kłopotów:

  1. Przejście z jakimś efektem do nowego slajdu (właśnie dodanego) np. „Iskrzenie” nie działa , slajd po prostu wyskakuje i już,
  2. Po zmianie flagi zezwalającej na przejście do nowego slajdu, odtwarzany jest ten który był ostatni jeszcze raz i dopiero później odpalany jest ten nowy,
  3. Podczas prezentacji zaczyna ona czasami mrugać tak jak w starych telewizorach mrugał obraz jak tracił sygnał,
  4. Synchronizacja animacji czasami głupieje i czasami te same akcje wykonywane są wielokrotnie w dziwnej kolejności, czasami wcale, czasami równocześnie więcej niż jedna.

Jeżeli jednak bez żadnej zmiany taką prezentację zatrzymam po prostu zapiszę i uruchomię ponownie, wszystko działa bez zarzutu. Nie ma tutaj znaczenia w jakim trybie jest uruchomiona prezentacja.
Czy ktoś walczył kiedyś z dynamicznie tworzona prezentacją?
I pytanie dodatkowe czy macie jakiś sposób na pauzowaną prezentację jak traci fokus?

    Dim pptApp As PowerPoint.Application
    Dim pptPres As PowerPoint.Presentation
    Dim pptSlide As PowerPoint.Slide
        
    On Error Resume Next
    Set pptApp = GetObject(, "PowerPoint.Application")
    On Error GoTo 0
    
    If pptApp Is Nothing Then
        MsgBox "Brak otwartego PowerPoint'a!!", vbCritical
        Exit Sub
    End If
    Set pptPres = pptApp.ActivePresentation
    If pptPres Is Nothing Then
        MsgBox "Brak otwartej prezentacji PowerPoint'a!!", vbCritical
        Exit Sub
    End If
    
    'na aktualnie ostatnim slajdzie zmieniamy czas przejścia do kolejnego slajdu na 2 tak aby pokaz był kontynuowany
    With pptPres.Slides(pptPres.Slides.Count).SlideShowTransition
        .AdvanceOnTime = True
        .AdvanceTime = 2    'czas po którym nastąpi przejście do kolejnego slajdu
    End With
            
    'dodajemy nowy slajd
    Set pptSlide = pptPres.Slides.Add(pptPres.Slides.Count + 1, ppLayoutBlank)
    With pptSlide.SlideShowTransition
        .EntryEffect = 3876    'sześciokąty od lewej
        .AdvanceOnTime = False    'aby prezentacja zatrzymała się ale nie zakończyła na końcu tego slajdu
    End With

    'tu dodaję obiekty typu pole tekstowe, muzyka i wszelkie animacje i przejścia do nich


0
Hypnol napisał(a):

Cześć,
Chciałbym opisać swoje zmagania i jednocześnie poprosić o pomoc przy projekcie związanym z dynamicznie tworzoną prezentacja PowerPoint. Aktualnie używam PowerPoint 2010, a Access’a z którego steruję PP w najnowszej wersji (Microsoft® Access® LTSC MSO (16.0.14332.20678) (64-bitowa)).Główne założenia są następujące:

  1. Mam prezentację PP zawierającą pierwszy slajd i potrzebne ustawienia co do tła, formatu itd.
  2. Prezentacja jest uruchomiona i wyświetla pierwszy slajd non stop.
  3. Zewnętrzną aplikacją (tutaj akurat Access) sprawdzam czy jest aktywna jakaś prezentacja i jak jest to podłączam się do niej.
  4. Dodaję nowy slajd i wszystko co trzeba na nim teksty, obrazki, muzykę i odpowiednie animacje i przejścia. Ustawiam efekt przejścia dla slajdu i flagę zabraniającą przejścia do kolejnego slajdu, tak aby po zakończeniu animacji na tym slajdzie prezentacja się zatrzymała i czekała na dalszą akcję czyli albo dołożenie kolejnego slajdu (od zachrystii za pomocą VBA z innej aplikacji) albo na zakończenie pracy.
  5. Zmieniam flagę na ostatnim (przed dodaniem) slajdzie zezwalającą na przejście do następnego slajdu po powiedzmy 2 sekundach, tak aby wystartował slajd dodany w punkcie 4 i wszystkie akcje na nim zaprojektowane.
  6. Nowy slajd jest uruchamiany ze wszystkimi animacjami i po jego zakończeniu jest nadal już statycznie pokazywany w oczekiwaniu na dalsze działania.
  7. Ponawiam działania z punktu 4.

I właściwie wszystko działa, opanowałem i podłączanie się do aktualnie trwającej prezentacji, dodawanie slajdu, dodawanie animacji i przejść i dokładne zgrywanie tego w czasie. Problem polega na tym, że PP zachowuje się dziwnie. Jeżeli tak stworzoną prezentację zapiszę i odtworzę od nowa działa wszystko idealnie, jednak w trakcie dynamicznego tworzenia pojawia się szereg kłopotów:

  1. Przejście z jakimś efektem do nowego slajdu (właśnie dodanego) np. „Iskrzenie” nie działa , slajd po prostu wyskakuje i już,
  2. Po zmianie flagi zezwalającej na przejście do nowego slajdu, odtwarzany jest ten który był ostatni jeszcze raz i dopiero później odpalany jest ten nowy,
  3. Podczas prezentacji zaczyna ona czasami mrugać tak jak w starych telewizorach mrugał obraz jak tracił sygnał,
  4. Synchronizacja animacji czasami głupieje i czasami te same akcje wykonywane są wielokrotnie w dziwnej kolejności, czasami wcale, czasami równocześnie więcej niż jedna.

Jeżeli jednak bez żadnej zmiany taką prezentację zatrzymam po prostu zapiszę i uruchomię ponownie, wszystko działa bez zarzutu. Nie ma tutaj znaczenia w jakim trybie jest uruchomiona prezentacja.
Czy ktoś walczył kiedyś z dynamicznie tworzona prezentacją?
I pytanie dodatkowe czy macie jakiś sposób na pauzowaną prezentację jak traci fokus?

    Dim pptApp As PowerPoint.Application
    Dim pptPres As PowerPoint.Presentation
    Dim pptSlide As PowerPoint.Slide
        
    On Error Resume Next
    Set pptApp = GetObject(, "PowerPoint.Application")
    On Error GoTo 0
    
    If pptApp Is Nothing Then
        MsgBox "Brak otwartego PowerPoint'a!!", vbCritical
        Exit Sub
    End If
    Set pptPres = pptApp.ActivePresentation
    If pptPres Is Nothing Then
        MsgBox "Brak otwartej prezentacji PowerPoint'a!!", vbCritical
        Exit Sub
    End If
    
    'na aktualnie ostatnim slajdzie zmieniamy czas przejścia do kolejnego slajdu na 2 tak aby pokaz był kontynuowany
    With pptPres.Slides(pptPres.Slides.Count).SlideShowTransition
        .AdvanceOnTime = True
        .AdvanceTime = 2    'czas po którym nastąpi przejście do kolejnego slajdu
    End With
            
    'dodajemy nowy slajd
    Set pptSlide = pptPres.Slides.Add(pptPres.Slides.Count + 1, ppLayoutBlank)
    With pptSlide.SlideShowTransition
        .EntryEffect = 3876    'sześciokąty od lewej
        .AdvanceOnTime = False    'aby prezentacja zatrzymała się ale nie zakończyła na końcu tego slajdu
    End With

    'tu dodaję obiekty typu pole tekstowe, muzyka i wszelkie animacje i przejścia do nich


Odpowiedziałeś sobie sam w tym zdaniu:

Problem polega na tym, że PP zachowuje się dziwnie. Jeżeli tak stworzoną prezentację zapiszę i odtworzę od nowa działa wszystko idealnie, jednak w trakcie dynamicznego tworzenia pojawia się szereg kłopotów:

Nawet w excelu używa się screenupdateing false na czas wykonania procedur. PP nie kodowałem zbyt dużo, ale z daleka czuję ze to raczej nie do przejścia będzie. Być może jakaś super mocna maszynka zmniejszyłaby nieco niedogodności, ale też szału się nie spodziewam.

A nie możesz jej przygotować (tutaj kod), zapisać i po prostu odpalić?

1 użytkowników online, w tym zalogowanych: 0, gości: 1