VBA-Beispiel 047
mail schreiben
mail schreiben

Fehlerquelle: per vba und ColorIndex Zellen suchen

Falls Sie mit VBA Zellen aufgrund ihrer Hintergrundfarbe selektieren, sollten Sie dabei bedenken, daß die am Bildschirm angezeigt Farbe nicht zwangläufig der tatsächlichen Zellfarbe entspricht.

Konkret: auf dem Bildschirm sind 5 Zellen in der gleichen Farbe zu sehen. Die Zelle C3 wurde aber mit der bedingten Formatierung eingefärbt.

Zellbereich Excel

Wenn Sie jetzt mit Interior.ColorIndex = 35 nach hellgrün suchen, wird Zelle C3 nicht berücksichtigt...
Sub Stolperstein()
' addiert alle Zellen mit hellgrüner Füllfarbe
' Zelle C3 hat aber xlNone

Dim Zelle As Range
Dim Summe As Long

For Each Zelle In ActiveSheet.UsedRange
  If Zelle.Interior.ColorIndex = 35 Then
    Summe = Summe + Zelle
  End If
Next Zelle

MsgBox Summe

End Sub

Das Makro liefert scheinbar ein falsches Ergebnis nämlich 40.

Um Missverständnisse zu vermeiden, könnte man bei jeder Zelle prüfen ob eine der drei bedingten Formatierungen der Füllfarbe Hellgrün entspricht:

Sub Stolperstein_mit_Hinweis()
Dim Zelle As Range
Dim Summe As Long
Dim i As Integer, anzWarnungen As Integer

For Each Zelle In ActiveSheet.UsedRange

  If Zelle.Interior.ColorIndex = 35 Then
    Summe = Summe + Zelle
  End If

 ' so oft wie Zelle bedingte Formatierungen hat
  For i = 1 To Zelle.FormatConditions.Count
   ' prüfen ob bedingte Formatierung = Zellfarbe hellgrün
    If Zelle.FormatConditions.Item(i).Interior.ColorIndex = 35 Then
      anzWarnungen = anzWarnungen + 1
    End If
  Next i

Next Zelle

If anzWarnungen > 0 Then
  MsgBox anzWarnungen & " Zelle(n) mit bedingter Formatierung" _
          & vbNewLine & vbNewLine _
          & "Summe: " & Summe _
          & vbNewLine, vbCritical, "Vorsicht"
Else
  MsgBox Summe
End If

End Sub


Allerding ist es leider nicht möglich mit VBA abzubfragen, ob der Zellwert auch eine dieser Bedingungen gerade erfüllt.


Download:   vba047.zip