🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ 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. 🤗

[gelöst] Mehrere Sheets mit Listener, wer war's ?

Alles zur Programmierung im LibreOffice.
Antworten
Fischreiher
Beiträge: 17
Registriert: Mi 24. Feb 2016, 15:48

[gelöst] Mehrere Sheets mit Listener, wer war's ?

Beitrag von Fischreiher » Fr 4. Mär 2016, 17:14

Ich habe einen Listener, der bewusst zu mehreren Sheets addiert wurde.

Wenn in den Tabellen Sheet-übergreifende Bezüge existieren, kann eine Änderung dazu führen, dass sich auf mehreren Sheete etwas ändert und so der Listener mehrfach aufgerufen wird. Das ist nicht immer der Fall, offenbar abhängig davon, ob seit der letzten Änderung am gleichen Feld der Sheet gewechselt wurde.

Für eine saubere Lösung möchte ich herausfinden, von welchem Sheet der Listener aufgerufen wurde.

Kann mir jemand mit der Zeile unten in "Modify_modified" helfen?

Code: Alles auswählen

Global oListener as Object

' Tools - Customize - Events (in the document window, not the macro window)
' Open Document  -> AddListener
' Document Close -> RemoveListener

Sub AddListener
	oListener = createUnoListener("Modify_","com.sun.star.util.XModifyListener")
	oSheets=ThisComponent.Sheets
	for i=0 to oSheets.count-1 'for all sheets
		oSheet = ThisComponent.sheets(i)
		oSheet.addModifyListener(oListener)
	next
End Sub

Sub RemoveListener
	oSheets=ThisComponent.Sheets
	for i=0 to oSheets.count-1 'for all sheets
		oSheet = ThisComponent.sheets(i)
		oSheet.removeModifyListener(oListener)
	next
End Sub

Sub Modify_modified(oEvent As Object)
	sSheetName = ThisComponent.getCurrentController().getActiveSheet().getName()
    print "oEvent came from ",sSheetName ' wrong, should be oEvent.Source.something
End Sub

Sub Modify_disposing(oEvent As Object)
End Sub
Zuletzt geändert von Fischreiher am So 6. Mär 2016, 10:14, insgesamt 1-mal geändert.

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2540
Registriert: Fr 10. Dez 2010, 10:01

Re: Mehrere Sheets mit Listener, wer war's ?

Beitrag von karolus » Fr 4. Mär 2016, 17:34

Hallo

Surprise, surprise

Code: Alles auswählen

Sub Modify_modified(oEvent As Object)
   print "oEvent came from ",oEvent.Source.Name
End Sub
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Fischreiher
Beiträge: 17
Registriert: Mi 24. Feb 2016, 15:48

Re: Mehrere Sheets mit Listener, wer war's ?

Beitrag von Fischreiher » Fr 4. Mär 2016, 17:42

Danke schön. Ich dachte, ich hätte das schon ausprobiert, muss mich aber wohl vertippt haben.

Fischreiher
Beiträge: 17
Registriert: Mi 24. Feb 2016, 15:48

Re: Mehrere Sheets mit Listener, wer war's ?

Beitrag von Fischreiher » Fr 4. Mär 2016, 17:49

Folgefrage: Jetzt wo ich die Namen sehe, bin ich sicher, dass ich blattübergreifende Bezüge habe, die nicht beabsichtigt sind.

Weiß jemand, wie man blattübergreifende Bezüge einfach finden kann?

Mit "Search in Formulas" nach den betroffenen Sheet-Namen finde ich nichts.


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