| |
| Die 10 hitzebeständigsten Materialien für den 3D-Druck, ein Fachartikel
|
Autor
|
Thema: Teile eines Strings farbig darstellen (6327 mal gelesen)
|
Hofe Mitglied Werkzeugmacher
Beiträge: 440 Registriert: 12.01.2008 Computer: Aldi Schreibtisch: Ikea Werkbank: Baumarkt Software: 1967-2021, viele Updates und SP's, aber sicher nicht alle, deswegen immer wieder Sicherheitslücken
|
erstellt am: 15. Okt. 2012 18:12 <-- editieren / zitieren --> Unities abgeben:
'N Abend zusammen, die Zusammenfassungszelle einer per VBA erstellten Auswertung sieht in etwa so aus: Platzierung: Rang 34/49, Hochrechnung: 56789 Punkte, Platzierung: Rang 12/49 Nun suche ich nach einer Möglichkeit, per VBA die Textteile "Rang 34/49" und Rang "12/49" farbig darzustellen (bis zu einer gewissen Größe grün, darüber rot), der Rest des Textes soll schwarz bleiben. Ich hab das mal mit dem Macrorecorder aufgezeichnet, der zählt leider die Zeichen im aktuellen Text: With ActiveCell.Characters(Start:=14, Length:=10).Font .Color = -11489280 End With Durch die Veränderung der Zahlen ändert sich aber die Anzahl der Zeichen in der Zeile, diese Festlegung darf also nicht statisch sein. Hat jemand eine Idee? Grüße Hofe ------------------ Ist mir egal, wer Dein Vater ist; solange ich angle läuft hier keiner übers Wasser! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ThoMay Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 5260 Registriert: 15.04.2007
|
erstellt am: 16. Okt. 2012 05:25 <-- editieren / zitieren --> Unities abgeben: Nur für Hofe
|
carsten-3m Mitglied Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)
Beiträge: 950 Registriert: 08.05.2007 Excel 2010
|
erstellt am: 16. Okt. 2012 09:14 <-- editieren / zitieren --> Unities abgeben: Nur für Hofe
|
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 395 Registriert: 11.08.2007
|
erstellt am: 16. Okt. 2012 09:31 <-- editieren / zitieren --> Unities abgeben: Nur für Hofe
Hi, verwende InStr und InStrRev um zu ermitteln, welche Startposition anzusetzen ist: Code: Sub Farbig() Dim intStart1 As Integer Dim intStart2 As Integer With ActiveCell intStart1 = InStr(.Value, "Rang") intStart2 = InStrRev(.Value, "Rang") With .Characters(Start:=intStart1, Length:=10).Font .Color = -16776961 End With With .Characters(Start:=intStart2, Length:=10).Font .Color = -11489280 End With End With End Sub
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 16. Okt. 2012 12:03 <-- editieren / zitieren --> Unities abgeben: Nur für Hofe
Da die Länge nicht immer gleich sein muss Rang 34/49 Vs Rang 34/149 oder so wird die Pos des , auch ermittelt, nach hinten kann 99 stehn, kommt ja nix mehr,) Code: Sub Farbig() Dim intStart1 As Integer Dim intStart2 As Integer Dim intEnd1 As Integer With ActiveCell intStart1 = InStr(.Value, "Rang") intStart2 = InStrRev(.Value, "Rang") intEnd1 = InStr(.Value, ",") - 1 With .Characters(Start:=intStart1, Length:=intEnd1).Font .Color = -16776961 End With With .Characters(Start:=intStart2, Length:=99).Font .Color = -11489280 End With End With End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hofe Mitglied Werkzeugmacher
Beiträge: 440 Registriert: 12.01.2008
|
erstellt am: 16. Okt. 2012 14:06 <-- editieren / zitieren --> Unities abgeben:
Mahlzeit! Erstmal allgemeinen Dank für die durchwegs brauchbaren Vorschläge! Die einfache Methode der aufgeteilten Zelle scheitert am Aufbau des Tabellenblattes, da sind zuviele benutzte Zellen drumherum, dass sich der Änderungsaufwand hier lohnen würde. Ich habe mir Karins Lösung rausgepickt, weil sie am besten zum Projekt passt (es handelt sich um ein Blatt, das mit Daten aus anderen Blättern komplett per VBA befüllt wird; ein Mischmasch mag ich nicht so gerne). Die Funktion InstrRev war mir neu, es funktioniert prima. Kleiner Schönheitsfehler: Da der zu färbende String sowohl 2/49 als auch 25/53 lauten kann, die Zeichenmenge also um 1 variieren kann, wird halt unter Umständen auch das nachfolgende Komma mit eingefärbt, aber damit kann ich gut leben. Allseits besten Dank! Und die Ü's nicht gleich verprassen, schließlich ist Weltsparwoche Grüße Hofe ------------------ Ist mir egal, wer Dein Vater ist; solange ich angle läuft hier keiner übers Wasser! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hofe Mitglied Werkzeugmacher
Beiträge: 440 Registriert: 12.01.2008 Computer: Aldi Schreibtisch: Ikea Werkbank: Baumarkt Software: 1967-2021, viele Updates und SP's, aber sicher nicht alle, deswegen immer wieder Sicherheitslücken
|
erstellt am: 16. Okt. 2012 14:09 <-- editieren / zitieren --> Unities abgeben:
Ups! Da hatte ich doch das Fenster so lange offen, dass ich Thomas' Beitrag erst jetzt gesehen habe. Ich mach mich gleich mal an die Umsetzung. Grüße Hofe ------------------ Ist mir egal, wer Dein Vater ist; solange ich angle läuft hier keiner übers Wasser! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 395 Registriert: 11.08.2007
|
erstellt am: 16. Okt. 2012 15:13 <-- editieren / zitieren --> Unities abgeben: Nur für Hofe
Hi, Code: Sub Farbig() Dim intStart1 As Integer Dim intStart2 As Integer Dim intEnde1 As Integer With ActiveCell intStart1 = InStr(.Value, "Rang") intStart2 = InStrRev(.Value, "Rang") intEnde1 = InStr(.Value, ",") - InStr(.Value, "Rang") With .Characters(Start:=intStart1, Length:=intEnde1).Font .Color = -11489280 End With With .Characters(Start:=intStart2).Font .Color = -16776961 End With End With End Sub
------------------ Bis später, Karin [Diese Nachricht wurde von Beverly am 16. Okt. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hofe Mitglied Werkzeugmacher
Beiträge: 440 Registriert: 12.01.2008 Computer: Aldi Schreibtisch: Ikea Werkbank: Baumarkt Software: 1967-2021, viele Updates und SP's, aber sicher nicht alle, deswegen immer wieder Sicherheitslücken
|
erstellt am: 16. Okt. 2012 15:15 <-- editieren / zitieren --> Unities abgeben:
Genial! Und mal wieder soooo einfach. Kleine Korrektur war nötig, dann stimmts mit der Anzahl der Zeichen: Code: Sub Farbig() Dim intStart1 As Integer Dim intStart2 As Integer Dim intEnd1 As Integer With ActiveCell intStart1 = InStr(.Value, "Rang") intStart2 = InStrRev(.Value, "Rang") intEnd1 = InStr(.Value, ",") '- 1 With .Characters(Start:=intStart1, Length:=intEnd1 - intStart1).Font .Color = -16776961 End With With .Characters(Start:=intStart2, Length:=99).Font .Color = -11489280 End With End With End Sub
Sonst wird ab dem ersten Zeichen bis zum Komma gezählt und diese Anzahl Zeichen eingefärbt. Besten Dank! Grüße Hofe Zitat: Original erstellt von Thomas Harmening: Da die Länge nicht immer gleich sein muss Rang 34/49 Vs Rang 34/149 oder so wird die Pos des , auch ermittelt, nach hinten kann 99 stehn, kommt ja nix mehr,)
------------------ Ist mir egal, wer Dein Vater ist; solange ich angle läuft hier keiner übers Wasser! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 395 Registriert: 11.08.2007
|
erstellt am: 16. Okt. 2012 19:05 <-- editieren / zitieren --> Unities abgeben: Nur für Hofe
wie ich in meinem letzten Beitrag gepostet habe, den du offensichtlich nicht gelesen hast, muss die Länge nicht angegeben werden, wenn es den Rest der Zeichen betrifft. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hofe Mitglied Werkzeugmacher
Beiträge: 440 Registriert: 12.01.2008 Computer: Aldi Schreibtisch: Ikea Werkbank: Baumarkt Software: 1967-2021, viele Updates und SP's, aber sicher nicht alle, deswegen immer wieder Sicherheitslücken
|
erstellt am: 16. Okt. 2012 19:51 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Beverly: wie ich in meinem letzten Beitrag gepostet habe, den du offensichtlich nicht gelesen hast, muss die Länge nicht angegeben werden, wenn es den Rest der Zeichen betrifft.
Ja, das kam jetzt alles etwas durcheinander Dein Vorschlag ist derselbe wie der von Thomas und funktioniert mit meiner Korrektur (fett+kursiv hervorgehoben) wunderbar. Nochmal ein Dankeschön? Danke Grüße Hofe ------------------ Ist mir egal, wer Dein Vater ist; solange ich angle läuft hier keiner übers Wasser! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 395 Registriert: 11.08.2007
|
erstellt am: 16. Okt. 2012 20:09 <-- editieren / zitieren --> Unities abgeben: Nur für Hofe
Zitat: Original erstellt von Hofe:
Dein Vorschlag ist derselbe wie der von Thomas und funktioniert mit meiner Korrektur (fett+kursiv hervorgehoben) wunderbar.
Nein, ist eben nicht derselbe - vergleiche: Code: With .Characters(Start:=intStart2, Length:=99).Font
Code: With .Characters(Start:=intStart2).Font
Wenn die Zeichen am Ende stehen ist die Angabe von Length nicht erforderlich. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |