Live-Forum - Die aktuellen Beiträge
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

Verzögerung in Application.OnTime ???

Verzögerung in Application.OnTime ?
11.08.2014 22:21:26
Spenski
Hi
Ich habe 5 tabellenblätter . vom tabellenblatt 1 starte ich ein makro , das aktiviert tabelleblatt2 , nach einiger zeit tabellenblatt 3 usw.
Soll als Anzeigetafel dienen.
Was mich wundert ist das der code nicht den ablauf nimmt wie er soll ( 2,3,4,5,2,3,4,5,2usw.) sondern immer durcheinander. jdf bei mir auf dem PC
aber es lief auch schonmal vernünftig wie vorgegeben.
wird tabellenblatt aktiviert unterbricht der code
können da verzögerungen entstehen und sich die codes überschneiden?
Bsp. Datei
https://www.herber.de/bbs/user/92024.xlsm
gruss
christian

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verzögerung in Application.OnTime ?
11.08.2014 23:07:53
Daniel
Hi
überarbeite erstmal deinen Code.
das wichtigste wäre, Option Explicit zu aktivieren und zu prüfen, ob du nicht einen Variablenfehler drin hast.
Es muss zwar nicht sein, dass das die Ursache ist, aber einen Code der nicht mit Option Explicit erstellt wurde, werde ich nicht auf Fehler untersuchen.
Warum und wieso steht hier:
http://www.online-excel.de/excel/singsel_vba.php?f=4
ausserdem ist der Code zu komplex.
Warum teilst du das Einblenden und das Aufrufen des nächsten Einblendens in zwei Makros auf?
das halbiert die Anzahl der Makros.
im Prinzip sollte ein Makro für die Schleife reichen (Makros können sich auch selbst aufrufen) und dann noch eines fürs Starten und eines fürs Stoppen:
Option Explicit
Public t As Boolean
Public Zeit As Date
Sub start()
t = True
Schleife
End Sub
Sub Schleife()
Static i As Long
Sheets(i + 2).Select
i = (i + 1) Mod 4
If t Then
Zeit = Now + TimeSerial(0, 0, 5)
Application.OnTime Zeit, "Schleife"
End If
End Sub
um abzusichern, dass sich die Datei nicht wieder öffnet, fall jemand die Datei schließt, ohne die Schleife zu stoppen, brauchst du noch folgenden Code im Modul "DieseArbeitsmappe"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Zeit > Now Then Application.OnTime Zeit, "Schleife", schedule:=False
End Sub
Gruß Daniel

Anzeige
AW: Verzögerung in Application.OnTime ?
12.08.2014 14:56:49
Spenski
hallo Daniel...das sollte der verzeweifelte versuch werden mal was selber zu machen.
hab jetzt den code genommen den du gepostet hast und noch eine if t then abfrage eingebaut, damit wenn in der schleife t auf false gesezt wird nicht nochmal das blatt gewechselt wird...das sollte auch der sinn meiner vielen codes sein.
Option Explicit
Public t As Boolean
Public Zeit As Date

Sub start()
t = True
Schleife
End Sub

Sub Schleife()
Static i As Long
If t Then
Sheets(i + 2).Select
i = (i + 1) Mod 4
If t Then
Zeit = Now + TimeSerial(0, 0, 5)
Application.OnTime Zeit, "Schleife"
End If
End If
End Sub
wenn ich tabellenblatt 1 activiere wird t auf false gesetzt

Private Sub Worksheet_Activate()
t = False
End Sub
dank dir für deine tipps und den link
gruss
christian

Anzeige
AW: Verzögerung in Application.OnTime ?
12.08.2014 16:53:08
Daniel
Hi
auch das lässt sich noch vereinfachen.
das t ist in diesm Fall unnötig, wenn du die entsprechende Prüfung in die Schleife einbaust:
Sub Schleife()
Static i As Long
Sheets(i + 2).Select
i = (i + 1) Mod 4
IF ActiveSheet.Index  1 then
Zeit = Now + TimeSerial(0, 0, 5)
Application.OnTime Zeit, "Schleife"
End If
End Sub
Gruß Daniel

AW: Verzögerung in Application.OnTime ?
12.08.2014 18:56:23
Spenski
aber lieg ich jetzt falsch wenn ich sage das wenn ich innerhalb dieser 5sec (können später auch 30sec werden , ist noch nicht definiert)...
...also innerhalb: Zeit = Now + TimeSerial(0, 0, 5) .....
...das tabellenblatt 1 activiere er trotzdem nach ende des timers den oberen Teil bis zur IF abfrage ausführt und damit wieder von Tabellenblatt 1 auf ein anderes Springt?
gruss und danke für deine Hilfe
Christian

Anzeige
AW: Verzögerung in Application.OnTime ?
12.08.2014 19:10:27
Daniel
Stimmt.
du musst die Abfrage nach dem Aktuellen Sheet an den Anfang verschieben, bevor du die Selektion wechselst.
kannst das mit dem t natürlich auch drin lassen, ist sicherer, manchmal ist einfach dann doch zu einfach.
bei 30 sec wäre dann auch die frage was passieren soll, wenn du innerhalb dieser Zeitspanne wieder auf ein anderes Blatt zurückwechselst.
Soll dann die Schleife automatisch weiter laufen oder gestoppt bleiben bis du wieder den Button drückst.
Gruß Daniel

AW: Verzögerung in Application.OnTime ?
12.08.2014 19:27:23
Spenski
Die schleife soll nur angehalten werden wenn Blatt 1 aktiviert wird (bzw die Schleife läuft aus aber danach darf nix mehr passieren)
Blatt 1 ist ein eingabeformular, wenn die Bediener den auftragsverlauf eingegeben haben wird ein Button gedrückt und 4 Blätter im Wechsel angezeigt .also dient die Mappe gleichzeitig als Anzeigetafel.
Werde deine Version aber mit der doppelten if t abfrage mal verwenden und schauen wie es in der Praxis läuft.
Dank dir auf jedenfall für die ganzen Erklärungen
Christian
Anzeige

54 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige