Hola, a raíz de una pregunta de un compañero del foro, sobre la obtención de fechas a partir de cadenas de texto, hice una función que creo que resuelve el problema.
Espero que se diviertan mejorandola como me divertí yo creándola.
Código:
'' Returns the date from a string, if mode is not pased the deafult values is DMY
Public Function toDate(s As String, Optional sMode As String = "DMY") As Date
Dim p As Integer '' position of the year 0 or 2
Dim a As String[]
Dim dt As Date
Dim ix As Integer
If InStr(s, " ") Then
s = Split(s, " ")[0]
Endif
If InStr(s, "/") > 0 Or InStr(s, "-") > 0 Then
If InStr(s, "/") > 0 Then
a = Split(s, "/")
Else
a = Split(s, "-")
Endif
For ix = 0 To a.Max
If Len(a[ix]) = 1 Then
a[ix] = "0" & a
Endif
Next
If Len(a[0]) = 4 Then
dt = Date(CInt(a[0]), CInt(a[1]), CInt(a[2])) ' ISO
Else
If Len(a[0]) = 2 And Len(a[1]) = 2 And Len(a[2]) = 2 Then
' Acá esta el problema pues la fecha puede ser MM/DD/YY (EEUU), DD/MM/YY (Europa), YY/MM/DD (Japón)
Select Upper(sMode)
Case "DMY" ' Europe
dt = Date(CInt(a[2]), CInt(a[1]), CInt(a[0]))
Case "MDY" ' EEUU
dt = Date(CInt(a[2]), CInt(a[0]), CInt(a[1]))
Case "YMD" ' Japón
dt = Date(CInt(a[0]), CInt(a[1]), CInt(a[0]))
End Select
Endif
Endif
Endif
Return dt
End