Nesse vídeo demonstro como é possível ordenar dados de uma coluna de um listview, seja por ordem alfabética, ordem numérica ou por data.
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim Item As ListItem
Dim j, f, i As Long
Dim k As Variant
' Ordenação por datas
If ColumnHeader.Index = 2 Then
For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = _
CDec(CDate(ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text))
Next i
End If
'Ordenação por Valor
If ColumnHeader.Index = 4 Then
With ListView1
For i = 1 To ListView1.ListItems.Count
For j = i + 1 To ListView1.ListItems.Count
If Val(.ListItems(i).ListSubItems(ColumnHeader.Index - 1)) > Val(.ListItems(j).ListSubItems(ColumnHeader.Index - 1)) Then
k = ListView1.ListItems(i).Text
ListView1.ListItems(i).Text = ListView1.ListItems(j).Text
ListView1.ListItems(j).Text = k
For f = 1 To ListView1.ColumnHeaders.Count - 1
k = ListView1.ListItems(i).ListSubItems(f)
ListView1.ListItems(i).ListSubItems(f).Text = ListView1.ListItems(j).ListSubItems(f).Text
ListView1.ListItems(j).ListSubItems(f).Text = k
Next f
End If
Next j
Next i
End With
Exit Sub
End If
With ListView1
.SortKey = ColumnHeader.Index - 1
.Sorted = True
If .SortOrder = lvwDescending Then
.SortOrder = lvwAscending
Else
.SortOrder = lvwDescending
End If
End With
If ColumnHeader.Index = 2 Then
For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = _
Format(CDate(ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text), "DD/MM/YYYY")
Next i
End If
End Sub