AW: ***
11.02.2011 17:45:05
amintire
Hallo alle zusammen,
das ganze hat mit einem IT-Studentischen Projekt nichts zu tun, frage nur aus Interesse bzw. sitze ich erstmal Stunden/Wochen an etwas, bevor ich überhaupt eine Frage stelle zerbreche ich mir den Kopf, viele Fieselarbeiten und aktualisierungen die automatisch gehen könnten.
Angenommen ein Kalender, wo jedes Jahr die Tage und Monate angepasst werden, Zellen formatiert und Feiertage und Wochenende rausgesucht werden, bis man rausfindet dass das ganze mit Formeln und bedingten Formatierungen funktioniert, man nur noch ein Jahr eingibt und der Rest wird automatisch berechnet - und davor saß man stundenlang davor - und jetzt spart man sich Zeit.
Die Kleinigkeiten bzw. umfangreiche Möglichkeiten die Excel zu bieten hat muss man erst mal kennen bzw. können und sich irgendwie auch selbst beibringen oder eben wie es hier im Forum möglich ist, nachfragen - üben / basteln / lernen...
Ich finde auch, so wie Luc es gemacht hat super, nicht nur einen Code einfach mal so reingeschrieben sondern Schritt für Schritt (wenn auch kompliziert mit den kürzeln) erklärt.
Meine Mappe hat nur 4 Tabellenblätter und Tabelle2 wo die Formatierung stattfinden soll, da hat so gut wie jede Zelle eine Formel die bestimmt ca. 500 Zeichen hat. Die Formel ist aufjedenfall ziemlich lang. Aus dem Grund hat die Mappe soviel MB.
Das einzige was im VBA - Code drinsteht ist folgendes:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Const LegSymb As String = "PFBM", LegAdr As String = "Legende", _
ZBerAdr = "D6:P21"
Dim LIdx As Long, LBer As Range, ZBer As Range
On Error Resume Next
Set LBer = Me.Range(LegAdr): Set ZBer = Me.Range(ZBerAdr)
If Not Intersect(Target, ZBer) Is Nothing Then
With Target.FormatConditions
If Not IsError(Target) And Not IsNumeric(Target) And Len(Target) = 1 Then _
LIdx = InStr(LegSymb, UCase(Target))
If .Count > 1 And CBool(LIdx) Then
.Item(2).Interior.Color = LBer.Cells(LIdx).Interior.Color
.Item(2).Font.Color = LBer.Cells(LIdx).Font.Color
End If
End With
End If
Set LBer = Nothing: Set ZBer = Nothing
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim LIdx As Long, LBer As Range, ZBer As Range
On Error Resume Next
Set LBer = Me.Range(LegAdr): Set ZBer = Me.Range(ZBerAdr)
If Not Intersect(Target, ZBer) Is Nothing Then
With Target.FormatConditions
If Not IsError(Target) And Not IsNumeric(Target) And Len(Target) = 1 Then _
LIdx = InStr(LegSymb, UCase(Target))
If .Count > 1 And CBool(LIdx) Then
.Item(2).Interior.Color = LBer.Cells(LIdx).Interior.Color
.Item(2).Font.Color = LBer.Cells(LIdx).Font.Color
End If
End With
End If
Set LBer = Nothing: Set ZBer = Nothing
End Sub
Private Sub Worksheet_Calculate()
Dim Zelle As Range
With Application
.ScreenUpdating = False
For Each Zelle In Range(ZBerAdr): Zelle.Select: Next Zelle
.ScreenUpdating = True
End With
End Sub
So, nun ich schreibe in Tabelle 1 die daten rein, die in Tabelle2 durch Formeln berechnet werden, und entsprechendes Ergebnis soll mit der entsprechenden Farbe gefärbt werden. Das alles wäre überhaupt kein Problem gewesen wenn Excel2003 mehrere bedingte Formatierungen aktzeptiert hätte ich mir den Code sparen können und auch eure Nerven nicht strapaziert. ;)
Vielleicht liegt ja das ganze daran, das eben die Daten in Tabelle1 und nicht auch in Tabelle2 erfasst werden.
Oder evtl daran das der gesamte Code im VBA unter Tabelle2 steht und ja das Worksheet_Calculate() in Tabelle1 drinstehen sollte...
Ich weiß es leider nicht... kann nur auf Eure Hilfe hoffen und bin euch auch sehr dankbar, überhaupt das es so eine Art Forum gibt. Danke dafür.
Lieben Gruß
und ein schönes Wochenende
Amina