Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bedingte Formatierung in Diagonale

Bedingte Formatierung in Diagonale
21.03.2016 19:46:11
Frohe_Ostern
Hallo alle zusammen,
ich erstelle gerade ein etwas aufwendigeres Excelblatt.
Mein Problem ist, dass ich die bedingte Hintergrundformatierung auf eine Diagonale übertragen möchte, was ich bisher nicht mit Arrays oder dem manuellen Auslesen und Übertragen der Farbwerte geschafft habe.
Eine selbst gewählte Hintergrundfarbe kann ich folgendermaßen auf die Diagonale übertragen:
Sub Farbe()
' Einfärben der Zellen
Dim x As Integer
Worksheets(A).Activate
Range("AP62:AP96").Copy
Range("AT62").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False,  _
Transpose:=False
'Bedingte Formatierung der einzelnen Abschnitte (hier nur beispielhaft einer)
Selection.FormatConditions.AddTop10
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
.TopBottom = xlTop10Top
.Rank = 3
.Percent = False
End With
'[und so weiter...]
'Farbformatierung übertragen
Dim i As Integer
Worksheets(A).Activate
For i = 1 To 35
Worksheets(A).Activate
a = Cells(61 + i, 46).Interior.Color
Worksheets(T).Activate
Cells(7 + i, 2 + i).Interior.Color = a
Next i
End Sub
Wenn ich aber versuche, die bedingte Formatierung "auszulesen" und die Schleife folgendermaßen abändere [...]:
For i = 1 To 35
With Range(Cells(61 + i, 46)).FormatConditions(1)
iFormula = .Formula1
iColorA = .Font.ColorIndex
iColorB = Range(Cells(61 + i, 46)).Font.ColorIndex
End With
Worksheets(A).Activate
a = Cells(61 + i, 46).Interior.Color
Worksheets(T).Activate
Cells(7 + i, 2 + i).Interior.Color = a
Next i
[...] wird in der zweiten Code-Zeile der Schleife akut die Meldung "Die Methode range für das objekt _global ist fehlgeschlagen" angezeigt.
Danke für jeden neuen Anhaltspunkt.
Beste Grüße,
Frohe_Ostern

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

Betreff
Datum
Anwender
Anzeige
ohne Range()
21.03.2016 20:52:29
Uduuh
Hallo,
Range erfordert min. 2 Zellen.
With Cells(61 + i, 46).FormatConditions(1)
Gruß aus’m Pott
Udo

AW: Bedingte Formatierung in Diagonale
21.03.2016 23:11:53
Frohe_Ostern
Hallo Uduuh,
danke für deine Hilfe, leider habe ich trotzdem nicht die bedingte Formatierung, sondern lediglich die "normale" Formatierung mit diesem Code kopieren können.
Ich habe einen neuen Vorschlag, mit dem ich versuche, die bedingte Formatierung in den Zellen durch lediglich den entsprechenden Farbhintergrund zu ersetzen:
Dim CF As FormatCondition, rngCell, rngRange As Range
Set rngRange = ActiveCell.SpecialCells(xlCellTypeAllFormatConditions)
Sheets(A).Range("AP62:AP96").Select
For Each rngCell In rngRange.Cells
For Each CF In rngCell.FormatConditions
With rng.cell.Interior
.Color = CF.Interior.Color
End With
Next
Next
ActiveCell.SpecialCells(xlCellTypeAllFormatConditions).FormatConditions.Delete
Hier tritt bei mir das Problem auf, dass das Makro bei "For Each CF [...]" stehen bleibt, weil "CF = Nothing". Wie muss ich denn CF davor definieren, damit das Format ausgelesen wird?
Danke
Viele Grüße,
Frohe_Ostern

Anzeige
Mal intensiver m.d.BedingtFormatierung ...
22.03.2016 00:31:53
Luc:-?
…beschäftigen, FrOst,
denn ab Xl12/2007 gibt's hier mehrere Objekte unter diesem Terminus!
Deshalb wäre der folgd Code zwar richtiger, aber erfolglos, weil 1. stets die Farbe der letzten CF der Zelle eingestellt würde (aber nur, wenn das auch dieses Objekt* ist!) und 2. dadurch nicht unterschieden wird, ob die CF aktiv ist oder nicht (das ist hochkompliziert → dazu gibt's umfangreiche Ausführungen in etlichen Xl-Foren).
    Dim CF As FormatCondition, rngCell As Range, rngRange As Range
Set rngRange = Sheets(A).Range("AP62:AP96")
Set rngRange = rngRange.SpecialCells(xlCellTypeAllFormatConditions)
For Each rngCell In rngRange
For Each CF In rngCell.FormatConditions
With rngCell.Interior
.Color = CF.Interior.Color
End With
Next
Next
ActiveCell.SpecialCells(xlCellTypeAllFormatConditions).FormatConditions.Delete
Erst ab Xl14/2010 ist es relativ einfach möglich, per SubProzedur die (gezeigte) Farbe einer Zelle festzustellen, egal, wodurch diese verursacht wird. Das Pgm kann dann (unter der Voraussetzung, dass A eine [globale] Variable ist, die den BlattNamen enthält) ganz einfach so lauten:
    Const adRelBer$ = "AP62:AP96"
Dim rngCell As Range, rngRange As Range
Set rngRange = Sheets(A).Range(adRelBer)
For Each rngCell In rngRange
With rngCell
.Interior.Color = .DisplayFormat.Interior.Color
End With
Next
Set rngRange = rngRange.SpecialCells(xlCellTypeAllFormatConditions)
rngRange.FormatConditions.Delete
Set rngRange = Nothing
Das sollte für alle Regeln fktionieren, die eine ZellFarbe verursachen können. Gelöscht wdn hier aber alle, egal, was sie veranlassen!
* Aus deiner ursprünglichen Anfrage glaube ich entnehmen zu können, dass das nicht so ist, was auch das Nothing erklärt.
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: Mal intensiver m.d.BedingtFormatierung ...
22.03.2016 14:09:04
Frohe_Ostern
Hallo Luc:-?,
danke für die ausführliche Erklärung, in den letzten Tagen habe ich viel dazu gelernt.
Dein Code funktioniert einwandfrei.
Vielen, vielen Dank!
Beste Grüße,
Frohe_Ostern

Na, denn iss ja jut... ;-) orT
22.03.2016 14:14:41
Luc:-?
Gruß + FrOst! Luc :-?

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige