HillTJ
To train a dog, first know more than the dog..
- Local time
- Today, 07:56
- Joined
- Apr 1, 2019
- Messages
- 731
Hi, I'm considering using field column History for capturing changes to a record 'Notes' on form 'frmPersons'. The record source is 'tblPersons'. I found this code by Googling and like the fact that it generates the history to a listbox. Code ceases where I attempt to parse datDate about 2/3 down the code (highlighted in orange). A type mismatch that I don't understand.
Appreciate some help. I'd also like the date to be displayed in dd/mm/yy format.
Cheers
Appreciate some help. I'd also like the date to be displayed in dd/mm/yy format.
Cheers
Code:
Private Sub ShowColumnHistory(strTableName As String, strFieldName As String)
'History data is in this format:
'[Version: Date Time ] History Data
Const VERSION_PREFIX As String = "[Version: "
Dim strHistory As String
Dim strHistoryItem As String
Dim astrHistory() As String
Dim lngCounter As Long
Dim datDate As Date
Dim datTime As Date
Dim strData As String
'Get the column history
'strHistory = Application.ColumnHistory(strTableName, strFieldName, "")
strHistory = ColumnHistory("tblPersons", "Notes", "[PersonID]=" & Nz([PersonID], 0))
'Make sure there is history data
If Len(strHistory) > 0 Then
'Parse the column history into separate items.
'Each item in the history is separated by a vbCrLf, but
'if there are carriage-returns in the memo field data
'you will get unexpected results. Split on the VERSION string
'in the history data.
astrHistory = Split(strHistory, VERSION_PREFIX)
'Adding these lines ensures this code works regardless of
'how the control is configured on the form
Me.lstHistory.RowSourceType = "Value List"
Me.lstHistory.ColumnCount = 3
Me.lstHistory.ColumnHeads = True
'Add column headings to the list box
Me.lstHistory.AddItem "Date;Time;History"
'Enumerate the history data in reverse
'to fill the list box in descending order
For lngCounter = UBound(astrHistory) To LBound(astrHistory) Step -1
'Parse the history data
strHistoryItem = astrHistory(lngCounter)
If Len(strHistoryItem) > 0 Then
'Parse the date from the history data.
'This example parse the default US date format.
datDate = CDate(Left(strHistoryItem, InStr(strHistoryItem, " ") - 1)) ' runtime error 13 type mismatch parses out date 12:00 AM
strHistoryItem = Mid(strHistoryItem, InStr(strHistoryItem, " ") + 1)
'Parse the time from the history data
datTime = CDate(Left(strHistoryItem, InStr(strHistoryItem, " ] ") - 1))
strHistoryItem = Mid(strHistoryItem, InStr(strHistoryItem, " ] ") + 3)
'Add the history item to the list box.
Me.lstHistory.AddItem datDate & ";" & datTime & ";" & strHistoryItem
End If
Next
Else
MsgBox "There is no history information for the specified field"
End If
End Sub