Microsoft Excel

Herbers Excel/VBA-Archiv

wenn das dann die schriftfarbe ändern

Betrifft: wenn das dann die schriftfarbe ändern von: Falo
Geschrieben am: 09.10.2014 13:01:31

Hallo,
ich möchte wenn in der Spalte, "T" ein F steht das die Schriftfarbe in der gleichen Zeile "J" Schwarz ist. wenn S steht Blau ist, wenn N steht Rot ist. kann mir einer einen Tipp geben, es soll keine Formel sein.

Mit freundlichen Grüßen aus dem Sauerland
Olaf

  

Betrifft: AW: wenn das dann die schriftfarbe ändern von: Daniel
Geschrieben am: 09.10.2014 13:14:21

Hi
Da musst du für die Spalte J drei bedingte Formatierungen anlegen (reicht ja) mit regel:
rot: =$T1="N"
blau: =$T1="S"

für schwarz brauchst du keine Regel, weil Schwarz ja normalerweise die Standardfarbe ist.
nur wenn die normale Farbe nicht schwarz ist, käme halt noch die 3. Regel mit
schwarz: =$T1="F"

ohne Formeln wirst du nicht auskommen, weil die Farbe der Zelle nicht durch den Wert in der Zelle selbsts sondern durch den Wert einer anderen Zelle bestimmt wird und das kann Excel nur über Formeln realisieren.

Gruß Daniel


  

Betrifft: AW: wenn das dann die schriftfarbe ändern von: Adis
Geschrieben am: 09.10.2014 13:45:25

Hallo

wenn es keine Formel sein soll geht die Farb Auswertung nur per Makro. Anbei 2 Beispiele.
Der Unterschied liegt in Einzel Auswertung oder varrangig und ausschliessend auswerten,
wenn in dem Text 2 oder 3 Buchstaben vorkommen. z.B. T, S, N gemeinsam in einer Zelle.
Dann macht sich der Unterschied beim markieren bemerkbar. Welcher Buchstabe hat Vorrang?

Aus der Aufgabenstellung war auch nicht ersichtlich ob es immer Grossbuchstaben sind?
Ob sie mitten im Text vorkommen, oder am Anfang stehen? Das kann man berücksichtigen.
Mein Vorschlag ist somit eine Standard Lösung wie es grundsaetzlich machbar ist.
Das Ergebnis sollte ja die Zellen in Spalte "J" markieren, oder ??

Sub Schriftfarbe_aendern_Standard()
Dim i as Variant
For Each i In Columns("T")
   'Farbeaenderung mit  Einzel Auswertung
   If InStr(i, "F") Then Cells(i.Row, "J").Font.ColorIndex = 1
   If InStr(i, "S") Then Cells(i.Row, "J").Font.ColorIndex = 5
   If InStr(i, "N") Then Cells(i.Row, "J").Font.ColorIndex = 3
   'die letzte Auswertung überschreibt vorherige Aenderungen !!
Next i
End Sub
Sub Schriftfarbe_vorrangig_aendern()
Dim i as Variant
For Each i In Columns("T")
   'Farb Auswertung im Ausschluss Verfahren  (vorrangig)
   If InStr(i, "N") Then
      Cells(i.Row, "J").Font.ColorIndex = 3
   ElseIf InStr(i, "S") Then
      Cells(i.Row, "J").Font.ColorIndex = 5
   ElseIf InStr(i, "F") Then
      Cells(i.Row, "J").Font.ColorIndex = 1
   End If
Next i
End Sub
Gruss Adis


  

Betrifft: AW: wenn das dann die schriftfarbe ändern von: Falo
Geschrieben am: 09.10.2014 15:50:08

Hallo Adis,
Danke für deine Tipps, ich bekomme bei beiden Makros eine Fehlermeldung VBA-Laufzeitfehler 13 Typen unverträglich. Was kann das sein.

Mit freundlichen Grüßen aus dem Sauerland
Olaf


  

Betrifft: AW: wenn das dann die schriftfarbe ändern von: Falo
Geschrieben am: 09.10.2014 16:29:37

Hallo Adis,
Danke ich werde es anders regeln.
Mit freundlichen Grüßen aus dem Sauerland
Olaf


  

Betrifft: Deine For Each Zyklen sind ungeschickt ... von: Luc:-?
Geschrieben am: 09.10.2014 18:48:44

…konstruiert, adis,
denn sie nutzen den Vorteil dieses ZyklusTyps nicht wirklich und es fehlt auch was. Außerdem ist die AuswahlMethode ungünstig. Für den jeweils alleinigen Zellwert F/S/N besser so:

  Dim xZ As Range
    For Each xZ In Columns(20).Cells
        'Farbänderung mit EinzelAuswertung
        Select Case xZ
            Case "F": xZ.Offset(0, -10).Font.Color = vbBlack
            Case "S": xZ.Offset(0, -10).Font.Color = vbBlue
            Case "N": xZ.Offset(0, -10).Font.Color = vbRed
        End Select
        'die letzte Auswertung überschreibt vorherige Änderungen !!
    Next xZ
Falls auch auf jedes F/S/N in einem beliebigen Text reagiert wdn soll, muss die Case-Anweisung Case Like "*F*" lauten.
Der Fehler, Olaf,
entsteht primär dadurch, dass Cells fehlt. Dadurch wird der Zyklus nur 1× durchlaufen und gibt die ganze Spalte zurück. i ist somit ein Datenfeld aus allen Werten der Spalte, dem sicher nicht in Gänze eine Schriftfarbe zugewiesen wdn soll. Der Fehler tritt dann allerdings schon bei Instr auf, denn diese vbFkt kann kein ganzes Datenfeld verarbeiten.
Im Übrigen empfehle ich hier doch besser eine BedingtFormatierung, denn die sorgt auch automatisch für die Wiederherstellung des Ursprungszustandes, wenn die Bedingung nicht mehr erfüllt ist. Mit dem Makro dagg wird die Schrift der anderen Zelle dauerhaft gefärbt, denn eine Rückstellung (Case Else) fehlt hier (das ist auch nur für StandardFarbEinstellungen ohne ggf größeren Aufwand zu realisieren!). Nebenbei, die BedingtFormatierung kann man auch per Makro eintragen.
Gruß, Luc :-?

Besser informiert mit …


  

Betrifft: AW: Deine For Each Zyklen sind ungeschickt ... von: Falo
Geschrieben am: 09.10.2014 19:45:27

Hallo,
Dank klapp jetz SUPER

Gruß Olaf


  

Betrifft: Na, dann iss ja jut...! owT von: Luc:-?
Geschrieben am: 09.10.2014 20:47:09

:-?


 

Beiträge aus den Excel-Beispielen zum Thema "wenn das dann die schriftfarbe ändern"