Mehrfacher Countdown in Excel

Liebe/-r Experte/-in,

hallo wir brauchen einen Countdown der frei Programmierbar ist. Da ich leider nur ein wenig in VBA bescheid weiß, bekomme ich dass nicht so hin wie ich will. Der Countdown funktioniert nur einmal und dann hört er auf, irgendwie funktioniert meine Schleife nicht. Bis jetzt habe ich dass so gelöst:

Sub startClock()
Dim anz_ges

anz_ges = ActiveSheet.Cells(10, 7)

For ausserer_zaehler = 1 To anz_ges
anz_takt = ActiveSheet.Cells(ausserer_zaehler + 1, 7)
anz_min = ActiveSheet.Cells(ausserer_zaehler + 1, 8)

For innerer_zaehler = 1 To anz_takt

dStopCount = Now() + TimeSerial(0, 0, anz_min)
dNextRun = Now + TimeSerial(0, 0, 1)
ActiveSheet.Cells(5, 5) = ausserer_zaehler
Call tickClock

Next innerer_zaehler

Next ausserer_zaehler
End Sub

Sub stoppClock()
On Error Resume Next
Application.OnTime dNextRun, „tickClock“, schedule:=False
dNextRun = 0
End Sub

Sub tickClock()

If dNextRun = 0 Then Beep
dNextRun = Now + TimeSerial(0, 0, 1)
If Now()

Hallo Swen,

ich kenne Excel als ein Tabellenkalkulationsprogramm… was verstehst Du da unter einem Countdown? Wie muss ich mir das vorstellen? Wozu soll das gut sein?

…bekomme ich dass nicht so hin wie ich will. Der
Countdown funktioniert nur einmal und dann hört er
auf, irgendwie funktioniert meine Schleife nicht.

Nimms mir nicht übel, aber mit „irgendwie funktioniert was nicht“ kann ich nicht wirklich was anfangen: :wink:

Gruß
(Woly)

Es ist etwas schwer, das Programm und die Problematik zu verstehen (warum in einer Schleife n-mal warten?). Was mir auffiel:

  • es gibt keine Variablendeklaration, z.b. ist dNextRun eine interne Variable in zwei getrennten Routinen startClock und tickClock, es soll wohl aber beides Male die gleiche sein? Dann die Deklaration vor die erste Routine vorziehen. Wenn man dNextRun und dStopCount vorzieht wird die Schleife mehrfach durchlaufen!
  • grundsätzlich sollte man mit der Option explicit arbeiten und alle Variablen deklarieren
    Viel Erfolg
    Rainer

Grüezi Swen

Was genau soll denn geschehen - wie stellst Du dir den Ablauf denn vor?

Was soll der ‚innere‘ und der ‚äussere‘ Zähler denn tun?

Was soll geschehen wenn der eine abgelaufen ist?


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

hallo wir brauchen einen Countdown der frei Programmierbar
ist. Da ich leider nur ein wenig in VBA bescheid weiß, bekomme
ich dass nicht so hin wie ich will. Der Countdown funktioniert
nur einmal und dann hört er auf, irgendwie funktioniert meine
Schleife nicht. Bis jetzt habe ich dass so gelöst:

Sub startClock()
Dim anz_ges

anz_ges = ActiveSheet.Cells(10, 7)

For ausserer_zaehler = 1 To anz_ges
anz_takt = ActiveSheet.Cells(ausserer_zaehler + 1, 7)
anz_min = ActiveSheet.Cells(ausserer_zaehler + 1, 8)

For innerer_zaehler = 1 To anz_takt

dStopCount = Now() + TimeSerial(0, 0, anz_min)
dNextRun = Now + TimeSerial(0, 0, 1)
ActiveSheet.Cells(5, 5) = ausserer_zaehler
Call tickClock

Next innerer_zaehler

Next ausserer_zaehler
End Sub

Sub stoppClock()
On Error Resume Next
Application.OnTime dNextRun, „tickClock“, schedule:=False
dNextRun = 0
End Sub

Sub tickClock()

If dNextRun = 0 Then Beep
dNextRun = Now + TimeSerial(0, 0, 1)
If Now()

Also der aüßere Zähler soll die Anzahl der unterschiedlichen Countdowns zählen, der innere Zähler dann jeweils wie oft die länge eines Countdown (Takt)wiederholt werden soll. Aber irgendwie kehrt das Programm nach der call funktion nicht zurück, oder zu schnell das habe ich eben noch nicht begriffen.

Grüezi Swen

…und was steht denn nun wo genau im Tabellenblatt?

Ohne diese Angaben ist es äusserst mühsam das Ganze nachzubauen.

Hmmm, Der inner Zählen ruft die Sum ‚tickClock‘ während des Ablaufs mehrfach auf und selbige schreibt dann immer in eine definierte Zelle einen Wert.

Vermutlich scheitert es daran, dass TickClock so oft aufgerufen wird und sich dann über die interne OnTime selbst ebenfalls wieder aufruft.
Irgendwann läuft da ein Stack voll, was zum Abbruch der ganzen Übung führt.

Was genau ist denn der tiefere Sinn des Ganzen?
Wozu soll der gesamte Aufbau dienen?

Ich fürchte, dass der Excel-Timer für solche ‚Spässe‘ nicht wirdklich geeignet ist…

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

sorry, aber fuer undokumentierte Routinen solcher Laenge habe ich zur Zeit wenig Zeit.

Zelle D4 der Count down

G1 Überschrift Anzahl
H1 Überschrift Taktzeit
dann zum Beispiel
G2 = 8 ; H2 = 15’ 8 Takte a 15 min länge sollen gezählt werden
G3 = 1 ; H3 = 30 ’ 1 Takt a 30 min länge soll gezählt werden
G4 = 4 ; H4 = 15 ’ 4 Takte a 15 min sollen gezählt werden

usw.

und in der Zelle G10 steht die Anzahl der belegten Zellen in diesem Beispiel 3

Hoffe dass ich mich jetzt klarer ausgedrückt habe.

Grüezi Swen

Zelle D4 der Count down

G1 Überschrift Anzahl
H1 Überschrift Taktzeit
dann zum Beispiel
G2 = 8 ; H2 = 15’ 8 Takte a 15 min länge sollen gezählt werden
G3 = 1 ; H3 = 30 ’ 1 Takt a 30 min länge soll gezählt werden
G4 = 4 ; H4 = 15 ’ 4 Takte a 15 min sollen gezählt werden

usw.

und in der Zelle G10 steht die Anzahl der belegten Zellen in
diesem Beispiel 3

Danke, nun ist der Aufbau der Daten klar(er).

Mir fällt als erstes nun gerade folgedes auf:

Du willst die CountDowns mit Minuten machen, in TimeSerial) hast Du die Variable aber im Sekunden-Teil eingetragen.

Könnte dies eine der Ursachen für die Probleme sein?


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo zusammen,

ein paar Hintergrundinfos wären nicht schlecht. Was ist denn das Ziel? Was soll am Ende rausgekommen?

Hallo Swen,

ich ahbe deine VBA-Schleifen ausprobiert, laufen durch, aber ich weiß nicht was du eigentlich machen willst.

WENN ES EILT; KANN ICH NICHT HELFEN; DA ICH NÄCHSTE WOCHE SCHULUNGEN HALTEN MU? UND DA ERFAHRUNGSGEMÄSS KEINE ZEIT HABE:Wenn du allerdings Zeit hast, dann schicke mir mal eine Beschreibung, was das Tool wirklich machen soll.

Bisherher schreibt es in Zelle G10 und in Zelle E5 Zahlen in Abhängigkeit von Uhrzeit und Größe der Ausgangszahl.

(jedenfalls ist das bei mir so). Wenn du mit F8 dutch die Schleifen läufst, siehst du, wie sich diese Zellen verändern.)

Grüße

Jürgen

nein das habe ich nur für den Test so gemacht, ich will ja nicht jedes mal 15min warten, daran liegt es leider nicht


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Ziel ist eine Produktionsuhr

so kann man die Taktzeiten anzeigen lassen und schnell verändern, sowie eben auch Pausenzeiten usw.

ok mal sehen, ich schaue mal dass ich eine genaue Beschreibung am WE hinbekomme

Hallo Swen,

mit der Methode „Application.OnTime“ habe ich nicht wirklich gute Erfahrungen gemacht. Zu groß ist der mögliche Einfluß von außen(also andere Programme), die diese Methode stören können und damit auch Excel zum Absturz bringen. Ich hatte mal in einem anderen Forum zwei Timer programmiert und eine Anleitung dafür geschrieben. Vielleicht ist für Dich was dabei.
Hier die Links dazu:
http://www.office-loesung.de/ftopic197593_0_0_asc.php
http://www.office-loesung.de/ftopic197627_0_0_asc.php

Hoffe, dies hilft Dir.

LG Gerd

Grüezi Swen

nein das habe ich nur für den Test so gemacht, ich will ja
nicht jedes mal 15min warten, daran liegt es leider nicht

Ich würde dennoch versuchen, die Zeiten mal etwas zu erhöhen, damit die Sub nicht in zu kurzen Abständen aufgerufen wird.

Dannoch zweifle ich am Aufbau des Ganzen, da ein und derselbe Timer sich mehrfach selbst aufruft. Ich fürchte, dass Excel da dann in einen Overflow läuft.

Daher wäre ein explizit dafür ausgelegter Timer wohl sinnvoller.

…was mich zu meiner Frage zurückbringt wozu man solch geschachtelte Timer in Excel denn eigentlich einsetzen kann/möchte… :wink:

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Swen,

hier fehlt noch jede Menge an Informationen. Du wolltest offensichtlich auch den Sheet anhängen, was misslang.

Einige generelle Anmerkungen (Dinge, die spontan auffallen):

* Der Code ist schwer lesbar. Besser wäre es, mit „benannten Bereichen“ zu arbeiten. Man kann einer Zelle oder einem Zell-Bereich leicht einen Namen geben (einfach links oben eintragen, da wo sonst A1 bzw. Z1S1 steht). Dann steht in einer Formel z.B. „=Betrag*Dollarkurs“ statt „=$A$1*$B$1“ - was sicher zur besseren Übersicht beiträgt. Im Code steht dann übrigens z.B. „=ActiveSheet.Range(„Gesamtanzahl“)“ statt „ActiveSheet.Cells(10, 7)“.

* Die Prozedur StopClock kann ich noch nicht so richtig einordnen. Aufgerufen wird sie ja nirgendwo.

* Es fehlt jede Information darüber, wie dieser Code eingesetzt werden soll: Wie wird er aufgerufen (per Button, als Makro, …), wie beendet, was soll er ausführen?

* Die Variablendeklarationen sind offensichtlich völlig falsch (das könnte hier auch das Problem sein):
dNextRun ud dStopCount sind nirgendwo deklariert. In der Sub startClock werden sie gesetzt. Verwendet werden sie dann aber in der Sub tickClock. Da bei Euch offensichtlich keine Variablendeklaration zwingend erforderlich ist, zeigte der Debugger keinen Fehler an - es wurde in der Sub tickClock einfach eine NEUE Variable deklariert (die Variablen aus der Sub startClock sind an dieser Stelle NICHT bekannt). Eine neue Variable steht immer auf 0 => Ausstieg!
=> Die Deklaration der Variablen ist hier PFLICHT und gehört in den Kopfteil des Moduls, damit sie für ALLE darin gespeicherten Prozeduren gilt! Alternativ könnte man die Werte an die Prozeduren übergeben.

Das ist ein ganz typischer Anfänger-Fehler. Schwer zu erkennen ist er mit den falschen Einstellungen auch noch, der Debugger hilft hier nicht. Deshalb: Unbedingt „Option Explicit“ verwenden! Man kann in den Einstellungen festlegen, dass eine Variablendeklaration IMMER erforderlich ist (sonst meckert der Debugger). Dann wäre an dieser Stelle eine Fehlermeldung erschienen. Wie das genau geht, ist abhängig von der Excel-Version (die man bei Fragen sinnigerweise auch immer angibt).

Liebe Grüße,
Kurt

ich habe mir das makro mal genauer angeschaut, leider ist mir nicht ganz klar was es bewirken soll:

die Schleife läuft bis von Zeile 2 bis Anzahl-Gesamt, wobei 9 das maximum ist, das funktioniert gut.

Es werden in Zelle D4, die verschiedenen Laufzeiten angegeben, wobei ich leider nicht weiß, warum sie überschieben werden sollen.

Warum erfordert ein Countdown ein Makro, muss es zu einer bestimmten Zeit ausgeführt werden? Alles andere ließe sich auch mit Formeln machen

Laufzeit + Pause = Produktionszeit

Soll die Schleife mehrmas von 2 bis an_ges laufen? Oder welche Schleife ist gemeint?

sry für die Form.

Ziel ist eine Produktionsuhr

so kann man die Taktzeiten anzeigen lassen und schnell
verändern, sowie eben auch Pausenzeiten usw.

Wenn meine Antwort noch benötigt wird, würde ich empfehleh die WinAPI zu benutzen. Mit allen Vor- und Nachteilen.