Datediff, mostrar diferencia entre fechas con meses y dias. Excel VBA

Resulta que tengo un codigo para calcular la diferencia entre 2 fechas. El único problema que tengo es que solo he logrado que se muestren los resultados o en meses o dias. Actualmente tengo puesto que el resultado lo devuelva en dias.

Como podria hacer que el resultado me lo mostrara en meses y dias si es necesario

Ej: si la diferencia de dias da como resultado 73 dias que en vez de aparecer 73 dias salga 9 meses y 19 dias.
Los resultados superiores a 30 dias me convendrian que salieran de forma mixta ( #mes y #dia)

Este es el codigo que calcula esto en concreto:

diferencia_dies.Caption = DateDiff("d", FechaComanda, data)

y se encuenta dentro de este codigo condicional

Dim FechaEntrega, FechaComanda As String
FechaEntrega = list_historial.List(, 5)
FechaComanda = list_historial.List(, 0)
If FechaEntrega = "NO CONFIRMADA" Then
diferencia_dies.Caption = ""
diferencia_dies.Caption = DateDiff("d", FechaComanda, data)
Text_dies.Caption = ""
Text_dies.Caption = "DIES" + vbCr + vbCr + "desde la" + vbCr + "COMANDA "
senyal.BackColor = RGB(255, 0, 0)
Else
diferencia_dies.Caption = ""
diferencia_dies.Caption = DateDiff("d", FechaEntrega, data)
Text_dies.Caption = ""
Text_dies.Caption = "DIES" + vbCr + vbCr + "desde la" + vbCr + "RECEPCIÓ"
senyal.BackColor = RGB(0, 128, 0)
End If

Como podria hacer para que las fechas superiores a 1 mes salieran  en un formato MES y DIA?

1 respuesta

Respuesta
2

Ej: si la diferencia de dias da como resultado 73 dias que en vez de aparecer 73 dias salga 9 meses y 19 dias.

¿Cómo obtuviste el resultado de 9 meses y 19 días para 73 días?

Si divides 73 entre 30 días que tiene un mes, el resultado sería:

2 meses y 13 días.

Si lo anterior es correcto, entonces prueba esto:

  Dim FechaEntrega As String, FechaComanda As String, data As Variant
  Dim diff As Long, difMes As Long, DifDia As Long
  FechaEntrega = list_historial.list(, 5)
  FechaComanda = list_historial.list(, 0)
  Text_dies.Caption = ""
  diferencia_dies.Caption = ""
  If FechaEntrega = "NO CONFIRMADA" Then
    diff = DateDiff("d", FechaComanda, data)
    Text_dies.Caption = "DIES" + vbCr + vbCr + "desde la" + vbCr + "COMANDA "
    senyal.BackColor = RGB(255, 0, 0)
  Else
    diff = DateDiff("d", FechaEntrega, data)
    Text_dies.Caption = "DIES" + vbCr + vbCr + "desde la" + vbCr + "RECEPCIÓ"
    senyal.BackColor = RGB(0, 128, 0)
  End If
  difMes = Int(diff / 30)
  DifDia = diff - difMes * 30
  diferencia_dies = difMes & " Meses y " & DifDia & " Días"

Hola Dante, tines toda la razon, no se de donde saque el calculo este, pero sí la solución son 2 meses y 13 dias como dices. 

He intentado aplicar las modificaciones que me propones y me da un resultado negativo en meses

He intentado arreglarlo pero no lo he logrado, que debo cambiar?

Private Sub list_historial_AfterUpdate()
Dim FechaEntrega, FechaComanda As String
Dim data As Variant
Dim diff As Long, difMes As Long, DifDia As Long
FechaEntrega = list_historial.List(, 5)
FechaComanda = list_historial.List(, 0)
Text_dies.Caption = ""
diferencia_dies.Caption = ""
If FechaEntrega = "NO CONFIRMADA" Then
    diff = DateDiff("d", FechaComanda, data)
    Text_dies.Caption = "DIES" + vbCr + vbCr + "desde la" + vbCr + "COMANDA "
    senyal.BackColor = RGB(255, 0, 0)
Else
    diff = DateDiff("d", FechaEntrega, data)
    Text_dies.Caption = "DIES" + vbCr + vbCr + "desde la" + vbCr + "RECEPCIÓ"
    senyal.BackColor = RGB(0, 128, 0)
End If
difMes = Int(diff / 30)
DifDia = diff - difMes * 30
diferencia_dies = difMes & " Meses y " & DifDia & " Días"
End Sub

Qué tienes en la variable "data" veo que la declaras pero no veo en dónde le pones algún valor.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas