von cwolan » Mo, 12.08.2024 08:01
Hallo,
CellProtection ist ein Struct [1].
Laut [2]:
- Structs werden mit ihren Werten kopiert. Viele Nutzer sind frustriert, wenn sie zum ersten Mal auf dieses Verhalten stoßen, aber es gibt einen sehr guten Grund dafür. Zuerst einmal das Problem: oBorder.TopLine.OuterLineWidth = 2 macht nicht das, was man wollte, weil Sprachstrukturen TopLine ein Struct ist und der Wert als Kopie und nicht als Referenz zurückgegeben wird. Das Codebröckchen ändert in dieser Form die äußere Randbreite in einer Kopie des Structs und nicht in dem Struct, das mit dem Border-Objekt verknüpft ist. Folgendes ist der richtige Weg, den Rahmen zu ändern:
v = oBorder.TopLine : v.OuterLineWidth = 2 : oBorder.TopLine = v.
Deshalb
Code: Alles auswählen
Sub UnprotectCell
Doc=ThisComponent
Sheet=Doc.Sheets(1)
Sheet.Unprotect("")
Cell=Sheet.getCellByPosition(4,2)
Prot=Cell.CellProtection
Prot.IsLocked=False
Cell.CellProtection = Prot
Sheet.Protect("")
end Sub
-------------------
[1]
CellProtection
[2] Andrew Pitonyak, "BASIC-Makros für OpenOffice und LibreOffice"
Ins Deutsche übertragen und bearbeitet von Volker Lenhardt, S. 57-58
Hallo,
[b][color=#0000FF]CellProtection[/color] [/b]ist ein Struct [1].
Laut [2]:
[list]
[*] Structs werden mit ihren Werten kopiert. Viele Nutzer sind frustriert, wenn sie zum ersten Mal auf dieses Verhalten stoßen, aber es gibt einen sehr guten Grund dafür. Zuerst einmal das Problem: oBorder.TopLine.OuterLineWidth = 2 macht nicht das, was man wollte, weil Sprachstrukturen TopLine ein Struct ist und der Wert als Kopie und nicht als Referenz zurückgegeben wird. Das Codebröckchen ändert in dieser Form die äußere Randbreite in einer Kopie des Structs und nicht in dem Struct, das mit dem Border-Objekt verknüpft ist. Folgendes ist der richtige Weg, den Rahmen zu ändern:
v = oBorder.TopLine : v.OuterLineWidth = 2 : oBorder.TopLine = v.
[/list]
Deshalb
[code]
Sub UnprotectCell
Doc=ThisComponent
Sheet=Doc.Sheets(1)
Sheet.Unprotect("")
Cell=Sheet.getCellByPosition(4,2)
Prot=Cell.CellProtection
Prot.IsLocked=False
Cell.CellProtection = Prot
Sheet.Protect("")
end Sub
[/code]
-------------------
[1] [url=https://api.libreoffice.org/docs/idl/ref/CellProtection_8idl.html]CellProtection[/url]
[2] Andrew Pitonyak, "BASIC-Makros für OpenOffice und LibreOffice"
Ins Deutsche übertragen und bearbeitet von Volker Lenhardt, S. 57-58