Respectfully, there is no way the code you posted ever worked. Target(c).Value and PreviousValues(c) make no sense at all if c is a Range object, in addition to the errors I mentioned previously.
You could do something like this:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LR As Long
Dim x As Long, y As Long
Dim a As Range
Dim sel As Range
Dim PreviousValues As Variant
' On Error Resume Next
Application.EnableEvents = False
Set sel = Selection
Set a = Target
PreviousValues = a.Value
Application.Undo
If a.Count > 1 Then
For x = 1 To a.Rows.Count
For y = 1 To a.Columns.Count
If a.Cells(x, y) <> PreviousValues(x, y) Then
With Sheets("AuditTrail")
LR = .Cells(Rows.Count, "A").End(xlUp).Row + 1
.Cells(LR, "A").Value = Now
.Cells(LR, "B").Value = Environ("UserName")
.Cells(LR, "C").Value = ActiveSheet.Name & "!" & a.Cells(x, y).Address
If PreviousValues(x, y) = "" Then
.Cells(LR, "D").Value = "BLANK!"
Else
.Cells(LR, "D").Value = PreviousValues(x, y)
End If
If a.Cells(x, y).Value = "" Then
.Cells(LR, "E").Value = "BLANK!"
Else
.Cells(LR, "E").Value = a.Cells(x, y).Value
End If
End With
End If
Next y
Next x
Else
If a.Value <> PreviousValues Then
With Sheets("AuditTrail")
LR = .Cells(Rows.Count, "A").End(xlUp).Row + 1
.Cells(LR, "A").Value = Now
.Cells(LR, "B").Value = Environ("UserName")
.Cells(LR, "C").Value = ActiveSheet.Name & "!" & a.Address
If PreviousValues = "" Then
.Cells(LR, "D").Value = "BLANK!"
Else
.Cells(LR, "D").Value = PreviousValues
End If
If a.Value = "" Then
.Cells(LR, "E").Value = "BLANK!"
Else
.Cells(LR, "E").Value = a.Value
End If
End With
End If
End If
Target.Value = PreviousValues
sel.Select
Ending:
On Error GoTo 0
Application.EnableEvents = True
End Sub
Bookmarks