Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1092to1096
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 per VBA

Bedingte Formatierung auslesen per VBA
Fettertiger
Hallo zusammen,
ich weiss, zu diesem Thema gibt es schon sehr viele Beiträge. Ich habe eine Datei, in der die User, viele verschiedene Daten eintragen müssen (in Summe ca 110 pro Datensatz). Diese Datei wird zum Hochladen der Daten in eine Datenbank verwendet, und füllt manche der 110 Datenfeldern per macro aus dem Intranet. Per Bedingter Formatierung, bekommt der User fehlende, oder fehlerhafte Datensätze mit roter Hintergrundfarbe angezeigt. Ein Macro verhindert weitere Schritte, wenn eine der bedingten Formatierung zutrifft. Das entspechende Macro hatte ich seinerzeit im Internet gefunden und geringfügig modifiziert.
Unter 2003 lief das einwandfrei, mit 2007 bekomme ich aber nur noch "Schwachsinn" angezeigt.
Sub FormCond()
Dim iFormula As String, iColorA As String
For u = 1 To 111
On Error Resume Next
S01.Cells(z, u).Activate
With S01.Cells(z, u).FormatConditions(1)
iFormula = .Formula1
End With
If iFormula  "" Then
On Error GoTo 0
S01.Cells(z, 112).FormulaLocal = iFormula
If S01.Cells(z, 112).Value = True Then
S01.Cells(z, 113).Value = 1
Exit For
End If
End If
noform:         Err.Clear
iFormula = ""
Next u
If S01.Cells(z, 113).Value = 1 Then
Application.ScreenUpdating = True
MsgBox ("Some Mandatory values in row " & z & " are not yet maintained")
End If
S01.Columns("DH:DI").Clear
S01.Range("DH1").Value = "Cond-check Formula"
S01.Range("Di1").Value = "Cond-check Result"
S01.Columns("DH:DI").Hidden = True
End Sub
z ist dabei die aktuelle Zeile die im vorherigen makro bestimmt wird, S01 ist das aktuelle Tabelleblatt.
Mir ist dabei aufgefallen, dass sich die iFormula in den verschiedenen Zeilen in 2007 nicht mehr ändert. Steht bspw in der bedingten Formatierung in einer Zelle in der Zeile 3: =if(A3 >1...m dann stand unter 2004 in der Zeile 4 entspechend: =if(A4 > 1..... Jetzt steht in der iFormula in der Zeile 4 weiterhin der Eintrag aus der Zeile 3. seltsam oder?
Jemand eine Idee, wie ich das Lösen kann? Die Bedingungen sind in jeder Spalte anders, ich möchte deshalb die Bedingungen nur ungern in VBA nachbauen. Ach ja, ich vergass fast zu sagen, die User arbeiten zum Grossteil noch mit 2003.
Danke für Eure Hilfe
Gruss
Fettertiger
AW: Bedingte Formatierung auslesen per VBA
14.08.2009 11:39:37
Tino
Hallo,
Bedinge Formatierung ist nicht so einfach,
vielleicht kannst Du eine Beispieldatei zum Spielen hochladen?
Gruß Tino
AW: Bedingte Formatierung auslesen per VBA
14.08.2009 12:30:36
Fettertiger
Heureka!,
ich habe (zumindest eine Dünnbrettbohrer-) Lösung gefunden. Mein Glück in dieser Datei ist, dass sich die Bedingten Formatierungen ausschliesslich auf Werte in der aktuellen Zeile beziehen. In der iFormula wird immer Bezug auf die Zeile 3 genommen. Also ganz unelegant die "3" im IFormula String durch die Zeilennummer (=z) ersetzt, und voila - es funzt, als wärs vom Bill persönlich so geplant gewesen :-)
Ok, um das ganze auch für andere Fälle anwendbar zu machen müßte man noch abchecken, ob da vielleicht nicht einfach 3 sonder $3 steht, denn das dürfte natürlich nicht ersetzt werden.
Ich bin natürlich für "professionellere Lösungen" dankbar, aber hier schon mal das leicht modifizierte Makro:
Sub FormCond()
Dim iFormula As String, iColorA As String
For u = 1 To 111
On Error Resume Next
S01.Cells(z, u).Activate
With S01.Cells(z, u).FormatConditions(1)
iFormula = .Formula1
End With
If iFormula  "" Then
 iFormula = Replace(iFormula, "3", z)
On Error GoTo 0
S01.Cells(z, 112).FormulaLocal = iFormula
If S01.Cells(z, 112).Value = True Then
S01.Cells(z, 113).Value = 1
Exit For
End If
End If
noform:         Err.Clear
iFormula = ""
Next u
If S01.Cells(z, 113).Value = 1 Then
Application.ScreenUpdating = True
MsgBox ("Some Mandatory values in row " & z & " are not yet maintained")
End If
S01.Columns("DH:DI").Clear
S01.Range("DH1").Value = "Cond-check Formula"
S01.Range("Di1").Value = "Cond-check Result"
S01.Columns("DH:DI").Hidden = True
End Sub
Grüße
Fettertiger
Anzeige
Diese Subroutine lässt sich aber kaum auf...
18.08.2009 05:21:13
Luc:-?
...alle Arten von Bedingungen anwenden, fTiger...
Das mit den Adressen kann an der automatischen Adressanpassung an die Hilfszelle liegen, was sich vor xl12 evtl nur bei udFktt so bemerkbar gemacht hat... Oder du hast was geändert und die Quellzelle wurde ursprgl selektiert. Dann sollte das bei Subroutinen nicht passieren...
Bei udFktt ist das unvermeidbar, weshalb ich in solchen Fällen auch Adressanpassungsroutinen verwende (ist bei Namen nämlich das "Gleiche in Grün").
Gruß Luc :-?
PS: Hier noch außer Konkurrenz ein Bsp, was auch möglich wäre (jetzt hat's geklappt)...
Userbild
Allerdings ist's (besonders unter xl12; Probleme mit WorksheetFunctions bei manuellem Modus) noch nicht voll ausgetestet...
Anzeige
AW: Diese Subroutine lässt sich aber kaum auf...
18.08.2009 09:20:21
Fettertiger
Hallo Luc:-?,
wie gesagt, meine Lösung ist nure eine "Dünnbrettbohrerlösung", die glücklicherweise in meinem Anwendungsfall funktioniert. :-). In udFktt (= vermutlich User definierte Funktion ?) muss ich mich wohl mal einarbeiten.
Danke und Gruss
Fettertiger
Das mit den udFktt (Abk richtig interpretiert!)...
18.08.2009 15:03:07
Luc:-?
...ist (bei Nicht-US-Xl) aber ungleich komplizierter, Tiger,
weil etliche Klippen "umschifft" wdn müssen. Am Bsp waren mind 7 udFktt beteiligt... ;-)
Gruß Luc :-?
XL 2007 ...
14.08.2009 12:35:28
Wolli
Hallo Fettertiger, ich kann zwar gerade zu Deiner konkreten Frage nichts beisteuern, aber ich habe mit den bedingten Formatierung in XL 2007 schon böse Erfahrungen gemacht. Die Möglichkeiten sind reichlich, aber insbesondere Formel-Formatierungen entwickeln ein Eigenleben, dass es mich nur so gruseln kann.
Ich habe mir schon für zwei Tabellen, in denen viel gearbeitet wird, Reparaturmakros geschrieben, die ratze-fatze alle Bed. Form. neu machen. Ist zwar etwas mühsam zu programmieren, aber funktioniert.
Noch 'ne Warnung: Bei verschiedenen Formatierungen, die sich überlappen, wird's noch gruseliger. Lieber die Bereiche auseinanderzupfen.
Hier mal ein Codeschnipsel:
Sub Formatierung_reparieren()
Dim lngZeile As Long, _
objF1 As FormatCondition, _
objF2 As FormatCondition, _
objF3 As FormatCondition, _
objF4 As FormatCondition
lngZeile = 100
'Bedingte Formatierung
Cells.FormatConditions.Delete
Cells(4, 1).Activate
Set objF1 = Union(Range(Cells(4, 1), _
Cells(lngZeile, 2)), Range(Cells(4, 4), _
Cells(lngZeile, 8))).FormatConditions.Add(Type:=xlExpression, _
Formula1:="=KLEIN($J4)=""x""")
objF1.Font.ColorIndex = 3
objF1.StopIfTrue = True
Cells(4, 3).Activate
Set objF2 = Union(Range(Cells(4, 3), _
Cells(lngZeile, 3)), Range(Cells(4, 9), _
Cells(lngZeile, 9))).FormatConditions.Add(Type:=xlExpression, _
Formula1:="=UND(KLEIN($J4)=""x"";KLEIN($K4)="""")")
objF2.Font.ColorIndex = 3
objF2.StopIfTrue = True
Set objF3 = Union(Range(Cells(4, 3), _
Cells(lngZeile, 3)), Range(Cells(4, 9), _
Cells(lngZeile, 9))).FormatConditions.Add(Type:=xlExpression, _
Formula1:="=UND(KLEIN($J4)="""";KLEIN($K4)=""x"")")
objF3.Font.Bold = True
objF3.StopIfTrue = True
Set objF4 = Union(Range(Cells(4, 3), Cells(lngZeile, 3)), _
Range(Cells(4, 9), Cells(lngZeile, 9))).FormatConditions.Add(Type:=xlExpression, _
Formula1:="=UND(KLEIN($J4)=""x"";KLEIN($K4)=""x"")")
objF4.Font.ColorIndex = 3
objF4.Font.Bold = True
objF4.StopIfTrue = True
End Sub
Gruß, Wolli
Anzeige
AW: XL 2007 ...
14.08.2009 12:44:42
Fettertiger
Hallo Wolli,
werde ich mir auf jeden Fall mal aufheben! Das nächste mal wenn ich Bedingte Formatiereungen verwenden muss, dann trage ich diese vielleicht gar nicht erst in Excel ein, sondern schreibe die Bedingungen direkt in Dein macro. Sollte dann eigentlich auch nicht mehr Arbeit machen, und ich kann das ganz einfach reparieren.
Danke und Gruss
Fettertiger
Hier sollte ein Gif-Bsp zum Thema stehen,...
17.08.2009 02:33:32
Luc:-?
...aber leider wird das von der Forumssoftware nicht (mehr) exakt dargestellt (schwarze Schrift ist plötzlich weiß), so dass der Beitrag sinnlos wäre... :-(
Gruß Luc :-?

89 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige