Diferencia de días con datediff vba

Chicos estoy intentando encontrar la diferencia de días entre 2 fechas.
Una fecha esta en un datepicker y otra fecha esta en un listbox (en la columna A junto con más registros)
El código que uso es el siguiente

Dim DiasUltimoPedido As Date
Dim dias
DiasUltimoPedido = Me.list_historial.List(Me.list_historial.ListCount - 1, 0)
dias = "" & DateDiff("d", data.value, DiasUltimoPedido)
diferencia_dies.Caption = dias
'El valor dado ha de ir en el label diferencias_dies.caption 

El problema que me encuentro es que no escoje el primer registro, sino el último. (La tabla esta ordenada de mas recientes a mas antiguos, por lo tanto escoje el registro mas antiguo en vez del mas nuevo)
Primero de todo me gustaría saber como podría ordenar un listbox por orden descendete (en fecha) y luego que parte del código podría cambiar para que eligiera la fecha más próxima al día de hoy.

2 Respuestas

Respuesta
2

Si con esta línea:

DiasUltimoPedido = Me.list_historial.List(Me.list_historial.ListCount - 1, 0)

te coge el último item del listbox, yo lo pondría así, para que coja el primero:

DiasUltimoPedido = Me.list_historial.List(0, 0)

o así (no sé seguro si en excel los cuadros de lista son base 0 o base 1)

DiasUltimoPedido = Me.list_historial.List(1, 0)
DiasUltimoPedido = Me.list_historial.List(0, 0)

Esta es la opción que me ha funcionado sin problemas, muchas gracias.
¿Cómo podría ordenar los datos de la primera columna del listbox de manera descendente?
Así siempre la primera columna de la primera fila sera el más reciente

Lo siento, pero Excel no es mi campo de "experiencia" y desconozco cómo se cargan los datos a un listbox y las distintas propiedades y métodos que tienen sus objetos (que no siempre coinciden con los de Access, que sí domino).

Imagino que una opción será que ordenes en la hoja los datos antes de cargarlos. Otra podría ser pasar los datos a un array, y usando el método de la burbuja, por ejemplo, ordenarlos como quieras y luego cargarlos al listbox.

Cualquier solución que yo te ofreciera sería una copia-pega de una búsqueda en google...

Respuesta
2

Anticipo que no tengo ni idea de Excel, absolutamente nada, pero por si te sirve

El DatePicker se llama DtPicker7, el cuadro de lista se llama Lista8 y la etiqueta se llama Etiqueta12

El código del evento Después de actualizar del cuadro de lista es

Private Sub Lista8_AfterUpdate()
Dif = DateDiff("d", Lista8, DTPicker7)
Etiqueta12.Caption = "Son " & DateDiff("d", Lista8, DTPicker7) & " días de diferencia"
End Sub

Para ordenarlos ascendente los valores de fecha del cuadro de lista bastaría con poner en su origen de la fila algo como

SELECT Fecha, Cliente FROM NoContestar ORDER BY Fecha DESC;

ó si lo quieres ascendente

SELECT Fecha, Cliente FROM NoContestar ORDER BY Fecha ;

Muchas gracias Icue. He adaptado el código al evento y me funciona pero no como quisiera.


La parte de ordenar el listbox no consigo que funcione de ninguna de las maneras.


Por lo que respecta la diferencia de días entre 2 fechas me funciona pero no del modo que quisiera. Para que salga la diferencia de hora tengo que pulsar encima de la fila del listbox. Me gustaría que automáticamente fuera a la primera fila de listbox (ya que previamente estará ordenado de manera descendente) y así hacer el calculo con la fecha más reciente.
Actualmente me hace el calculo, pero debo hace click encima de la fecha.
Muchas gracias

Si no quieres tener que poner el cursor el el cuadro de lista puedes hacerlo poniendo el código en el evento Al activar registro del formulario, o en el evento Al Cargar. Por ejemplo

Cuando abro el formulario, pero como te decía puede ser en cualquier otro Evento, le tengo puesto

Private Sub Form_Current()
Lista8.SetFocus
Dim var
Etiqueta12.Caption = "Son " & DateDiff("d", "" & Me.Lista8.ItemData(var) & "", DTPicker7) & " días de diferencia"
End Sub

Y como puedes ver me coge la primera fecha del cuadro de lista.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas