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?
mumpel hat geschrieben:dass sich Zeilen und Spalten trotz Blattschutz über Makro ein- und ausblenden lassen.
[
In 2.4.0 keine Probleme damit.

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!