Ich habe auf Deine dringende Nachfrage etwas recherchiert und das folgende Beispiel gefunden, etwas angepasst und an den wichtigen (zu ändernden!) Stellen im Code kommentiert.
Zusätzliche Anmerkungen:
* Ablage des Moduls am Dokument, wo es wirken soll, oder in der STANDARD-Bibliothek von "Meine Makros"
* die verwendeten Variablen im Code sind
GLOBAL definiert, was bedeutet, dass sie während der gesamten OOo-Sitzung Gültigkeit haben (ihre "Lebensdauer" haben); die Verwendung von gleichnamigen Variablen in anderen Makros
verbietet sich deshalb!
* Aktivieren des Codes bspw. durch Zuweisen des Makros
SetListeners zum Dokument-Öffnen-Ereignis (Anpassen>Ergeinisse)
* Deaktivieren des Listeners daselbst beim Dokument>Schliessen mittels des Makros
RemoveListener
Dieses Wegnehmen des Listeners ist unbedingt notwendig, um die Stabilität von OOo nicht zu beeinflussen
* Bei meinen Tests (2.3.0) stellte sich heraus, dass schnelles Ändern/Einfügen in der beobachteten Spalte A nicht immer korrekt den Zeitstempel in die gleiche Zeile setzte, manchmal wurde auch eine andere B-Zelle besetzt, meist die zuvor bearbeitete.
* Der Code setzt den Zeitstempel bei jeder Änderung in Spalte A - nicht nur, wenn ein
x eingegeben wurde
Kommst Du damit zurecht?
Code: Alles auswählen
' http://www.oooforum.org/forum/viewtopic.phtml?t=27026
' ms777 Posted: Sat Nov 19, 2005 3:30 pm
' angepasst 2007-10-17
' http://de.openoffice.info/viewtopic.php?f=2&t=14347
global lastCol as long
global lastRow as Long
global actCol as long
global actRow as Long
Global oRange
Global oContr
Global oDatChangeListener
Global oSelChangeListener
Sub RemoveListener
oRange.removeChartDataChangeEventListener(oDatChangeListener)
oContr.removeSelectionChangeListener(oSelChangeListener)
End Sub
Sub SetListeners()
oSelChangeListener = createUnoListener("O1_","com.sun.star.view.XSelectionChangeListener")
oDatChangeListener = createUnoListener("O2_","com.sun.star.chart.XChartDataChangeEventListener")
' Tabellen-Index
' oSheet = ThisComponent.sheets.getByIndex(0)
oSheet = ThisComponent.Sheets.getByName( "Tabelle1" )
oContr = ThisComponent.CurrentController
' zu beobachtender Bereich
' Angabe der Zellen
' Null-basiert: A1=0,0 B1=1,0 C4=3,3
' Links, Oben, Rechts, Unten
' hier: gesamte Spalte A, OOo Version 2
oRange = oSheet.getCellRangeByPosition(0,0,0,65535)
lastRow = 0
lastCol = 0
oContr.addSelectionChangeListener(oSelChangeListener)
oRange.addChartDataChangeEventListener(oDatChangeListener)
' ausgelagert !
' oRange.removeChartDataChangeEventListener(oDatChangeListener)
' oContr.removeSelectionChangeListener(oSelChangeListener)
End Sub
Sub O1_selectionChanged(aEvent as com.sun.star.lang.EventObject)
'xray.xray aEvent
oSel = aEvent.Source.Selection
if HasUnoInterfaces(oSel, "com.sun.star.sheet.XCellAddressable") then
oCA = oSel.CellAddress
actCol = lastCol
actRow = lastRow
lastCol = oCA.Column
lastRow = oCA.Row
endif
end sub
Sub O2_chartDataChanged(a as com.sun.star.chart.ChartDataChangeEvent)
' Spaltenangabe: B
oDateCell=ThisComponent.CurrentController.ActiveSheet.getCellByPosition(1, actRow)
oDateCell.SetString(Now)
End Sub