1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Excel: Bedingte Formatierung mit VBA

Discussion in 'Office-Programme' started by Pharaonin, Nov 21, 2008.

Thread Status:
Not open for further replies.
  1. Pharaonin

    Pharaonin Byte

    Hallo ihr.

    Bin leider n VBA-Noob.

    Leider hat Excel 2000 nur 3 möglichkeiten bedingte Formatierungen zu definieren.
    Hab ja zumindest schon mal nen VBA- Code gefunden der meinste meisten Probleme löst:

    Code:
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim bereich, zelle As Range
    Set bereich = Range("C3:C100")
    For Each zelle In bereich
    
    Select Case Target.Value
        Case "D"
          Target.Interior.ColorIndex = 36
          Target.Interior.Pattern = xlCrissCross
        Case "U"
          Target.Interior.ColorIndex = 22
          Target.Interior.Pattern = xlSolid
        Case "K"
          Target.Interior.ColorIndex = 35
          Target.Interior.Pattern = xlSolid
        Case "G"
          Target.Interior.ColorIndex = 33
          Target.Interior.Pattern = xlSolid
        Case Else
          Target.Interior.ColorIndex = xlColorIndexNone
          Target.Interior.Pattern = xlPatternNone
      End Select
    Next
    
    
    End Sub
    Nun möchte ich aber auch eine Bedinung haben, wenn hier z.b. in Zelle C2 ein F steht, sollen die Zellen C3:C100 automatisch ein anderes Muster erhalten.
    VBA kann das bestimmt, nur ich hab noch nicht herausbekommen wie. :confused:

    Edit: Es sind übrigens etwa 40 Spalten. Ich habe mich bis jetzt bei meiner Bearbeitung immer nur auf eine Spalte bezogen bei meinen Tests. Ich weis nicht, ob VBA evtl sogar die Möglichkeit bietet, sich immer auf die entsprechende Spalte zu beziehen, so das man nicht für jede Spalte nen Code schreiben muss.
    Das wäre allerdings nur 2.-Rangig. :)

    Könnte mir wer weiter helfen?

    Danke schonmal im Vorraus.

    Grüße
    Phara
     
    Last edited: Nov 21, 2008
  2. Urs2

    Urs2 Megabyte

    Da hast Du etwas falsch verstanden.
    Worksheet_Change überwacht das ganze Arbeitsblatt. Deine Bereichsangabe und die For-Schlaufe sind unnötig.

    Wenn Du "D" ausserhalb der genutzten Tabelle eingibst... kommt der Maler auch...
    Das kann egal sein, wenn zB die restlichen Zellen gesperrt sind, aber oft ist es lästig. Ich lasse deshalb zuerst >

    > prüfen, ob die geänderte Zelle innerhalb des Nutzbereichs ist... und dafür muss der Nutzbereich dann doch registriert sein.

    Nur für "D" ist auch das Färben der Zeilen bis an das untere Ende des Nutzbereichs codiert.
    Passe den Range an Deinen an.

    Code:
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    
    Dim tZeile, tSpalte             'TargetZelle, automatisch
    Dim eZeile                      'letzte Zeile in Nutzbereich
    eZeile = 26                     'Zeilennummer
    Dim bereich As Range            'Nutzbereich
    Set bereich = Range("B8:J26")
                    
                    'wenn innerhalb Nutzbereich
    Dim isect
    Set isect = Application.Intersect(Target, bereich)
    If Not isect Is Nothing Then
        
        Select Case Target.Value
        Case "D"
            Target.Interior.ColorIndex = 36
            Target.Interior.Pattern = xlCrissCross
            tZeile = Target.Row + 1
            tSpalte = Target.Column
            With Range(Cells(tZeile, tSpalte), Cells(eZeile, tSpalte)).Interior
                .ColorIndex = 33
                .Pattern = xlCrissCross
            End With
        Case "U"
            Target.Interior.ColorIndex = 22
            Target.Interior.Pattern = xlSolid
        Case "K"
          Target.Interior.ColorIndex = 35
          Target.Interior.Pattern = xlSolid
        Case "G"
          Target.Interior.ColorIndex = 33
          Target.Interior.Pattern = xlSolid
        Case Else
          Target.Interior.ColorIndex = xlColorIndexNone
          Target.Interior.Pattern = xlPatternNone
        End Select
    End If
    
    End Sub
    
    Hoffentlich hatte ich das Ding auch richtig verstanden...

    Gruss Urs
     
  3. Pharaonin

    Pharaonin Byte

    ahhh ok

    :danke:

    Grüße
    Phara
     
Thread Status:
Not open for further replies.

Share This Page