Hallo Rudolf,
du hast nichts falsch gemacht. Das ist ein bekanntes Problem, dass Rückgängig nicht mehr funktioniert nachdem ein Makro ausgeführt wurde, das Änderungen im Sheet macht. Hier wird nach dem Löschen per VBA-Code ein Minuszeichen eingetragen. Würde Excel für jede per VBA gemachte Änderung ein Rückgängig anlegen, würde sich das erheblich auf die Performance und die Laufzeit auswirken. Deshalb wird Rückgängig deaktiviert.
Du musst dir also überlegen was dir wichtiger ist: Entweder Minuszeichen oder der Rückgängig-Befehl. Beides geht nicht. Oder doch? Lege ein neues Tabellenblatt mit dem Namen "Sicherung" an (Wichtig!) und ersetze mal testweise den Code in Tabelle1 durch diesen hier:
Dim oldTarget As Range
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:W200")) Is Nothing Then
If Target.Cells(1) = "" Then
Application.EnableEvents = False
Set oldTarget = Target
Target.Value = "-"
Application.OnUndo "Löschen rückgängig", "Tabelle1.RueckgaengigLoeschen"
Application.EnableEvents = True
Else
Sheets("Sicherung").Range(Target.Address).Value = Target.Value
End If
End If
End Sub
Sub RueckgaengigLoeschen()
ActiveSheet.Range(oldTarget.Address).Value = Sheets("Sicherung").Range(oldTarget.Address).Value
Application.OnRepeat "Löschen wiederholen", "Tabelle1.WiederholenLoeschen"
End Sub
Sub WiederholenLoeschen()
ActiveSheet.Range(oldTarget.Address).Value = ""
End Sub
Wenn du nun einen Wert löschst, wird im Menü Rückgängig wenigstens ein neuer Befehl zum Rückgängig machen angelegt. Wenn du den ausführst wird eine Sub ausgeführt, die aus dem Tabellenblatt Sicherung den alten Wert wiederherzuholt. Bei mir klappt das ganz gut. Wie es sich bei dir verhält bleibt abzuwarten.
Sollte dein Sheet nicht Tabelle1 heißen musst du den Namen im OnUndo- bzw. OnRepaet Befehl enstprechend anpassen.
Gruß Mr. K.