You'd use Application.Undo if you wanted to retrieve the value that was in A1.
But it sounds like you want to use A1 as an input cell and then just move things
to the bottom of that column.
If that's the case, you could use:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim DestCell As Range
Dim NewVal As Variant
With Target
If .Cells.Count > 1 Then Exit Sub
If .Value = "" Then Exit Sub
If Intersect(.Cells, Me.Range("a1")) Is Nothing Then
Exit Sub
End If
On Error GoTo ErrHandler:
NewVal = .Range("a1").Value
Set DestCell _
= .Parent.Cells(.Parent.Rows.Count, "A").End(xlUp).Offset(1, 0)
Application.EnableEvents = False
DestCell.Value = NewVal
'clear for next time???
.Value = ""
End With
ErrHandler:
Application.EnableEvents = True
End Sub
If you really wanted to keep that existing value, you could use:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim DestCell As Range
Dim NewVal As Variant
With Target
If .Cells.Count > 1 Then Exit Sub
If .Value = "" Then Exit Sub
If Intersect(.Cells, Me.Range("a1")) Is Nothing Then
Exit Sub
End If
On Error GoTo ErrHandler:
NewVal = .Range("a1").Value
Set DestCell _
= .Parent.Cells(.Parent.Rows.Count, "A").End(xlUp).Offset(1, 0)
With Application
.EnableEvents = False
.Undo
End With
DestCell.Value = NewVal
End With
ErrHandler:
Application.EnableEvents = True
End Sub