Seite 1 von 1

Änderungsabfrage

Verfasst: Di 28. Okt 2014, 20:42
von OldIron
Hallo Forum,
folgende Frage, auf die ich bisher keine Antwort gefunden habe: Mit welcher Funktion kann ich abfragen, ob das Arbeitsblatt in dieser Sitzung geändert wurde. Im Prinzip ist es die Funktion(das Bit), welche die "speichern" Anfrage beim Schließen auslöst. Ich möchte damit eine Zellenfunktion erstellen,
die etwa so lautet: "Wenn (geändert) dann (Heute) sonst nichts", d.h. bei einer Änderung das heutige Datum in diese Zelle eintragen . Meine LO Version ist 4.2.4.2.

MfG OldIron

Re: Änderungsabfrage

Verfasst: Di 28. Okt 2014, 21:48
von lessger
Hallo OldIron,

eine Funktion ist mir dafür nicht bekannt. In einem Makro kannst Du das mit ThisComponent.IsModified abfragen.

Ggf. kannst Du Dir damir eine eigene Funktion schreiben. Sagen wir, die heißt "MODIFIED()" und gibt TRUE oder FALSE zurück.

Wenn Du Dir damit selbst eine Funktion schreiben willst, bitte folgendes beachten:
  • Wenn Dein Sheet beim Öffnen automatisch neu kalkuliert wird, ist ThisComponent noch nicht bekannt. Die Funktion wird dann mit einem Fehler abbrechen. Mit geeigneter Fehlerbehandlung läßt sich das umgehen.
  • Wenn Du an Deinem Sheet etwas änderst, wird nicht zwangsläufig auch die Zelle, in der Dein MODIFIED steht, neu berechnet. Es werden nur solche Zellen neu berechnet, die mit der geänderten Zelle in Verbindung stehen. Du kannst z.B. =MODIFIED(JETZT()) nutzen. JETZT() wird nämlich immer neu berechnet, und wenn es Argument von MODIFIED ist, wird letzteres dann auch neu berechnet. Es st nicht nötig, denn Wert von JETZT() innerhalb von MODIFIED irgendwie zu benutzen.

Grüße
Gerhard

Re: Änderungsabfrage

Verfasst: Mi 29. Okt 2014, 14:08
von OldIron
Hallo egsel, hallo lessger,
vielen Dank für eure Antworten. Leider entsprechen sie nicht dem, was ich suche. Unter Excel hatte ich dies mit einem Makro gelöst. Da ich aber ohne Makro
auskommen will und LO ein offenes Programm ist, hoffe ich, das jemand tief genug in der Materie ist, um diese Variable zu kennen und sie abzufragen.
Schlimmstenfalls muß ich versuchen, das VBA Makro zu konvertieren.

MfG OldIron

Re: Änderungsabfrage

Verfasst: Mi 29. Okt 2014, 16:00
von lessger
Hallo OldIron,

die "Variable" (genaugenommen ist es eine Methode) ist eben ThisComponent.IsModified. Die kannst Du allerdings nicht aus Calc, sondern nur aus einem Macro abfragen.

Grüße
Gerhard

Re: Änderungsabfrage

Verfasst: Do 30. Okt 2014, 12:18
von OldIron
Hallo lessger,
dann bleibt mir nichts weiter übrig,als das Makro zu schreiben.
Nochmal vielen Dank.

Mfg OldIron

Re: Änderungsabfrage

Verfasst: Do 30. Okt 2014, 17:13
von lessger
Hallo OldIron,

das Makro (als Funktion) ist eigentlich ganz simpel (Aufruf mit =MODIFIED() aus Calc):

Code: Alles auswählen

Function Modified() As Boolean
'
'	Rückgabewert:	
'		TRUE wenn das Sheet seit dem letzten Save geändert wurde
'		FALSE wenn nicht oder im Fehlerfall
'	
'	Wenn das Makro beim Öffnen automatisch ausgeführt wird, ist ThisComponent noch nicht gesetzt
'	In diesem Fall wird False zurückgegeben
	On Error Goto NoComponent
	Modified = ThisComponent.isModified
	Exit Function
NoComponent:
	Modified = False

End Function
Da hast Du aber noch ein Problem mit der Neuberechnungslogik von Calc. Das Macro muß ja nach einer Änderung irgendwo im Sheet aufgerufen werden (Neuberechnung), damit eine Änderung von IsModified den entsprechenden Zellwert ändert. Das ist aber nicht automatisch der Falle, da nach einer Änderung nur abhängige Zellen neu berechnet werden. Das kannst Du umgehen, indem Du den Aufruf mit =MODIFIED(JETZT()) machst. JETZT() wird nämlich immer neu berechnet, es sei denn, automatische Neuberechnung ist abgeschaltet.

Grüße
Gerhard

Re: Änderungsabfrage

Verfasst: Fr 31. Okt 2014, 13:45
von OldIron
Hallo lessger,
Danke für Deinen Tip. Um ihn zu verwerten brauche ich noch einige Zeit, da ich mich erst wieder in die Materie einarbeiten muß. Mein VBA Makro ist schon
-zig Jahre alt und ich ein paar Jahre im Ruhestand. Da dauert das Lernen etwas länger.

MfG OldIron