Zellen überwachen ...

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

T.Ruediger
*
Beiträge: 10
Registriert: Do, 06.11.2008 09:40

Zellen überwachen ...

Beitrag von T.Ruediger »

Hallo,

in einem Tabelledokument mit 3 Tabellen möchte ich den Wert in den Zellen einer Spalte einer jeden Tabelle, welcher sich aus einer Berechnung ergibt überwachen.
Wenn z.B. in C1 die Formel A1-B1 einen Wert kleiner 0 ergibt soll eine Messagebox mit entsprechender Meldung darauf hinweisen.
Die Überwachung soll sich beispielsweise über den Bereich von C1:C50 erstecken.

Bisher habe ich dazufolgenden Code gefunden:

Code: Alles auswählen

REM  *****  BASIC  *****
global oModListener

Sub S_register_ModListener
    oModListener = CreateUNOListener("ModListener_","com.sun.star.util.XModifyListener")
    ocell = thiscomponent.sheets.getbyname("Tabelle 1").getcellrangebyname("A1")
    ocell.addModifyListener(oModListener)
end sub

Sub ModListener_modified(oEvt)
    if oEvt.source.value < 0 then
        msgbox "Zellwert kleiner 0"
    end if
End Sub

Sub ModListener_disposing
End Sub

Sub S_remove_ModListener
    ocell = thiscomponent.sheets(0).getcellbyposition(0,0)
    ocell.RemoveModifyListener(oModListener)
end sub
Leider fehlen mir die Kenntnisse um den Code anzupassen, bzw. vielleicht ist er so nicht geeignet, denn ürsprünglich wird damit nur eine Zelle überwacht.

Mit freundlichen Grüßen
T.Rüdiger
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellen überwachen ...

Beitrag von Stephan »

Code: Alles auswählen

oEvt.source.value

ist nur für jeweils eine Zelle verfügbar, folglich müsstest Du beispielsweise den Listener so registrieren:

Code: Alles auswählen

global oModListener

Sub S_register_ModListener
    oModListener = CreateUNOListener("ModListener_","com.sun.star.util.XModifyListener")
    For i = 0 To 49    
        ocell = thiscomponent.sheets(0).getcellByPosition(2, i) 'Zelle C1 bis C50
        ocell.addModifyListener(oModListener)
    Next i
end sub
wenn Du später die Change haben willst verlässlich auf die jeweils konkrete Zelle zuzugreifen.

Ansonsten ginge auch:

Code: Alles auswählen

global oModListener

Sub S_register_ModListener
    oModListener = CreateUNOListener("ModListener_","com.sun.star.util.XModifyListener")
    ocell = thiscomponent.sheets(0).getcellRangeByName("C1:C50")
    ocell.addModifyListener(oModListener)
end sub

Ich weiß aber nicht wozu die Art der Anzeige per Msgbox gut sein soll, weil das ja jeweils das Blatt blockiert und die MsgBox erst wieder geschlossen werden muss ehe man Weiteres tun kann. Möglicherweise wäre eine Färbung des Zellhintergrundes bei C1:C50 mittels bedingter Formatierung besser?


Gruß
Stephan
T.Ruediger
*
Beiträge: 10
Registriert: Do, 06.11.2008 09:40

Re: Zellen überwachen ...

Beitrag von T.Ruediger »

Hallo Stephan,

mir scheint meine Idee eine doppelte Eingabe damit zu verhindert, bzw. mittels Popup anzuzeigen, ist nicht Praxis tauglich.
Das blockieren der Eingabe war als Mittel zum Zweck gedacht.
Dann werde ich das wohl über die Gültigkeitsprüfung abfangen und dort meine Formel entsprechend anpassen.

Trotzdem Danke für deine Bemühungen.

MfG
T.Rüdiger
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Zellen überwachen ...

Beitrag von clag »

Hallo,

habe da mal eine Beispieldatei erstellt wo ein Listener drei Bereiche in drei Tabellen überwacht und ggf eine Meldung ausgibt.

viel Spaß damit
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten