Hallo Karl,

schön, dass ich auch mal etwas beitragen kann - aber ich bin auch erst gerade am Anfang mit der Basic-Programmierung.

Einen Modify-Listener kannst Du wie folgt aktivieren:

Sub Add_Modify_Listener
   Dim objDoc As Object
   Dim objSel As Object
   Dim objBlatt As Object
   Dim nCol As Long
   Dim nRow As Long
   Dim iField As Integer
objDoc = ThisComponent
   objSel = objDoc.getCurrentSelection()
oModifyListener = CreateUnoListener( "MyApp_", "com.sun.star.util.XModifyListener" ) If objSel.supportsService("com.sun.star.sheet.SheetCell" ) Then
       ocell = objDoc.getCurrentSelection()
       'create a listener on cell
       ocell.addModifyListener(oModifyListener)
   Elseif objSel.supportsService("com.sun.star.sheet.SheetCellRange" ) Then
       objBlatt = objDoc.Sheets.getByIndex(objSel.RangeAddress.Sheet)
For nCol = objSel.RangeAddress.StartColumn To objSel.RangeAddress.EndColumn For nRow = objSel.RangeAddress.StartRow To objSel.RangeAddress.EndRow
                  ocell = objBlatt.getCellByPosition(nCol, nRow)
               'create a listener on cell
               ocell.addModifyListener(oModifyListener)
              Next
          Next
Elseif objSel.supportsService("com.sun.star.sheet.SheetCellRanges" ) Then
       For iField = 0 To UBound(objSel.RangeAddresses)
objBlatt = objDoc.Sheets.getByIndex(objSel.RangeAddresses(iField).Sheet) For nCol = objSel.RangeAddresses(iField).StartColumn To objSel.RangeAddresses(iField).EndColumn For cRow = objSel.RangeAddresses(iField).StartRow To objSel.RangeAddresses(iField).EndRow
                      ocell = objBlatt.getCellByPosition(nCol, nRow)
                   'create a listener on cell
                   ocell.addModifyListener(oModifyListener)
                  Next
              Next
       Next
   End If
End Sub

Wie Du siehst, kann ein Modify Listener nur jeder Zelle und nich einem Sheet zugewiesen werden !!!!

Das Entfernen eines Listeners kannst Du meines Erachtens vergessen, da die ID des Listeners in Basic nicht gehalten werden kann.
Auch wenn Du globale Variablen verwendest. Habe es selbst schon ausprobiert.

Wichtig ist auch zu wissen, dass ein Listener - nach dem was ich bis lang gelernt und erfahren habe - anders funktioniert als ein EventHandler. Ein Handler kann bestimmen, ob weitere Handler und Listener denselben Event noch erhalten, oder nicht. Problem: Handler kann man in Basic anscheinend nicht installieren, da diese einen Rückgabewert benötigen. Aber ich lasse mich gerne eines besseren belehren.

Der Listener heißt im übrigen dann MyApp_Modified (oEvent as Object)

Aber Vorsicht, es lässt sich nicht alles realisieren. Es gibt sogar ein paar sehr merkwürdige Effekte, die mit Sicherheit an dem EventHandler liegen, der ja auch noch im Hintergrund läuft.

Und wenn Du in MyApp_Modified den Zelleninhalt änderst, dann wird wieder ein Modify Event erzeugt und MyApp_Modified aufgerufen. Das ist also abzufangen, damit Du nicht in eine Endlos-Schleife gerätst.

Gruß, Fritz

Karl Gust-Stiehl schrieb:

Hallo Jörg, * ,

den Listender wie unten von Jörg vorgeschlagen kriege ich  nicht zum laufen
d.h. ich war zwar einmal soweit, das ich den event im Beobachter hatte.
Dann hatte ich individuelle Namen vergeben.. und es ging nicht mehr

aber auch nach dekativiern und einkopieren des orginal code(s.u.)  tut sich
gar nichts außer:

dass bei schließen des Docs noch der Fehler   " .... noscript" erscheint,
obwohl "Listener_entfernen" bei "Dokument wird geschlossen" zugwiesen ist

Außerdem  müsste doch auch "oEvent" deklariert werden, oder?
und müßte das wiederholte definieren des Listeners beim debuggen
ausgeschlossen werden?
etwa:  if exist listener......

Wie kann ich Haltepunkte im Dateiöffnen-Makro definieren?

Wo finde ich amschnellsten genauere Infos (Versionspropbleme?) oder ein
spezielles Basic-Forum?

ich habe im Internet Hinweise auf einen anderen Listener entdeckt

oCrngData = CreateUnoListener(
"CrngListener_","com.sun.star.util.XModifyListener" )
oCrng.addModifyListener( oCrngData )
????


kgs-ks

code von Jörg:-------------------------------------------------
Global oListener

Sub Listener_registrieren()
oDocView = ThisComponent.getCurrentController
oListener = CreateUnoListener( "jms_",
"com.sun.star.sheet.XActivationEventListener" )
oDocView.addActivationEventListener(oListener)
End Sub

Sub Listener_entfernen()
ThisComponent.getCurrentController.removeActivationEventListener(oListen
er)
End Sub

Sub jms_activeSpreadsheetChanged(oEvent)
aktives_blatt = ThisComponent.CurrentController.getActiveSheet.Name
Msgbox "aktiviertes Blatt ist: " & aktives_blatt
End Sub




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Antwort per Email an