Listener in Calc entfernen

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

Moderator: Moderatoren

Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Listener in Calc entfernen

Beitrag von Stephan »

an Der von Dir geposteten Stelle steht wie man den Listener entfernt! Warum fragst Du das überflüssiger WEise hier?

Code: Alles auswählen

Sub RmvListener
CellRng.removeModifyListener(oListener)
End Sub

Gruß
Stephan
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Listener in Calc entfernen

Beitrag von Stephan »

Diese Routine kann ich als Event einfügen beim Schließen des Dokuments.
Nein. Höchstens kannst du sie dem Schließen-Event zuordnen, das Makro selbst versteht sich hier jedoch nicht als Event.
Wenn ich Sie aber ausführen möchte bekomme ich folgenden Fehler:

"BASIC Laufzeitfehler. Objektvariable nicht belegt".
Naja, dann wird halt eine Objektvariable nicht belegt sein weil LO nicht mit der DEklaration zurechtkommt.

Nimm statt:

Code: Alles auswählen

Private oListener as Object
Private CellRng as Object
die Deklaration:

Code: Alles auswählen

Global oListener as Object
Global CellRng as Object
oder:

Code: Alles auswählen

Public oListener as Object
Public CellRng as Object
Es muss also irgendwie anders gehen.
Nein.





GRuß
Stephan
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Listener in Calc entfernen

Beitrag von balu »

Hallo BastiL,
beide deiner Vorschläge ändern nichts:
Wo dran mag das wohl liegen?

In Sub RmvListener ist CellRng nicht bekannt. Wie kann ich da weitermachen?
Weder Stephan, noch ich, haben Glaskugeln mit Magischen fähigkeiten. Also ist nichts mit Hilfe.

Mein Makro sieht ähnlich aus wie im Link.
Ah ja!
Ähnlich ist nicht gleichzusetzen wie identisch, das sind zwei verschiedene Paar Schuh. Also würde ich dir dringend empfehlen eine Beispieldatei hier anzuhängen, denn nur so können wir hier nachschauen wo es bei dir hakt.

Aber eine Frage hätte ich da noch.
Hast Du auch die dementsprechenden Subs bei
- Extras
- Anpassen
-- Ereignisse
richtig zugeordnet?



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Listener in Calc entfernen

Beitrag von balu »

Hallo BastiL,
Diese Routine kann ich als Event einfügen beim Schließen des Dokuments.
Was meinst Du denn ganz genau?

a)
Dokument wird geschlossen

b)
Dokument geschlossen



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Listener in Calc entfernen

Beitrag von Stephan »

In Sub RmvListener ist CellRng nicht bekannt.
das ist mir vollens unverständlich da Du selbst ja den Code gepostet hast (http://user.services.openoffice.org/en/ ... 45&t=30071) der CellRng ein Object zuweist:

Code: Alles auswählen

CellRng = Sheet.getCellrangeByName("A1:A10")
und da dieser Code Bestandtei des Makros ist, welches den Listener registriert muß CellRng später auch existieren, sofern CellRng als Variable mit ausreichendem Gültigkeitsbereich registriert ist.
Wie kann ich da weitermachen? Was für Debugging-Möglichkeiten gibt es da?
Das waa man üblicherweise tut - die genaue Schreibweise von CellRng überprüfen um sicherzustellen das diese in:

Code: Alles auswählen

CellRng = Sheet.getCellrangeByName("A1:A10")
und:

Code: Alles auswählen

CellRng.removeModifyListener(oListener)
gleich ist, sowie die richtige DEklaration von CellRng nochmals prüfen.



Gruß
Stephan
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Listener in Calc entfernen

Beitrag von Karolus »

Hallo
Soweit ich weiss***, wird 'olistener'
  • a. mit der Methode .removeModifyListener nicht völlig entfernt, sondern man kann damit nur verhindern, in eine Endlosrekursion zu laufen, falls das per Listener aufgerufe Makro seinerseits Änderungen in 'CellRng' durchführt.
    b. Muss man den Fehler mit 'on Error resume next' unterdrücken.
siehe Beispiel:

Code: Alles auswählen

Sub RmvListener
on Error resume next
	CellRng.removeModifyListener(oListener)	
End Sub

Sub CalledRoutine
	
	Doc = ThisComponent
	Sheet = Doc.Sheets.getByIndex(0)
	Cell = Sheet.getCellByPosition(2,1)
	CurrentVal = Cell.Value
	Cell.Value = CurrentVal + Sheet.getCellByPosition(0,1).value
	
	RmvListener  'ansonten würde die Zeile unten eine Endlosrekursion aus lösen
	
	Sheet.getCellByPosition(0,1).string = ""
End Sub


***Leider weiß ich momentan nicht wo ich das her hab.

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Listener in Calc entfernen

Beitrag von Stephan »

Soweit ich weiss***, wird 'olistener'
a. mit der Methode .removeModifyListener nicht völlig entfernt, sondern man kann damit nur verhindern, in eine Endlosrekursion zu laufen, falls das per Listener aufgerufe Makro seinerseits Änderungen in 'CellRng' durchführt.
Mmmh ... ich kann nichts dergleichen feststellen.

Wie ich bereits geschrieben hatte muß mal mit richtigem Gültigkeitsbereich deklarieren und bei mir funktioniert:

Code: Alles auswählen

Global oListener as Object
Global CellRng as Object
ohne Probleme in OOo 3.3.0. (Beispieldatei anhängend)

Warum das bei BastiL nicht funktioniert ist mir derzeitig unklar.



Gruß
Stephan
Dateianhänge
ListenerTest.ods
(9.83 KiB) 103-mal heruntergeladen
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Listener in Calc entfernen

Beitrag von Karolus »

Hallo
Ja, funktioniert hier ebenfalls.

...
Anscheinend hab ich den Fehler gemacht, nach der Umdeklaration von 'Privat' auf 'Global' das Dokument nicht zu speichern und zu schliessen ?

Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Antworten