Seite 1 von 1

Tabellenstruktur schützen

Verfasst: Do 27. Jan 2022, 14:09
von andremike
Hallo zusammen,

ich habe nun einige Stunden mit der Recherche verbracht, aber keine Lösung auf die Frage "Wie kann ich per Makro die Tabellenstruktur schützen?" gefunden. Bloß das Schützen eines Tabellenblattes oder des Dokumentes selbst.
Ist die Funktionalität überhaupt per Makro nutzbar?
VG
andremike

Kleine Ergänzung: Das Kennwort zum Schutz soll nicht manuell eingegeben sondern vom Makro gesetzt werden.

Re: Tabellenstruktur schützen

Verfasst: Do 27. Jan 2022, 14:15
von Mondblatt24
Hallo,
muss es unbedingt ein Makro sein, reicht es nicht die Funktion über das Menü Extras → Tabellenstruktur schützen… zu aktivieren?

Gruß
Peter

Re: Tabellenstruktur schützen

Verfasst: Do 27. Jan 2022, 14:21
von andremike
Hallo Peter,

genau das soll ja verhindert werden, da dieses zu versteckende Tabellenblatt Daten enthält, die nur einem kleinen Mitarbeiterkreis zugänglich sein sollen. Ohne diesen Schutz könnte ja jeder alles einblenden...

LG

Re: Tabellenstruktur schützen

Verfasst: Mo 7. Feb 2022, 09:54
von andremike
Ergänzung:
Hallo zusammen,
mit der etwas unprofessionellen Methode "Makro aufzeichnen" habe ich das hier erhalten:

dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Protect"
args4(0).Value = true
dispatcher.executeDispatch(document, ".uno:ToolProtectionDocument", "", 0, args4())

Allerdings muss dann das Kennwort manuell eingegeben werden und eben das soll ja ebenfalls per Makro passieren.
Irgendwie komme ich in der Sache nicht weiter...

Re: Tabellenstruktur schützen

Verfasst: Mo 7. Feb 2022, 21:05
von craig
Hallo,

der Makrorekorder schreibt meist nur die Dispatch-Commands,
eben Einzelbefehle, welche irgendetwas aufrufen.
Im Anschluß muss dem Dispatch-Command immer Parameter in Form eines
Eigenschafts-Array's/ ein Struct übergeben werden.

Das alles ist nur bedingt dokumentiert und ich habe mir zuweilen schon
mehrfach die Haare bei der Suche nach den passenden Struct's gerauft.

Deshalb arbeite ich lieber mit der Starbasic-API.
a) diese ist sehr gut dokumentiert, aber man muss sie erst verstehen lernen.
b) jede Menge Code-Beispiele im Netz.

ABER, es ist nicht einfach die Materie der objektorientierten Starbasic-Programmierung zu verstehen.

-------------------------------------------
Setze einmalig manuell einen Passwortschutz für eine Tabelle und
stelle die Optionen ein, welche erlaubt und gesperrt sein sollen.

Dieses Makro prüft den Status des Tabellenblattes:
a) ist es geschützt, dann wird der Schutz automatisch aufgehoben (Passwort im Code anpassen!)
b) ist es ungeschützt, dann wird der Passwortschutzt gesetzt.

Code: Alles auswählen

REM  *****  BASIC  *****
Option Explicit

REM ════════════════════════════════════════════════════════════════════════════════════════════════════
REM					CALC: 
REM 1)	[Tabellen Schutz an aus]
REM ════════════════════════════════════════════════════════════════════════════════════════════════════

REM 1)
REM ---------------------------------------------------------------------
REM			Makro prueft ob ein Tabellenschutz vorhanden ist,
REM				WENN = JA, dann wird der Schutz aufgehoben
REM
REM		WENN kein Tabellenschutz vorhanden ist, wird der Schutz gesetzt.
REM
REM				WENN Passwoerter im Makro angegeben sind, DANN
REM					MUESSEN in beiden CASE-Anweisungen 
REM				die gleichen Passwoerter angegeben werden!!!
REM ---------------------------------------------------------------------
Sub [Tabellen Schutz an aus]
Dim oDoc as Object
Dim oCC as Object
Dim oSheet as Object

	oDoc=ThisComponent
		oCC=oDoc.CurrentController
			oSheet=oCC.ActiveSheet

			select Case oSheet.isprotected
				case "True"
					'Schutz mit Passwort entfernen:
					oSheet.Unprotect( "123" )
				case "False"
					'Schutz mit Passwort setzen:
					oSheet.Protect( "123" )
			End Select

End Sub