suche eine Möglichkeit mit einer WENN Formel mit der ich eine Spalte mit anderen Anderen in Abhängigkeit bringen kann.
Ich möchte folgendes erreichen. In Spalte Q12 Soll das Aktuelle Datum mit Uhrzeit erscheinen, wenn in Spalte R12 (Dropdown) (Abgeschlossen, offen (Liste)) die Auswahl getroffen haben "Abgeschlossen" auswähle. Es soll bis unendlich weiter geführt werden, und nicht nur in der Zeile 12. Ich möchte nicht, das er das Datum Aktualisiert wie mit der Formel (=()HEUTE).
also Excel mit *.xlsm und folgenden Code in die entsprechende Tabelle Codeseite(!)
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row > 11 And Target.Column = 18 Then Application.EnableEvents = False If Target.Value = "Abgeschlossen" Then Target.Offset(, -1).Value = Format(Date, "dd.mm.yyyy") & Format(Time, " hh:mm") Else Target.Offset(, -1).Value = "" End If Application.EnableEvents = True End If End Sub
Grüße aus Nürnberg Armin Ich benutze WIN 10 (64bit) und Office 19 (32bit)
an der Routine von @EbyAS kann man meiner Ansicht nach noch einiges verbessern.
Zunächst einmal wird mit Target.Offset(, -1).Value = Format(Date, "dd.mm.yyyy") & Format(Time, " hh:mm") ein Text und kein echtes Datum in die Zelle geschrieben. Sobald man also mit dem "Datum" etwas anfangen möchte, wird das nicht wie erwartet funktionieren. Hier wäre Target.Offset(, -1).Value = Now besser.
Durch den Vergleich If Target.Value = "Abgeschlossen" Then muss in der Zelle der Text genau so stehen - inklusive Groß-/Kleinschreibung. Hier wäre If Target.Value Like "Abgeschlossen" Then geschickter, denn dann spielt die Groß-/Kleinschreibung keine Rolle.
Dann springt die Routine in den Debugger, falls mehrere Zellen gleichzeitig geändert werden und die erste Zelle unterhalb von R11 liegt. Ebenso wird gar nichts gemacht, falls die erste Zelle nicht unterhalb von R11 liegt, aber weitere Zellen dort liegen.
Daher würde ich die Routine so schreiben:
Code:
Private Sub Worksheet_Change(ByVal Target As Range) Dim Zelle As Range Dim Bereich As Range Set Bereich = Intersect(Target, Columns("R")) If Not Bereich Is Nothing Then Application.EnableEvents = False For Each Zelle in Bereich If Zelle.Row > 11 Then If Zelle.Value Like "Abgeschlossen" Then Zelle.Offset(, -1).Value = Now Else Zelle.Offset(, -1).ClearContents End If End If Next Zelle Application.EnableEvents = True End If End Sub
erstmal besten Dank, dein Code Verbesserung hat super geklappt.
Frage: ist es möglich, dein Code so anzupassen, dass man Datum und Uhrzeit in zwei verschiedene Spalten anzeigen zu lassen? (Datum in Spalte Y und Uhrzeit in Z), siehe Bild
Neben frage: habe in Spalte D [Datum] manuelle Eingabe, ist auch so gewollt. Nun möchte ich gerne dass in Spalte X Dropdown wenn in Spalte D das Datum reingeschrieben wird, dass er es auf offen stellt. Aber nur solange bis in Spalte X von offen auf Abgeschlossen gestellt wird, ist das möglich?
Code:
Private Sub Worksheet_Change(ByVal Target As Range) Dim Zelle As Range Dim Bereich As Range Set Bereich = Intersect(Target, Columns("X")) If Not Bereich Is Nothing Then Application.EnableEvents = False For Each Zelle In Bereich If Zelle.Row > 11 Then If Zelle.Value Like "Abgeschlossen" Then Zelle.Offset(, 1).Value = Now Else Zelle.Offset(, 1).ClearContents End If End If Next Zelle Application.EnableEvents = True End If End Sub
bin mal gespannt, ob es wieder ein halbes Jahr dauert, bis man irgendeine Reaktion bekommt...
Code:
Private Sub Worksheet_Change(ByVal Target As Range) Dim Zelle As Range Dim Bereich As Range Set Bereich = Intersect(Target, Columns("X")) If Not Bereich Is Nothing Then Application.EnableEvents = False For Each Zelle In Bereich If Zelle.Row > 11 Then If Zelle.Value Like "Abgeschlossen" Then Zelle.Offset(, 1).Value = Date Zelle.Offset(, 2).Value = Time Else Zelle.Offset(, 1).ClearContents Zelle.Offset(, 2).ClearContents End If End If Next Zelle Application.EnableEvents = True End If Set Bereich = Intersect(Target, Columns("D")) If Not Bereich Is Nothing Then Application.EnableEvents = False For Each Zelle In Bereich If Zelle.Row > 11 Then If Not Cells(Zelle.Row, "X") Like "Abgeschlossen" Then Cells(Zelle.Row, "X").Value = "Offen" End If End If Next Zelle Application.EnableEvents = True End If End Sub
Gruß, Helmut
Win10 - Office365 / MacOS - Office365
Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:1 Nutzer sagt Danke an HKindler für diesen Beitrag 28 • Stephan
04.06.2024, 10:04 (Dieser Beitrag wurde zuletzt bearbeitet: 04.06.2024, 10:29 von Rogue.)
Guten Morgen HKindler,
danke für deine mühe. Sorry das ich mich das letzte mal nicht zurück gemeldet habe.
Ich werde den Code den du mir gepostet hast, sofort ausprobieren, und dir ein Feedback geben.
Gruß Rogue Guten Morgen HKindler,
dein Code ist SUPER, echt toll.
Aber eine kleine Fehler ist noch. Wenn ich in D den Eintrag nachträglich lösche, dann geht in Spalte X das offen nicht weg, so wie bei Datum und Uhrzeit in X, Y, Z der fall ist. Ist das möglich, wenn man Nachträglich in Spalte D wieder was löscht, dass der Eintrag in Spalte X wieder löscht?
du hast doch schon etwas gelernt (wenn du dich mit dem Makro beschäftigt hast) und den Sinn des Makros verstanden. Es dürfte dir (mindestens nach einigem Probieren) klar sein, wie der Befehl heißen und wo er im Makro eingesetzt werden könnte.
Wenn du es dann nicht geschafft haben solltest, hier eine kleine Hilfestellung:
If Cells(Zelle.Row, "D") = "" And Cells(Zelle.Row, "X") Like "Offen" Then Cells(Zelle.Row, "X").ClearContents End If