Problem beim schließen eines oooDokumentes über makro

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Problem beim schließen eines oooDokumentes über makro

von sheepy007 » Do, 11.01.2007 18:21

ja wie bereits ganz am anfang geschrieben handelt es sich nur um die Funktion "thisComponent.close(true)",welchen Basic nicht verarbeiten möchte. Und wie erwähnt, kommt dieser Fehler nur wenn mein Dialog aus Calc selbst aufgerufen wir.
Starte ich mein Basic Programm von dem "Makro" Editor aus, beendet er alles ohne Probleme

mfg sHeepy

von Toxitom » Do, 11.01.2007 18:10

Hey Sheepy,
oDialog.endExecute() bedeutet doch, dass er den Dialog schließen soll oder?
Fast. Es bedeutet, dass der Dialog beendet werden soll. Das geht natürlich auch nur, wenn nicht noch andere Prozesse den Dialog "am Leben erhalten". Tritt der Fehler denn hier auf? Wenn die Fehlermeldung kommt, ist in der Regel auch die betreffende Zeile im Makro-Code markiert.
....es kommt trotzdem noch die gleiche Fehlermeldung
Ist vielleicht noch ein Dialog offen? Irgend ein anderer?

Gruss
Thomas

von sheepy007 » Do, 11.01.2007 17:54

oDialog.endExecute() bedeutet doch, dass er den Dialog schließen soll oder?

oDialog ist wie folgt deklariert:

Code: Alles auswählen

oDialog= CreateUnoDialog(DialogLibraries.Dialoge.Hauptprog)
aber den Dialog schließt das Programm ja Ordnungsgemäß nur das Open Office Programm selbst nicht. Ich habe nun auch mal den speicher befehl herrausgenommen...es kommt trotzdem noch die gleiche Fehlermeldung :(

von Toxitom » Do, 11.01.2007 17:28

Hey Sheepy,

also, das wird so nicht funktionieren.
1. Dispose() benötigt keinen Parameter und ist ein "ganz" hartes Entfernen des Objektes aus dem Speicher. Solltest du generell vermeiden - die Verwaltung macht OOo i.d.R intern.
2. Mit store() rufst du die interne Speicherroutine auf - das Dokument kann nicht beendet werden, bevor dieser Vorgang abgeschlossen ist. Andererseits laüft das Makro direkt weiter. Ob die 1 Sekunde ausreicht, das Dokument komplett zu speichern, kann ich schlecht sagen.

Ich würde hier mal "thisComponent.close(true)" verwenden. Das gibt die Kontrolle an den Speicherprozess weiter und dieser würed - anch dem Speichern - das Dokument schliessen.

Was natürlcih fehlt: Was gibt es denn sonst noch für Code-Teile? Deine erste Zeile (oDialog.endExecute() ) gibt die Kontrolle ja zunächst an das Makro zurück, das den Dialog aufgerufen hat - Zeile oDialog.execute(). Das wird nun zunächst dort weiter ausgeführt - und erst wenn das fertig ist, geht es hier weiter. Wer weiss, was dort noch steht?

Gruss
Thomas

von sheepy007 » Do, 11.01.2007 17:18

komma4 hat geschrieben:
sheepy007 hat geschrieben: gespeichert wird das dokument vorher immer
Anders gefragt: bist Du Dir sicher, dass das Speichern des zu schliessenden Objekts geklappt hat?
Ja bin mir sicher, sonst würden die Änderungen ja beim neuaufruf des Programmes nicht mher vorhanden sein oder? ;-)
Hier der Komplette auszug meines "schließen"Unterprgrammes

Code: Alles auswählen

Sub Hauptprogramm_DialogBeenden 'Beendet den Dialog Hauptprogramm
	oDialog.endExecute() '(oDialog wurde bereits am Anfang des Makros deklariert)
	thisComponent.store()
	thisComponent.dispose(true)
End Sub

von komma4 » Mi, 10.01.2007 22:59

sheepy007 hat geschrieben: gespeichert wird das dokument vorher immer
Wie? Zeigst Du uns Code?

Anders gefragt: bist Du Dir sicher, dass das Speichern des zu schliessenden Objekts geklappt hat?

Code: Alles auswählen

if ( ThisComponent.isModified() ) then
	msgbox "Änderung entdeckt"
end if

von sheepy007 » Mi, 10.01.2007 17:20

tjoa mit "true" hab ich es anfangs ja auch probiert...aber vergebens tritt genau das gleiche Problem auf

von Toxitom » Mi, 10.01.2007 08:40

Hey Sheepy,

wieso verwendest du "false" als Parameter? Das bedeutet, dass wenn ein "Veto" eines anderen Prozesses eingelegt wird, die Kontrolle an Dich zurückgegeben wird und das Dokument von dir geschlossen werden muss - das heisst, du musst die Fehler abfangen, die laufenden Prozesse beenden und das Dokument erneut schleissen.

Üblich ist "true", dann wird die Kontrolle an den "Veto"-Prozess abgegeben und der kümmert sich um das Schliessen des Dokumentes. Und das klappt dann meist automatisch...

Gruss
Thomas

von sheepy007 » Mi, 10.01.2007 06:13

doch doch gespeichert wird das dokument vorher immer...also kanns daran nicht liegen oder?

von komma4 » Di, 09.01.2007 23:16

Du hast "ThisComponent" geändert und nicht gesichert?

Problem beim schließen eines oooDokumentes über makro

von sheepy007 » Di, 09.01.2007 22:47

Guten Abendm
ich habe zur zeit ein großes Problem mit dem Beenden eines Dokumentes.

Das Makro:

Code: Alles auswählen

thisComponent.close(false)
Wenn ich das Makro aus dem Basic Editor herraus starte, wird ooo Ordnungsgemäß beendet.
Aber wenn ich das Makro einer Schaltfläche meines Dialoges zuweiße, bekomme ich folgende Fehlermeldung:
"Es ist eine Exception aufgetreten
Type: com.sun.star.util.ColseVetoException
Mesage: Controller disagree"

Der Dialog wird natürlich vor Programmende geschlossen.
Hoffe ihr könnt mir weiterhelfen

mfg sHeepy

Nach oben