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.
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”
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
.
- Compartir respuesta
1 respuesta más de otro experto
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
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
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
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
- Compartir respuesta