Cuando exporto datos de listbox a pdf traspone la fecha de "dd/mmmm/yyyy" por "mmmm/dd/yyyy". Porque?

es algo raro porque solo es para ciertas fechas y tienen todas el mismo codifo el mismo formato.... Es mu raro.

Respuesta
1

Las fechas almacenadas en un listbox se almacenan como tipo texto, tienes que convertirlas a tipo fecha.

No sé exactamente cómo estás pasando tus datos de listbox a pdf, si estás pasando registro por registro y campo por campo del listbox a una hoja.

Cuando pases el campo de la fecha utiliza lo siguiente:

cells(fila, "F") = cdate(listbox1.list(fila, 5))

Lo que te estoy poniendo es un ejemplo que debes adaptar a tu código. O pega tu código para revisarlo y ver cómo debería quedar.

Saludos. Dante Amor

Si es lo que necesitas.

Este es el código donde pasa de la listbox al pdf.

Muchas gracias

Private Sub CommandButton3_Click()

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set h1 = Sheets.Add
c = ListBox1.ColumnCount
f = ListBox1.ListCount + 1
'
h1.Range(h1.Cells(2, 1), h1.Cells(f, c)) = ListBox1.List
h1.Range("A1:E1") = Array("DNI", "APELLIDOS Y NOMBRE", "TELEFONO", "FECHA REALIZACION", "TIPO DE DOCUMENTO")
h1.Cells.EntireColumn.AutoFit
h1.PageSetup.Orientation = xlLandscape
h1.Range("A1:H1").Font.Bold = True
'
With Application.FileDialog(msoFileDialogSaveAs)
.Title = "Exportar archivo a PDF"
.AllowMultiSelect = False
.FilterIndex = 25
If .Show Then
march = .SelectedItems(1)
h1.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=march, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True
End If
End With
'
h1.Delete
Unload Me
UserForm1.Show

End Sub

Dante Amor me acabo de dar cuenta que solo pasa en las dos primeras líneas.

Antes de pasar los datos a la hoja, pon el formato de la columna fecha con un formato de fecha dd/mmmm/año

Prueba con fechas como 2 de junio, 5 de agosto.

Si no funciona, entonces hay que cambiar la forma de pasar los datos del list a la hoja

¿Y cómo crees que es mejor cargar los datos a la listbox? Porque he puesto el formato a la comuna y nada sigue igual, lo extraño es que solo le pasa a las dos primeras líneas del listbox el resto sale ok.

No entiendo por qué solamente en algunos casos. Te comento por qué la fecha se convierte a formato mes/día/año. Como sabrás VBA está desarrollado en lenguaje inglés, por lo tanto, el formato original de fecha es mes/día/año, entonces, como el dato que está almacenado en el listbox o combobox o textbox, es un texto, internamente VBA cuando lo pasa a una celda del tipo fecha, asume que debe ser mes/día/año. Esto transforma tu fecha de día/mes/año, si tienes 4 de junio de 2015, entonces te pone 6 de abril de de 2015. Para arreglarlo, hay que forzar a ese texto a que conserve la fecha como la queremos.

Después de la extensa explicación, la alternativa que veo es que cambies esto:

H1. Range(h1. Cells(2, 1), h1.Cells(f, c)) = ListBox1. List

Por este código:

Private Sub CommandButton3_Click()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set h1 = Sheets.Add
    '
    'c = ListBox1.ColumnCount
    'f = ListBox1.ListCount + 1
    'h1.Range(h1.Cells(2, 1), h1.Cells(f, c)) = ListBox1.List
    j = 2
    For i = 0 To ListBox1.ListCount - 1
        H1.Cells(j, "A") = ListBox1.List(i, 0)
        H1.Cells(j, "B") = ListBox1.List(i, 1)
        H1.Cells(j, "C") = ListBox1.List(i, 2)
        H1.Cells(j, "D") = CDate(ListBox1.List(i, 3))
        H1.Cells(j, "E") = ListBox1.List(i, 4)
        j = j + 1
    Next
    h1.Range("A1:E1") = Array("DNI", "APELLIDOS Y NOMBRE", "TELEFONO", "FECHA REALIZACION", "TIPO DE DOCUMENTO")
    h1.Cells.EntireColumn.AutoFit
    h1.PageSetup.Orientation = xlLandscape
    h1.Range("A1:H1").Font.Bold = True
    '
    With Application.FileDialog(msoFileDialogSaveAs)
        .Title = "Exportar archivo a PDF"
        .AllowMultiSelect = False
        .FilterIndex = 25
        If .Show Then
            march = .SelectedItems(1)
            h1.ExportAsFixedFormat Type:=xlTypePDF, _
            Filename:=march, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, OpenAfterPublish:=True
        End If
    End With
    '
    h1.Delete
    Unload Me
    UserForm1.Show
End Sub

En esta línea le estoy diciendo que convierta el texto a fecha

h1.Cells(j, "D") = CDate(ListBox1.List(i, 3))

Si no te funciona, cambia esa línea por esta:

H1.Cells(j, "D") = Format(ListBox1.List(i, 3), "mm/dd/yyyy")


Saludos. Dante Amor

Recuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas