❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Änderungsabfrage

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
OldIron
Beiträge: 9
Registriert: Mi 3. Sep 2014, 17:26

Änderungsabfrage

Beitrag von OldIron » Di 28. Okt 2014, 20:42

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

lessger
Beiträge: 249
Registriert: Fr 4. Mai 2012, 13:33

Re: Änderungsabfrage

Beitrag von lessger » Di 28. Okt 2014, 21:48

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
LibreOffice 5.4.6.2 / Windows 10 64Bit / WIndows 10 32Bit

OldIron
Beiträge: 9
Registriert: Mi 3. Sep 2014, 17:26

Re: Änderungsabfrage

Beitrag von OldIron » Mi 29. Okt 2014, 14:08

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

lessger
Beiträge: 249
Registriert: Fr 4. Mai 2012, 13:33

Re: Änderungsabfrage

Beitrag von lessger » Mi 29. Okt 2014, 16:00

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
LibreOffice 5.4.6.2 / Windows 10 64Bit / WIndows 10 32Bit

OldIron
Beiträge: 9
Registriert: Mi 3. Sep 2014, 17:26

Re: Änderungsabfrage

Beitrag von OldIron » Do 30. Okt 2014, 12:18

Hallo lessger,
dann bleibt mir nichts weiter übrig,als das Makro zu schreiben.
Nochmal vielen Dank.

Mfg OldIron

lessger
Beiträge: 249
Registriert: Fr 4. Mai 2012, 13:33

Re: Änderungsabfrage

Beitrag von lessger » Do 30. Okt 2014, 17:13

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
Zuletzt geändert von lessger am Fr 31. Okt 2014, 15:20, insgesamt 1-mal geändert.
LibreOffice 5.4.6.2 / Windows 10 64Bit / WIndows 10 32Bit

OldIron
Beiträge: 9
Registriert: Mi 3. Sep 2014, 17:26

Re: Änderungsabfrage

Beitrag von OldIron » Fr 31. Okt 2014, 13:45

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


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten