Hintergundfarbe als RGB auslesen und in Zelle schreiben

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Motley Glowv2
Beiträge: 6
Registriert: Di, 14.01.2020 13:25

Hintergundfarbe als RGB auslesen und in Zelle schreiben

Beitrag von Motley Glowv2 »

Hallo,
ich bin das erste Mal in der Verlegenheit ein Makro zu benötigen, ich habe mir schon einige angesehen - aber ich verstehe es nicht.
Diese Funktion ist schon sehr dicht dran -
nur ich kann es nicht bedienen und ich möchte nicht auf Farben prüfen, sondern brauche die RGB oder HEX Werte
Der Aufruf dazu ist wie folgt
=FARBE(ZELLE("ADDRESS";A1);255;0;0)*WENN(B1="A";1;0)

klappte bei mir leider nicht, immerhin kam zumindest eine 0 als Ergebniss
(ich hab bei meiner Suche nach Funktionen > 6 verschiedene Fehlermeldungen bekommen)

Code: Alles auswählen

Function FARBE(Adresse,R,G,B)
zelle = ThisComponent.Sheets(0).getCellRangeByName(Adresse)
If zelle.CellBackColor(R,G,B)=RGB(R,G,B) Then 
      FARBE=1
   else
      FARBE=0
End if
End Function
Die Funktion, welche ich gerne hätte, liest eine anzugeben Zelle und schreibt den Wert in die Zelle mit dem Aufruf.

Also eigentlich muss nur auf die richtige Art und Weise die If Funktion entfernt werden?
Und die richtige Formel zum Aufruf braucht es auch.

Wie geht das? Wurde mich sehr freuen, wenn mir jemand weiter hilft.

Gruß
Guido
paljass
******
Beiträge: 792
Registriert: Do, 25.10.2012 07:25

Re: Hintergundfarbe als RGB auslesen und in Zelle schreiben

Beitrag von paljass »

Hallo Guido,
vielleicht hilft dir das hier weiter.

Gruß
paljass

Übrigens: Es gibt hier auch ein Forum für "Makros und allgemeine Programmierung", da wärst du wohl besser aufgehoben.
EDV ist wie U-Boot fahren - machst du ein Fenster auf, fangen die Probleme an.
Motley Glowv2
Beiträge: 6
Registriert: Di, 14.01.2020 13:25

Re: Hintergundfarbe als RGB auslesen und in Zelle schreiben

Beitrag von Motley Glowv2 »

Vielen Dank, paljass. Die Funktion habe ich mir auch schon angesehen - ich komme leider auch nicht dahinter wie die Syntax funktioniert, insgesamt erscheint mir der Code komplexer.

Ja, das Makro Forum habe ich mittlerweile gesehen, wollte auch schon "umziehen" kann hier aber nicht Löschen.

Ich schreibe das mal ran.

Gruß
Guido
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Hintergundfarbe als RGB auslesen und in Zelle schreiben

Beitrag von mikeleb »

Hallo,

Code: Alles auswählen

Function ZellFARBE(Adresse) as string
	oZelle = ThisComponent.Sheets(0).getCellRangeByName(Adresse)
	iFarbe=ozelle.cellbackcolor
	if iFarbe>-1 then
		ZellFarbe="R: " & red(iFarbe) & ", G: " & green(iFarbe) & ", B: " & blue(iFarbe)
	else
		Zellfarbe="nicht definiert"
	end if
End Function
Das Makro liefert dir eine String mit den gewünschten Informationen. Beachte aber, dass es z. B. kein Ergebnis gibt, wenn die Hintergrundfarbe über eine bedingte Formatierung festgelegt wird.
Ergänzung: Ausgabe als Hex-Wert

Code: Alles auswählen

Function ZellFARBE(Adresse)
	oZelle = ThisComponent.Sheets(0).getCellRangeByName(Adresse)
	iFarbe=ozelle.cellbackcolor
	if iFarbe>-1 then
		ZellFarbe=hex(iFarbe)
	else
		Zellfarbe="nicht definiert"
	end if
End Function
Gruß,
mikeleb
Motley Glowv2
Beiträge: 6
Registriert: Di, 14.01.2020 13:25

Re: Hintergundfarbe als RGB auslesen und in Zelle schreiben

Beitrag von Motley Glowv2 »

Hallo Mikelab,
und wie wende ich das an?
Ich habe den Code in Makro 1 kopiert

Dann =ZellFARBEHEX(A1) in eine Zelle eingegeben

Das Ergebnis ist BASIC-Laufzeitfehler. Es ist eine Exception aufgetreten Type: com.sun.star.uno.TuntimeException Message: .


Gruß Guido
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Hintergundfarbe als RGB auslesen und in Zelle schreiben

Beitrag von mikeleb »

Hallo,
Entschuldigung, ich vergaß:

Code: Alles auswählen

=ZelleFarbe(Zelle("ADDRESS";A1))
Gruß,
mikeleb
Motley Glowv2
Beiträge: 6
Registriert: Di, 14.01.2020 13:25

Re: Hintergundfarbe als RGB auslesen und in Zelle schreiben

Beitrag von Motley Glowv2 »

Ich bekomme es nicht hin - der Aufruf der Funktion wird doch als Formel in ein Feld eingetragen, oder? Makrosicherheit ist es auch nicht.

Folgende Fehlermeldungen stehen zur Auswahl:

Einfach Kopiert : #NAME?

Makro Ausführen benutzt:

Ein Scripting Framework Fehler trat während der Ausführung von Basic sript Standart.Module.ZellFARBE auf.

wrong numbers of parameters
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Hintergundfarbe als RGB auslesen und in Zelle schreiben

Beitrag von mikeleb »

Hallo,
#NAME?
bedeutet, dass Calc die Funktion nicht kennt.
Mein Schreibfehler - korrekt ist:

Code: Alles auswählen

=ZELLFARBE(ZELLE("ADDRESS";A1))
Gruß,
mikeleb
Motley Glowv2
Beiträge: 6
Registriert: Di, 14.01.2020 13:25

Re: Hintergundfarbe als RGB auslesen und in Zelle schreiben

Beitrag von Motley Glowv2 »

Wooow, yea. Es funktioniert :-), vielen Dank. Mikelab

Der erste Code für Dummis! Ich habe einige probiert...

Also hier zusammengefasst.
(! Funktioniert nicht bei bedingten Formatierungen)
Um die Hintergrundfarbe von Open Office Calc Zellen / Feldern in RGB oder HEX anzuzeigen, benötigt man eine Funktion - Diese muss bei Makros eingetragen werde.
Das trägt man ein in Extras > Makros verwalten > Open Office Basic + Meine Makros + Standard > Neu

Unter End Sub kommen die Funktion.

Code: Alles auswählen

Sub Macro1

End Sub

Function ZellFARBERGB(Adresse) as string
	oZelle = ThisComponent.Sheets(0).getCellRangeByName(Adresse)
	iFarbe=oZelle.cellbackcolor
	if iFarbe>-1 then
		ZellFarbeRGB="R: " & red(iFarbe) & ", G: " & green(iFarbe) & ", B: " & blue(iFarbe)
	else
		ZellfarbeRGB="nicht definiert"
	end if
End Function

End Function
Zum Auslesen der Hintergrundfarbe schreibt man in die Celle, wie ein Formel, den Funktionsnamen mit Parameter (Also die Variable für den Farbwert und das auszulesenden Feld).

=ZELLFARBERGB(ZELLE("ADDRESS";A1))

Code: Alles auswählen

Function ZellFARBEHEX(Adresse)
	oZelle = ThisComponent.Sheets(0).getCellRangeByName(Adresse)
	iFarbe=ozelle.cellbackcolor
	if iFarbe>-1 then
		ZellFarbeHEX=hex(iFarbe)
	else
		ZellfarbeHEX="nicht definiert"
	end if
End Function
=ZELLFARBEHEX(ZELLE("ADDRESS";A1))

Vielen Dank

Gruß Guido
Antworten