wie kann man verhindern, dass ein Worksheet_Change 2 mal durchlaufen wird, wenn man Zellen von einen Bereich in den anderen schiebt?
Was ich meine, möchte ich mit folgendem Beispiel zeigen.
Erst mal das Makro Vorbereitung starten. Damit werden C1 bis C10 mit Zahlen befüllt und Spalte C gelb eingefärbt. OK.
Wenn der Anwender nun was in eine Zelle in Spalte C hineinschreibt, löst das eine Farbänderung auf grün aus, bzw. wieder auf gelb. OK
Wenn nun der Anwender händisch zum Beispiel den Zellbereich C3:C5 nach C12:C14 mit der Maus verschiebt, wird das Makro Worksheet_Change zwei Mal aufgerufen, erst mit Target = C3:C5 und dann mit Target = C12:C14.
Es erfolgt keine Änderung der Hintergrundfarbe, besser gesagt zwei Mal, was sich aufhebt. Ich hätte aber gern nur eine Farbänderung, denn dem Anwender möchte eine Farbäbnderung sehen, egal, was er macht.
Kann man im Makro beim ersten Durchlauf bereits abfragen, ob da noch ein zweiter Durchlauf, und wenn ja, mit welchem Target er kommt?
Denn dann könnte man die Farbänderung das zweite Mal verhindern.
Und hier das Makro (im Blattmodul):
Dim NoEvent As Boolean
Sub Vorbereitung()
Dim i As Long
NoEvent = True
Columns("C:C").Clear
Columns("C:C").Interior.Color = 65535
For i = 1 To 10
Range("C" & i) = i
Next i
NoEvent = False
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If NoEvent Then Exit Sub
With Columns("C:C").Interior
If .Color = 65535 Then
.Color = 5296274 'Grün
Else
.Color = 65535 'Gelb
End If
End With
End Sub
LG, Franz