Ich hatte dieses Problem auch, dass ich eine laufende Uhr in einem Calc-Dokument gebraucht habe und nicht wollte, dass ständig Zellneuberechnungen durchgeführt werden.
Dann bin ich darauf gekommen, einen Trigger einzuführen. Die Triggerzelle des Uhrenblatts springt jede Sekunde (Wait 1000) von 0 nach 1 und wieder zurück.
Damit Calc gezwungen wird, die Displayzelle bei Veränderung des Triggers neu zu berechnen, stelle ich sie mit der Verkettenfunktion dar und füge einen leeren String ("") aus der Platzhalterzelle hinzu. Diese wiederum wird abhängig vom Wert der Triggerzelle immer neu berechnet (bleibt aber immer "").
Damit die Uhr immer wieder geeicht wird und nicht falschläuft, gibt es eine zweite Schleife die mittels des Calculate Befehle alle 50 Durchläufe (frei einstellbar) die Uhr mit der Systemzeit synchronisiert.
Um das Makro zu stoppen habe ich noch einen Unterbrecher eingeführt
Damit das Dokument nicht unter laufendem Makro beendet/gespeichert wird, sollte man das 2. Makro (s.u) an die entsprechenden Ereignisse knüpfen.
Code: Alles auswählen
sub Uhr
rem Variablen und Anfangsbedingungen setzten------
mydoc = thiscomponent
mySheet = myDoc.Sheets().getByName("Display")
trigger = mysheet.getCellRangeByName("$F$4") rem Triggerzelle
clockstop = mysheet.getCellRangeByName("$I$4") rem Unterbrecherzelle
clockstop.value=0 rem Unterbrecherzelle null setzen
rem ----------------------------------------------------------------------
do rem äussere Schleife zur Zellenneuberechnung/Systemzeitabgleich (50 Durchläufe bis zur nächsten Sync)
for i = 1 to 50 rem innere Schleife zur Zeittriggerung
if clockstop.value <> 0 Then exit do rem Stopbedingung abfragen
trigger.value = 0 rem Trigger im Sekundentakt zwischen null und 1 springen lassen (Wait 1000 ist ca 1 sec)
wait 1000
trigger.value = 1
wait 1000
next i
thiscomponent.calculate
loop
clockstop.value=0 rem Unterbrecher rücksetzen
end sub
sub alle_Markros_beenden
end
end sub
Ich hatte dieses Problem auch, dass ich eine laufende Uhr in einem Calc-Dokument gebraucht habe und nicht wollte, dass ständig Zellneuberechnungen durchgeführt werden.
Dann bin ich darauf gekommen, einen Trigger einzuführen. Die Triggerzelle des Uhrenblatts springt jede Sekunde (Wait 1000) von 0 nach 1 und wieder zurück.
Damit Calc gezwungen wird, die Displayzelle bei Veränderung des Triggers neu zu berechnen, stelle ich sie mit der Verkettenfunktion dar und füge einen leeren String ("") aus der Platzhalterzelle hinzu. Diese wiederum wird abhängig vom Wert der Triggerzelle immer neu berechnet (bleibt aber immer "").
Damit die Uhr immer wieder geeicht wird und nicht falschläuft, gibt es eine zweite Schleife die mittels des Calculate Befehle alle 50 Durchläufe (frei einstellbar) die Uhr mit der Systemzeit synchronisiert.
Um das Makro zu stoppen habe ich noch einen Unterbrecher eingeführt
Damit das Dokument nicht unter laufendem Makro beendet/gespeichert wird, sollte man das 2. Makro (s.u) an die entsprechenden Ereignisse knüpfen.
[code=php]sub Uhr
rem Variablen und Anfangsbedingungen setzten------
mydoc = thiscomponent
mySheet = myDoc.Sheets().getByName("Display")
trigger = mysheet.getCellRangeByName("$F$4") rem Triggerzelle
clockstop = mysheet.getCellRangeByName("$I$4") rem Unterbrecherzelle
clockstop.value=0 rem Unterbrecherzelle null setzen
rem ----------------------------------------------------------------------
do rem äussere Schleife zur Zellenneuberechnung/Systemzeitabgleich (50 Durchläufe bis zur nächsten Sync)
for i = 1 to 50 rem innere Schleife zur Zeittriggerung
if clockstop.value <> 0 Then exit do rem Stopbedingung abfragen
trigger.value = 0 rem Trigger im Sekundentakt zwischen null und 1 springen lassen (Wait 1000 ist ca 1 sec)
wait 1000
trigger.value = 1
wait 1000
next i
thiscomponent.calculate
loop
clockstop.value=0 rem Unterbrecher rücksetzen
end sub
sub alle_Markros_beenden
end
end sub
[/code]