vba - bedingte Formatierung

Bild

Betrifft: vba - bedingte Formatierung
von: Ingo Kitzelmann
Geschrieben am: 27.08.2015 11:42:40

Leider bin ich in vba nicht so gut ... und alle gefundenen Prozeduren habe ich kopiert und ausprobiert - ohne Erfolg
hier das Basiskonzept ich weiß nun aber nicht, wie man beginnt, wie man die Procedur beendet usw.
Problem: in einer Zelle (Q 3) wird ein Wert errechnet (nicht händisch eingegeben) und angezeigt.
Ziel: Je nach Wert soll sich die Hintergrundfarbe der Zelle "Q3" ändern. Sobald ein anderer Wert errechnet wird, soll sich die Hintergrundfarbe wieder anpassen.
bisherige Prozedur:

Private Sub .....
target = "Q3"
if isempty (target) then target.interior.colorindex = 2
if target.value >= 0 and target.value < 31 then target.interior.colorindex = 4 'grün
if target.value >= 31 and target.value < 35 then target.interior.colorindex = 6 'gelb
if target.value >= 35 and target.value < 40 then target.interior.colorindex = 44 'orange
if target.value >= 40 and target.value < 50 then target.interior.colorindex = 53 'braun
if target.value >= 50 then target.interior.colorindex = 3 'rot
end if
End Sub

Bild

Betrifft: warum VBA?
von: Rudi Maintaire
Geschrieben am: 27.08.2015 12:18:55
Hallo,
in XL2010 hast du 64 Möglichkeiten der bed. Formatierung einer Zelle.
Gruß
Rudi

Bild

Betrifft: AW: vba - bedingte Formatierung
von: Matthias
Geschrieben am: 27.08.2015 12:23:05
Hallo Ingo,
welchen Grund hat es, dass du nicht die normale bedingte Formatierung von Excel nutzt? Die funktioniert übrigens auch für solche "Zwischen Wert x und y"-Abfragen.
Trotzdem hier mal die VBA-technische Lösung:

Private Sub Worksheet_Change(ByVal Target As Range)
Set rngBereich = Range("Q3")
'Wenn Schnittmenge Bereich und Target nicht leer sind (sprich wenn Wert Q3 sich ändert)
If Not Intersect(Target, rngBereich) Is Nothing Then 
'... Dein Code
'erste Zeile Target="Q3" aber weglassen
EndIf
Man kann deinen Teil übrigens auch sehr schön mit einer Fallunterscheidung lösen.
Select Case Target.Value
    Case Is < 0
        CI = 0
    Case Is < 31
        CI = 4 'grün
    Case Is < 35
       CI = 6 'gelb
    '...
End Select
If IsEmpty(Target) Then CI = 2
Target.Interior.ColorIndex = CI
lg Matthias

Bild

Betrifft: AW: vba - bedingte Formatierung
von: Ingo Kitzelmann
Geschrieben am: 27.08.2015 13:02:05
Hallo Mathias,
danke für den Code.
Im Fall der Select case -Methode (die mir sehr gut gefällt)
meckert der Debugger "Case Is" an.
Muss das definiert werden, ... wie ... ?

Bild

Betrifft: AW: vba - bedingte Formatierung
von: Matthias
Geschrieben am: 27.08.2015 16:49:55
Wenn man überhaupt von deklariert sprechen kann, geschieht dies in der ersten Zeile, denn es stellt in diesem Fall den Wert deines Targets dar (Select Case "Is").
Wörtlich übersetzt bedeutet "Case Is < 0" einfach nur: "für den Fall das Target.Value < 0 ist."
Deine Variablen hier sind Target (im Funktionsaufruf deklariert), sowie rngBereich und CI.
In einem kurzen Testlauf funktioniert das auch soweit.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
Dim CI As Byte 'ColorIndex
Set rngBereich = Range("Q3")
'Wenn Schnittmenge Bereich und Target nicht leer sind (sprich wenn Wert Q3 sich ändert)
If Not Intersect(Target, rngBereich) Is Nothing Then
Select Case Target.Value
    Case Is < 0
        CI = 0
    Case Is < 31
        CI = 4 'grün
    Case Is < 35
       CI = 6 'gelb
    Case Is < 40
        CI = 44 'orange
    Case Is < 50
        CI = 53 'braun
    Case Is >= 50
        CI = 3 'rot
End Select
If IsEmpty(Target) Then CI = 2
Target.Interior.ColorIndex = CI
End If
End Sub
lg Matthias

 Bild

Beiträge aus den Excel-Beispielen zum Thema "vba - bedingte Formatierung"