Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1188to1192
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
Inhaltsverzeichnis

Bedingte Formatierung auslesen

Bedingte Formatierung auslesen
Markus
Hallo liebes Forum,
ich stehe gerade auf dem Schlauch... :-)
Ich habe eine Tabelle mit bedingten Formatierungen in jeder Zelle (als Formelabfrage).
Ich möchte in der aktiven Zeile i im Bereich "A(i):AV(i)" die in den einzelnen Zellen hinterlegten Formeln der bedingten Formatierung per VBA auslesen und in einer Variablen zwischenspeichern und anschließend diese dann übergangsweise löschen.
Später möchte ich die Zeile dann wieder mit den zwischengespeicherten Bedingten Formatierungen befüllen.
Ich habe es mit folgendem Code versucht, der Compiler meckert dabei aber...
Dim strBedingteFormatierung(1 To 256) As String
Set ranAltBereich = _
Range("A" & Target.Row & ":IV" & Target.Row)
x = 0
For Each ranZelle In ranAltBereich
x = x + 1
strBedingteFormatierung(x) = ranZelle.FormatConditions(1).Formula1
Next

Hier im Forum habe ich leider nichts gefunden, das dazu passen würde.
Kann mir hier vielleicht jemand von Euch weiterhelfen?
Vielen Dank vorab!
Grüße aus der grauen Kölner Bucht :-)
Markus
AW: Bedingte Formatierung auslesen
10.12.2010 11:57:02
Rudi
Hallo,
der Compiler meckert dabei aber...

Was meckert er an? Fehlermeldung!
Ist das in einer Ereignisprozedur? Wenn nicht, ist Target=Nothing.
Vllt. Target durch ActiveCell ersetzen.
Weiter solltest du prüfen, ob überhaupt bed.Formate definiert sind.
If ranZelle.FormatConditions.Count > 0 Then
strBedingteFormatierung(x) = ranZelle.FormatConditions(1).Formula1
End If

Gruß
Rudi
AW: Bedingte Formatierung auslesen
10.12.2010 12:51:26
Markus
Hallo Rudi,
erstmal vielen Dank für Deine Antwort! :-)
Ich hatte gehofft, ich muss nicht so weit ausholen, aber das Ganze ist wohl zu unverständlich ohne den Kontext.
Ich möchte eigentlich die Zeile, in der sich der Cursor aktuell befindet, markieren. Dazu habe ich auch etwas in den Foren gefunden und in meine Arbeitsmappe eingebaut:

Private Sub Workbook_SheetSelectionChange(ByVal sh _
As Object, ByVal Target1 As Excel.Range)
MarkierungEin Target1
End Sub

Dim ranAltBereich As Range
Dim lngColorIndex(1 To 256) As Long
Dim strBedingteFormatierung(1 To 256) As String
Dim bolDynMauszeiger As Boolean
Sub MarkierungEin(ByVal Target As Excel.Range)
Dim ranZelle As Range
Dim x As Integer
If bolDynMauszeiger = False Then Exit Sub
If Not ranAltBereich Is Nothing Then
x = 0
On Error Resume Next
For Each ranZelle In ranAltBereich
x = x + 1
ranZelle.Interior.ColorIndex = lngColorIndex(x)
Next
End If
Set ranAltBereich = _
Range("A" & ActiveCell.Row & ":IV" & ActiveCell.Row)
x = 0
For Each ranZelle In ranAltBereich
x = x + 1
lngColorIndex(x) = _
ranZelle.Interior.ColorIndex
strBedingteFormatierung(x) = ranZelle.FormatConditions(1).Formula1 Next
Target.EntireRow.Interior.Color = RGB(255, 204, 153)
ActiveCell.EntireRow.Formula1 = ""
End Sub Sub MarkierungAus()
Dim x As Integer
Dim ranZelle As Range
If Not ranAltBereich Is Nothing Then
x = 0
For Each ranZelle In ranAltBereich
x = x + 1
ranZelle.Interior.ColorIndex = lngColorIndex(x)
ranZelle.FormatConditions(1).Formula1 = strBedingteFormatierung(x) Next
End If
End Sub

Das Problem ist, dass ich die Tabelle bereits mit Bedingten Formatierungen befüllt habe, die offenbar vorrangig gegenüber der Workbook_SheetSelectionChange-Prozedur behandelt werden. Da meine Tabelle vollständig mit bedingten Formatierungen befüllt ist, funktioniert demnach das Markieren an der aktuellen Cursorposition nicht.
Aus diesem Grund möchte ich die bedingten Formatierungen der aktuellen Zeile zwischenspeichern und löschen, bis der Cursor in eine andere Zeile bewegt wird. Den fett markierten Code oben habe ich dazu eingebaut. Ohne diesen Code funktionert das Markieren problemlos, aber wie gesagt nur in Zeilen, die keine bedingten Formatierungen enthalten.
Eine Fehlermeldung gibt es an den von mir oben fett markierten Stellen, die Fehlermeldung lautet
Laufzeitfehler '1004' Anwendungs- oder objektdefinierter Fehler.
Vielleicht gibt es hierfür ja auch eine viel einfachere Lösung...?
Grüße aus der sich aufhellenden Kölner Bucht
Markus
Anzeige
einfachere Lösung
10.12.2010 13:35:50
Rudi
Hallo,
ich würde einfach die Formate der Zeile an eine andere, unbenutzte Stelle kopieren (Inhalte einfügen-Formate) und später wieder zurück.
Gruß
Rudi
So, wie es hier steht, liegt's an Next,...
10.12.2010 15:21:43
Luc:-?
…Markus;
das schließt den For Each-Block ab und benötigt deshalb eine eigene Zeile. Steht auch so in der VBE-Hilfe, in die du gelegentl mal reinschauen solltest… :->
Ansonsten schreibst du ja wohl, wenn ich das richtig verstehe, dass nicht alle Zellen bedingt formatiert sind. Dann musst du das auch prüfen! Ansonsten hat Rudi recht, geht auch einfacher!
BedingtFormate haben immer Vorrang vor Zellfarben, wenn ihre Bedingung erfüllt ist, sonst wäre das ja sinnlos! Außerdem kann man auch vor xl12 per VBA mehr als 3 BedingtFormate verwenden, wenn man das Format dynamisiert. Das setzt aber etwas (gedankliche) Vorarbeit voraus. Dann könntest du die Zellauswahl per _SelectionChange dazu nutzen, einfach nur die BedingtFormat-Farbe(n) der Zellen der ausgewählten Zeile zu ändern. Dann klappt das auch so wie gewollt und die Fmln können bleiben, wo sie sind. Natürlich musst du dir die alte Farbe jeweils merken und in das BedingtFormat der Zellen zurückschreiben, wenn du die nächste Zelle auswählst.
Gruß Luc :-?
PS: Was NoNet gebastelt hat, muss ich mir erst noch ansehen! Ein Bsp für dynamisiertes BedingtFormat findest du im aktuellen Thread von Amintire.
Anzeige
Formatierung kopieren....
10.12.2010 15:33:34
NoNet
Hey Rudi, hey Luc,
grundsätzlich würde ich auch Rudis Vorschlag (Kopieren der Formatierung in einen leeren Zellbereich) bevorzugen, doch dieser hat einen Nachteil : Es werden ALLE Formatierungen kopiert und nicht nur die der "Bedingten Formatierung" !
Daher auch mein VBA-Beispiel als Alternative.
@Luc :

Was NoNet gebastelt hat, muss ich mir erst noch ansehen!

Meinen Code musst Du Dir nicht unbedingt anschauen, oder zweifelst Du etwa daran, dass ich das per VBA lösen kann ;-) - oder fühlst Du Dich als "oberster VBA-Richter" hier im Forum dessen Wohlgefallen die geposteten Codes gewinnen müssen (klingt zumindest ein wenig danach ) ?
Salut / Gruß / Au revoir / Ciao / Bye, NoNet
Anzeige
So'n Quatsch! Das hieß nur, dass ich das noch...
10.12.2010 15:55:18
Luc:-?
…nicht gesehen hatte und deshalb nicht beurteilen konnte, ob dein Vorschlag der bessere und demzufolge die Bevorzugung von Rudis Vorschlag zu einseitig wäre…
Aber, mit ein wenig gu…, äh, bösem Willen, kann man alles und jeden falsch verstehen, nicht wahr, NoNet… ;->
Aber ich kann dich beruhigen, dein Vorschlag entspricht dem Üblichen, und außerdem hast du selbstverständlich in einem recht, mein Vorschlag ist der beste, denn darauf ist noch keiner von euch gekommen, jedenfalls nicht, dass ich wüsste… ;-)
Gruß + schöDrAdWE,
Luc :-?
PS: Hast du keine Advents- bzw Weihnachtssmilies…?
Anzeige
Formatierung kopieren....ist doch Wurscht
10.12.2010 19:55:52
Rudi
Hallo,
denke ich.
Es sei denn, die Änderungen am Bereich berühren auch statische Formate, die er dann beibehalten will.
Gruß
Rudi
@Rudi : KLARO will Markus das ;-)) _oT
11.12.2010 01:10:16
NoNet
_oT = "ohne Text"
Falls dich aber v.a. d.Formulierung "gebastelt"...
11.12.2010 19:41:41
Luc:-?
…gestört haben sollte, Thomas…
Fmln u.Pgmm schreibt man, postet sie und jeder kann sie gleich sehen. Fertigt man aber ein Bsp für eine fremde Aufgabenstellung an, kann das nur „gebastelt“ sein, denn man weiß ja nie, ob man das Richtige getroffen hat. Außerdem muss das auch erst runtergeladen wdn…
Also war das nur höflich gemeint. Und das hat man dann davon…
Nebenbei fällt mir da ein, dass ein gewisser „NoNet“ eine kleine ExcelBastelei im Netz betreiben soll… ;-))
Gruß Luc :-?
Anzeige
AW: So, wie es hier steht, liegt's an Next,...
10.12.2010 15:52:18
Markus
Hallo Luc,
vielen Dank für Deine Hilfe, ich werde das für heute erstmal ruhen lassen, ich mache im Moment nur noch Fehler... :-) Das "Next" habe ich beim Posten einfach nur vergessen. Das steht hier in meinem Code, wie gesagt funktioniert das Markieren mit diesem Makro ja auch problemlos. Nur meine dilettantischen Modifikationsversuche scheitern immer wieder kläglich. ;-)
Ich habe einfach im Moment nur noch 4-eckige Augen. ;-)
Melde mich spätestens Montag nochmal hier - hoffentlich mit einer Erfolgsmeldung.
Ein schönes WE Euch allen.
Grüße
Markus.
Scheint formal richtig zu sein,...
10.12.2010 12:08:44
Luc:-?
…Markus,
meckert wirklich der Compiler? Was sagt er denn? Syntax-Fehler oder was? Oder entsteht eher ein _ Laufzeitfehler? Das wäre mit Sicherheit hier der Fall, wenn eine Zelle nicht bedingt formatiert ist, denn das hast du nicht abgefangen!

With ranZelle.FormatConditions
If .Count > 0 Then
strBedingteFormatierung(x) = .Item(1).Formula1
…usw.
Außerdem kannst nur du wissen, ob das schon reicht — es gibt ja recht unterschiedl Typen des BedingtFormats. Auch scheinen dich nur die Fmln, nicht die Einstellungen zu interessieren — aber wie gesagt, das musst du wissen…
Gruß + schöDrAdWE,
Luc :-?
Anzeige
AW: Scheint formal richtig zu sein,...
10.12.2010 13:18:10
Markus
Hallo Luc,
meckert wirklich der Compiler? Was sagt er denn? Syntax-Fehler oder was? Oder entsteht eher ein _ Laufzeitfehler? Das wäre mit Sicherheit hier der Fall, wenn eine Zelle nicht bedingt formatiert ist, denn das hast du nicht abgefangen! 
Siehe hierzu bitte meine Antwort an Rudi.
Auch scheinen dich nur die Fmln, nicht die Einstellungen zu interessieren — aber wie gesagt, das musst du wissen…
Öhh, Du hast natürlich recht! Ich will selbstverständlich alle Einstellungen, die ich in der bedingten Formatierung vorgenommen habe, zwischenspeichern... Im Eifer des Gefechts habe ich wohl den Überblick verloren... ;-)
Was macht meine bedingte Formatierung - und das bereitet zur Abwechslung auch keine Probleme ;-) :
1. Die zu prüfende Bedingung lautet: =$H9"". Diese Bedingung steht in jeder Zelle der Tabelle, die mit Daten gefüllt ist (es sollen Zwischensummenzeilen markiert werden).
2. Setze oben und unten eine dünne Linie.
3. Setze "Hellgelb" als Hintergrundfarbe.
Es wäre sehr nett, wenn Ihr mir den Code hierzu ebenfalls nennen könntet. Krieg ich aber zur Not auch über den Makrorekorder heraus. ;-)
With ranZelle.FormatConditions
If .Count > 0 Then
strBedingteFormatierung(x) = .Item(1).Formula1
…usw.
Das habe ich ausprobiert, funkt aber leider trotzdem noch nicht.
Grüße
Markus.
Anzeige
Bedingte Formatierung auslesen und speichern
10.12.2010 14:35:12
NoNet
Hallo Markus,
anbei ein Beispiel zum Auslesen, Speichern, Löschen und Zurücksetzen der Bedingten Formatierungen eines Bereiches :
https://www.herber.de/bbs/user/72657.xls
Hinweis : auf das Speichern und Zurücksetzen der Rahmenformatierungen, Muster (Schraffierungen) und etlichen Schriftformatierungen habe ich der Einfachkeit wegen verzichtet.
Es werden nur die Schriftart, Farbe und Größe sowie die Hintergrundfarbe der Bed.Formatierung gespeichert !
Die ARRAY-Variable arBF() ist auf einen 10x10 Zellen großen Bereich begrenzt, falls größere Bereiche gespeichert werden sollen, bitte anpassen !!
Gruß, NoNet
Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige