Der umfangreiche Vorrat an Schlüsselwörtern in VisualBasic öffnet weite Horizonte.
Die Anweisung BeiZeit / OnTime ruft nach einer beliebigen Zeitspanne
beliebige Funktionen auf. Was liegt da näher als mit den Mitteln von Excel eine Uhr zu
konstruieren? Lesen Sie, wie diese Idee auf verschiedene Weise realisiert wurde (Heft-CD).
Gestalten Sie Ihre eigene Uhr und lassen Sie sie ticken, während Sie andere Anwendungen benutzen.
Die Idee ist einfach: In einer Tabelle liefert die Excel-Funktion JETZT() die Systemzeit
und damit auch Werte für Stunde, Minute und Sekunde. Die Tabellenzellen für die Zeiger
beziehen sich darauf. Ist die Tabelle vollständig, stellt man ihre Werte in einem Diagramm dar.
Mit der BeiZeit- / OnTime-Anweisung eines Makros wird in regelmäßigen
Abständen die Tabelle aktualisiert und damit auch die aktuelle Uhrzeit angezeigt.
Uhr 1: praktische Mathematik
Tabelle. Aus Stunden-, Minuten- und Sekundenwert lassen sich - ein Dank an die Geometrie,
insonderheit an die Zahl PI, den Sinus und den Cosinus - Werte auf einem Kreis berechnen. Hat nicht ein
vollständiger Kreis einen Umfang von 2 mal PI mal Radius? Da entfiele, durch 60 geteilt, auf jeden
Teilstrich eines Zifferblatts PI mal Radius durch 30. Die Radien sind natürlich die Zeiger,
versteht sich, deren unterschiedliche Größe mit einem Faktor bewirkt wird: mal 1 für den
Sekundenzeiger, mal 0,9 für den Minutenzeiger, mal 0,56 für den Stundenzeiger. Aber vielleicht
haben Sie einen anderen Geschmack. Bitte, variieren Sie die Formeln.
Denkt man sich die Uhr als ein Koordinatensystem, so liegt der Ursprung jedes Zeigers bei
x = 0 und y = 0, die Spitze bei
x = Sinus(PI mal Radius durch 30) und
y = Cosinus(PI mal Radius durch 30). Leider rechnen nicht alle Excel-Versionen genau.
Es kann vorkommen, daß dort, wo 0 herauskommen soll, nur fast 0 herauskommt und damit z.B.
um 12 Uhr die Zeiger nicht genau übereinanderliegen. Solche Kleinigkeiten stören ungemein,
auch wenn alle Formeln richtig sind. Deswegen wird zur Sicherheit das Ergebnis auf 10 Stellen gerundet.
(Beim Programmieren passieren ständig solche unvorhergesehenen Ereignisse. Man muß ihnen
auf den Grund gehen und dann eine passende Antwort einbauen.)
Zwei Schwierigkeiten sind zu meistern: Erstens wandert der Stundenzeiger zwischen den vollen Stunden,
so daß auf den Stundenwert der Minutenwert, geteilt durch 12, addiert werden muß. Und
zweitens passen (gewöhnlich) nicht mehr als zwölf Stunden auf ein Zifferblatt. Da hält
die Mathematik die Modulo-Berechnung bereit, in Excel entspricht sie der Funktion Rest().
Sie läßt hier die Stunden nicht über 11 hinauskommen, sondern fängt dann wieder
bei 0 an. Schauen Sie sich die Tabelle an. Sie werden jetzt alle Formeln verstehen.
Hier dieselbe Tabelle mit einer Beispieluhrzeit.
Diagramm. Die X- und Y-Werte der Tabelle werden nun mit einem Punktdiagramm dargestellt. Jede
Datenreihe (Stunde, Minute, Sekunde, Zifferblatt) wird separat in das Diagramm aufgenommen.
Anschließend wird das Diagramm nach Gusto formatiert.
Makro. Bei der Verwendung von selbstaufrufenden Funktionen ist Vorsicht geboten. Weniger beim
Starten - z.B. durch automatischen Aufruf beim Öffnen der Datei, beim Klicken auf das Diagramm oder
eine Schaltfläche - als vielmehr beim Stoppen, spätestens beim Schließen der Datei.
Nichts ist unangenehmer als eine gerade geschlossene Datei, die sich immer wieder von selbst öffnet,
weil die noch offene Makroanweisung ausgeführt werden will. Je gründlicher man alle
möglichen Bedingungen bei der Konstruktion berücksichtigt und testet, desto zuverlässiger
wird das Ergebnis sein. Ändern Sie aber nichts am Quellcode, während die Uhr läuft.
Uhr 2: die Vielfältige
Tabelle. Um den Reichtum der Diagrammarten auszuschöpfen, wurde hier den Zeigern und dem
Zifferblatt je 60 Werte zugeordnet. Die Stundenwerte werden dabei mit 5 multipliziert. Darauf bauen
drei Datenreihen für den Stundenzeiger auf: Bei einer springt er tatsächlich nur von Stunde
zu Stunde, bei einer rückt er zu den Minuten 0, 12, 24, 36 und 48 vor, bei der dritten zu den
Minuten 6, 18, 30, 42 und 54. Je nach Geschmack lassen sich also Uhren bauen, bei denen der Stundenzeiger
zur vollen Stunde vor oder auf der 12 auf den Minutenzeiger wartet. Wenn das keine
Detailarbeit ist. Mathematische Operationen mit Sinus und Co. entfallen hier, weil die graphische
Umsetzung Excel überlassen wird. Jede Tabellenzelle vergleicht den aktuellen Stunden-, Minuten-
und Sekundenwert mit einem der 60 möglichen Werte. Stimmt er überein, wird ein großer
Wert für die jeweilige Zeigergröße vorgesehen, ansonsten 0.
Diagramme. Die Tabellenwerte eignen sich nun für jeden Diagrammtyp. Probieren Sie es aus.
Verfeinerungen
"Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge", wußte Wilhelm Busch
und weiß jeder Programmierer. In den verfeinerten Uhren werden Werte aus Zellen verarbeitet, in
die der Benutzer Eintragungen machen kann. Diese Zellen sind farbig hinterlegt und ihr Schutz ist
aufgehoben. Ein geschütztes Tabellenblatt erlaubt nur hier Veränderungen und verhindert sie
woanders, besonders bei den Formeln.
Zeitzone. Der Wert einer Zelle, die für die Abweichung von der Ortszeit vorgesehen ist,
wird zum Stundenwert addiert. Kommen dabei unsinnige Werte unter 0 und über 11 heraus, macht das
nichts. Die Modulo-Berechnung bringt auch diese Werte wieder in den richtigen Bereich.
Wecker. Prinzipiell ist jedem klar, daß eine vorgegebene Uhrzeit mit der tatsächlichen
verglichen wird. Wenn sie übereinstimmt, passiert irgend etwas. Genau diesen Worten folgt die
Programmierung. Für die Weckzeit sind drei Zellen für Stunde, Minute und Sekunde vorgesehen.
Der Vergleich findet in der Zelle rechts daneben statt.
Erschrecken Sie nicht vor der Formel. Sie
vergleicht nicht nur die Werte, sondern sieht auch für den Fall fehlender Werte eine sinnvolle
Reaktion vor. Wer bei der Weckerstunde 12 einträgt, meint natürlich 12 Uhr, 0 Minuten,
0 Sekunden. Wer bei der Weckersekunde 0 einträgt, will wahrscheinlich zu jeder vollen Minute ein
Signal erhalten. Wer nichts einträgt, will nichts. Alle diese Möglichkeiten werden
berücksichtigt. Hier sehen Sie auch deutlich, daß sprechende Bereichsnamen für Zellen
sehr hilfreich beim Verständnis und beim Programmieren sein können. Werden je eine Bedingung
für Stunde, Minute und Sekunde wahr, so wird als Ereignis eine benutzerdefinierte Funktion
Wecker() aufgerufen, die man im Quellcode bequem nach Belieben gestalten kann.
Zeigergröße. Die Formelwerte für die Zeigergröße sind hier variabel
und abhängig von dem Inhalt mehrerer Zellen. Ein Benutzer kann so leicht ohne Kenntnis der
Tabellenkonstruktion und Formeln Zeigerursprung, Zeigergröße und Zifferblattmarkierungen
verändern.
Hinweis. Beim Schließen der Datei wird durch eine Anweisung im Quellcode die Nachfrage
verhindert, ob Sie die Datei speichern wollen. Das entspricht den Bedürfnissen eines Anwenders
am ehesten. Wenn Sie allerdings Veränderungen an der Uhr vornehmen, vergessen Sie nie vor dem
Schließen das Speichern.
Veröffentlichung
Der Text wurde in redaktionell bearbeiteter Form unter dem Titel
"Wem die Stunde schlägt: Excel mit Analoguhr"
veröffentlicht in Computer easy - Sonderheft Excel Praxis.
6. Excel-Ausgabe 2002 S. 72-74.