Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1456to1460
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

Problem mit Worksheet_SelectionChange

Problem mit Worksheet_SelectionChange
06.11.2015 09:56:13
Mike
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

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit Worksheet_SelectionChange
06.11.2015 10:19:59
EtoPHG
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

Anzeige
AW: Problem mit Worksheet_SelectionChange
06.11.2015 10:21:41
Mike
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

AW: Problem mit Worksheet_SelectionChange
06.11.2015 10:27:59
MCO
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

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige