Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bedingte Formatierung Zustand per VBA abfragen

Bedingte Formatierung Zustand per VBA abfragen
Lutz
Hallo,
wie kann ich per VBA die Bedingte Formatierung (Formel) einer Zelle abfragen,
ob diese wahr oder falsch ausgibt?
Komme auch beim Durchstöbern anderer Beiträge zu diesem Thema nicht weiter!!!
M.f.G.
Lutz
Anzeige
AW: Bedingte Formatierung Zustand per VBA abfragen
03.04.2010 21:55:30
JoWE
Hallo Lutz,
dieses Makro setzt eine bedingte Formatierung im Bereich B1:D10.
Wenn ein Wert größer ist als der Wert in A1 wird die Formatierung aktiviert:
Sub jupp()
With Worksheets(1).Range("B1:D10").FormatConditions _
.Add(xlCellValue, xlGreater, "=$a$1")
With .Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 3
End With
With .Font
.Bold = True
.ColorIndex = 4
End With
End With
End Sub

mit 'jn = worksheets(1).Range("B1").formatconditions(1).Font.Bold'
wird 'jn' true wenn in B1 eine bedingte Formatierung gesetzt ist.
Jochen
Anzeige
AW: Bedingte Formatierung Zustand per VBA abfragen
03.04.2010 22:14:12
Lutz
Hallo JoWe,
danke für Deinen Tipp, ich habe meine Frage warscheinlich etwas zu knapp verfasst.
Mein Ansinnen war: wenn ich in einer Zelle oder einem Zellbereich Bedingte Formatierungen (Formeln) hinterlegt habe und diese bei "wahr" mir die entsprechende Zelle einfärben, möchte ich abfragen ob die Formel wahr oder falsch ergibt oder die derzeitig angezeigte Farbe ermitteln.
Ich möchte danach die Bedingte Formatierung löschen und die Zelle einfärben.
M.f.G.
Lutz
Anzeige
Du hast dich schon klar ausgedrückt,...
04.04.2010 01:30:50
Luc:-?
…Lutz,
bis auf das Ermitteln der aktuellen Zellfarbe, nur Jochen hat wohl das (eigentl) Problem nicht erkannt… ;-)
Natürl kann es sein, dass du im Archiv (Button Alle Recherchen benutzen!) nichts gefunden hast, nichtsdestotrotz ist aber so manches vorhanden, sogar schon von diesem Jahr, u.a. auch von mir!
Nun kommt es ganz darauf an, wie kompliziert deine BedingtFormatFmln sind. Enthalten die auch relative Adressen, verwendest du ein nicht-englisches XL, wird außerdem noch spezielle wertabhängige Farbformatierung in der Zelle eingesetzt oder mehrfarbiger Text verwendet u.a. wird's kompliziert, denn du musst die Bedingungen auswerten, sonst bekommst du nie die aktZellfarbe raus. Es ist natürlich einfacher, wenn du nicht die Bedingungen ausliest, sondern sie nachstellst, was gewöhnlich hierzu empfohlen wird (auch von PC-Magazinen). Da du das ja nur einmalig machen willst, würde ich das empfehlen. Also eine Liste mit allen Bedingungs­Fmln (manuell) im TabBlatt anlegen und wie eine normale Fml auswerten.
Das lässt sich zwar auch vollautomatisch lösen, ist aber so zieml das Komplizierteste, was mit VBA gerade noch möglich ist, also nur was für rechte VBA-Freaks…*
*Meine udFkt dafür hat mehr als 1000 PgmZeilen und benutzt noch etliche Subfktt, die auch jeweils mind 100 PgmZeilen haben. Das Pgm, das Hajo stets anbietet (falls du darauf stoßen solltest), ist 1. nicht von ihm und 2. nur die halbe Miete…
Gruß+FrOstern, Luc :-?
Anzeige
AW: Bedingte Formatierung Zustand per VBA abfragen
04.04.2010 17:38:51
Lutz
Hallo Luc:-?, hallo Hajo,
danke für Eure Hilfe.
Hatte gedacht, dass man den aktuellen Zustand der Zelle leichter ermitteln kann.
Habe die Beispielarbeitsmappe mal getestet, müsste bei meiner Aufgabenstellung funktionieren.
Falls nicht's unerwartetes auftritt (:-)
Vielleicht gibt es in Zukunft (wie jetzt z.B. Filtern nach Farben) auch hier eine einfachere Lösung.
M.f.G.
Lutz
Anzeige
AW: Bedingte Formatierung Zustand per VBA abfragen
04.04.2010 17:40:33
Hajo_Zi
Hallo Lutz,
bis einschl. 2010 noch nicht. Es sei Du hast feste Bedingungen.
Gruß Hajo
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Bedingte Formatierung per VBA abfragen


Schritt-für-Schritt-Anleitung

Um die bedingte Formatierung einer Zelle per VBA abzufragen, kannst Du folgendes Makro verwenden. Dieses Beispiel zeigt, wie Du prüfen kannst, ob die Bedingte Formatierung für den Bereich B1:D10 aktiv ist, wenn ein Wert größer als der Wert in A1 ist.

Sub AbfrageBedingteFormatierung()
    Dim jn As Boolean
    jn = Worksheets(1).Range("B1").FormatConditions(1).Font.Bold
    If jn Then
        MsgBox "Die bedingte Formatierung ist aktiv."
    Else
        MsgBox "Die bedingte Formatierung ist nicht aktiv."
    End If
End Sub

In diesem Beispiel wird überprüft, ob die Schriftart in Zelle B1 fett ist. Du kannst die Logik anpassen, um die Formatierung für andere Zellen oder Bedingungen zu überprüfen.


Häufige Fehler und Lösungen

  1. Problem: Fehlermeldung, dass das FormatConditions-Objekt nicht gefunden wird.

    • Lösung: Stelle sicher, dass die Zelle tatsächlich eine bedingte Formatierung hat. Andernfalls gibt es kein FormatConditions-Objekt.
  2. Problem: Das Ergebnis der Abfrage ist unerwartet.

    • Lösung: Überprüfe, ob die Bedingungen der bedingten Formatierung korrekt definiert sind. Manchmal sind relative und absolute Adressen entscheidend.

Alternative Methoden

Wenn Du die aktuelle Farbe einer Zelle ermitteln möchtest, gibt es alternative Ansätze:

  • Manuelle Auswertung der Bedingungen: Erstelle eine Liste der Bedingungen in einer separaten Tabelle und verwende diese, um die Formatierungen zu überprüfen.
  • Verwendung von Excel-Funktionen: Du kannst auch Funktionen wie FARBEN und WENN in Kombination verwenden, um die Ergebnisse zu analysieren.

Praktische Beispiele

Hier sind einige Beispiele, wie Du die bedingte Formatierung in verschiedenen Szenarien nutzen kannst:

  1. Zelle einfärben, wenn bestimmte Bedingungen erfüllt sind:
Sub EinfärbenNachBedingung()
    Dim rng As Range
    Set rng = Worksheets(1).Range("B1:D10")

    For Each cell In rng
        If cell.FormatConditions(1).Evaluate Then
            cell.Interior.Color = RGB(255, 0, 0) ' Rot einfärben
        End If
    Next cell
End Sub
  1. Bedingte Formatierung entfernen und Zelle einfärben:
Sub EntfernenUndEinfärben()
    Dim cell As Range
    Set cell = Worksheets(1).Range("B1")

    cell.FormatConditions.Delete
    cell.Interior.Color = RGB(0, 255, 0) ' Grün einfärben
End Sub

Tipps für Profis

  • Verwendung von Evaluate: Nutze die Evaluate-Methode, um komplexe Formeln zu überprüfen, ohne die Formatierungsbedingungen direkt auszulesen.
  • Optimierung der Performance: Bei großen Datenmengen kann es sinnvoll sein, die Bildschirmaktualisierung zu deaktivieren, um die Ausführungsgeschwindigkeit zu erhöhen.
Application.ScreenUpdating = False
' Dein Code hier
Application.ScreenUpdating = True

FAQ: Häufige Fragen

1. Frage: Kann ich die bedingte Formatierung auch in nicht-englischen Excel-Versionen abfragen? Antwort: Ja, Du musst jedoch sicherstellen, dass die Syntax und die Funktionen entsprechend der Sprache Deiner Excel-Version angepasst sind.

2. Frage: Funktioniert das auch in Excel 2013 und älteren Versionen? Antwort: Ja, die beschriebenen Methoden sind in den meisten Excel-Versionen ab 2010 anwendbar. Achte darauf, die VBA-Referenzen entsprechend zu überprüfen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige