VBA: Problema con variables fecha en Access

He creado un código con VBA para importar extractos bancarios según la norma AEB34, de un archivo con formato txt. El archivo origen tiene el siguiente formato:

El código es el siguiente:

Private Sub Importar_Extracto_Click()
Dim Num_Linea As String
Dim Fecha_Operacion As Variant
Dim Fecha_Valor As String
Dim Fecha_Valor1 As Variant
Dim Fecha_Valor2 As Date
Dim Debe_Haber As String
Dim Importe As String
Dim Descripcion As String
Dim Ruta_Extracto1 As String
Dim Var_Id_Extracto As Long
Ruta_Extracto1 = Me![Ruta_Extracto]
Var_Id_Extracto = Me![Id_Extracto]
Open Ruta_Extracto1 For Input As #1
While Not EOF(1)
Line Input #1, strlinea
Num_Linea = Mid(strlinea, 1, 2)
If Num_Linea = "22" Then
    Fecha_Valor = Mid(strlinea, 17, 6)
    Fecha_Valor = Mid(strlinea, 21, 2) & "/" & Mid(strlinea, 19, 2) & "/" & Mid(strlinea, 17, 2)
    Fecha_Valor1 = CDate(Format(Fecha_Valor, "dd/mm/yyyy"))
    Debe_Haber = Mid(strlinea, 28, 1)
    Importe = CDbl(Mid(strlinea, 29, 14)) / 100
    If Debe_Haber = 1 Then
        Debe_Haber = False
        Importe = Importe * (-1)
    Else
        Debe_Haber = True
    End If
ElseIf Num_Linea = "23" Then
    Descripcion = Trim(Mid(strlinea, 5, 35))
    CurrentDb.Execute ("INSERT INTO Extractos_Bancarios_Movimientos ( Id_Extracto, Fecha_Valor, Concepto, [Debe/Haber], Importe ) SELECT " & Var_Id_Extracto & " AS Expr1, #" & Fecha_Valor1 & "# AS Expr2, '" & Descripcion & "' AS Expr3, '" & Debe_Haber & "' AS Expr4, '" & Importe & "' AS Expr5;")
Else
End If
Wend
Close #1
Me![Subformulario_Movimientos_Extractos].Requery
Respuesta = MsgBox("El extracto se ha exportado, ¿quieres eliminar el archico origen?", 36, "Atención")
If Respuesta = vbYes Then
    Kill Ruta_Extracto1
Else
End If
End Sub

El problema es que las fechas a veces me las coge bien, pero a veces no. El resultado es el siguiente:

Los tres primeros registros son correctos, pero luego convierte mal las fechas

¿A qué puede deberse?

Respuesta
2

Al trabajar con fechas en una SQL has de usar el formato americano para evitar este tipo de errores. Cambia tu línea por esta otra:

 CurrentDb.Execute ("INSERT INTO Extractos_Bancarios_Movimientos ( Id_Extracto, Fecha_Valor, Concepto, [Debe/Haber], Importe ) SELECT " & Var_Id_Extracto & " AS Expr1, #" & Format(Fecha_Valor1,"mm/dd/yyyy") & "# AS Expr2, '" & Descripcion & "' AS Expr3, '" & Debe_Haber & "' AS Expr4, '" & Importe & "' AS Expr5;")

Saludos!


1 respuesta más de otro experto

Respuesta
1

Como te menciona Sveinbjorn El Rojo, cambia el acomodo de fechas... el estándar es yy/mm/dd (año/mes/dia) y cuida la línea de llamada en la BD como en tu variable fecha_valor1.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas