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