Seite 2 von 3
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: Sa, 28.09.2019 15:04
von Longyearbyen
nein - das war nicht meine Intention!
Es sollte nur die Möglichkeit aufzeigen, dass manche vielleicht zu voreilig sind und meinen, dass da was nicht funktioniert. Es braucht einfach auch Rechenleistung und damit vermutlich auch Zeit.
Lieber 15 Sekunden als Tage weise alles manuell umschreiben
LG Jörg
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: Sa, 28.09.2019 16:05
von quotsi
Hallo, ihr Lieben,
Mein Zwischenkommentar war nicht wegen der Zeit (viel oder wenig) entstanden, denn meine kleine Probendatei braucht keine Zeit auf meinem Rechner. Mein Irrung entstand in zwei Beobachtungen:
1. Bei der "leeren" (=standard) Zelle war ich noch dem Glauben verfallen, dass das Makro bereits mich nötigt, eine Formatvorlage zu erzeugen.
2. Beim Versuch mit grün irritierte mich, dass meine eine "markierte" (eigentlich nur ausgewählte) Zelle (die einzige mit Umrandung) blieb. Zwar sprang eine Umrandung zur anderen Grünen, aber ich bemerkte nicht die Gruppenbildung. Erst bei dem letzten Versuch fiel mir auf, dass das grün beider grünen Zellen irgendwie dunkler aussah, als zuvor. Das war dann auch für mich der Hinweis auf die gruppierte Markierung, nur leider sehr dezent und für mich im Kopf zu spät.
Letztendlich hat dann j alles geklappt, wie gewünscht und mich sehr beeindruckend. Hut ab.
Pit
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: Sa, 28.09.2019 17:12
von Helmut_S
Hallo, @Stephans Makro funktioniert einwandfrei, auch wenn es auf den ersten Klick scheinbar "nichts tut". Ich möchte den TE nur darauf aufmerksam machen, dass man die neue HG Farbe nicht nur mit der Gießkanne zuweisen kann, sondern auch gleich über eine vorher erstellte Zellen-Formatvorlage.
Das scheint mir wesentlich flexibler, da man damit hinterher bequem auch andere Attribute ändern kann.
Gruß, Helmut
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: Sa, 28.09.2019 17:37
von quotsi
Helmut_S hat geschrieben: Sa, 28.09.2019 17:12
... dass man die neue HG Farbe nicht nur mit der Gießkanne zuweisen kann, sondern auch gleich über eine vorher erstellte Zellen-Formatvorlage.
Das ist eine eingeschränkte Wahrheit, denn man kann die nun markierten unmittelbar einer neuen unbenannten Vorlage zuführen, die man dann erst benennt.
Das hatte ich probiert!
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: Sa, 28.09.2019 17:53
von Longyearbyen
Helmut_S hat geschrieben: Sa, 28.09.2019 17:12
....Ich möchte den TE nur darauf aufmerksam machen, dass man die neue HG Farbe nicht nur mit der Gießkanne zuweisen kann, sondern auch gleich über eine vorher erstellte Zellen-Formatvorlage.
Das scheint mir wesentlich flexibler, da man damit hinterher bequem auch andere Attribute ändern kann.
Gruß, Helmut
Das ist ja auch mein Ansinnen. Formatvorlagen existieren nun ganz simpel wie "01 gelb", "02 blau" etc und die mittels des Makros markierten Zellen kann ich nun einfach den Farben der Formatvorlagen zuordnen und dann ggf. auch mal ändern, wenn andere Farben auf dem Plan stehen.
Die aktuellen Web-Briefe existieren sowieso nur noch mit Formatvorlagen-Zellen.
LG, Jörg
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: Sa, 28.09.2019 19:04
von F3K Total
Moin,
Ich hätte da inzwischen noch eine Lösung nach meiner oben vorgeschlagenen Idee zu bieten, Beispiel anbei.
Das Makro ermittelt alle im markierten Zellbereich vorkommenden Farben, und legt für jede Farbe ein Zellvorlage an.
Dann grast es alle markierten Zellen erneut ab, liest die Zellhintergrundfarbe aus, löscht sie aus der jeweiligen Zelle und weist ihr die Zellvorlage mit der eben gelöschten Zellhintergrundfarbe zu.
Nachdem man also ein Muster einmal mit diesem Makro bearbeitet hat, kann man jede Farbe über die Zellvorlage in allen betroffenen Zellen mit einem Mal ändern.
Zelle anklicken; F11 drücken->aktive Zellvorlage ist selektiert, Rechtsklick->Ändern...->Hintergrund...neue Farbe einstellen, fertig.
Code: Alles auswählen
Sub replaceBackColorByStyle
oCellStyles = Thiscomponent.Stylefamilies.CellStyles
oCellformatranges = thiscomponent.currentselection.Cellformatranges
ncounter = 0
for i = 0 to oCellformatranges.count -1
oNewStyle = THISCOMPONENT.Createinstance("com.sun.star.style.CellStyle")
oNewStyle.Name = ""+oCellformatranges(i).Cellbackcolor
if not oCellstyles.hasByName(""+oCellformatranges(i).Cellbackcolor,oNewStyle) then
oCellstyles.insertByName(""+oCellformatranges(i).Cellbackcolor,oNewStyle)
oNewStyle.CellBackColor = oCellformatranges(i).Cellbackcolor
ncounter = nCounter + 1
endif
next i
oCellrangeaddress = ThisComponent.currentselection.Rangeaddress
oSheet = ThisComponent.Sheets(oCellrangeaddress.Sheet)
for j = oCellrangeaddress.startcolumn to oCellrangeaddress.Endcolumn
for k = oCellrangeaddress.startrow to oCellrangeaddress.Endrow
oCell = oSheet.getcellbyposition (j,k)
nColor = oCell.Cellbackcolor
oCell.Cellbackcolor = -1
oCell.CellStyle = ""+nColor
next k
next j
msgbox ("Es wurden "+ncounter+" Zellvorlagen erstellt und auf die ausgewählten Zellen angewendet",64,"Fertig")
End Sub
Gruß R
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: Sa, 28.09.2019 19:31
von Longyearbyen
F3K Total hat geschrieben: Sa, 28.09.2019 19:04
Moin,
Ich hätte da inzwischen noch eine Lösung nach meiner oben vorgeschlagenen Idee zu bieten, Beispiel anbei.
Das Makro ermittelt alle im markierten Zellbereich vorkommenden Farben, und legt für jede Farbe ein Zellvorlage an.
Dann grast es alle markierten Zellen erneut ab, liest die Zellhintergrundfarbe aus, löscht sie aus der jeweiligen Zelle und weist ihr die Zellvorlage mit der eben gelöschten Zellhintergrundfarbe zu.
Nachdem man also ein Muster einmal mit diesem Makro bearbeitet hat, kann man jede Farbe über die Zellvorlage in allen betroffenen Zellen mit einem Mal ändern.
Zelle anklicken; F11 drücken->aktive Zellvorlage ist selektiert, Rechtsklick->Ändern...->Hintergrund...neue Farbe einstellen, fertig.
Gruß R
....Fein

Dann brauche ich nur noch einen Generator, der mir automatisch nach historischer Vorlage Webbriefe erstellt...
nein, Scherz beiseite, eine fantastische Idee! Ich brauche sie hier nicht mehr, da ich nun alle Briefe "konvertieren" konnte.
Den Code habe ich mir trotzdem abgesichert, allein schon um zu studieren, was dabei gerade abläuft.
Vlt probiere ich es auch selbst mal mit dem programmieren...
Danke Euch allen fürs Kopfzerbrechen und ich hoffe, dass noch weitere User diese spezielle Sache nutzen können.
LG, Jörg
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: So, 29.09.2019 11:40
von Stephan
hier mit Fortschrittsanzeige:

- fortschritt.gif (2.77 KiB) 4270 mal betrachtet
Code: Alles auswählen
Dim wv_fortschritt_model As Object
Dim wv_fortschritt As Object
Sub Main
Dim az As Long
Dim bz As Long
If ThisComponent.getCurrentSElection.supportsService("com.sun.star.sheet.SheetCell") Then
akt_farbe = Thiscomponent.getCurrentSelection.CellBackColor
Else
Msgbox "Bitte nur EINE Zelle markieren."
End If
blatt = ThisComponent.CurrentController.ActiveSheet
cur = blatt.CreateCursor
cur.GotoEndOfUsedArea(True)
letzte_zeile = cur.RangeAddress.EndRow
letzte_spalte = Cur.RangeAddress.EndColumn
az = (letzte_zeile+1)*(letzte_spalte+1)
bz = 0
bereiche = ThisComponent.CreateInstance("com.sun.star.sheet.SheetCellRanges")
'Fortschrittsdialog
fortschrittsanzeige
For i = 0 to letzte_zeile
For j = 0 To letzte_spalte
If blatt.getCellByPosition(j, i).CellBackColor = akt_farbe Then
bereiche.addRangeAddress(blatt.getCellByPosition(j, i).RangeAddress, False)
End If
bz = bz + 1
wv_fortschritt.Model.getByName("warten1").Label = bz & " von " & az & " Zellen geprüft."
Next j
Next i
ThisComponent.CurrentController.select(bereiche)
wv_fortschritt.setVisible(False)
Msgbox "Fertig."
End Sub
Sub fortschrittsanzeige()
wv_fortschritt_model = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
wv_fortschritt_model.setPropertyValue("Width", 150)
wv_fortschritt_model.setPropertyValue("Height", 20)
wv_fortschritt_model.SetPropertyValue("Title","Bitte etwas Geduld")
oMod_warten = wv_fortschritt_model.createInstance("com.sun.star.awt.UnoControlFixedTextModel")
With oMod_warten
.setPropertyValue("Name","warten1")
.setPropertyValue("PositionX",5) '192
.setPropertyValue("PositionY",5)
.setPropertyValue("Width",140)
.setPropertyValue("Height",13)
.setPropertyValue("Label","Bitte etwas Geduld...")
End With
wv_fortschritt_model.insertByName("warten1", oMod_warten)
wv_fortschritt = CreateUnoService("com.sun.star.awt.UnoControlDialog")
wv_fortschritt.setModel(wv_fortschritt_model)
oWin2 = CreateUnoService("com.sun.star.awt.Toolkit")
wv_fortschritt.createPeer(oWin2, null)
wv_fortschritt.setVisible(True)
End Sub
Gruß
Stephan
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: So, 29.09.2019 15:49
von quotsi
F3K Total hat geschrieben: Sa, 28.09.2019 19:04
Zelle anklicken; F11 drücken->aktive Zellvorlage ist selektiert, Rechtsklick->Ändern...->Hintergrund...neue Farbe einstellen, fertig.
Leider nicht fehlerfrei.
Auf meine o. angegebene Beispieldatei angewandt und das erste oder zweite grüne Feld angewandt:
Es wird nur dieses eine Feld mit einer neuen (mit kuriosem Zahlennamen versehenen) Formatvorlage versehen, die anderen grünen nicht. Auch bleiben die beiden anderen Farben mit Formatvorlage unangetastet.
Entweder werden beide Makros kombiniert oder die Nutzung ist wertlos.
Pit
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: So, 29.09.2019 18:51
von F3K Total
quotsi hat geschrieben: So, 29.09.2019 15:49
Leider nicht fehlerfrei.
Klasse Pit,
"Herr Lehrer, ich weiß was, im Keller brennt Licht"
Du hast in deiner Datei schon Formatvorlagen angewendet. Eine Zelle die per Formatvorlage formatiert ist, hat keine "harte Hintergrundfarbe", daher kann mein Makro auch keine Farbe auslesen um dann eine neu kreierte Zellvorlage zuzuweisen.
Versuch es mit einer Datei, in der keine Zelle per Formatvorlage formatiert sind, wie es Longyearbyen geschrieben hat, z.B. meiner Beispieldatei.
Das Makro macht GENAU das was es soll.
PS: der kryptische Vorlagenname entspricht der Farbe als Longinteger-Zahl
R
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: Mo, 30.09.2019 17:35
von quotsi
F3K Total hat geschrieben: So, 29.09.2019 18:51
Du hast in deiner Datei schon Formatvorlagen angewendet. Eine Zelle die per Formatvorlage formatiert ist, hat keine "harte Hintergrundfarbe", daher kann mein Makro auch keine Farbe auslesen um dann eine neu kreierte Zellvorlage zuzuweisen.
Ich weiß Deine Fähigkeiten zu schätzen, brauchst mich also nicht lächerlich zu machen.
Ich möchte bemerken, dass in meiner Beispieldatei, als ich sie hochludt, zwar 2 Farben mit Formatvorlagen drin waren, nämlich rot und gelb, nicht aber die grüne!
Nur deshalb war es mir möglich das erste hier im thread vorgestellte Makro auszuprobieren.
Da ich nur ein kleines Licht bin ohne große Kenntnisse, dass nur Klarheit haben will, werde ich jetzt alles nochmal probieren, sowohl was Du behauptest und auch noch mal was ich behauptete.
Wenn nämlich Dein Makro ausschliesslich funktioniert, wenn gar keine Farben mit Formatvorlagen drin sind, dann muß das
vorher als Bedingung bekannt sein. Ich selbst hatte vermutet, daß das egal wäre, denn es ging ja nur um Erkennung hart formatierter.
NACHTRAG: Ich sehe, meine Beispieldatei ist im thread verschwunden???
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: Mo, 30.09.2019 17:51
von Stephan
NACHTRAG: Ich sehe, meine Beispieldatei ist im thread verschwunden???
ist hier nicht die Datei:
viewtopic.php?f=2&t=73401#p285593
zumindest bei mir klappt auch der Download.
Gruß
Stephan
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: Mo, 30.09.2019 18:50
von quotsi
@ F3K Total
Also meine Beispieldatei mit deinem Makro:
1. A1 (=leer) fokussiert, Makro: Es resultiert:
eine neue Vorlage "-1". Eine leere Zelle mit -1-Vorlage formatiert : keine Farbe,
die grüne Farbe ist noch ohne Formatzuweisung so wie zuvor
2. C3 (=grün) fokussiert : Es entsteht eine neuer Vorlage "10092441". Eine leere Zelle damit formatiert: sie wird grün wie die anderen,
aber jede andere grüne
außer C3 haben wie zuvor die Standardvorlage.
3. D8 (=die letzte grüne) fokussiert: Dasselbe Resultat: Nur diese Zelle erhält eine neue Formatvorlage mit der richtigen Eigenschaft, die anderen grünen nicht.
Die Beispieldatei ohne jede Formatvorlage für Hintergrundfarbe:
4. A1 fokussiert: Dasselbe wie bei 1.
5. Die gesamte Tabelle markiert: Kommt nicht zum Abschluß! Man kann merhfach speichern... , aber es werden tatsächlich 4 Formatvorlagen erzeugt, aber ich erlebe nicht, dass die farbigen Zellen eine erhalten, sondern sie bleiben bei Mouse-over immer auf Standard.
Schließlich bekommt jeweils eine Zuweisung.
Pit
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: Mo, 30.09.2019 19:02
von F3K Total
Hallo Pit,
habe es gerade mit meiner Datei unter LO 6.2.7, und AOO 4.1.7, Windows 7 versucht, Ergebnis anbei.
Und auch bei deiner Datei wird alle Zellen, denen eine "harte Farbe" von Hand zugeordnet wurde, die richtige Zellvorlage zugeordnet.
Kann dein Ergebnis hier also nicht nachstellen.
Gruß R
PS: Beim Versuch mit der noch nicht stabilen Version LO 6.3.1 kommt es bei mir zum Zittern der Schaltfläche, das Ergebnis ist aber auch in Ordnung.
Anbei noch deine Datei, bei der ich in die mit Zellvorlagen formatierten Zellen harte Farben gesetzt habe, bevor ich das Makro laufen lies.
Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren
Verfasst: Di, 01.10.2019 00:11
von Longyearbyen
Moin nochmals in die Runde,
@F3K Total
da muss ich doch nochmal nachfragen... wieso verwendest Du statt zum Beispiel Gelb Grün oder Blau als Vormatvorlage stets ellenlage Zahlen? Vermutlich bin ich hier wieder zu blöd und es sind vielleicht die (Hexa?)(CMYK)(RGB)(RAL)-codes für die Farben, die Du in den Zellen verwendet hast.
Auch sonst wäre es interessant zu wissen, wo man diese Codes angezeigt bekommt.
LG, Jörg