Power Point Präsentation friert die .hta Datei ein, von welcher aus (per VBS) die PP gestartet wurde.

  • VBScript

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von CroBest.

    Power Point Präsentation friert die .hta Datei ein, von welcher aus (per VBS) die PP gestartet wurde.

    Hallo Leute,

    für ein Projekt, wo mehrere PowerPoint und Excel Dateien nacheinander in einer Endlosschleife präsentiert werden sollen, wurde von mir eine .hta Datei erzeugt.
    Die .hta Datei öffnet mithilfe von VBScript u.a. eine Powerpoint Datei, wechselt in den Präsentationsmodus, lässt alle vorhandenen Folien durchlaufen und schließt dann die Powerpoint Datei. Dies funktioniert soweit.

    Damit man die Präsentation jederzeit abbrechen kann, wurde in der .hta Datei ein "Beenden"-Button eingebaut, welcher die ganze Präsentation unterbrechen soll.
    Dies funktioniert auch...aber nur solange keine Powerpoint Präsentation aktiv ist. Sobald eine PP Präsi läuft, friert die .hat ein...und reagiert nicht mehr auf den Klick auf den "Beenden"-Button.
    Bei Excel ist es nicht so, dort reagiert der Button sofort und unterbricht die Präsi.

    Zum besseren Verständis -> Hier der Code für das öffnen, präsentieren und schließen einer PowerPoint Datei:

    Quellcode

    1. Set App = CreateObject("Powerpoint.Application")
    2. Set Doc = App.Presentations.Open("Pfad...", false, true)
    3. App.Visible = True
    4. Doc.Slides.Range.SlideShowTransition.AdvanceTime = 22
    5. Doc.Slides.Range.SlideShowTransition.AdvanceOnTime = TRUE
    6. Doc.SlideShowSettings.AdvanceMode = 2
    7. Doc.SlideShowSettings.ShowType = 2
    8. Doc.SlideShowSettings.StartingSlide = 1
    9. Doc.SlideShowSettings.EndingSlide = _
    10. Doc.Slides.Count
    11. Set objSlideShow = doc.SlideShowSettings.Run.View
    12. App.WindowState = 3
    13. Do Until objSlideShow.State = 5
    14. Loop
    15. Doc.Close
    16. App.Quit
    17. Set Doc = Nothing
    18. Set App = Nothing
    19. Set objSlideShow = Nothing


    Google und die Suche hier hat mir leider nicht weiter geholfen.

    Deshalb meine Frage an euch: Hat jemand eine Idee, woran das liegen könnte?
    Bin für jeden Tipp dankbar :)

    MfG
    CB
    ups...mir ist da ein Fehler unterlaufen...hier ist der vollständige Code:

    Quellcode

    1. Const ppSlideShowDone = 5
    2. '
    3. '
    4. '
    5. Set App = CreateObject("Powerpoint.Application")
    6. Set Doc = App.Presentations.Open("Pfad...", false, true)
    7. App.Visible = True
    8. Doc.Slides.Range.SlideShowTransition.AdvanceTime = 22
    9. Doc.Slides.Range.SlideShowTransition.AdvanceOnTime = TRUE
    10. Doc.SlideShowSettings.AdvanceMode = 2
    11. Doc.SlideShowSettings.ShowType = 2
    12. Doc.SlideShowSettings.StartingSlide = 1
    13. Doc.SlideShowSettings.EndingSlide = _
    14. Doc.Slides.Count
    15. Set objSlideShow = doc.SlideShowSettings.Run.View
    16. App.WindowState = 3
    17. Do Until objSlideShow.State = ppSlideShowDone
    18. Loop
    19. Doc.Close
    20. App.Quit
    21. Set Doc = Nothing
    22. Set App = Nothing
    23. Set objSlideShow = Nothing


    ppSlideShowDone ist ne Konstante und hat den Wert 5.
    msdn.microsoft.com/en-us/libra…a211582(v=office.11).aspx

    Der Schleife sag ich damit: beende, wenn der Status auf 5 (ppSlideShow) ist...quasi die Präsentation am Ende angelangt ist.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „CroBest“ ()

    Das ist vermutlich noch schlimmer, weil ​ppSlideShowDone in einem VBS-Umfeld gar nicht definiert ist.
    Die Konstante 5 wäre dafür schon OK, aber wer soll objSlideShow.State verändern, um die Schleife abzubrechen?
    Gib doch mal in der Schleife den State aus.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    CroBest schrieb:

    und am Ende springt es auf 5 (Done)
    Und? Tut es das?
    Hast du in der Schleife eine Ausgabe drin?

    Wenn das prinzipiell funktioniert, würde ich den gnadenlosen Kurzschluss am Ende etwas auflösen und in der Schleife ein Sleep von 100ms einbauen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Hallo,

    hab mir den Inhalt von "objSlideShow" per MSgBox ausgeben lassen. Einmal in der Schleife und einmal danach.

    Hier der Code dazu:

    Quellcode

    1. Do Until objSlideShow.State = ppSlideShowDone
    2. MsgBox objSlideShow.State
    3. Loop
    4. MsgBox objSlideShow.State


    Ergebnis...die MsgBox innerhalb der Schleife liefert mehrmals eine "1"...die MsgBox nach dem loop liefert eine "5".
    Es funktioniert...aber ich kann während der Präsi nicht mehr abbrechen...hab auch schonmal versucht die Abbruchbedinung in die Schleife einzubauen....das Problem ist: Der PC reagiert in der Zeit der Präsi garnicht auf den Buttonklick.

    Was genau soll ich machen...nur einen sleep in die Schleife einsetzen? Probier ich gleich mal...