kann man beim worksheet_change den Wert abfragen, der vor der Änderung in der geänderten Zelle stand?
Gruß Emil
Option Explicit
Public Merker
Private Sub Worksheet_Change(ByVal Target As Range)
If Merker <> "" Then
MsgBox "alterWert in Zelle " & Target.Address(0, 0) & " war " & Merker
Else
MsgBox "Zelle " & Target.Address(0, 0) & " war leer."
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
Merker = Target.Value
End Sub
Um den Wert einer Zelle vor der Änderung im Worksheet_Change-Ereignis abzufragen, kannst du folgende Schritte ausführen:
Öffne deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.
Wähle das entsprechende Arbeitsblatt im Projektfenster aus.
Füge den folgenden Code in das Codefenster des Arbeitsblattes ein:
Option Explicit
Public Merker
Private Sub Worksheet_Change(ByVal Target As Range)
If Merker <> "" Then
MsgBox "Alter Wert in Zelle " & Target.Address(0, 0) & " war " & Merker
Else
MsgBox "Zelle " & Target.Address(0, 0) & " war leer."
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
Merker = Target.Value
End Sub
Schließe den VBA-Editor und kehre zu deinem Arbeitsblatt zurück.
Teste die Funktion, indem du eine Zelle auswählst, ihren Wert änderst und beobachtest, ob die vorherige Eingabe im Meldungsfeld angezeigt wird.
Fehler: "Komponente nicht gefunden"
Fehler: Meldung zeigt keinen alten Wert
Merker-Wert korrekt gesetzt wird. Achte darauf, dass der Worksheet_SelectionChange-Code ausgeführt wird, bevor du die Zelle änderst.Eine alternative Methode besteht darin, den Wert in einer versteckten Zelle zu speichern, bevor die Änderung erfolgt. Du könntest den alten Wert in einer benachbarten Zelle sichern, wobei das Vorgehen ähnlich bleibt.
Worksheet_Change und Worksheet_SelectionChange Ereignisse, um die alten Werte in diese Spalte zu übertragen.Angenommen, du hast ein Arbeitsblatt mit Verkaufszahlen in Spalte A. Um die alten Werte in Spalte B zu speichern, könntest du folgenden Code verwenden:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("A:A")) Is Nothing Then
Me.Cells(Target.Row, 2).Value = Merker
End If
End Sub
Hier wird der alte Wert in die Spalte B geschrieben, wenn sich der Wert in Spalte A ändert.
Verwende Application.EnableEvents = False am Anfang deiner Worksheet_Change-Prozedur, um rekursive Aufrufe zu vermeiden. Vergiss nicht, es am Ende wieder auf True zu setzen.
Nutze Fehlerbehandlungsroutinen, um unerwartete Probleme zu behandeln und sicherzustellen, dass der Code reibungslos läuft.
1. Kann ich den alten Wert auch in einer anderen Arbeitsmappe abfragen?
Antwort: Ja, du kannst den Wert in einer anderen Arbeitsmappe speichern, indem du die Referenz zur Arbeitsmappe im Code anpasst.
2. Funktioniert dieser Code auch in Excel 365?
Antwort: Ja, der Code funktioniert in Excel 365 und allen anderen Versionen, die VBA unterstützen. Achte darauf, dass Makros aktiviert sind.