Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Nach änderung Datum aktualisieren ABER mit nachfrage

Begonnen von Icemann1970, Dezember 26, 2022, 12:45:50

⏪ vorheriges - nächstes ⏩

Icemann1970

Hallo zusammen und frohe Weihnachten.
Ich habe eine Excel Tabelle die ich nach (Tatsächlicher) änderung das Datum auf jetzt setzen möchte. Soweit funktioniert das ABER..... das Datum ändert sich auch wenn ich in einer Zelle Klicke, was Kopiere und ohne zu änderen wieder rausgehe. Kann ich das umgehen das sich ein "Nachfrage Fenster" ob wirklich das neue Datum eingetragen werden soll öffnet und nachfragt ?

Private Sub Worksheet_Change(ByVal Target As Range)

Dim a  As Long
a = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row

If Not Intersect(Target, Range("A:E")) Is Nothing Then
    Cells(Target.Row, 7) = Date
Else
    Exit Sub
End If

End Sub


würde mich um eine Lösung freuen.
Vielen Dank
Mfg. Udo

Icemann1970

Bin schon etwas weiter gekommen, funktioniert soweit aber wenn ich auf "Ja" bestätige werde ich danach zum zweiten mal gefragt. Drücke ich "nein" wird die Zelle ohne aktualisierung gespeichert.
Kann mir denn dabei jemand helfen???


Private Sub Worksheet_Change(ByVal Target As Range)


Dim a  As Long
      a = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row

Dim Eingabewert As Byte
      Eingabewert = MsgBox("Soll der geänderte Preis tatsächlich gespeichert werden  ?.... Achtung!... Kann nicht rückgängig gemacht werden ", vbYesNo, "")


If Eingabewert = vbYes Then

    If Not Intersect(Target, Range("A:E")) Is Nothing Then
    Cells(Target.Row, 7) = Date
               
End If
              
       
ElseIf Eingabewert = vbNo Then
    
    Exit Sub


End If

End Sub


Also wie gesagt der Code funktioniert möchte aber die zweite Aufforderung nicht haben.
Mfg. Udo

PhilS

Die zweite Nachfrage kommt sicherlich, weil du mit dem Schreiben des Datums ja durch den Code eine weitere Änderung verursachst.

Zitat von: Icemann1970 am Dezember 26, 2022, 16:14:44If Not Intersect(Target, Range("A:E")) Is Nothing Then
Mit der Codezeile prüfst du, ob die Änderung in dem vorgegebenen Bereich (A:E) war. Wenn du abhängig davon nachfragst, dürfte dein Problem gelöst sein.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Icemann1970

Hallo PhilS. Vielen Dank für deine Antwort komme da aber nicht weiter. Die Prüfung bezieht sich doch auf A:E (1-5) aber das neue Datum wird doch in G (7) geschrieben.
Stehe da auf dem Schlauch  ;D
Mfg. Udo

Icemann1970

Und... wie bekomme ich das hin, dass die MSGBox erst erscheint wenn ich aus der ZEILE gehe und nicht bei Änderung der Zelle (A:F) erscheint?  ::)
Mfg. Udo

PhilS

Zitat von: Icemann1970 am Dezember 26, 2022, 20:30:38Die Prüfung bezieht sich doch auf A:E (1-5) aber das neue Datum wird doch in G (7) geschrieben.
Genau!
Du hast einen Logik-Fehler in deinem Code.
Du fragst bei jeder Änderung nach, ob der Benutzer speichern möchte, aber nur dann, wenn der Benutzer bestätigt und die Änderung im Bereich A:E war, speicherst du das Datum.
Du solltest erst prüfen, ob die Änderung im Bereich A:E war und dann nachfragen und ggf. speichern.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

PhilS

Zitat von: Icemann1970 am Dezember 26, 2022, 23:57:28wie bekomme ich das hin, dass die MSGBox erst erscheint wenn ich aus der ZEILE gehe und nicht bei Änderung der Zelle (A:F) erscheint?
Vielleicht kennt ein Excel-Experte eine bessere Lösung, ich hätte nur einen nicht-trivialen Ansatz:

Bei jedem Change-Ereignis muss man prüfen, ob es eine Änderung im überwachten Bereich gab und das Ergebnis in einer modulweiten Variable speichern. Bei nachfolgenden SelectionChange-Ereignissen muss man dann prüfen, ob die Zeile gewechselt wurde und vorher eine Änderung in der alten Zeile vorgenommen wurde.
Dieser Ansatz bringt aber auch eine Reihe Sonderfälle mit sich, die man behandeln müsste: Z.B. was passiert, wenn der Benutzer die Datei schließt oder auf ein anderes Worksheet wechselt?
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Icemann1970

Na dann werde ich mal weiter suchen.

ABER vielen Dank für deine Hilfe .
Mfg. Udo

Icemann1970

Hallo zusammen. Habe die Lösung gefunden.... schreibe ich morgen mal auf.
Mfg. Udo

Icemann1970

so funktioniert es.
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Eingabewert As Byte

    If Not Application.Intersect(Target, Range("G1:G2000")) Is Nothing Then
       Eingabewert = MsgBox(" Soll das änderungsdatum tatsächlich gespeichert werden ? " & vbLf & _
    "..... Achtung !! ... Kann nicht rückgängig gemacht werden", vbYesNo)
    
    If Eingabewert = vbYes Then
    Cells(Target.Row, 10) = Now
 '-----> ggf noch farblich anzeigen.     if Cells(Target.Row, 10).Interior.Color = vbRed

    End If
End If

End Sub
Danke nochmal für den hinweis.
Mfg. Udo