MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft PowerPoint
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 23.07.2019, 09:42   #1
Janixa
Neuer Benutzer
Neuer Benutzer
Standard VBA - Zyklischer Aufruf einer SUB-Routine in PowerPoint 2003/2007

Hallo,
ich möchte mit PowerPoint 2003 oder 2007 eine interaktive Simulation eines P-Reglers erstellen. Um die Simulation ablaufen zu lassen, ist etwa im Sekundentakt der Aufruf einer VBA-Routine (Sub) erforderlich. In Excel lässt sich das mit der Methode Application.OnTime realisieren, aber wie bekomme ich das in PowerPoint hin? Eine umfangreiche Suche im Netz blieb erfolglos. Ich habe auch schon eine sich wiederholende Animation auf der Folie getestet, aber bisher nicht geschafft, damit ein sich wiederholendes Ereignis auszulösen. Für eine Idee wäre ich sehr dankbar.
Viele Grüße von Janixa
Janixa ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 23.07.2019, 16:33   #2
Fennek11
MOF Profi
MOF Profi
Standard

hilft das:

https://stackoverflow.com/questions/...s-presentation
Fennek11 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 23.07.2019, 17:56   #3
Janixa
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Fennek11,
danke für die Antwort. Die Idee ist die Powerpoint-SUB-Routine mit Hilfe eines Excel-SUB-Routine zu starten. Ich kann das gern probieren, aber es ist keine elegante Lösung. Ich melde mich wieder, sobald ich Ergebnisse habe und bin für weitere Vorschläge offen.
Danke und viele Grüße von Janixa
Janixa ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 23.07.2019, 19:10   #4
Hans Hofmann
MOF Koryphäe
MOF Koryphäe
Standard

Mir ist gerade nicht gegenwärtig momentan was eine "interaktive Simulation eines P-Reglers" ausmacht.
Aber es gibt keinen Timer in ppt VBA, da musst Dir was mit API-Funktionen basteln was dann mehr oder weniger gut funktionieren kann...

__________________

Gruß HW

WebSite:
Veröffentlichungen zu PP & VBA
Hans Hofmann ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.07.2019, 07:56   #5
Fennek11
MOF Profi
MOF Profi
Standard

es ist meistens nicht gut, die Frage zu eng zu sehen.

VBA bietet die Funktion "Wait (Sekunden)", aber auch mit der API "Sleep" können zeitgesteuerte Schleifen gebildet werden.
Fennek11 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.07.2019, 17:20   #6
Janixa
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo,

das zyklische Aufrufen der PowerPoint Sub-Routine im Sekundentakt mit Hilfe einer Excel-Arbeitsmappe funktioniert. In Excel im Modul "DieseArbeitsmappe" habe ich folgende Zeilen eingefügt:

Private Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:00:01"), "Leuchtturm"
End Sub

und in ein allgemeines Modul in Excel diese Routine

Public Sub Leuchtturm()
Dim PPObj As Object
Set PPObj = CreateObject("PowerPoint.application")
PPObj.Run "Simulation P-Regler.ppt!Simulation" 'PP-Sub-Routine aufrufen
Application.OnTime Now + TimeValue("00:00:01"), "Leuchtturm" 'nächste Aktivierung planen
End Sub

Zitat: von Fennek11 Beitrag anzeigen

VBA bietet die Funktion "Wait (Sekunden)", aber auch mit der API "Sleep" können zeitgesteuerte Schleifen gebildet werden.

Eine Pausenfunktion kommt nicht in Frage, weil die Folie mit der Simulation Steuerelemente enthält, die während der Simulation durch VBA bedient werden müssen. Das funktioniert wohl nur, wenn zwischenzeitlich gerade keine Sub-Routine ausgeführt wird. Ich werde das mit Excel machen, es sei denn jemand hat noch eine Idee, wie man mit der API zyklisch eine PowerPoint-Sub-Routine aufrufen kann. Danke für alle Antworten. Es hat auf jeden Fall geholfen.

Viele Grüße von Janixa
Janixa ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.07.2019, 18:09   #7
Hans Hofmann
MOF Koryphäe
MOF Koryphäe
Standard

Ich hab das auch mal mit XL gemacht ist aber Overkill und auch unzuverlässig - per API guckst Du
https://www.vba-tutorial.de/apireferenz/timer.htm

und immer speichern vor dem Testen!

Habs doch noch gefunden:
Code:

Public Declare Function SetTimer Lib "user32" ( _
    ByVal hwnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimerFunc As Long) As Long
    
Public Declare Function KillTimer Lib "user32" ( _
    ByVal hwnd As Long, _
    ByVal nIDEvent As Long) As Long

Private TimerId As Long


Sub TimerProc(ByVal hwnd As Long, _
    ByVal uMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long)

On Error Resume Next
pptUhr.txbAnzeige.Text = Format(Time, "hh:mm:ss")
If Err.Number <> 0 Then
    UserformKillTimer
    pptUhr.txbAnzeige.Text = "Fehler im Timer ..."
End If

End Sub


Public Sub uStartTimer()
' Call the timer handler every 1 second (1000 ms).
    pptUhr.Show
    TimerId = SetTimer(0, 0, 1000, AddressOf TimerProc)
    Zeitläft = Time
End Sub


Public Sub uStopTimer()
    KillTimer 0, TimerId
    Unload pptUhr
End Sub
pptUhr.txbAnzeige = Userform.Textbox

__________________

Gruß HW

WebSite:
Veröffentlichungen zu PP & VBA

Geändert von Hans Hofmann (24.07.2019 um 18:52 Uhr). Grund: add code
Hans Hofmann ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 26.07.2019, 08:16   #8
Janixa
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Herr Hofmann,
eine sehr gute Lösung. Nach einigem Probieren funktioniert es jetzt. Der API-Aufruf muss von einem allgemeinen Modul aus erfolgen. Die zyklisch aufzurufende Prozedure muss sich ebenfalls in einem allgemeinen Modul befinden, aber man kann den Aufruf zur Folie umleiten. TimerAn und TimerAus werden über Schaltflächen auf der Folie gesteuert. Ich habe es jetzt so gelöst:

Code:

Option Explicit

#If VBA7 Then
  Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
  Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
#Else
  Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
#End If

Private hEvent As Long

Public Sub TimerAn() 'wird zum Starten der Zyklen aufgerufen
  Const Intervall_ms As Long = 1000
  If hEvent = 0 Then hEvent = SetTimer(0, 0, Intervall_ms, AddressOf Ziel)
End Sub

Public Sub TimerAus() 'wird zum Stoppen der Zyklen aufgerufen
  If hEvent <> 0 Then KillTimer 0, hEvent
  hEvent = 0
End Sub

Private Sub Ziel()
  Slide1.Simulation 'Sub-Routine der Folie wird zyklisch aktiviert
End Sub
Das hätte ich allein nicht hinbekommen.
Danke und viele Grüße von Janixa
Janixa ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.