EVENTLISTENER Zellschutz Makro

Hallo Gemeinde,

wenn ich auf einem geschützten Blatt nach der Eingabe eines Wertes in eine nicht geschützte Zelle mit TAB weiter gehe, springt Calc zur nächsten ungeschützten Zelle.

Wie kann ich nun erreichen, dass durch die Eingabe des Wertes in die erste Zelle bei einer zweiten Zelle den Schutz aufgehoben und dann DORTHIN gesprungen wird, weil diese ja dann die nächste ungeschützte in der Reihenfolge wäre.

Das Ganze soll aber nur einmal geschehen. Sprich: Verlässt man die zweite, freigeschaltete Zelle ohne Eingabe wieder mit TAB zur nächsten Eingabezelle, so soll nicht - wie in meinem Beispiel - wieder zurück gesprungen werden.

Zellschutz aufheben und einmal anwählen, mehr nicht.

Und zu guter letzt: ändert man die Voraussetzungen für die Freischaltung wieder, so soll die Zelle wieder gesperrt werden.

Mit bedingter Formatierung funktioniert es leider nur optisch… :frowning:

Im Moment verfranzt sich der EventListener in meinem Code, weil er immer wieder zu dieser Zelle hopst, auch wenn der User in die andere Zelle klickt, um die Voraussetzungen für die Freischaltung zu nullen.

Pass. Anzahl Gepäck
„“"""""""""""""""""""""""""""""""""""""""""
SL0* [D38] [F38]
SL1 [D40] [F40]
SL2 [] []
SL3 [] []

*SL steht für ServiceLevel

Die Zellen für Gepäck sollen nur freigeschaltet werden, wenn es überhaupt Pass(agiere) gibt.
Allerdings soll in dem Fall auch der Cursor (Zellrahmen) bei TAB dorthin springen.

Im Prinzip braucht es das aber nur für SL1-3, da SL0 immer mind. ein Pass. eingetragen wird. Andernfalls gibt es keinen Kunden und auch keinen Auftrag und somit auch keine Abfrage.

Ich hoffe, ihr seht durch(?):

'dim oSL0Lock,oSL1Lock,oSL2Lock,oSL3Lock as New com.sun.star.util.CellProtection

’ oSL0paxe = osheet.getCellbyposition(3,37) 'D38 Paxe SL0
’ oSL1paxe = osheet.getCellbyposition(3,39)
’ oSL2paxe = osheet.getCellbyposition(3,41)
’ oSL3paxe = osheet.getCellbyposition(3,43)

’ oSL0bags = osheet.getCellbyposition(5,37) 'F38 Bags SL0
’ oSL1bags = osheet.getCellbyposition(5,39)
’ oSL2bags = osheet.getCellbyposition(5,41)
’ oSL3bags = osheet.getCellbyposition(5,43)

’ osheet.unprotect("") 'Blattschutz aufheben, um Zellschutz zu ändern

’ oSL0lock = oSL0bags.cellprotection 'die Zellschutzobjekte der Bags-Felder
’ oSL1lock = oSL1bags.cellprotection
’ oSL2lock = oSL2bags.cellprotection
’ oSL3lock = oSL3bags.cellprotection

’ if oSL0paxe.value > 0 and oSL0bags.value = 0 then
’ odoc.currentcontroller.select(oSL0bags) 'Zellschutz aufheben, wenn Paxe>0
’ oSL0lock.isLocked = false
’ oSL0bags.cellprotection=oSL0lock
’ else
’ oSL0lock.isLocked = true
’ oSL0bags.cellprotection=oSL0lock
’ exit sub
’ endif

’ if oSL1paxe.value > 0 and oSL1bags.value = 0 then
’ odoc.currentcontroller.select(oSL1bags)
’ oSL1lock.isLocked = false
’ oSL1bags.cellprotection=oSL1lock
’ else
’ oSL1lock.isLocked = true
’ oSL1bags.cellprotection=oSL1lock
’ exit sub
’ endif

’ if oSL2paxe.value > 0 and oSL2bags.value = 0 then
’ odoc.currentcontroller.select(oSL2bags)
’ oSL2lock.IsLocked = false
’ oSL2bags.cellprotection=oSL2Lock
’ else
’ oSL2lock.isLocked = true
’ oSL2bags.cellprotection=oSL2lock
’ exit sub
’ endif

’ if oSL3paxe.value > 0 and oSL3bags.value = 0 then
’ odoc.currentcontroller.select(oSL3bags)
’ oSL3lock.IsLocked = false
’ oSL3bags.cellprotection=oSL3Lock
’ else
’ oSL3lock.isLocked = true
’ oSL3bags.cellprotection=oSL3lock
’ exit sub
’ endif

’ oSL0bags.cellprotection = oSL0lock 'Zellschutzobjekt zurückschreiben
’ oSL1bags.cellprotection = oSL1lock
’ oSL2bags.cellprotection = oSL2lock
’ oSL3bags.cellprotection = oSL3lock

’ osheet.protect("") 'Blattschutz wieder aktivieren

LG, Masl