🙏 Helfen Sie mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Zellfarbe zur Laufzeit ändern

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
Tacitus
Beiträge: 1
Registriert: Mi 21. Dez 2011, 10:32

Zellfarbe zur Laufzeit ändern

Beitrag von Tacitus » Mi 21. Dez 2011, 10:47

Hallo zusammen!

Ich hab ein kniffliges Problem. Ich versuche eine Arbeitsmappe mit Makros aus MS Office in LibreOffice (Calc) zum laufen zu bekommen. Dabei gibt es folgende Probleme.

Zum Start werden alle Zellen geschützt und dann eingestellt, dass ein Macro den Status ändern kann, aber nicht der Nutzer. Die Felder werden vom Makro freigeschaltet, sobald die Bedingungen erfüllt sind. Zusätzlich soll die Farbe änderbar sein, um dem Anwender zu zeigen, dass er ein Feld vergessen hat (rot einfärben). Folgende Zeile nimmt Calc nicht an:

Code: Alles auswählen

Worksheets("Settings").Protect UserInterfaceOnly:=True, AllowFormattingCells:=True
Er will den zweiten Parameter nicht (Unnamed). Kennt jemand das Äquivalent dazu in LibreOffice?

Das zweite Problem ist die Abfrage der zuletzt geänderten Zelle. Es geht um eine Lösung, die mir sofort nach verlassen der zuletzt bearbeiteten Zelle etwas ausführt. Hier wird eine Beispielanzeige eingeschaltet und die Farbe der Zelle geändert. Die Funktion liefertr aber leider nicht das korrekte Ziel:

Code: Alles auswählen

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim help_str As String
    Dim help_row As String
    Dim help_column As String
    Dim ok As Boolean
           
    help_str = Target
    help_column = Left(Target.Address(0, 0), 1)             ' Target.Address liefert zum Beispiel "A11", was dann weiter verarbeitet werden kann
    help_row = Right(Target.Address(0, 0), Len(Target.Address(0, 0)) - 1)
    
    If ActiveSheet.Cells(Val(help_row), Asc(help_column) - 64).Interior.Color = RGB(255, 0, 0) Then
        ActiveSheet.Cells(Val(help_row), Asc(help_column) - 64).Interior.Color = RGB(255, 153, 0)
    End If
    
End Sub
Die Fehlermeldung lautet auf einen falschen Index außerhgalb der Range. Also vermute ich mal, dass ich nicht "A11" sondern irgendetwas bekomme. Die Fehlerzeile ist:

Code: Alles auswählen

 If ActiveSheet.Cells(Val(help_row), Asc(help_column) - 64).Interior.Color = RGB(255, 0, 0) Then
Kann mir jemand helfen. Es wäre schön, wenn ich das auch im LibreOffice hinbekäme.

Viele Grüße,
Tacitus

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Zellfarbe zur Laufzeit ändern

Beitrag von F3K Total » Mi 21. Dez 2011, 21:25

Hallo,
anbei ein kleines Beispiel mit folgendem Macro, welches an des Tabellenereignis "Inhalt geändert" gehängt ist.

Code: Alles auswählen

Sub cellunprotect(event)
osheet=thiscomponent.sheets.getbyname("Tabelle1")
ocellB1=osheet.getcellrangebyname("B1")
s1=ocellB1.string
ocellB2=osheet.getcellrangebyname("B2")
s2=ocellB2.string
ocellB4=osheet.getcellrangebyname("B4")
s4=ocellB4.string
if s1="A" and s2="B" then
 thiscomponent.sheets(0).unprotect("qqq")'Tabelle entsperren
 oCellProtection = ocellB4.CellProtection  'das Zellschutzobjekt
 oCellProtection.IsLocked = false 
 ocellB4.CellProtection = oCellProtection 'Zellschutz entfernen
 ocellB4.CellBackColor=RGB(0,255,0)'Hintergrundfarbe setzen
 oCellProtection.IsLocked = true
 ocellB1.CellProtection=oCellProtection'Zellschutz setzen
 ocellB2.CellProtection=oCellProtection'Zellschutz setzen
 thiscomponent.sheets(0).protect("qqq")'Tabelle sperren
endif
S3=ocellB4.string
if s4="C" then
 thiscomponent.sheets(0).unprotect("qqq")'Tabelle entsperren
 ocellB4.CellBackColor = -1'Hintergrundfarbe entfernen
 ocellB4.CellProtection = oCellProtection 'Zellschutz setzen
 thiscomponent.sheets(0).protect("qqq")'Tabelle sperren
endif
End Sub
Was passiert:
Die Tabelle1 ist mit dem Passwort qqq geschützt, nur die Zellen B1 und B2 sind nicht gesperrt. Kannst Du gut erkennen wenn Du Strg+F8 eingibst, wieder Strg+F8 wechselt in die normale Ansicht.
Wurde in B1 ein A und in B2 ein B eingegeben, dann wird der Blattschutz aufgehoben, die Zellen B1 und B2 gesperrt, sowie die Zelle B4 entsperrt und grün eingefärbt. Dann wird das Blatt wieder geschützt.
Wird nun, vorher ging es nicht, in B4 ein C eingegeben, wird der Zellhintergrund wieder weiß, und dann die Zelle B4 gesperrt.

Viel Erfolg beim Nachbauen für Deinen Fall
Gruß R
Dateianhänge
Cellunprotection.zip
(7.26 KiB) 219-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten