I replied earlier, but somehow it did not go through.
1) Take a look at sharing workbooks (Tools > Share workbook)
2) Below is a simple code I used to flag when the latest change on a line occured. You can expand this to record every cell on a log on another sheet (or add to a string in a cell on the same row of the same sheet). Obviously, if you log from the inception of the sheet, then you can search that log to see the previous value(s) and compare it. I don't know how this would fair with multiple concurrent users (the native excel sharing is probably best for that.) But for multiple, one at a time users, you could record their name with the data.
3) You can obviously e-mail or otherwise notify users of changes. search this board for info on sending e-mails & MrExce tip#16.
Sub Worksheet_Change(ByVal Target As Excel.Range)
'2002-04-24 Created by Brian West
'2002-05-05 Modified to not run when entire row selected
'2002-05-05 Modified to not run when only col 1 selected
'With concept from Mr.Excel:
http://www.mrexcel.com/tip006.shtml
'Whenever any cell on THIS SHEET changes,
'Enter the current date & time in Column A of the same row.
'NOTE: When pure text is copied from a text file and then pasted in a cell, this macro does not run!
'NOTE: This does work for copying and pasting a range of cells.
Dim c As Range
'MsgBox Target
'Exit Sub 'Exit sub while making layout changes to spreadsheet
If Target.Cells.Count < 256 Then
For Each c In Target 'Loop through each cell in the target range.
If c.Columns.Count = 1 And c.Column = 1 Then
'skip because only changed the date in A (probably tried to clear it)
Else
ThisRow = c.Row
Range("A" & ThisRow) = Format(Now, "yyyy-mm-dd") 'Enter today's date as text in column A
ActiveSheet.Range("A" & ThisRow).Rows.Calculate 'caclulate this row only
ActiveSheet.Range("C" & ThisRow).Calculate 'caclulate this cell only For some unknown reason this was not calculating based on only the previous line
'MsgBox "Should Calc This Row"
End If
Next c
End If
'Supplied Code From Mr.Excel:
'Run this macro whenever a cell changes
' If Target.Column = 1 Then
' ThisRow = Target.Row
' If Target.Value > 100 Then
' Range("B" & ThisRow).Interior.ColorIndex = 3
' Else
' Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone
' End If
' End If
'ALTERNATE FROM MS EXCEL HELP FILE:
'Occurs when cells in any worksheet are changed by the user or by an external link.
'Private Sub object_SheetChange(ByVal Sh As Object, ByVal Source As Range)
'object Application or Workbook. For more information about using events with the Application object, see Using Events with the Application Object.
'Sh A Worksheet object that represents the sheet.
'Source The changed range.
End Sub