ich arbeite nun seit geraumer Zeit an einem Makro und häng da nun ein bisschen in der Luft...
Folgendes Szenario:
Ein Tabellendokument mit 5 Tabellenblättern.
Auf zwei Tabelleblättern werden Daten eingetragen.
Ein Tabellenblatt macht Auswertungen und ist vor Änderungen geschützt (nur schauen, nichts anfassen).
Ein Tabellenblatt zieht aus den eingegebenen Daten bestimmt Inhalte, die später als CSV exportiert werden sollen, auch kein Eingriff manuell erforderlich.
Das letzte Tabellenblatt soll nun Änderungen an den Daten aufzeichnen. => Wer (Username), Wann (Datum + Uhrzeit), Tabellenblatt, Zelle, Wert (leer wenn der Inhalt gelöscht wurde, bzw. eben das was reingeschrieben wurde. Das Blatt wird durch das Makro vor Änderungen geschützt (vor Eintragung der Änderungen erfolgt eine Entsperrung, danach wieder eine Sperrung).
Mein Code sieht bisher so aus:
Code: Alles auswählen
REM ***** BASIC *****
Option Explicit
private oModListener as Object
private oZellen as Object
private oZelle as Object
private oZielTab as Object
private oDoc as Object
private oCur as Object
private a as Object
private sZellAdr as string
sub AddModListener
on Error resume next
RemoveModListener
oModListener = CreateUnoListener("MyList3_", "com.sun.star.util.XModifyListener")
oZellen = thisComponent.sheets().getByName("Bestandsaenderung")
oZellen.addModifyListener(oModListener)
end sub
sub RemoveModListener
on error resume next
oZellen.removeModifyListener(oModListener)
on error goto 0
end sub
REM Aktion bei Änderung der Zellwerte
sub MyList3_Modified(oEvent)
oZelle = ThisComponent.currentSelection
if oZelle.supportsService("com.sun.star.sheet.SheetCell") then
DatensatzEintragen(oZelle)
end if
end sub
REM Datensatz eintragen
sub DatensatzEintragen
dim iZe as long 'letzte Zeile
REM neue Eintragezeile extrahieren
oDoc = ThisComponent
oZielTab = thisComponent.sheets.getByName("Protokoll")
'### REM hier entsperren
'oZielTab.unprotect("test")
oCur = oZielTab.createCursor
oCur.gotoEndofUsedArea(false)
iZe = oCur.RangeAddress.EndRow() + 1
REM Zell Adresse extrahieren
a = split(oZelle.ColumnDescriptions(0), " ")
sZellAdr = Trim(a(1))
a = split(oZelle.RowDescriptions(0), " ")
sZellAdr = sZellAdr & trim(a(1))
REM Jetzt eintragen
with oZielTab
.getCellbyPosition(0, iZe).string = environ("username")
.getCellbyPosition(1, iZe).value = now()
.getCellbyPosition(2, iZe).string = Time()
.getCellbyPosition(3, iZe).string = oZelle.SpreadSheet.Name
.getCellbyPosition(4, iZe).string = sZellAdr
.getCellbyPosition(5, iZe).string = oZelle.formula
end with
'### Tabelle hier wieder sperren
'oZielTab.protect("test")
'oDoc.store()
end sub
Aktuell hab ich das Problem, das immer nur ein Tabellenblatt in der Prokollierung auftaucht, zum anderen werden die Einträge immer mehr, auch wenn ich den Listener stoppe hat das keine Auswirkung. Der Eintrag wird geschrieben, und dies auch mal doppelt, dreifach, vierfach....
Hat mir vielleicht jemand eine Idee, oder was ich da übersehe? Bin leider noch nicht ganz so tief in den Makros, wie ich es sein wollen würde...
Vielen Dank schonmal!
Gruß
Alex