Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1372to1376
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wie kann ich mehrere Application.OnTime stoppen?

Wie kann ich mehrere Application.OnTime stoppen?
26.07.2014 07:21:10
Rene

Hallo,
ich habe ein kleines Problem mit einigen Application.OnTime ´s.
Ich habe ein Userform in den ich folgende Daten eintrage.
1 Checkbox ob aktiv oder nicht
1 Textfeld für Dateiname
3 Textfelder für die Startzeit (Format hh:mm:ss)
3 Felder wie lange die Datei ausgeführt wird (Format hh:mm:ss)
Diese Felder habe ich jeweils 4x. Über Excel lasse ich 2 Präsentationen
und 2 Youtube Videos in einem Arbeitsblatt zwischenspeichern, damit diese dann
später in der Reihenfolge
Präsentation
Video
Präsentation
Video
je nachdem ob aktiviert oder nicht starten kann.
Über Application.OnTime wird festgelegt wann und vor allem wie lange die Datei ausgeführt wird.
Bsp.


Public Sub Run_P1T()
If UserForm1.CheckBox1.Value = True Then
Dim EndeZeit As Date
praesent1 = Now + TimeValue(Sheets("Overview").Range("C6").Value & ":" & Sheets("Overview"). _
Range("D6").Value & ":" & Sheets("Overview").Range("E6").Value)
Application.OnTime praesent1, "Run_P1"
Else
ytstarter.Run_YT1T
End If
End Sub

Sub Run_P1()
Sheets("Start").Range("N25").Value = "läuft"
Dim ppApp As Object
Dim ppP As Object
Dim sFile As String
laufzeit = Now + TimeValue(Sheets("Overview").Range("C7").Value & ":" & Sheets("Overview").Range("D7").Value & ":" & Sheets("Overview").Range("E7").Value)
sFile = Sheets("Overview").Range("C5").Value
Set ppApp = CreateObject("PowerPoint.Application")
ppApp.Visible = msoTrue
Set ppP = ppApp.Presentations.Open(sFile)
ppP.SlideShowSettings.Run
Application.Wait laufzeit
ppApp.Quit
Sheets("Start").Range("N25").Value = "gestoppt"
Set ppP = Nothing
Set ppApp = Nothing
Call ytstarter.Run_YT1T
End Sub
Das funktioniert auch alles super.
Mit dem Start der Youtube Videos ebenfalls, welche wie folgt aufgerufen werden:
Sub Run_YT1T()
If UserForm1.CheckBox3.Value = True Then
yt1time = Now + TimeValue(Sheets("Overview").Range("C16").Value & ":" & Sheets("Overview").Range("D16").Value & ":" & Sheets("Overview").Range("E16").Value)
Application.OnTime yt1time, "Run_YT1"
Else
FlexTimer.Run_P2T
End If
End Sub
Sub Run_YT1()
Sheets("Start").Range("N26").Value = "läuft"
Dim laufzeit As Double
laufzeit = Now + TimeValue(Sheets("Overview").Range("C17").Value & ":" & Sheets("Overview").Range("D17").Value & ":" & Sheets("Overview").Range("E17").Value)
Set IE = CreateObject("InternetExplorer.Application")
With IE
.MenuBar = 0
.Toolbar = 0
.StatusBar = 0
.navigate "http://www.youtube.com/embed/" & Sheets("Overview").Range("C14").Value & "?autoplay=1"
.Visible = 1
apiShowWindow IE.hwnd, SW_MAXIMIZE
End With
Application.Wait laufzeit
On Error GoTo weiter
IE.Quit
weiter:
Sheets("Start").Range("N26").Value = "gestoppt"
Set IE = Nothing
Call FlexTimer.Run_P2T
End Sub
Nun zu meinem eigentlichen Problem.
Da ich ja mehrere Application.OnTime verwende, benötige ich auch eine Stoppfunktion.
Ich habe versucht das ganze mittels
Application.OnTime praesent2, "Run_P2T", Schedule:=False
zu stoppen. Leider ohne Erfolg da ich immer einen Fehler erhalte.
Wie kann ich alle Application.OnTime stoppen lassen?
Also sprich:
Application.OnTime praesent1, "Run_P1"
Application.OnTime praesent2, "Run_P2"
Application.OnTime yt1time, "Run_YT1"
Application.OnTime yt2time, "Run_YT2"
Wäre super wenn ihr mir dabei helfen könntet.
Danke

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wie kann ich mehrere Application.OnTime stoppen?
26.07.2014 08:21:21
Daniel
Hi
Du musst sicherstellen, dass du beim Stoppen genau dieselbe Zeit verwendest wie beim Starten.
Hierzu musst du dir die Startzzeit in einer projektweit gültigen Variable merken und beim Stoppen wiederverwenden. Diese Variable darf dazwischen natürlich nicht verändert werden.
Eine projektweit gültige Variable erstellt du, indem du die Variable in einem allgemeinen Modul oberhalb der Makros direkt unter Option Explcit als Public deklariert.
Beispiel
Option Explicit
Public praesent1 as Date
Sub Starten()
praesent1 = Now + Timeserial(1, 0, 0)
Application.OnTime praesent1, "Run_P1T"
End Sub
Sub Stoppen()
If praesent1 > Now Then Application.OnTime praesent1, "Run_P1T", Schedule:=False
End Sub
Gruß Daniel

Anzeige
AW: Wie kann ich mehrere Application.OnTime stoppen?
26.07.2014 20:39:03
Rene
danke für die antwort.
schaut ganz gut aus, zumindest für die präsentationen.
allerdings habe ich jetzt folgendes problem.
da die internetseiten ja geöffnet werden, ist in excel während die seite läuft
nix machbar, da lädt einfach die seite im hintergrund und ich kann nix zum stoppen anklicken.
schließt die seite und ich klick dann auf stopp passiert nix, da ja zu dem zeitpunkt noch kein timer läuft. aber die seite startet nach kurzer zeit erneut. also müsste ich das ganze irgendwie abfangen sobald man auf stopp klickt damit die schleife
präsentation 1 -> youtube 1 -> präsentation 2 -> youtube 2 
geschlossen wird. ist das realisierbar?

Anzeige
AW: Wie kann ich mehrere Application.OnTime stoppen?
26.07.2014 20:59:44
Rene
das mit dem haken, hätte ich vielleicht mal früher sehen soll.
sorry für das erneute posting aber ich mach mal den haken rein, dass der thread weiter offen ist...

AW: Wie kann ich mehrere Application.OnTime stoppen?
26.07.2014 21:49:20
Rene
ok ich glaub ich habe die lösung....
beim klick auf einen button, nenne wir ihn einfach stopp
mach ich einfach folgendes
If praesent1 > Now Then Application.OnTime praesent1, "Run_P1", Schedule:=False
If praesent2 > Now Then Application.OnTime praesent2, "Run_P2", Schedule:=False
thisWorkbook.Sheets("Overview").Range("Q4").Value = "stopp"
ThisWorkbook.Sheets("Overview").Range("Q5").Value = "stopp"
ThisWorkbook.Sheets("Overview").Range("Q6").Value = "stopp"
ThisWorkbook.Sheets("Overview").Range("Q7").Value = "stopp"
ThisWorkbook.Sheets("Overview").Range("Q8").Value = "stopp"
ytstarter.yt1stop
also erstmal irgendwo zwischenspeichern das angehalten werden soll
da die schleife hier noch läuft
gehts natürlich bei ytstarter.yt1stop wie folgt weiter
If yt1time > Now Then Application.OnTime yt1time, "Run_YT1", Schedule:=False
If yt2time > Now Then Application.OnTime yt2time, "Run_YT2", Schedule:=False
ThisWorkbook.Sheets("Start").CommandButton1.Enabled = True
ThisWorkbook.Sheets("Start").CommandButton3.Enabled = True
ThisWorkbook.Sheets("Start").CommandButton7.Enabled = True
erstmal zur sicherheit
bei den schleifen selbst, also bei den timern, steht jetzt folgendes
Public Sub Run_P1T()
If ThisWorkbook.Sheets("Overview").Range("Q4").Value = "stopp" Then GoTo ende
If UserForm1.CheckBox2.Value = True Then
praesent1 = Now + TimeValue(Sheets("Overview").Range("C6").Value & ":" & Sheets("Overview"). _
Range("D6").Value & ":" & Sheets("Overview").Range("E6").Value)
Application.OnTime praesent1, "Run_P1"
Else
ytstarter.Run_YT1T
End If
Exit Sub
ende:
Call stopp_all

also hier wird jetzt erstmal geschaut ob in der zuvor zwischengespeichten zelle
stopp steht, wenn ja gehts zu stopp_all
und damit beim starten das zuvor gespeicherte stopp wieder raus geht, einfach
ThisWorkbook.Sheets("Overview").Range("Q4:Q8").Value = ""

in die startsub mit reingeschrieben.
vielleicht keine super lösung, wahrscheinlich sogar eher eine ziemlich schlammpige,
jedoch funktioniert das ganze so recht gut. werd das mal bisserl testen und schauen.
bisher gehts zumindest. hoffentlich bleibt das auch so.

Anzeige

54 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige