Excel VBA Private Sub Worksheet_Change(ByVal Target As Range)? Help Programm vom Kollegen Bearbeitet
Habe für einen Kollegen ein Programm geschrieben. Das Problem ist nun das er vorher als Change Bedienung einen Befehl drin hat denn ich nicht ganz verstehe(und mein Programm Stört). :/ Der Code hat seinen Sinn deswegen möchte ich ihn gerne drin lassen. Hier der Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A7:A100")) Is Nothing Then Exit Sub
If Target.Value <> "" Then
Target.Offset(0, 8).Value = Date
Else
Target.Offset(0, 8).ClearContents
End If
End Sub
Ich denke der Code Funktioniert so. Er Speichert in der Variable "Target" die Range A7;A100 und guck nun dann ob sie leer sind wenn ja soll er das Sub Verlassen. Ist das gebiet 0,8 nicht "ungleich" Leer soll es in die Zelle 0,8 bzw "Offset"? Das Datum reinschreiben. Ist Target 0,8 leer? Löscht es die Komplette Zeile?...
So das Programm erzeugt immer wenn man in Spalte A in eine neue Zeile schreibt an der stelle 8/bzw. H das Datum.
Das Problem ist aber das der Debugger anspringt wenn man Zeilen per Rechtsklick Zeilen Löschen rauslöscht. Und da das wiederum unschön ist wäre hilfe wirklich schön :)
mfg Dennis
2 Antworten
So ganz richtig hast Du das nicht interpretiert. Ich versuche es mal:
Private Sub Worksheet_Change(ByVal Target As Range)
Der Code wird ausgeführt, wenn das Change-Ereignis eintritt, das heißt, wenn irgendwo auf dem Blatt der Wert einer Zelle geändert wird. Dabei wird die Zelle, die geändert wurde in der Variablen Target als Range-Objekt gespeichert.
If Intersect(Target, Range("A7:A100")) Is Nothing Then Exit Sub
Wenn die Target-Zelle NICHT im Bereich A7:A100 liegt, wird der Code abgebrochen.
If Target.Value <> "" Then
Wenn die Zelle, die geändert wurde jetzt NICHT leer ist, dann:
Target.Offset(0, 8).Value = Date
Schreibe in die Zelle in der gleichen Zeile, 8 Spalten weiter (also H) das aktuelle Datum.
Else
Sonst (Alao wenn der Inhalt der Zelle in A gelöscht wurde):
Target.Offset(0, 8).ClearContents
Lösche den Inhalt der Zelle in Spalte H der gleichen Zeile.
Da Problem mit dem Löschen einer ganzen Zeile kannst Du beheben, indem Du noch diese Zeile in Deine Code einfügst:
If Target.Count > 1 Then Exit Sub
Also so:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A7:A100")) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target.Value <> "" Then
Target.Offset(0, 8).Value = Date
Else
Target.Offset(0, 8).ClearContents
End If
End Sub
Klappt es?
und das als Leut, das sich hier so selten im Excel auskennt! ;-))
Am besten holst du dir da Hilfe in einem VBA Forum, hier findest du selten Leute die sich so im Excel auskennen ;)
na lass dich da mal nicht täuschen hab hier schon viele VBA Fragen gestellt ;D
Ja jetzt Funktioniert es Super :) Dank dir ( Du hast es Guren100 gezeigt :P) Bekommst du direkt Morgen einen Schnicken Stern für :D