[Gelöst] LO-Calc: oDoc.close(false) Fatal Error

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
G.Man
*
Beiträge: 12
Registriert: Mo, 09.12.2019 18:46

[Gelöst] LO-Calc: oDoc.close(false) Fatal Error

Beitrag von G.Man »

Hallo an Alle,
ich habe in der Datei (s. Anlage) eine Makroverknüpfung, die beim Schließen der Datei ausgeführt werden soll, eingebaut. Beim Schließen der Datei erhalte ich eine Fehlermeldung "Fatal Error".
Kann mir jemand auf die Sprünge helfen, was da faul ist? Nähere Erläuterungen stehen in der angehängten Datei.
LO_CloseDoc-01.ods
(121.99 KiB) 112-mal heruntergeladen
Danke & Gruß
Gerd
Zuletzt geändert von G.Man am Do, 23.01.2020 17:52, insgesamt 1-mal geändert.
Windows 10 Home V1809, LibreOffice V6.2
OpenOffice & MS Office: gut, VBA: gut, OO-Basic: naja
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: LO-Calc: oDoc.close(false) Fatal Error

Beitrag von Stephan »

Also ich kann den Fehler nicht nachvollziehen (LO 6.2.5 Windows), aber wahrscheinlich gibt es einige Randbedingungen die Du nicht explizit genannt hast. Mich macht z.B. das Wort "Makroverknüpfung" stutzig, was meint das?

Eher ungewöhnlich (*) ist das "falls" bei .close. Weil ich den Kommentar sehe, will ich auf jeden Fall darauf hinweisen das false, an dieser Stelle, nicht etwa bewirkt das keine Speichern-Nachfrage kommt, die käme bei true genauso wenig.
True/false stehen an dieser Stelle dafür das bei True auf jeden Fall das Dokument geschlossen wird, bei false hingegen wird Rücksicht auf andere Prozesse genommen die u.U. noch im Hintergrund aktiv sind und im Zusammenhang mit dem Dokument stehen. (Ich hoffe LO hat nicht auch an dieser Stzelle wieder etwas am API geändert wovon ich dann bisher nichts weiß.)


(*)
Wenn ich das schreibe so heißt es nicht falsch. Es ist jedoch so das bei sauberer Programmierung "true" immer passen sollte und "false" in Praxis fast nie vorkommt.


Die Fehlermeldung sagt mir leider nichts.



Gruß
Stephan
Benutzeravatar
G.Man
*
Beiträge: 12
Registriert: Mo, 09.12.2019 18:46

Re: LO-Calc: oDoc.close(false) Fatal Error

Beitrag von G.Man »

Hallo Stephan,
"Makroverknüpfung" ist so gemeint: Unter Extras > Anpassen > Ereignisse > habe ich dem Ereignis "Dokument wir geschlossen" das Makro zugewiesen.
Im Makro CloseDoc habe ich close(false) in close(true) geändert. Jetzt meldet sich beim Betätigen des Button oder bei Datei > Schließen nicht mehr das FatalError-Fenster sondern die Dokumentenwiederherstellung. ???

In der angehängten Datei habe ich mal eine Schaltfläche eingefügt, die bei Ereignis „Aktion ausführen“ das Makro CloseDoc ausführt.
Das funktioniert so, wie es soll! Warum?
LO_CloseDoc-02.ods
(126.24 KiB) 129-mal heruntergeladen
Gruß Gerd
Windows 10 Home V1809, LibreOffice V6.2
OpenOffice & MS Office: gut, VBA: gut, OO-Basic: naja
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: LO-Calc: oDoc.close(false) Fatal Error

Beitrag von Stephan »

Jetzt meldet sich beim Betätigen des Button oder bei Datei > Schließen nicht mehr das FatalError-Fenster sondern die Dokumentenwiederherstellung. ???
Na eigentlich doch klar, denn die ursprüngliche Meldung hiess ja (auch ohne das ich sie genau zuordnen konnte) das ein Fehler stattfindet, wenn Du nun mittels "true" das .close erzwingst tritt dieser Fehler auch konkret in Erscheinung und der Fehler bewirkt im Konkreten offensichtlich das LO abstürzt.
Warum?
Weil der Code in Ordnung ist.


Ich verstehe auch nicht was es für einen Sinn hat ein Makro das nur die Aufgabe hat edin Dokument zu schliessen bei dem Ereignis zu starten das stattfindet wenn das Dokument bereits geschlossen wird.

Wenn das trotzdem so gemacht werden soll, dann fange meinethalben den Fehler ab indem Du das Makro wie folgt formulierst (wahrscheinlich gibt es noch andere ggf. bessere Varianten):

Code: Alles auswählen

Sub CloseDoc(event)
	On Error Goto fehler

	If event.Source.Model.Label = "Close Doc" Then
	
		Dim oDoc As Object
		oDoc=thisComponent
	
		oDoc.close(true)				'schließen ohne Nachfrage
	End If
	Exit Sub
	
	fehler:
	
End Sub

Gruß
Stephan
Benutzeravatar
G.Man
*
Beiträge: 12
Registriert: Mo, 09.12.2019 18:46

Re: LO-Calc: oDoc.close(false) Fatal Error

Beitrag von G.Man »

Hallo Stephan,
irgendwie reden wir aneinander vorbei.
Ich verstehe auch nicht was es für einen Sinn hat ein Makro das nur die Aufgabe hat ein Dokument zu schließen bei dem Ereignis zu starten das stattfindet wenn das Dokument bereits geschlossen wird.
Das verstehe ich nun wiederum nicht. Wieso ist das Dokument bereits geschlossen, wenn das Ereignis stattfindet? Hat das mit der Schaltfläche "CloseDoc" zu tun? Die habe ich nur als Test eingefügt und wird in der Endversion nicht vorhanden sein.

Ich möchte einfach nur das Dokument ohne jede Nachfrage schließen, wenn wenn ich den Button "Schließen" in der Menüleiste, das Kreuz "Schließen" oben rechts in der Titelzeile oder unter "Datei > Schließen" anklicke - mehr nicht. Dazu habe ich dem Ereignis "Dokument wir geschlossen" das Makro zugewiesen.
Vielleicht sollte die Datei vorher in dem Makro noch gespeichert werden.

Gruß Gerd
Windows 10 Home V1809, LibreOffice V6.2
OpenOffice & MS Office: gut, VBA: gut, OO-Basic: naja
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: LO-Calc: oDoc.close(false) Fatal Error

Beitrag von F3K Total »

Also,
du möchtest das Dokument ohne Nachfrage schließen, was wiederum bedeutet, dass du bei Änderungen nicht darauf hingewiesen werden wirst.
Damit keine Abfrage zum Speichern kommt, musst du dem Dokument nur die Eigenschaft .modified = false zuordnen:

Code: Alles auswählen

Sub CloseDoc
	Dim oDoc As Object
	oDoc = thisComponent
	if oDoc.isModified then oDoc.Modified = false
End Sub
Geschlossen wird es ohnehin über den Button.
Wenn du das Dokument doch speichern möchtest, geht

Code: Alles auswählen

Sub CloseDoc
	Dim oDoc As Object
	oDoc = thisComponent
	odoc.store'->bewirkt .modified=false
End Sub
Gruß R
Benutzeravatar
G.Man
*
Beiträge: 12
Registriert: Mo, 09.12.2019 18:46

Re: [Gelöst] LO-Calc: oDoc.close(false) Fatal Error

Beitrag von G.Man »

Hallo Stephan,
danke für deine Geduld und deine Lösung - funktioniert bestens!
LO_CloseDoc-03.ods
(127.21 KiB) 134-mal heruntergeladen
Gruß Gerd
Windows 10 Home V1809, LibreOffice V6.2
OpenOffice & MS Office: gut, VBA: gut, OO-Basic: naja
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: [Gelöst] LO-Calc: oDoc.close(false) Fatal Error

Beitrag von F3K Total »

Ich bin nicht Stephan :lol: aber egal, Hauptsache es funzt!
Gruß R
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: [Gelöst] LO-Calc: oDoc.close(false) Fatal Error

Beitrag von Stephan »

Das verstehe ich nun wiederum nicht. Wieso ist das Dokument bereits geschlossen, wenn das Ereignis stattfindet?
Entschuldigung, das war falsch von mir daher geredet. Gemeint war das zu dem Zeitpunkt wo das Makro gestartet wird (durch das unter Extras-Apassen gewählte Ereignis dass Du genannt hattest) das Schließen des Dokuments bereits eingeleitet ist und nicht mehr aufgehalten werden kann.
Ich möchte einfach nur das Dokument ohne jede Nachfrage schließen, wenn wenn ich den Button "Schließen" in der Menüleiste, das Kreuz "Schließen" oben rechts in der Titelzeile oder unter "Datei > Schließen" anklicke - mehr nicht.
Das hättest Du nur auch gleich in Deinen ersten Post schreiben sollen.



Gruß
Stephan
Antworten