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:
- Mam prezentację PP zawierającą pierwszy slajd i potrzebne ustawienia co do tła, formatu itd.
- Prezentacja jest uruchomiona i wyświetla pierwszy slajd non stop.
- Zewnętrzną aplikacją (tutaj akurat Access) sprawdzam czy jest aktywna jakaś prezentacja i jak jest to podłączam się do niej.
- 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.
- 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.
- Nowy slajd jest uruchamiany ze wszystkimi animacjami i po jego zakończeniu jest nadal już statycznie pokazywany w oczekiwaniu na dalsze działania.
- 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:
- Przejście z jakimś efektem do nowego slajdu (właśnie dodanego) np. „Iskrzenie” nie działa , slajd po prostu wyskakuje i już,
- 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,
- Podczas prezentacji zaczyna ona czasami mrugać tak jak w starych telewizorach mrugał obraz jak tracił sygnał,
- 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