Que debo hacer para un listbox y textbox mantengan la fecha y no se vuelvan decimales al momento de una búsqueda o actualización

Tengo una base de datos la cual registra fechas cuando voy hacer una búsqueda en el listbox las fechas se vuelven decimales, y ocurre nuevamente cuando voy actualizar un dato las fechas pasan a un textbox y pasan en decimales no en fecha me toca volver a digital.

2 respuestas

Respuesta
1

Sería bueno, como para ayudarte en forma precisa, que comentes/coloques como envías esos datos de fechas, tanto al "ListBox" como al "TextBox", y si son datos que originalmente están en celdas, no olvides comentar y/o mostrar como están en la celda también.

Abraham Valencia

Pues no se es mucha información no se podría mandar el archivo algún lugar o pantallazo

Si es solo pantallazo este foro permite adjuntar/incrustar imágenes, si es el archivo tendrías que subirlo a algún "Drive" y compartir el enlace. Otra cosa es solo copiar/pegar las líneas que van enviando las fechas en cuestión.

Abraham Valencia

Como se adjunta

Hummm... si te refieres a un archivo, tienes que usar "Google Drive" o "OneDrive" o "DropBox" o alguno similar. Si te refieres a una imagen, si ves arriba de donde estás escribiendo hay una barra de herramientas, solo usa la adecuada:

Abraham Valencia

Buenos días esta es la fórmula que uso para buscar en listbox ya me cuadro las fechas pero el problema ahora es las horas y envío pantallazo gracias

https://docs.google.com/document/d/13pAlF8-23creY4mHRiMu_OZXUPwhpyTSxZpDoXCAwSY/edit

Private Sub TextBox6_Change()
On Error Resume Next
Set b = Sheets("RUTAS")
uf = b.Range("A" & Rows.Count).End(xlUp).Row
If Trim(TextBox6.Value) = "" Then
Me.ListBox1.List() = b.Range("A2:L" & uf).Value
Me.ListBox1.RowSource = "RUTAS!A2:L" & uf
Exit Sub
End If
b.AutoFilterMode = False
Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear
For i = 2 To uf
STRG = b.Cells(i, 8).Value
If UCase(STRG) Like UCase(TextBox6.Value) & "*" Then

Me.ListBox1.AddItem b.Cells(i, 1)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = b.Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = b.Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = b.Cells(i, 4)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = b.Cells(i, 5)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = b.Cells(i, 6)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = b.Cells(i, 7)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = b.Cells(i, 8)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = b.Cells(i, 9)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 9) = b.Cells(i, 10)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 10) = b.Cells(i, 11)
End If
Next i
Exit Sub
Me.ListBox1.ColumnWidths = "20 pt;120 pt;60 pt;60 pt;50 pt;60 pt;130 pt;130 pt;65 pt;65 pt;65 pt;30 pt"
End Sub

Private Sub UserForm_Initialize()
Sheets("RUTAS").Visible = False
Sheets("RUTAS").Activate
For i = 1 To 12
Me.Controls("Label" & i) = Cells(1, i).Value
Next i
With ListBox1
.ColumnCount = 12
.ColumnWidths = "20 pt;120 pt;60 pt;60 pt;50 pt;60 pt;130 pt;130 pt;65 pt;65 pt;65 pt;30 pt"
End With

End Sub

Y esta es la fórmula para actualizar datos y pasa lo mismo las horas se vuelven decimales

Private Sub ACTUALIZAR_Click()
For i = 1 To 12
ActiveCell.Offset(0, i - 1).Value = Me.Controls("TextBox" & i).Value
Next i

End Sub
Private Sub UserForm_Initialize()

For i = 1 To 12
Me.Controls("TextBox" & i).Value = ActiveCell.Offset(0, i - 1).Value
Next i

End Sub

la fecha al actualizar se me invierte 05/01/2017 y al actualizar se graba 01/05/2017

Sigues sin comentar como tienes los datos en las celdas con lo que sigue siendo difícil ayudar bien/mejor.

Para el formato de las fechas, ya el amigo Dante te dio una solución (por lo menos desde lo que se te entiende.

Para las horas, suponiendo que en las celdas son horas con "cierto" formato, tendría que ser algo así:

TextBox1 = Format(Range("C1").Value, "h:mm:ss")

Pero bueno, está en tus manos que te podamos ayudar mejor.

Abraham Valencia

Respuesta
1

Si estás cargando el listbox con algo como esto:

    u = Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To u
        ListBox1.AddItem Cells(i, "A")
        ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(i, "B")    'carga fecha
    Next

Al momento de almacenar la fecha en el listbox, puedes poner un formato, de esta forma:

    u = Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To u
        ListBox1.AddItem Cells(i, "A")
        ListBox1.List(ListBox1.ListCount - 1, 1) = Format(Cells(i, "B"), "dd/mm/yyyy")
    Next

Lo mismo para pasar el dato del listbox a un textbox:

Private Sub ListBox1_Click()
    TextBox1 = Format(ListBox1.List(ListBox1.ListIndex, 1), "dd/mm/yyyy")
End Sub

Prueba y me comentas. Si solucionaste el problema, no olvides valorar la respuesta. 

Feliz año 2018 !

.

no compañero algo estoy asiendo mal cuando busco se cambia la hora a decimal y cuando tomo el dato del lixtbox pasa al textbox como decimal y al grabar la fecha se invierte 

Lo que puse son unos ejemplos, lo tienes que aplicar en tu código. Con gusto te ayudo a daptarlo a tu código. Puedes poner tu código para ver cómo cargas el listbox.

También los códigos para pasar al textbox y para pasar a la celda.

Solamente hay que poner el formato de fecha, pero necesito ver tu código para indicarte cómo hacerlo.

Ya no entendí, ¿estás tratando una fecha o una hora o ambas?

Envíame tu archivo para revisar el código.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “wilson obando

ya se lo envió gracias por su colaboración y paciencia

Te anexo el código para cuando capturas un dato en el textbox1 (conductor) en el userform "RUTAS". Observa como en la fecha y en las horas estoy poniendo el respectivo formato.

Private Sub TextBox1_Change()
    'On Error Resume Next
    Set b = Sheets("RUTAS")
    uf = b.Range("A" & Rows.Count).End(xlUp).Row
    If Trim(TextBox1.Value) = "" Then
        'Me.ListBox1.List() = b.Range("A2:M" & uf).Value
        Me.ListBox1.RowSource = "RUTAS!A2:M" & uf
        Exit Sub
    End If
    If b.AutoFilterMode Then b.AutoFilterMode = False
    Me.ListBox1.Clear
    Me.ListBox1.RowSource = Clear
    For i = 2 To uf
        STRG = b.Cells(i, 2).Value
        If UCase(STRG) Like UCase(TextBox1.Value) & "*" Then
            Me.ListBox1.AddItem b.Cells(i, 1)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = b.Cells(i, 2)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = b.Cells(i, 3)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = b.Cells(i, 4)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Format(b.Cells(i, 5), "dd/mm/yyyy")
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = b.Cells(i, 6)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = b.Cells(i, 7)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = b.Cells(i, 8)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = Format(b.Cells(i, 9), "hh:mm")
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 9) = Format(b.Cells(i, 10), "hh:mm")
            'el método additem solamente acepta 10 columnas de la 0 a la 9
            'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 10) = b.Cells(i, 11)
            'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 11) = b.Cells(i, 12)
            'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 12) = b.Cells(i, 13)
            'Me.ListBox1.List(Me.ListBox1.ListCount - 1, 13) = b.Cells(i, 14)
        End If
    Next i
    Exit Sub
    Me.ListBox1.ColumnWidths = "20 pt;120 pt;60 pt;60 pt;50 pt;60 pt;130 pt;130 pt;60 pt;60 pt;60 pt;30 pt"
End Sub

Cuando se carga el form "SALIDA"

De igual manera cuando cargo la fecha y las horas aplico el formato

Private Sub UserForm_Initialize()
    For i = 1 To 10
        Select Case i
            Case 5
                Me.Controls("TextBox" & i).Value = Format(ActiveCell.Offset(0, i - 1).Value, "dd/mm/yyyy")
            Case 9, 10
                Me.Controls("TextBox" & i).Value = Format(ActiveCell.Offset(0, i - 1).Value, "hh:mm")
            Case Else
                Me.Controls("TextBox" & i).Value = ActiveCell.Offset(0, i - 1).Value
        End Select
    Next i
End Sub

Por último, para actualizar la hoja, observa que estoy poniendo el formato "mm/dd/yyyy", eso hace que te ponga la fecha en la celda como dia/mes/año; si tuvieras problemas entonces cambia el formato a "dd/mm/yyyy"

Private Sub CommandButton1_Click()
'Actualizar
    For i = 1 To 10
        Select Case i
            Case 5
                ActiveCell.Offset(0, i - 1).Value = Format(Me.Controls("TextBox" & i).Value, "mm/dd/yyyy")
            Case 9, 10
                ActiveCell.Offset(0, i - 1).Value = Format(Me.Controls("TextBox" & i).Value, "hh:mm")
            Case Else
                ActiveCell.Offset(0, i - 1).Value = Me.Controls("TextBox" & i).Value
        End Select
    Next i
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Feliz Año 2018

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas