it seems that most of the cells are "not valid" date (examle using =Month("D4") will result in #VALUE! result.
i change the sub to handle invalidate dates.
Public Sub subFmtDDMMYYYY()
Dim rw As Long, last_rw As Long
Dim vlue As Variant
Dim txt As String
Dim dte As Variant, tim As String
last_rw = Cells(Cells.Rows.Count, 4).End(xlUp).Row
For rw = 2 To last_rw
vlue = Cells(rw, 4)
txt = WorksheetFunction.Text(Cells(2, 4), "m")
If IsNumeric(txt) Then
'if numeric, it is a valid date
Cells(rw, 4) = CDate(Month(vlue) & "/" & Day(vlue) & "/" & Year(vlue)) + TimeValue(vlue)
Else
'not valid date
dte = Split(vlue, "/")
tim = Split(dte(2))(1)
dte(2) = Replace$(dte(2), tim, "")
Cells(rw, 4) = CDate(dte(1) & "/" & dte(0) & "/" & dte(2)) + TimeValue(tim)
End If
Cells(rw, 4).NumberFormat = "dd/mm/yyyy"
Next
End Sub