Seite 1 von 1

[gelöst] Kennwort temporär aufheben

Verfasst: Mo, 28.07.2008 22:09
von mumpel
Hallo!

Wie kann man ein Kennwort temporär aufheben, dann eine Formel in Zelle schreiben (hier in E8) und Tabelle wieder schützen?
In etwa so:

Code: Alles auswählen

Sub Kennwort
Rem Kennwortschutz aufheben?
Rem Eintrag in Zelle. folgende Zeile funktioniert nicht
ThisComponent.Sheets(0).GetCellRangeByName("E8").Value = "=DATUM(A2,2,1)"
Rem Hier werden Zeilen ein- und ausgeblendet
ThisComponent.Sheets(0).GetCellRangeByName("A12:A73").getRows.IsVisible = True
ThisComponent.Sheets(0).GetCellRangeByName("A74:A743").getRows.IsVisible = False
Rem Kennwort setzen?
End Sub
Danke!

Gruß, René

Re: Kennwort temporär aufheben

Verfasst: Mo, 28.07.2008 22:34
von komma4
siehe die Routinen von Bibliothek: Tools, Modul: Misc

ProtectSheets und UnprotectSheets

die nutze ich bei Bedarf.


Es gibt also, eine Methode, die auf ein sheet angewendet werden kann, Beispiel:

Code: Alles auswählen

' toggle protection
' if password was used on protect
' it should not result in any error, but doesn't work
If oSheet.isProtected Then
	oSheet.Unprotect( "" )
Else
	oSheet.Protect( "" )
End If
aus: calc_toggleProt v 20051124


Bei Dir also ThisComponent.Sheets(0)

Hilft das weiter?

Re: Kennwort temporär aufheben

Verfasst: Mo, 28.07.2008 22:55
von mumpel
Danke, das funktioniert schon mal. Allerdings habe ich festgestellt, dass sich Zeilen und Spalten trotz Blattschutz über Makro ein- und ausblenden lassen. Das ist aber nicht gewünscht. Ist das normal und lässt sich das ändern? Oder ist das nur ein Bug in OOo 3.0 Beta? Zeilen und Spalten sollen wie in Excel nur bei ungeschützter Tabelle ein- und ausblendbar sein. Sonst hätte der Blattschutz ja gar keinen Sinn.

Re: Kennwort temporär aufheben

Verfasst: Mo, 28.07.2008 23:14
von turtle47
Ich frage mich die ganze Zeit, wer geht so ein Projekt in einer Beta-Version an? :o
mumpel hat geschrieben:dass sich Zeilen und Spalten trotz Blattschutz über Makro ein- und ausblenden lassen.
[
In 2.4.0 keine Probleme damit. :lol:

Re: Kennwort temporär aufheben

Verfasst: Mo, 28.07.2008 23:19
von mumpel
Also vermute ich richtig(?). Ist eben eine Beta.

Re: Kennwort temporär aufheben

Verfasst: Mo, 28.07.2008 23:45
von turtle47
Sorry, muss mich korrigieren.
Den Test hatte ich mit einer manuellen Selektion und Dispatchercode durchgeführt.
Mit "richtigem" Code zum Ausblenden nutzt der Tabellenschutz nichts. :(

Re: Kennwort temporär aufheben

Verfasst: Mo, 28.07.2008 23:53
von Stephan

Code: Alles auswählen

Rem Eintrag in Zelle. folgende Zeile funktioniert nicht
ThisComponent.Sheets(0).GetCellRangeByName("E8").Value = "=DATUM(A2,2,1)"
Weil mit .Value nur numerische Werte übergeben werden. Für DEinen Fall brauchst Du ein .FormulaLocal oder besser ein .Formula das aber mit internationaler Funktionsbezeichnung, also:

Code: Alles auswählen

ThisComponent.Sheets(0).GetCellRangeByName("E8").Formula = "=DATE(A2,2,1)" 
Ist das normal und lässt sich das ändern?
Das ist normal, wobei es mit dispatchercode nicht gehen sollte, mit nativem aber schon.
Zeilen und Spalten sollen wie in Excel nur bei ungeschützter Tabelle ein- und ausblendbar sein. Sonst hätte der Blattschutz ja gar keinen Sinn.
Das Konzept von OOo ist da anders, diese Art des Schutzes ist bewußt nur ein Schutz gegen Fehlbedienung.



Gruß
Stephan

Re: Kennwort temporär aufheben

Verfasst: Mo, 28.07.2008 23:58
von mumpel
Habe soeben mitbekommen, dass die Funktion bei jedem Öffnen der Datei ausgeführt wird. Das soll natürlich nicht passieren. Gibt es noch eine andere Möglichkeit, ein Makro nach Zelländerung auszuführen, also ein Starbasic-Pentant zu Excels Worksheet_Change?

@Stephan

Danke, mit Formula geht es. Was den Schutz angeht, da muss der Anwender eben selber aufpassen, dass er nichts ändert.

Re: Kennwort temporär aufheben

Verfasst: Di, 29.07.2008 00:03
von Stephan
Habe soeben mitbekommen, dass die Funktion bei jedem Öffnen der Datei ausgeführt wird.
Das solltest Du erklären.

Du must den Listener registrieren und erst dann erfolgt die Überwachung, sonst erfolgt nichts also auch kein automatisches Ausführen irgendeiner Funktion.
Hier gerne nochmals meine Variation zum Thema:

Für das konkrete Ereignis mußt Du zunächst einen solchen Listener registrieren (z.B. mitttels Autostartmakro beim Öffnen der Datei).

Folgender Code ist ein Beispiel, starte Sub addlistener um die Überwachung der Zellen des Blattes mit Index 0 zu starten und entferne den Listener beim Schliessen der DAtei mit Sub Remove_Listener. Dein auszuführender Code gehört in Sub MyApp_Modified(oEvent)

Code: Alles auswählen

Global oListener As Object
Global ocell as object

Sub Remove_Listener
On Error Resume Next
ocell.removemodifyListener(oListener)
End Sub

Sub addlistener
ocell=thiscomponent.sheets(0)
oListener = CreateUnoListener( "MyApp_", "com.sun.star.util.XModifyListener" )
ocell.addmodifylistener(olistener)
End Sub

Sub MyApp_Modified(oEvent)
'hier den Code den Du ausführen willst

End Sub
Im Speziellen ist es eleganter ddeen Listener nur für die eine von Dir gewünschte Zelle zu registrieren:

Code: Alles auswählen

Sub addlistener
ocell=thiscomponent.sheets(0).getcellrangebyname("F4")
oListener = CreateUnoListener( "MyApp_", "com.sun.star.util.XModifyListener" )
ocell.addmodifylistener(olistener)
End Sub


Gruß
Stephan

Re: Kennwort temporär aufheben

Verfasst: Di, 29.07.2008 09:50
von mumpel
Stephan hat geschrieben:Das solltest Du erklären.
Hoppla, da habe ich eine Antwort in den falschen Beitrag gesetzt. Diese Antwort war für diesen Beitrag bestimmt: Makro ausführen nach Zelleingabe

Der Listener funtkioniert nach einigen Startschwierigkeiten problemlos. Danke dafür!