Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
860to864
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
860to864
860to864
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

860to864: Hintergrundfarbe zählen -> Ausgabefeld formatiere

Hintergrundfarbe zählen -> Ausgabefeld formatiere
13.04.2007 21:50:31
Henning
Hallo,
ich will in einer Excel Tabelle den Status eines Projektes überwachen. In den Zellen D6 bis D9 wird die Hintergrundfarbe je nach Status formatiert (rot, gelb, grün). Jetzt will ich ein Makro erstellen, welches die Hintergrundfarben erfasst und je nach Fall ein Ausgabefeld mit einer bestimmten Hintergrundfarbe formatiert.
Falls Rot vorkommt soll das Feld rot werden, falls gelb und kein rot vorkommt soll es gelb werden und falls weder rot noch gelb vorkommt und alle Felder grün sind soll es grün werden.
Da ich mich mit VBA nicht auskenne, habe ich versucht es mit vorhandenen Makros und Beispielen sowie bescheidener C++ Kenntnisse hinzubekommen. Klappt aber nicht... Kann mir jemand sagen wieso nicht?

Sub farben()
Dim s As Integer                'Zeile
Dim sp As Integer               'Spalte
Dim farb(3) As Integer          'Anzahl der Farben
For s = 6 To 9
For sp = 4 To 4
Select Case Cells(s, sp).Interior.ColorIndex
Case 3 'Rot
farb(1) = farb(1) + 1
Case 6 'Gelb
farb(2) = farb(2) + 1
Case 4 'Grün
farb(3) = farb(3) + 1
End Select
Next sp
Next s
If farb(1) > 0 Then                      'Wenn Rot da ist, dann rot
Cells(5, 4).Select
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
ElseIf farb(2) > 0 Then                 'Wenn kein rot aber gelb da ist, dann gelb
Cells(5, 4).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
ElseIf farb(3) = 4 Then             'Wenn weder rot noch gelb da ist und 4 Mal grün, dann grün
Cells(5, 4).Select
With Selection.Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
End If
End Sub


5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hintergrundfarbe zählen -> Ausgabefeld formatiere
13.04.2007 23:20:00
Mustafa
Hallo Henning,
wie wird die Hintergrundfarbe Formatiert?
Manuell oder per Bedingter Formatierung?
Bei manueller Formatierung ist der Code schon richtig, aber bei bedingter formatierung wird nicht der Interior.ColorIndex geändert.
In diesem Fall musst du die Bedingung abfragen nicht den Interior.ColorIndex.
Rückmeldung obs Hilft wäre nett.
Viele Grüße aus Köln.

AW: Hintergrundfarbe zählen -> Ausgabefeld formati
14.04.2007 00:07:26
Henning
Ok, ich ändere das ganze über eine bedingte Formatierung. Gibt es dafür auch einen einfachen Ausdruck oder wird das ganze dann etwas komplizierter?
Danke schonmal

AW: Hintergrundfarbe zählen -> Ausgabefeld formati
14.04.2007 00:09:00
fcs
Hallo Henning,
der Code als solcher ist in Ordnung und funktioniert. Man kann ihn jedoch noch etwas einkürzen für den Teil, der die Zelle formatiert.
Das Problem ist wahrscheinlich, dass die 4 Zellen, deren Farben du prüfen möchtest mit bedingter Formatierung in den Farben rot/gelb/grün dargestellt werden. Bei Zellen mit bedingter Formatierung funktioniert die Abfrage des Colorindex der Zelle leider nicht.
Es gibt zwar irgendeinen ziemlich komplizierten Weg auch die Farbe der bedingten Formatierung via VBA zu ermitteln. Ich hab die Lösung aber nicht parat.
Einfacher dürfte es sein, wenn du im Code die gleiche Auswertung noch einmal machts, die du bei der bedingten Formatierung der Zellen gemacht hast.
Alternativ geht's auch wenn du in einer Hilfsspalte der Tabelle mit den Bedingungen, die du unter der bedingten Formatierung verwendest, entsprechende Hilfswerte berechnest und diese dann im Makro-Code auszuwertest. In diesem Fall kannst du aber auch auf das Makro verzichten und die Farbe der Zielzelle ebenfalls per bedingter Formatierung festlegen. Im angehängten Beispiel hab ich mal beide Möglichkeiten umgesetzt.
https://www.herber.de/bbs/user/41750.xls
Gruß
Franz

Anzeige
AW: Hintergrundfarbe zählen -> Ausgabefeld formati
14.04.2007 00:20:00
Henning
Ok, Danke, werde es mit bedingter Formatierung versuchen... ich sag dann bescheid ob ich es hinbekommen habe...

AW: Hintergrundfarbe zählen -> Ausgabefeld formati
14.04.2007 09:35:00
michael
hi henning :-)
ueber bedingte ist doch schwerer :-( wie die beiden anderen user schon sagten :-((
du solltest bei der normalen färbung bleiben :-))
noch kleiner tip zur fehlersuche
nutze f8 (einzelschrittabarbeitung) oder schreib die variablen einfach kurz in einigen zellen zur beobachtung
im debug modus kannst du dir auch mit zentrum mouse auf der var dir dessen momemtanen inhalt anzeigen lassen
fuer bedingte eine bedingte lösung hihi
gruss nighty
ein beispiel
addierung eines wertes anhand des hintergrundfarbindexes durch bedingte formatierung hervorgebracht
z.b. =BedingungAdd(A1:A3;FarbIndex)

Function BedingungAdd(Zellen As Range, farbe As Integer) As Double
Dim Zelle As Range
Dim farben As Integer
Application.Volatile
For Each Zelle In Zellen
farben = GetCellColor(Zelle)
If farben = farbe Then
BedingungAdd = BedingungAdd + Zelle.Value
End If
Next
End Function



Function GetCellColor(cell As Range) As Integer
Dim i
Dim myVal
Dim myColor As Integer
Dim done As Boolean
On Error Resume Next
Names("testname").Delete
On Error GoTo 0
Application.ReferenceStyle = xlR1C1
myVal = cell.Value
myColor = cell.Interior.ColorIndex
done = False
For i = 1 To cell.FormatConditions.Count
With cell.FormatConditions.Item(i)
If .Type = 1 Then
Select Case .Operator
Case xlBetween
If (myVal >= Evaluate(.Formula1) And myVal = Evaluate(.Formula2)) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlEqual
If myVal = Evaluate(.Formula1) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlGreater
If myVal > Evaluate(.Formula1) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlGreaterEqual
If myVal >= Evaluate(.Formula1) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlLess
If myVal  Evaluate(.Formula2) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlNotEqual
If myVal  Evaluate(.Formula1) Then
myColor = .Interior.ColorIndex
done = True
End If
End Select
ElseIf .Type = 2 Then
Names.Add Name:="testname", RefersToR1C1Local:=.Formula1
If Evaluate("testname") Then
myColor = .Interior.ColorIndex
done = True
End If
Names("testname").Delete
Else
MsgBox "Unbekannter Typ: " & .Type, , "PANIC: In 

Function GetCellColor"
Exit Function
End If
End With
If done Then Exit For
Next
Application.ReferenceStyle = xlA1
GetCellColor = myColor
End Function


Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige