Zelle per Makro Farbe aus RGB-Werten zuweisen
Moderator: Moderatoren
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
Äh... Mein Fehler! Ich meinte natürlich mttels eines Makros, quasi "Kopiere das Format der Zelle X und erstelle daraus eine FV mit dem Namen des Zellinhaltes"
Liebe Grüße, Marcel
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
Warum werden die Formate nicht in die neu erstellte FV übernommen?
- Dateianhänge
-
- calc error 03 - werte nicht korrekt übernommen.JPG (122.44 KiB) 4968 mal betrachtet
Liebe Grüße, Marcel
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
Hallo,
mich würde mal interessieren ob dein gezeigter Code von dir persönlich stammt, oder ob Du irgendwo etwas abgekupfert hast.
Warum werden Variablen deklariert, wenn sie in der dementsprechenden Sub nicht angewendet werden?
myDoc wird hier definiert, aber nicht deklariert, und nur ein einziges mal in der folgezeile angewendet.
mySheet wird hier definiert, aber nicht deklariert, und ferner wird diese Variable überhaup nicht benutzt.
mycell wird hier definiert, aber nicht deklariert, und ein paar Zeilen später wird sie wieder anders defeniert.
Das ist schon reichlich Chaotisch, und vor allem kann das unvorhergesehene Probleme aufrufen, wenn Variablen nicht Ordnungsgemäß deklariert und definiert werden.
Dazu kann ich nur eins sagen: Lösch die 3 Müllzeilen.
FALSCH!!!
Wenn Du mit getcellbyposition arbeitest, dann hat die spalte GF nicht den Indexwert 188, sondern 187. Denn wenn nix anderes vorgegeben wird, dann fängt die Zählung bei 0 an. Also Spalte A ist gleich 0, Spalte G ist gleich 6 etc.
Und außerdem verschiebst Du den Indexwert von 188 auf 189 (188+1), und landest dadurch dann bei der Spalte GH.
Das gleiche gilt auch für die Zeilen.
Du siehst im Tabellenblatt die Zeile 1, und so identifizierst Du sie auch, als die 1. Zeile. Aber in getcellbyposition ist die Zeile 1 (die Du siehst) die Zeile 0.
Nicht nur bei getcellbyposition ist dies die Nullbasierende Zählung die fest vorgegeben ist. Es gibt aber auch ausnahmen, und eine zeige ich gleich.
Aber warum machst du dir das denn überhaupt so unnötig unbequem?
Das geht doch auch einfacher, und vor allem übersichtlicher.
Du brauchst also dir nicht extra als Kommentar hinschreiben das es sich um die Spalte GF handelt, sondern siehst gleich in getCellRangeByName den realen Spaltennamen.
Bei getCellRangeByName ist jetzt aber die Zählung nicht mehr Nullbasierend, sondern beginnend mit 1.
Kleines Beispiel um den unterschied zwischen den beiden "Positionsangaben" zu verdeutlichen.
1)
Es wird die Zelle B2 angesprochen.
2)
Es wird die Zelle B1 angesprochen.
Und nun ein weiteres Thema, was dir einiges erleichtert und auch für mehr Ordnung sorgt.
Hier von interessieren uns jetzt nur die Zeilen die mit mycell beginnen. Auffalend ist, das sich das hier
immer wieder wiederholt, und das nicht nur in den beiden gezeigten Zeilen.
Das geht einfacher, verständlicher und übersichtlicher.
Als erstes die Variabeln deklaration.
Nun die Variablen definition.
So, und nun kombinieren wir das ganze jetzt noch mit der Zelladressierung, und schon haben wir einen etwas sauberen, verständlichern Code.
Deine Hausaufgaben sind jetzt:
- Beachte und bedenke meine Hinweise zu der Zählweise (Nullbasierend/normale Zählung)
- Überprüfe ob Du wirklich die richtigen Zellen aufrufst, beziehungsweise ansprichst
- Räume deinen Code auf, rausschmeissen was nicht gebraucht wird
- Setze meine Änderungsvorschläge in die Tat um
- Probier das geänderte Makro aus, und teile uns das Ergebnis mit.
Ich weiß nicht ob Du dir durch die falsche Zelladressierung einen fetten Fehler eingebaut hast, weil Du falsch gedacht hast und dadurch dein Makro nicht so läuft wie es soll, aber wenn schon mal diese Fehlerquelle ausgemerzt ist, dann sind wir schon mal einen Schritt weiter.
Gruß
balu
mich würde mal interessieren ob dein gezeigter Code von dir persönlich stammt, oder ob Du irgendwo etwas abgekupfert hast.
Code: Alles auswählen
Dim Wert1 As Integer
Dim Wert2 As Integer
Dim Wert3 As Integer
Code: Alles auswählen
myDoc = thisComponent
mySheet = myDoc.sheets(6)
mycell = thisComponent.sheets(6).getcellbyposition(0,0)
for zaehler=7 to 87 'Zeilen 8 bis 87
'Werte für die Hintergrundfarbe auslesen
mycell = ThisComponent.Sheets().getByName("Sheet7").getcellbyposition(188+1, Zaehler) 'Spalte 188 (GF)
mySheet wird hier definiert, aber nicht deklariert, und ferner wird diese Variable überhaup nicht benutzt.
mycell wird hier definiert, aber nicht deklariert, und ein paar Zeilen später wird sie wieder anders defeniert.
Das ist schon reichlich Chaotisch, und vor allem kann das unvorhergesehene Probleme aufrufen, wenn Variablen nicht Ordnungsgemäß deklariert und definiert werden.
Dazu kann ich nur eins sagen: Lösch die 3 Müllzeilen.
Code: Alles auswählen
.getcellbyposition(188+1, Zaehler) 'Spalte 188 (GF)
Wenn Du mit getcellbyposition arbeitest, dann hat die spalte GF nicht den Indexwert 188, sondern 187. Denn wenn nix anderes vorgegeben wird, dann fängt die Zählung bei 0 an. Also Spalte A ist gleich 0, Spalte G ist gleich 6 etc.
Und außerdem verschiebst Du den Indexwert von 188 auf 189 (188+1), und landest dadurch dann bei der Spalte GH.
Das gleiche gilt auch für die Zeilen.
Du siehst im Tabellenblatt die Zeile 1, und so identifizierst Du sie auch, als die 1. Zeile. Aber in getcellbyposition ist die Zeile 1 (die Du siehst) die Zeile 0.
Nicht nur bei getcellbyposition ist dies die Nullbasierende Zählung die fest vorgegeben ist. Es gibt aber auch ausnahmen, und eine zeige ich gleich.
Aber warum machst du dir das denn überhaupt so unnötig unbequem?
Das geht doch auch einfacher, und vor allem übersichtlicher.
Code: Alles auswählen
.getCellRangeByName("GF" & Zaehler)
Bei getCellRangeByName ist jetzt aber die Zählung nicht mehr Nullbasierend, sondern beginnend mit 1.
Kleines Beispiel um den unterschied zwischen den beiden "Positionsangaben" zu verdeutlichen.
Code: Alles auswählen
1)
.getCellByPosition(1,1)
2)
.getCellRangeByName("B" & 1)
Es wird die Zelle B2 angesprochen.
2)
Es wird die Zelle B1 angesprochen.
Und nun ein weiteres Thema, was dir einiges erleichtert und auch für mehr Ordnung sorgt.
Code: Alles auswählen
mycell = ThisComponent.Sheets().getByName("Sheet7").getcellbyposition(188+1, Zaehler) 'Spalte 188 (GF)
BGWert1 = myCell.Value
mycell = ThisComponent.Sheets().getByName("Sheet7").getcellbyposition(188+2, Zaehler) 'Spalte 189 (GG)
BGWert2 = myCell.Value
Code: Alles auswählen
ThisComponent.Sheets().getByName("Sheet7")
Das geht einfacher, verständlicher und übersichtlicher.
Als erstes die Variabeln deklaration.
Code: Alles auswählen
Dim oDok as Object
Dim oBlatt7 as Object
Code: Alles auswählen
oDok = thisComponent
oBlatt7 = oDok.sheets.getByName("Sheet7")
Code: Alles auswählen
mycell = oBlatt7.getCellRangeByName("GF" & Zaehler)
BGWert1 = myCell.Value
mycell = oBlatt7.getCellRangeByName("GG" & Zaehler)
BGWert2 = myCell.Value
Deine Hausaufgaben sind jetzt:
- Beachte und bedenke meine Hinweise zu der Zählweise (Nullbasierend/normale Zählung)
- Überprüfe ob Du wirklich die richtigen Zellen aufrufst, beziehungsweise ansprichst
- Räume deinen Code auf, rausschmeissen was nicht gebraucht wird
- Setze meine Änderungsvorschläge in die Tat um
- Probier das geänderte Makro aus, und teile uns das Ergebnis mit.
Ich weiß nicht ob Du dir durch die falsche Zelladressierung einen fetten Fehler eingebaut hast, weil Du falsch gedacht hast und dadurch dein Makro nicht so läuft wie es soll, aber wenn schon mal diese Fehlerquelle ausgemerzt ist, dann sind wir schon mal einen Schritt weiter.
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
Holla, ob ich die Antwort noch bis zum Feierabend schaffe...?
Also, die unterschiedlichen "Wert"-Variablennamen kommen aus einer nachträglichen Umbenennung, als ich die Wertvariablen für die Schriftfarbe hinzugefügt hatte. Inwieweit dieses Ge -Dim-me einen Unterschied macht, konnte ich noch nicht feststellen - in manchen Code-Beispielen im Netz ist was geDimmt, in anderen nicht.
Und warum nicht geDimmte Variablen trotzdem funktionieren, verstehe ich auch nicht...
Grundsätzlich hast du schon recht: Der Großteil des Codes stammt von einem ziemlich schlauen Menschen hier im Forum, dessen Namen ich jetzt jedoch aufgrund der Threadstruktur nicht ad hoc zur Hand habe.
Definieren und deklarieren ist für mich als Einsteiger eigentlich das selbe; scheint aber nen Unterschied zu geben...(?)
so feierabend jetzt, bis montag! jetzt ist erstmal wochendeeeeeeeendeeeee
LG Masl
Also, die unterschiedlichen "Wert"-Variablennamen kommen aus einer nachträglichen Umbenennung, als ich die Wertvariablen für die Schriftfarbe hinzugefügt hatte. Inwieweit dieses Ge -Dim-me einen Unterschied macht, konnte ich noch nicht feststellen - in manchen Code-Beispielen im Netz ist was geDimmt, in anderen nicht.
Und warum nicht geDimmte Variablen trotzdem funktionieren, verstehe ich auch nicht...
Grundsätzlich hast du schon recht: Der Großteil des Codes stammt von einem ziemlich schlauen Menschen hier im Forum, dessen Namen ich jetzt jedoch aufgrund der Threadstruktur nicht ad hoc zur Hand habe.
Definieren und deklarieren ist für mich als Einsteiger eigentlich das selbe; scheint aber nen Unterschied zu geben...(?)
Ja, da hast du wohl recht, darum habe ich das ganze so gut ich konnte für meine Begriffe übersichtlicher gemacht, indem ich diese Vorabzusammenfassungen - xyz = riesenlangeObjektKategorieKette - aufgelöst und in jeder Zeile exakt unter einander geschrieben habe. Wie gesagt, ich persönlich empfinde dies als übersichtlicher, da ich nicht immer gucken muss "Wenn das dies ist, dann heißt das, jenes ist dieses, also müsste dann..." Du weißt was ich meine...Das ist schon reichlich Chaotisch, und vor allem kann das unvorhergesehene Probleme aufrufen, wenn Variablen nicht Ordnungsgemäß deklariert und definiert werden.
Diese Differenz war mir noch von früher bewusst. Die Kommentare wurden nicht aktualisiert, ansonsten werden die richtigen Spalten und Zeilen vom Makro angesprochen. Das sehe ich daran, dass zum einen die in der SVERWEIS-Tabelle visualisierten Zellen korrekt ausgelesen (Name der FV) und eingefärbt werden.FALSCH!!!
Wenn Du mit getcellbyposition arbeitest, dann hat die spalte GF nicht den Indexwert 188, sondern 187. Denn wenn nix anderes vorgegeben wird, dann fängt die Zählung bei 0 an. Also Spalte A ist gleich 0, Spalte G ist gleich 6 etc.
DAS wiederum kannte ich bisher noch nicht. Werde den Code dahingehend erstmal ändern, sobald ich das Hauptproblem gefunden und gelöst bekommen habe...Aber warum machst du dir das denn überhaupt so unnötig unbequem?
Das geht doch auch einfacher, und vor allem übersichtlicher.
CODE: ALLES AUSWÄHLEN
.getCellRangeByName("GF" & Zaehler)
Du brauchst also dir nicht extra als Kommentar hinschreiben das es sich um die Spalte GF handelt, sondern siehst gleich in getCellRangeByName den realen Spaltennamen.
Ja, ich weiß. Das war auch vom Helferlein ursprünglich auch genau so wie du es vorgeschlagen hast, aber da das hinten u vorn nicht funktioniert hat und ich bei diesem dasistdasunddasistdas nicht durchgesehen habe, habe ich es mir sozusagen aufgelöst. länger zwar, aber für den anfänger übersichtlicher.Und nun ein weiteres Thema, was dir einiges erleichtert und auch für mehr Ordnung sorgt.
CODE: ALLES AUSWÄHLEN
mycell = ThisComponent.Sheets().getByName("Sheet7").getcellbyposition(188+1, Zaehler) 'Spalte 188 (GF)
BGWert1 = myCell.Value
mycell = ThisComponent.Sheets().getByName("Sheet7").getcellbyposition(188+2, Zaehler) 'Spalte 189 (GG)
BGWert2 = myCell.Value
Hier von interessieren uns jetzt nur die Zeilen die mit mycell beginnen. Auffalend ist, das sich das hier
CODE: ALLES AUSWÄHLEN
ThisComponent.Sheets().getByName("Sheet7")
immer wieder wiederholt, und das nicht nur in den beiden gezeigten Zeilen.
Das geht einfacher, verständlicher und übersichtlicher.
so feierabend jetzt, bis montag! jetzt ist erstmal wochendeeeeeeeendeeeee
LG Masl
Liebe Grüße, Marcel
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
Hallo Marcel,
mach es nicht zu kompliziert und bringe den Code erst mal zum Laufen. Der Fehler ist leicht identifiziert:
Anders als in Writer sind die Cellforamte in Calc etwas komplizierter.
Das Objekt "neuerZellstyle" wird zwar korrekt erzeugt, ist aber völlig leer und kann so keine Eigenschaften aufnehmen.
Das weist du nun zunächst dem Container zu - dadurch "erbt" es alle Standardeinstellungen.
Dann änderst Du die gewünschten Eigenschaften:
So sollte das furzen...
VG
Tom
mach es nicht zu kompliziert und bringe den Code erst mal zum Laufen. Der Fehler ist leicht identifiziert:
Anders als in Writer sind die Cellforamte in Calc etwas komplizierter.
Das Objekt "neuerZellstyle" wird zwar korrekt erzeugt, ist aber völlig leer und kann so keine Eigenschaften aufnehmen.
Das weist du nun zunächst dem Container zu - dadurch "erbt" es alle Standardeinstellungen.
Dann änderst Du die gewünschten Eigenschaften:
Code: Alles auswählen
...
neuerZellstyle = thisComponent.createInstance("com.sun.star.style.CellStyle")
cs = thisComponent.styleFamilies.getByName("CellStyles")
cs.insertbyname("test",neuerZellstyle) 'hinzugefügt mit Namen "test"
REM Jetzt den neuen Stil bearbeiten
st = cs.getByName("test")
With st
.CellBackColor = rgb(122,23,45)
.charheight = 6
.charColor = rgb(y,x,z) 'musste natürlich Werte einfügen!
End with
...
So sollte das furzen...
VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
Hallo Marcel,
Ja jetzt wird einiges klarer. Typische Testdatei. Da wird hier was probiert und dort was umgeschrieben, und schwupp-di-wupp hat man den Salat. Ist voll verständlich, und passiert jedem mal.
Wenn der Basic-Interpreter erkennt, das die Variable nur Text aufnimmt, und nur in der einen Sub verarbeitet wird, dann ... mal ganz salopp gesagt ... wird schon mal eine Auge zugedrückt.
Mal ein einfaches Beispiel.
Klare Sache, es wird eine Variable auf Ganze Zahlen vorbereitet.
Wohl bemerkt, der Punkt (.) ist das Dezimaltrennzeichen in Basic. Wir würden aber von Hand 1,23456 schreiben.
Bis hier hin kein Drama. Doch das kommt jetzt.
Und Du wirst feststellen, das dir auf dem Bildschirm einfach eine 3 ausgegeben wird.
Der Grund ist ganz einfach.
Durch die deklaration wird der Variablen Typ auf Integer (Ganze Zahl) gesetzt. Zahlen mit Nachkommastellen werden gerundet abgeschnitten.
Du siehst, was für dich das selbe ist (war), sind zwei verschiedene Dinge.
So viel dazu.
Kommen wir zur Lösung deines Problems.
Nach dem ich deinen Code erstmal so aufgeräumt und umgeschrieben habe wie ich es dir empfohlen und ich es mir vorgestellt hatte, ging es auf die "Fehlersuche". Eigentlich ist das ja nicht ganz korrekt, da ja keine Fehlermeldung ausgegeben wurde. Aber anderseits war es doch eine Fehlersuche, wie ich feststellen musste.
Eigentlich hatte dir Stephan ja schon am Mittwoch die Lösung gezeigt, und Du hattest sie auch schon richtig angewendet, aber dann nahm das Chaos seinen Lauf. Da Du Probleme mit den Vorlagennamen hattest, hast Du was schon korrekt war wieder durcheinander geschmissen, und dadurch wieder Stolpersteine eingebaut. Und das nur wegen den Vorlagennamen.
Bevor ich es vergesse: Ohne die Vorarbeit von Stephan wäre ich wahrscheinlich noch immer auf der "Fehlersuche". Danke dafür .
Zur Verdeutlichung.
Das hier war dein letzter gezeigte Code, genauer gesagt die Function. Aber nicht der der im Screenshot zu sehen ist.
Und hier die funktionierende Function.
Und jetzt mal eine Erklärung von einem "Fortgeschrittenen Anfänger" zu einem "totalen Anfänger". Es sind also meine vereinfachten Worte.
Es gibt Objekte da müssen erst alle Parameter eingestellt werden, und erst dann kann das Objekt erzeugt und eingefügt (insertByName) werden.
Dann gibt es aber andere Objekte wo dies erst erzeugt und eingefügt wird, und erst danach werden die Parameter übergeben. Und das ist das, was Stephan gezeigt hatte und was ich jetzt eben gezeigt habe.
Im Anhang ist eine Beispieldatei die sich an deine Vorgaben hält, aber halt aufgeräumt und ein wenig angepasst. Brauchte keine zich Zeilen, sondern nur 5 Beispielzeilen.
Es gibt da auch 2 Buttons.
"Erstellen" = Die Formatvorlagen werden erstellt.
"Löschen" = Die Formatvorlagen werden gelöscht.
Erstellt mit OO.o 3.2.1, gegengetestet mit LO 5.1.5.2. Und in beiden Versionen funktioniert alles so wie es soll. Falls ich jetzt nicht etwas übersehen habe.
@Tom
Ich habe in der Datei eine Vorlagen Lösch-Sub von dir eingebaut, die ich etwas "eingedeutsch" und ergänzt habe. Für diese einfache Aufgabe reichte sie mir vollends. Wollte dir nur mal Feedbäck geben.
So, und nun habe ich Feierabend.
Gruß
balu
Ja jetzt wird einiges klarer. Typische Testdatei. Da wird hier was probiert und dort was umgeschrieben, und schwupp-di-wupp hat man den Salat. Ist voll verständlich, und passiert jedem mal.
Tja, das Thema Variablen deklaration und definition ist so eine Sache für sich selbst. Mal ist es dringend empfohlen, mal kann man es ein bischen lockerer angehen.Inwieweit dieses Ge -Dim-me einen Unterschied macht, konnte ich noch nicht feststellen - in manchen Code-Beispielen im Netz ist was geDimmt, in anderen nicht.
Hängt von der Variablen selbst ab.Und warum nicht geDimmte Variablen trotzdem funktionieren, verstehe ich auch nicht...
Wenn der Basic-Interpreter erkennt, das die Variable nur Text aufnimmt, und nur in der einen Sub verarbeitet wird, dann ... mal ganz salopp gesagt ... wird schon mal eine Auge zugedrückt.
Der Unterschied ist der, das mit der deklaration gesagt wird was die Variable beinhalten darf, und mit der definition wird die Variable dementsprechend gefüttert, aber auch nur mit dem was sie beinhalten darf.Definieren und deklarieren ist für mich als Einsteiger eigentlich das selbe; scheint aber nen Unterschied zu geben...(?)
Mal ein einfaches Beispiel.
Code: Alles auswählen
Dim iZahl as Integer
Code: Alles auswählen
iZahl = 1.123456
Bis hier hin kein Drama. Doch das kommt jetzt.
Code: Alles auswählen
Print iZahl *3
Der Grund ist ganz einfach.
Durch die deklaration wird der Variablen Typ auf Integer (Ganze Zahl) gesetzt. Zahlen mit Nachkommastellen werden gerundet abgeschnitten.
Du siehst, was für dich das selbe ist (war), sind zwei verschiedene Dinge.
So viel dazu.
Kommen wir zur Lösung deines Problems.
Nach dem ich deinen Code erstmal so aufgeräumt und umgeschrieben habe wie ich es dir empfohlen und ich es mir vorgestellt hatte, ging es auf die "Fehlersuche". Eigentlich ist das ja nicht ganz korrekt, da ja keine Fehlermeldung ausgegeben wurde. Aber anderseits war es doch eine Fehlersuche, wie ich feststellen musste.
Eigentlich hatte dir Stephan ja schon am Mittwoch die Lösung gezeigt, und Du hattest sie auch schon richtig angewendet, aber dann nahm das Chaos seinen Lauf. Da Du Probleme mit den Vorlagennamen hattest, hast Du was schon korrekt war wieder durcheinander geschmissen, und dadurch wieder Stolpersteine eingebaut. Und das nur wegen den Vorlagennamen.
Bevor ich es vergesse: Ohne die Vorarbeit von Stephan wäre ich wahrscheinlich noch immer auf der "Fehlersuche". Danke dafür .
Zur Verdeutlichung.
Das hier war dein letzter gezeigte Code, genauer gesagt die Function. Aber nicht der der im Screenshot zu sehen ist.
Code: Alles auswählen
Function neuer_style(s_name As String, BGWert1 As Integer, BGWert2 As Integer, BGWert3 As Integer, _
FCWert1 as Integer, FCWert2 as Integer, FCWert3 as Integer)
cs = ThisComponent.StyleFamilies.getByName("CellStyles")
Dim neuerZellstyle
neuerZellstyle = ThisComponent.CreateInstance("com.sun.star.style.CellStyle")
neuerZellstyle.setName(s_name)
with neuerZellstyle
.CellBackColor = RGB(BGWert1, BGWert2, BGWert3)
.CharColor = RGB(FCWert1, FCWert2, FCWert3)
.CharHeight = "6"
end with
cs.insertByName(s_name, neuerZellstyle)
End Function
Und hier die funktionierende Function.
Code: Alles auswählen
Function neuer_style(s_name As String, BGWert1 As Integer, BGWert2 As Integer, BGWert3 As Integer, _
FCWert1 as Integer, FCWert2 as Integer, FCWert3 as Integer)
cs = ThisComponent.StyleFamilies.getByName("CellStyles")
neuerZellstyle = ThisComponent.CreateInstance("com.sun.star.style.CellStyle")
neuerZellstyle.setName(s_name)
cs.insertByName(s_name, neuerZellstyle)
With cs.getByName(s_name)
.CellBackColor = RGB(BGWert1, BGWert2, BGWert3)
.CharColor = RGB(FCWert1, FCWert2, FCWert3)
.CharHeight = "6"
end with
End Function
Es gibt Objekte da müssen erst alle Parameter eingestellt werden, und erst dann kann das Objekt erzeugt und eingefügt (insertByName) werden.
Dann gibt es aber andere Objekte wo dies erst erzeugt und eingefügt wird, und erst danach werden die Parameter übergeben. Und das ist das, was Stephan gezeigt hatte und was ich jetzt eben gezeigt habe.
Damit dürfte die Frage ja jetzt erledigt sein.Warum werden die Formate nicht in die neu erstellte FV übernommen?
Im Anhang ist eine Beispieldatei die sich an deine Vorgaben hält, aber halt aufgeräumt und ein wenig angepasst. Brauchte keine zich Zeilen, sondern nur 5 Beispielzeilen.
Es gibt da auch 2 Buttons.
"Erstellen" = Die Formatvorlagen werden erstellt.
"Löschen" = Die Formatvorlagen werden gelöscht.
Erstellt mit OO.o 3.2.1, gegengetestet mit LO 5.1.5.2. Und in beiden Versionen funktioniert alles so wie es soll. Falls ich jetzt nicht etwas übersehen habe.
@Tom
Ich habe in der Datei eine Vorlagen Lösch-Sub von dir eingebaut, die ich etwas "eingedeutsch" und ergänzt habe. Für diese einfache Aufgabe reichte sie mir vollends. Wollte dir nur mal Feedbäck geben.
So, und nun habe ich Feierabend.
Gruß
balu
- Dateianhänge
-
- Zellvorlagen_3.2.ods
- (10.99 KiB) 63-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
Son Mist verdammter!
Da lies mir eine Sache keine Ruh, und musste das jetzt doch noch unbedingt ändern.
Also, das mit den Formatvorlagen extra löschen gefiel mir überhaupt nicht. Warum nicht einfach die schon gesetzten Eigenschaften der schon eingetragenen Formatvorlagennamen ändern? So das nur noch im Tabellenblatt eventuell andere Werte eingetragen werden, und beim erneuten Aufruf des Makros (durch Button "Erstellen") werden die neuen Werte einfach eingetragen.
Das geht, und ist eigentlich relativ unkompliziert. Dazu muss nur die Function etwas umgeschrieben werden, und zwar wie folgt.
Der Ablauf ist jetzt wie folgt.
Wenn die Formatvorlage noch nicht vorhanden ist, dann wird sie einfach erstellt.
Wenn die Formatvorlage schon vorhanden ist, dann werden die schon existierenden Einstellungen überschrieben.
Ist doch eigentlich soooooo einfach, besonders dann, wenn andere schon die Vorarbeit geleistet haben
Bin jetzt im Bett
balu
Da lies mir eine Sache keine Ruh, und musste das jetzt doch noch unbedingt ändern.
Also, das mit den Formatvorlagen extra löschen gefiel mir überhaupt nicht. Warum nicht einfach die schon gesetzten Eigenschaften der schon eingetragenen Formatvorlagennamen ändern? So das nur noch im Tabellenblatt eventuell andere Werte eingetragen werden, und beim erneuten Aufruf des Makros (durch Button "Erstellen") werden die neuen Werte einfach eingetragen.
Das geht, und ist eigentlich relativ unkompliziert. Dazu muss nur die Function etwas umgeschrieben werden, und zwar wie folgt.
Code: Alles auswählen
Function neuer_style(s_name As String, BGWert1 As Integer, BGWert2 As Integer, BGWert3 As Integer, _
FCWert1 as Integer, FCWert2 as Integer, FCWert3 as Integer)
cs = ThisComponent.StyleFamilies.getByName("CellStyles")
neuerZellstyle = ThisComponent.CreateInstance("com.sun.star.style.CellStyle")
neuerZellstyle.setName(s_name)
'------------------------------------------------------------------------------- noch nicht vorhanden?
if not cs.hasByName(s_name) then
cs.insertByName(s_name, neuerZellstyle)
With cs.getByName(s_name)
.CellBackColor = RGB(BGWert1, BGWert2, BGWert3)
.CharColor = RGB(FCWert1, FCWert2, FCWert3)
.CharHeight = "16"
end with
'------------------------------------------------------------------------------- schon vorhanden!
else
st = cs.getByName(s_name)
With st
.CellBackColor = RGB(BGWert1, BGWert2, BGWert3)
.CharColor = RGB(FCWert1, FCWert2, FCWert3)
.CharHeight = "6"
End with
end if
'-------------------------------------------------------------------------------
End Function
Wenn die Formatvorlage noch nicht vorhanden ist, dann wird sie einfach erstellt.
Wenn die Formatvorlage schon vorhanden ist, dann werden die schon existierenden Einstellungen überschrieben.
Ist doch eigentlich soooooo einfach, besonders dann, wenn andere schon die Vorarbeit geleistet haben
Bin jetzt im Bett
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
Leute... nochmal:
Arbeitet in kleinen Schritten, überprüft Ergebnisse ud Zeilen mit Tools wie xray oder MRI, und seid Euch im klaren, war ihr da wirklich tut.
Helft auch in kleinen Schritten - besser als Megathreads.
Erzeugt eine Instanz des Services "com.sun.star.style.CellStyle" - ein zunächst abstraktes Objekt. An dem könnt ihr gar nichts ändern!
Diese Zeile ist völlig unsinnig - wie auch schon am Anfang dieses Threads geschrieben! Dennoch tragt ihr sie weiter und weiter...
Schaut Euch doch mal die Ergebnisse dieser Zeile in einem Objektinspektor an!
Die Methode "cs.insertByName(s_name, neuerZellstyle)" übernimmt die Erzeugung eines neuer neuen Zellvorlage. Dieser Methode muss ein eindeutiger Name übergeben werden - der der Vorlage zugeordent wird. Die Methode selbst gibt dann dem Objekt alle benötigten Eigenschaften - und erst dann ist das Objekt nutzbar ud veränderbar! Dann liesse sich auch der Name ändern.
VG
Tom
Arbeitet in kleinen Schritten, überprüft Ergebnisse ud Zeilen mit Tools wie xray oder MRI, und seid Euch im klaren, war ihr da wirklich tut.
Helft auch in kleinen Schritten - besser als Megathreads.
Code: Alles auswählen
neuerZellstyle = ThisComponent.CreateInstance("com.sun.star.style.CellStyle")
Code: Alles auswählen
neuerZellstyle.setName(s_name)
Schaut Euch doch mal die Ergebnisse dieser Zeile in einem Objektinspektor an!
Die Methode "cs.insertByName(s_name, neuerZellstyle)" übernimmt die Erzeugung eines neuer neuen Zellvorlage. Dieser Methode muss ein eindeutiger Name übergeben werden - der der Vorlage zugeordent wird. Die Methode selbst gibt dann dem Objekt alle benötigten Eigenschaften - und erst dann ist das Objekt nutzbar ud veränderbar! Dann liesse sich auch der Name ändern.
VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
wieso funktioniert das bei dir und nicht bei mir?!
Ich hab der Einfachheit halber deinen Code 1:1 reinkopiert und es gibt diese vermaledeite Fehlermeldung "Message: ."! Was ist das für eine nichtssagende "Meldung"? *grummel*
LG, Masl
Ich hab der Einfachheit halber deinen Code 1:1 reinkopiert und es gibt diese vermaledeite Fehlermeldung "Message: ."! Was ist das für eine nichtssagende "Meldung"? *grummel*
LG, Masl
- Dateianhänge
-
- calc error 04 RunTimeException - Message Punkt.JPG (146.87 KiB) 4827 mal betrachtet
Liebe Grüße, Marcel
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
Wieso das bei dir funktioniert und bei mir nicht, weißt du auch nicht, oder? Siehe Screenshot...
- Dateianhänge
-
- calc error 04 RunTimeException - Message Punkt.JPG (146.87 KiB) 4827 mal betrachtet
Liebe Grüße, Marcel
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
die Screenshots helfen überhaupt weiter, dazu brauchte es die konkrete Datei.
möglicherweise ist dort z.B. ein Schutz der Tabelle aktiv, der Probleme machen könnte wenn die Vorlage dort verwendet wird.
Gruß
Stephan
möglicherweise ist dort z.B. ein Schutz der Tabelle aktiv, der Probleme machen könnte wenn die Vorlage dort verwendet wird.
Gruß
Stephan
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
Moin Tom,
ja ja! Ich gebs ja zu das ich nicht aufgepasst habe.
Jedoch kann zumindest ich eine Entschuldigung aufbringen: "Bin grad dabei mich von einer üblen Magen-Darm Geschichte zu erholen."
Ich habe aber jetzt hier in meiner Datei die überflüssige Zeile gelöscht. Und es funktioniert hier bei mir noch immer alles bestens.
Ach noch etwas. Natürlich habe ich mir das mal mit XRAY angeschaut, aber nur kurz, Grund siehe oben.
Gruß
balu
ja ja! Ich gebs ja zu das ich nicht aufgepasst habe.
Jedoch kann zumindest ich eine Entschuldigung aufbringen: "Bin grad dabei mich von einer üblen Magen-Darm Geschichte zu erholen."
Ich habe aber jetzt hier in meiner Datei die überflüssige Zeile gelöscht. Und es funktioniert hier bei mir noch immer alles bestens.
Ach noch etwas. Natürlich habe ich mir das mal mit XRAY angeschaut, aber nur kurz, Grund siehe oben.
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
Das sollte eigentlich so aussehen... Super mit der Zeitüberschreitung hier beim Antworten! wenn man nach der Anmeldung wenigstens wieder beim aktuellen Thread landen würde, aber nein, den darf man sich nach antirobotergeklicke wieder neu raussuchen... <- An die Admins!
---
die Eigenschaften der Variablen namens neuerZellstyle laut Objektüberwachung passen in ihrer Anzahl kaum auf den Bildschirm. Zum größten Teil steht gar kein Wert oder "" oder Null.
Welche Eigenschaft der Variablen müsste denn konkret welchen Wert haben, sodass man weiß, dass das Makro seinen Job gemacht hat?
LG, Masl
---
Hallo Tom,
die Eigenschaften der Variablen namens neuerZellstyle laut Objektüberwachung passen in ihrer Anzahl kaum auf den Bildschirm. Zum größten Teil steht gar kein Wert oder "" oder Null.
Welche Eigenschaft der Variablen müsste denn konkret welchen Wert haben, sodass man weiß, dass das Makro seinen Job gemacht hat?
LG, Masl
Liebe Grüße, Marcel
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
Die Datei oder den Code...?
Da kann ich dich beruhigen, da ist nichts geschützt in diesem Blatt - und auch nicht in der gesamten Datei, höchstens auf anderen, nicht mit diesem im Zusammenhang stehenden Blättern...möglicherweise ist dort z.B. ein Schutz der Tabelle aktiv, der Probleme machen könnte wenn die Vorlage dort verwendet wird.
Liebe Grüße, Marcel
Re: Zelle per Makro Farbe aus RGB-Werten zuweisen
Ist das denn so schwer zu verstehen?
Datei!
Gruß
balu
Datei!
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden