Option Explicit<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)<o:p></o:p>
'NEEDS MORE TESTING<o:p></o:p>
'Date Stamp last changes specified<o:p></o:p>
'Records: Date stamps last specified number of times specified cells have changed<o:p></o:p>
' Number of times cell has changed<o:p></o:p>
' Cell address<o:p></o:p>
' Change from value<o:p></o:p>
' Chnnge to value<o:p></o:p>
'Include header optional<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
Dim DateStamp As Integer<o:p></o:p>
Dim ChangeTo As Variant<o:p></o:p>
Dim ChangeFrom As Variant<o:p></o:p>
Dim DateStampNbrs As Integer<o:p></o:p>
Dim DateStampLoc As Range<o:p></o:p>
Dim rng As Range<o:p></o:p>
Dim sDateStampRange As String<o:p></o:p>
Dim sdateStampSheet As String<o:p></o:p>
Dim bHeader As Boolean<o:p></o:p>
Dim iCol As Integer<o:p></o:p>
Dim msg As String<o:p></o:p>
Dim ErrAt As String<o:p></o:p>
<o:p></o:p>
On Error GoTo ErrorHandler<o:p></o:p>
<o:p></o:p>
'Set Parameters<o:p></o:p>
DateStampNbrs = 4 'Number of changes to date stamp<o:p></o:p>
Set DateStampLoc = Sheet1.Range("B2") 'First location to record date stamps<o:p></o:p>
bHeader = True 'Include header for date stamps True/False<o:p></o:p>
sdateStampSheet = "Sheet1" 'Sheet on which cells are to be date stamped<o:p></o:p>
sDateStampRange = "A2:A1000" 'Range of cells to be date stamped<o:p></o:p>
<o:p></o:p>
If sh.Name <> sdateStampSheet Then Exit Sub<o:p></o:p>
If Intersect(Target, Sh.Range(sDateStampRange)) Is Nothing Or _<o:p></o:p>
Target.Count > 1 Then Exit Sub<o:p></o:p>
Application.ScreenUpdating = False<o:p></o:p>
Application.EnableEvents = False<o:p></o:p>
<o:p></o:p>
'Chack to see if target really changed<o:p></o:p>
ErrAt = " while cehcking cell change."<o:p></o:p>
ChangeTo = Target.Value<o:p></o:p>
Application.Undo<o:p></o:p>
ChangeFrom = Target<o:p></o:p>
Target.Offset(1).Select<o:p></o:p>
If ChangeTo = ChangeFrom Then GoTo WrapUp<o:p></o:p>
Target = ChangeTo<o:p></o:p>
<o:p></o:p>
'Build the header<o:p></o:p>
ErrAt = " while Building Header."<o:p></o:p>
If bHeader And DateStampLoc.Row > 1 Then<o:p></o:p>
For iCol = 1 To DateStampNbrs<o:p></o:p>
DateStampLoc.Offset(-1, iCol - 1) = "Date " & iCol<o:p></o:p>
Next iCol<o:p></o:p>
DateStampLoc.Offset(-1, DateStampNbrs) = "Times Changed"<o:p></o:p>
DateStampLoc.Offset(-1, DateStampNbrs + 1) = "Cell Address"<o:p></o:p>
DateStampLoc.Offset(-1, DateStampNbrs + 2) = "From"<o:p></o:p>
DateStampLoc.Offset(-1, DateStampNbrs + 3) = "To"<o:p></o:p>
End If<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
'Check date stamp first specified initial changes<o:p></o:p>
ErrAt = " while checking for first specified Date Stamps."<o:p></o:p>
For DateStamp = 1 To DateStampNbrs<o:p></o:p>
If DateStampLoc.Offset(Target.Row - 2, DateStamp - 1) = "" Then GoTo Record_DateStamp<o:p></o:p>
Next DateStamp<o:p></o:p>
<o:p></o:p>
'If reached this point then last specified days changes have been date stamped<o:p></o:p>
'Shift last four date stamps left one cell<o:p></o:p>
Target.Offset(, 2).Resize(1, DateStampNbrs - 1).Copy Target.Offset(, 1)<o:p></o:p>
DateStamp = DateStamp - 1<o:p></o:p>
<o:p></o:p>
Record_DateStamp:<o:p></o:p>
ErrAt = " while posting date stamp information."<o:p></o:p>
DateStampLoc.Offset(Target.Row - 2, DateStamp - 1).NumberFormat = "m/d/yyyy h:mm:ss AM/PM"<o:p></o:p>
DateStampLoc.Offset(Target.Row - 2, DateStamp - 1) = Now<o:p></o:p>
<o:p></o:p>
'Record number of times cell has changed, target address and last change in cell<o:p></o:p>
DateStampLoc.Offset(Target.Row - 2, DateStampNbrs) = _<o:p></o:p>
DateStampLoc.Offset(Target.Row - 2, DateStampNbrs) + 1<o:p></o:p>
DateStampLoc.Offset(Target.Row - 2, DateStampNbrs + 1) = Target.Worksheet.Name & " " & Target.Address<o:p></o:p>
DateStampLoc.Offset(Target.Row - 2, DateStampNbrs + 2) = ChangeFrom<o:p></o:p>
DateStampLoc.Offset(Target.Row - 2, DateStampNbrs + 3) = ChangeTo<o:p></o:p>
<o:p></o:p>
DateStampLoc.Offset(Target.Row - 2, DateStamp - 1).Resize(1, DateStampNbrs + 4).Columns.AutoFit<o:p></o:p>
If bHeader And DateStampLoc.Row > 1 Then<o:p></o:p>
DateStampLoc.Offset(-1).Resize(1, DateStampNbrs + 4).HorizontalAlignment = xlCenter<o:p></o:p>
DateStampLoc.Offset(-1).Resize(Rows.Count, DateStampNbrs + 4).Columns.AutoFit<o:p></o:p>
<o:p></o:p>
End If<o:p></o:p>
<o:p></o:p>
WrapUp:<o:p></o:p>
Application.EnableEvents = True<o:p></o:p>
Application.ScreenUpdating = True<o:p></o:p>
Exit Sub<o:p></o:p>
ErrorHandler:<o:p></o:p>
msg = "Error # " & Str(Err.Number) & " was generated by " _<o:p></o:p>
& Err.Source & Chr(13) & Err.Description & ErrAt<o:p></o:p>
MsgBox msg, , "Error", Err.HelpFile, Err.HelpContext<o:p></o:p>
GoTo WrapUp<o:p></o:p>
<o:p></o:p>
[FONT=Times New Roman]End Sub[/FONT]