Problem mit Worksheet_SelectionChange

Bild

Betrifft: Problem mit Worksheet_SelectionChange
von: Mike
Geschrieben am: 06.11.2015 09:56:13

Hallo,
ich möchte gerne ein Event ausführen, wenn ein Wert in Spalte J geändert wird und dabei unterscheiden, ob der neue Wert 0 bzw. "" ist oder etwas anderes.
Bisher habe ich folgenden Code im entsprechenden Blatt.
Das Problem dabei:
Die Zellen werden nur aktualisiert, wenn ich zuerst von der aktiven Zelle in eine andere klicke UND DANN wieder zurück in die ursprüngliche Zelle.
Ich vermute, dass ich hier mit dem falschen Event arbeite (evtl. muss es das Change und nicht das SelectionChange-Event sein ?).
Kann mir jemand damit weiterhelfen und evtl. auch eine kurze Erklärung für Anfänger geben ?
Mein Code:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
            If Not Intersect(Range("J:J"), Target) Is Nothing Then
                If Target.Value = "0" Or Target.Value = "" Then
                    With Selection
                        .Offset(0, -4).Font.Bold = True
                        .Offset(0, -4).Font.Color = RGB(255, 255, 255)
                        .Offset(0, -4).Interior.Color = RGB(192, 80, 77)
                        .Offset(0, -3).Font.Bold = False
                        .Offset(0, -3).Font.ColorIndex = xlAutomatic
                        .Offset(0, -3).Interior.Color = RGB(218, 238, 243)
                        .Offset(0, -2).Value = "0"
                    End With
                Else
                    With Selection
                        .Offset(0, -3).Font.Bold = True
                        .Offset(0, -3).Font.Color = RGB(255, 255, 255)
                        .Offset(0, -3).Interior.Color = RGB(155, 187, 89)
                        .Offset(0, -4).Font.Bold = False
                        .Offset(0, -4).Font.ColorIndex = xlAutomatic
                        .Offset(0, -4).Interior.Color = RGB(218, 238, 243)
                        .Offset(0, -2).Value = "1"
                    End With
                End If
            End If
        End If
    End If
End Sub
Vielen Dank im Voraus,
Mike

Bild

Betrifft: AW: Problem mit Worksheet_SelectionChange
von: EtoPHG
Geschrieben am: 06.11.2015 10:19:59
Hallo Mike,
Ja, das siehst du richtig.
.Worksheet_SelectionChange wird immer dann aktiv, wenn die Adresse der Selection ändert. Das sagt ja auch der Name.
Worksheet_Change hingegen nur dann, wenn der Inhalt der Selection ändert.
Im Code solltest du dann aber nicht mehr mit Selection(-Range) arbeiten, sondern mit dem Target(-Range) arbeiten. Beide können aus einer oder mehreren Zellen bestehen. Um zu verhindern, dass dein Code auf die Schnauze fällt, wenn mehrere Zellen am Bereich beteiligt sind, solltest du für jede Beteiligte den Code ausführen. Das könnte dann so aussehen:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rC As Range
    If Not Intersect(Range("J:J"), Target) Is Nothing Then
        Application.EnableEvents = False
        For Each rC In Intersect(Range("J:J"), Target)
            If rC.Value = "0" Or rC.Value = "" Then
                rC.Offset(0, -4).Font.Bold = True
                rC.Offset(0, -4).Font.Color = RGB(255, 255, 255)
                rC.Offset(0, -4).Interior.Color = RGB(192, 80, 77)
                rC.Offset(0, -3).Font.Bold = False
                rC.Offset(0, -3).Font.ColorIndex = xlAutomatic
                rC.Offset(0, -3).Interior.Color = RGB(218, 238, 243)
                rC.Offset(0, -2).Value = "0"
            Else
                rC.Offset(0, -3).Font.Bold = True
                rC.Offset(0, -3).Font.Color = RGB(255, 255, 255)
                rC.Offset(0, -3).Interior.Color = RGB(155, 187, 89)
                rC.Offset(0, -4).Font.Bold = False
                rC.Offset(0, -4).Font.ColorIndex = xlAutomatic
                rC.Offset(0, -4).Interior.Color = RGB(218, 238, 243)
                rC.Offset(0, -2).Value = "1"
            End If
        Next rC
        Application.EnableEvents = True
    End If
End Sub
Gruess Hansueli

Bild

Betrifft: AW: Problem mit Worksheet_SelectionChange
von: Mike
Geschrieben am: 06.11.2015 10:21:41
Hallo Hansueli,
vielen Dank für Deine Antwort und die gute Erklärung - das macht Sinn und funktioniert bestens !
Gruß und schönes WE,
Mike

Bild

Betrifft: AW: Problem mit Worksheet_SelectionChange
von: MCO
Geschrieben am: 06.11.2015 10:27:59
Hi!
Kommentare stehen im Code,
Viel Erfolg!
Gruß, MCO

Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Range("J:J"), Target) Is Nothing Then
            Application.EnableEvents = False 'Ereignisse abschalten, da ansonsten bei Wertä _
nderung das Ganze erneut ausgelöst wird
            
            With Target 'siehe oben: Target ist bereits der Bezug (range)
                If .Value = "0" Or .Value = "" Then
                    With .Offset(0, -4)
                        .Font.Bold = True
                        .Font.Color = RGB(255, 255, 255)
                        .Interior.Color = RGB(192, 80, 77)
                    End With
                    
                    With .Offset(0, -3)
                        .Font.Bold = False
                        .Font.ColorIndex = xlAutomatic
                        .Interior.Color = RGB(218, 238, 243)
                    End With
                    
                    .Offset(0, -2).Value = "0"
                Else
                    With .Offset(0, -4)
                        .Font.Bold = False
                        .Font.ColorIndex = xlAutomatic
                        .Interior.Color = RGB(218, 238, 243)
                    End With
                    
                    With .Offset(0, -3)
                        .Font.Bold = True
                        .Font.Color = RGB(255, 255, 255)
                        .Interior.Color = RGB(155, 187, 89)
                     End With
                    
                    .Offset(0, -2).Value = "1"
                End If
            End With
            Application.EnableEvents = True 'Ereignisse unbedingt wieder einschalten!
        End If
End Sub


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Problem mit Worksheet_SelectionChange"