Anzeige
Archiv - Navigation
1420to1424
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

Datenüberprüfung nicht kompatibel mit Änd.datum?

Datenüberprüfung nicht kompatibel mit Änd.datum?
20.04.2015 15:14:04
Jannik
Hallo,
ich habe hier folgendes Problem; ich habe in eine Tabelle eine Zusatzspalte eingebaut, die mit dem Makro im Hintergrund automatisch bei Änderungen in den anderen Zellen das aktuelle Datum dort hineinschreibt.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Row 

Jetzt habe ich aber in einer Spalte eine Datenüberprüfung und jedes Mal, wenn ich dort etwas auswähle, stürzt Excel ab.
Dazu habe ich auch ein kleines Beispiel mit meinem Code vorbereitet
https://www.herber.de/bbs/user/97178.xlsm
Wenn ich in Spalte A einen Eintrag ergänze, funktioniert alles super, sobald ich aber versuche, bei der Spalte B etwas auszuwählen, fliegt mir das gesamte Programm um die Ohren.
Wo liegt mein Fehler?
Grüße Jannik

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Datenüberprüfung nicht kompatibel mit Änd.datum?
20.04.2015 15:26:00
Klexy
Das Makro läuft im Kreis, weil mit dem Datumseintrag das Change-Event wieder eintritt und das Datum erneut eingetragen wird.
Du musst die Überprüfung der Spalte 3 ausschließen.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Row  3 Then
Cells(Target.Row, "C").Value = Date
End If
End Sub
Hat nix mit der Datenüberprüfung ja/nein-Liste zu tun.

AW: Datenüberprüfung nicht kompatibel mit Änd.datum?
20.04.2015 21:24:23
Luschi
Hallo Klexy,
Deine Begründung ist richtig, nur die Ausführung im Vba-Code nicht konsequent umgesetzt.
Hier meine Korrektur:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row >= 2 Then
Application.EnableEvents = False
Cells(Target.Row, "C").Value = Date
Application.EnableEvents = True
End If
End Sub
Gruß von Luschi
aus klein-Paris
PS: wenn man per Vba-Code Werte in Zellen schreibt, muß man voher die Excel-Ereignis-Routinen aus- und anschließend wieder einschalten.

Anzeige
Datenüberprüfung nicht kompatibel mit Änd.datum?
21.04.2015 09:30:07
Klexy
Wieder was dazugelernt.

AW: Datenüberprüfung nicht kompatibel mit Änd.dat
21.04.2015 14:05:42
Jannik
Danke, eure Antworten haben mir gut geholfen.
Jetzt denke ich auch endlich diesen Befehl "EnableEvents" verstanden zu haben und habe beide Vorschläge in mein Makro mit aufgenommen.
Dabei habe ich den ersten Vorschlag mit Spalte 3 aber zweckentfremdet. Es geht mir darum, dass ich dort auch von Hand das Datum ändern kann und nicht beim Schreiben in der Zelle sofort wieder überschrieben werde.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row >= 2 And Target.Column  3 Then
Application.EnableEvents = False
Cells(Target.Row, "C").Value = Date
Application.EnableEvents = True
End If
End Sub

Anzeige
AW:Zellen löschen (Target is nothing ausschließen)
22.04.2015 13:13:53
Jannik
Moin nochmal,
ich habe ein weiterführendes Problem mit dem Makro, das ich jetzt anwende.
Wie kann ich denn den Fall ausschließen, dass ich eine Zelle lösche?
Der Code:

Private Sub Worksheet_Change(ByVal Target As Range)
'If Target.Value = 0 Then Exit Sub
If Target.Row >= 2 And Target.Column  3 Then
Application.EnableEvents = False
Cells(Target.Row, "C").Value = Date
Application.EnableEvents = True
End If
End Sub
Auch hierzu habe ich mein Beispiel ein wenig erweitert: https://www.herber.de/bbs/user/97229.xlsm
FALL 1: Ich möchte eine Zeile löschen, die sich über einer anderen befindet (hier Zeile 3). Rechtsklick auf die gesamte Zeile und "Zellen löschen". Nun wird bei der Zeile, die vorher 4 war (Datum = 1.1.2000) das Datum geändert, sodass dort das aktuelle steht. Da ich in der Zeile aber eigentlich nichts gemacht habe, soll sich natürlich auch nichts ändern!
FALL 2: Ich möchte die letzte Zeile löschen auch mit Rechtsklick "Zellen löschen". Nun hat die erste freie Zeile einen Datumseintrag, den ich von Hand löschen muss...
Also im Prinzip sind Fall 1 und 2 das Gleiche; die jeweils darunter liegende Zeile wird mit dem neuen Wert beschrieben...
Versucht habe ich bislang verschiedene Befehle, mit denen das Makro stoppt wie
"if target is nothing then exit sub" oder
"if target.value = 0 then exit sub"
Funktioniert leider beides nicht.
Es wäre nämlich ok, auch bei leeren Einträgen (quasi Zelle mit Inhalt löschen), das Datum nicht zu ändern/ das sub zu verlassen.
Welchen Code muss ich nun einfügen?

Anzeige
AW:Zellen löschen (Target is nothing ausschließen)
22.04.2015 14:34:54
Jannik
habe vergessen, das Kontrollkästchen zu aktivieren...

AW:Zellen löschen (Target is nothing ausschließen)
22.04.2015 14:35:02
Jannik
habe vergessen, das Kontrollkästchen zu aktivieren...

AW: Prüfen mit Namen
22.04.2015 15:08:07
Daniel
Hi
als Workaround für das Erkennen, ob Zeilen gelöscht wurden, kannst du folgendes verwenden:
1. Erstelle einen Namen mit dem selektierten Zellbereich als Bezug im SelectionChange-Event.
2. Wenn du dann die selektierten Zeilen löscht, hat dieser Name keine Bezugszellen mehr und wird den Bezugsfehler enthalten.
Dies kannst du im Change-Event dann abfragen und daran erkennen, ob Zellen gelöscht wurden oder nicht.

Private Sub Worksheet_Change(ByVal Target As Range)
If ThisWorkbook.Names("Target").Value Like "*REF!" Then Exit Sub
If Target.Row >= 2 And Target.Column  3 Then
Application.EnableEvents = False
Cells(Target.Row, "C").Value = Date
Application.EnableEvents = True
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target.Name = "Target"
End Sub
Gruß Daniel

Anzeige
AW: Prüfen mit Namen
22.04.2015 16:48:08
Jannik
Aha! So läuft es!

AW: Prüfen mit Namen
22.04.2015 16:48:20
Jannik
Aha! So läuft es!

Zeilen löschen bei Worksheet_Change
22.04.2015 16:40:36
Klexy
Das geht, wenn du dein Target (Target.Address) überprüfst.
Wenn es eine Zelle ist, dann heißt es z.B. $A$23 - also vorne und hinten unterschiedlich.
Wenn es eine Zeile ist, dann heißt es z.B. $11:$11 - also vorne und hinten gleich.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Länge As Integer, Mitte As Integer, Adr As String, vorne As String, hinten As String
Adr = Target.Address
Länge = Len(Adr)
Mitte = InStr(2, Adr, "$")
vorne = Mid(Adr, 2, Mitte - 3)
hinten = Mid(Adr, Mitte + 1, Länge - Mitte)
If Target.Row >= 2 And Target.Column  3 And vorne  hinten Then
Application.EnableEvents = False
Cells(Target.Row, "C").Value = Date
Application.EnableEvents = True
End If
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige