Hallo,
ich stelle momentan eine Excel-Anwendung auf Calc um und konnte dank dieses Forum schon so manches Problem lösen.
Ein Problem konnte ich bisher allerdings nicht lösen.
Der Sachverhalt:
Ein Tabellenblatt wird von 2 Arbeitsgruppen bearbeitet. Dabei hat Gruppe 1 Zugriff auf einen eingeschränkten Zellenbereich und Gruppe 2 Zugriff auf das gesamte Blatt. Beide Gruppen müssen alles lesen können.
Das Blatt wurde gesperrt und einzelne Zellen wurden freigegeben.
Da die Gruppen aus einer größeren Menge an Personen bestehen, sollte das manuelle Aufheben des Blattschutzes - und viel wichtiger - das anschließende erneute Einrichten des Schutzes automatisiert werden. Die Gefahr der Eingabe eines falschen Passwortes ist zu groß.
Es gibt daher nur ein Passwort für die geschützten Bereiche.
Unter Excel habe ich das Problem mittels
Worksheet_SelectionChange(ByVal Target As Excel.Range)
gelöst.
Es gab hier eine Konfigurationsseite, über die der zu schützende Bereich bestimmt wurde. Anschließend wurde geprüft, ob jemand den geschützten Bereich "betreten" möchte (obige Funktion). Wenn dies der Fall war, wurde ein PW-Dialog angezeigt. War die PW-Eingabe korrekt, konnte der Zellbereich bearbeitet werden. War das PW falsch, erfolgte der Sprung zu einer definierten Rücksprungadresse.
Auch für einzelne Shapes war eine Freischaltung notwendig.
Vor dem Speichern (Workbook_BeforeSave) der Anwendung wurde der Schutz komplett automatisch wieder hergestellt.
Das Problem:
Gibt es ein Äquivalent unter Calc zu Excels Worksheet_SelectionChange?
Oder wie kann man dieses Problem unter OO Calc lösen?
Vorab vielen Dank für Antworten.
Zellenschutz mit Passwortabfrage
Moderator: Moderatoren
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Zellenschutz mit Passwortabfrage
com.sun.star.view.XSelectionChangeListenerorso hat geschrieben:Gibt es ein Äquivalent unter Calc zu Excels Worksheet_SelectionChange?
Aus meiner Testkiste das folgende Beispiel; leider habe ich keine Quelle notiert, aber höchstwahrscheinlich aus dem engl. Forum
Code: Alles auswählen
' ========================================================================================================
REM Global Variables:
Global oListener As Object
Global oDocView As Object
' ========================================================================================================
REM Run this macro to start event intercepting:
Sub Example_SelectionChangeListener
oDocView = ThisComponent.getCurrentController
'create a listener to intercept the selection change event
oListener = CreateUnoListener( "MyApp_", "com.sun.star.view.XSelectionChangeListener" )
' register the listener to the document controller
oDocView.addSelectionChangeListener(oListener)
End Sub
' ========================================================================================================
REM Run this macro to stop event intercepting:
Sub Remove_Listener
' removes the listener
oDocView.removeSelectionChangeListener(oListener)
End Sub
' ========================================================================================================
REM All listeners must support this event:
Sub MyApp_disposing(oEvent)
msgbox "disposing of the listener"
End Sub
' ========================================================================================================
REM What to do when we get an event:
Sub MyApp_selectionChanged(oEvent)
Dim oCurrentSelection As Object
' the source property of the event struct
' gets a reference to the event source,
' in this case, NOT the onscreen selection,
' but rather the currentController:
oCurrentSelection = oEvent.source
MsgBox "Fired:" & chr(10) & chr(10) & oCurrentSelection.dbg_properties
' if oCurrentSelection.showGrid() = TRUE then
' msgbox "scheinen"
' end if
' msgbox oCurrentSelection.ActiveSheet.Name
' This will give us info about the onscreen selection:
dim oCurr as object
oCurr = thiscomponent.getcurrentselection
msgbox "Selection: " & oCurr.getimplementationname
End Sub
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Zellenschutz mit Passwortabfrage
Hallo,
vielen Dank für die Antwort!
Ich werde heute mal ein wenig mit dem Code rumprobieren.
Danke
Oliver
vielen Dank für die Antwort!
Ich werde heute mal ein wenig mit dem Code rumprobieren.
Danke
Oliver
Re: Zellenschutz mit Passwortabfrage
Es funktioniert. Vielen Dank dafür.
Ich habe jedoch den Eindruck, dass der Listener sich manchmal "aufhängt". Es gibt sporadisch komische Reaktionen, die ich noch nicht so recht einordnen konnte.
Ich habe jedoch den Eindruck, dass der Listener sich manchmal "aufhängt". Es gibt sporadisch komische Reaktionen, die ich noch nicht so recht einordnen konnte.
Re: Zellenschutz mit Passwortabfrage
Hey orso,
poste mal deinen benutzen Code! Meine Erfahrungen mit dem Listener zeigten, dass dieser viel zu häufig registiert wird ohne wirklich entfernt zu werden. Das kann dann zu solchen "Effekten" kommen.
Mich interessiert, wie und wann du den Listener registrierst und wie und wann du ihn wieder entfernst.
Viele Grüße
Thomas
poste mal deinen benutzen Code! Meine Erfahrungen mit dem Listener zeigten, dass dieser viel zu häufig registiert wird ohne wirklich entfernt zu werden. Das kann dann zu solchen "Effekten" kommen.
Mich interessiert, wie und wann du den Listener registrierst und wie und wann du ihn wieder entfernst.
Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Re: Zellenschutz mit Passwortabfrage
Hallo,
ach so, Entfernen ist also doch wichtig?!
Ob ich das überhaupt explizit mache? Ich kann gerade nicht schauen, glaube aber nicht.
Das werde ich mal bei nächster Gelegenheit prüfen und ggf. den Aufruf zum Entfernen mit einbinden.
Danke Dir.
Oliver
ach so, Entfernen ist also doch wichtig?!
Ob ich das überhaupt explizit mache? Ich kann gerade nicht schauen, glaube aber nicht.
Das werde ich mal bei nächster Gelegenheit prüfen und ggf. den Aufruf zum Entfernen mit einbinden.
Danke Dir.
Oliver