Dynamiczna prezentacja PowerPoint tworzona za pomocą VBA

Dynamiczna prezentacja PowerPoint tworzona za pomocą VBA
HY
  • Rejestracja:około rok
  • Ostatnio:około rok
  • Postów:1
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?

Kopiuj
    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


TR
  • Rejestracja:ponad rok
  • Ostatnio:6 dni
  • Postów:85
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?

Kopiuj
    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ć?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.