This feature exists in powerpoint.
http://www.howtogeek.com/howto/34395/how-to-time-your-powerpoint-slides-for-more-effective-presentations/
Edit.
For more accurate timing: this example will display timing in a messagebox, everytime you change slide..
Public Declare Function GetTickCount Lib "kernel32.dll" () As Long
Public startTime As Long
Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
If SSW.View.CurrentShowPosition = 1 Then
startTime = GetTickCount()
Else
MsgBox GetTickCount() - startTime
End If
End Sub
instead of a messagebox, put this in a file, or something.
Public Declare Function GetTickCount Lib "kernel32.dll" () As Long
Public startTime As Long
Public strPath As String
Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
Const ForReading = 1, ForWriting = 2, ForAppending = 8
strPath = "timing.txt"
Dim fs, f
If SSW.View.CurrentShowPosition = 1 Then
startTime = GetTickCount()
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.CreateTextFile("d:\testfile.txt", True)
f.WriteLine "Started new presentation"
f.Close
Else
Dim DeltaTime As Long
DeltaTime = GetTickCount() - startTime
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("d:\testfile.txt", ForAppending, TristateFalse)
f.Write "time in milliseconds since start: "
f.WriteLine Str(DeltaTime)
f.Close
End If
End Sub