I have an excel spread sheet that is saved on a server, in terms of access to it there are only around 20 people with permissions to the folder, whoever is there anyway to view a history of the modifications beyond the previous Modifier

  • You'll need to tell us a lot more about your setup. What kind of server? How is the spreadsheet downloaded and uploaded? How do editors authenticate to the server? With all this information, you should ask on Super User, as your question is about achieving a functional requirement rather than a security objective. – Gilles 'SO- stop being evil' Apr 3 '13 at 12:32
  • @Gilles there might be an element of audit log here, but I agree this is some of the missing information (and, likely that even if that is what he is looking for, it is not a good solution - but that would still be ontopic....) – AviD Apr 3 '13 at 21:37

Most "servers" permit file level auditing, however this is specific to each server, and specific to each file system. These audit logs may contain the information you're looking for, but if logging hasn't been enabled, then there isn't much you can gain in retrospect.

The reason I put "servers" in quotes is because there is a different amount of features available for NTFS clients connecting to a NAS vs a Windows based server. Namely the Linux based variants may contain a different amount of audit granularity than the Windows based file servers.


You could add some VBA to the file, and set it to run on save. This writes to a worksheet called "log". Add this to the ThisWorkbook module. You would need to make sure the spreadsheet is saved as a .xlsm and that users have macros enabled.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim CurrentUser As String
Dim CurrentDttm As Date

CurrentUser = Application.UserName
CurrentDttm = Format(Now, "yyyy/mm/dd hh:mm")

LastRowWithData = Sheets("log").Range("A1").End(xlDown).Row

If LastRowWithData > 65000 Then
    LastRowWithData = 1
End If

Sheets("log").Range("A" & LastRowWithData + 1).Value = CurrentDttm
Sheets("log").Range("B" & LastRowWithData + 1).Value = CurrentUser

End Sub

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy