Campo que no tiene valor #¡Tipo!

Tengo un formulario que tienen un campo calculado que me dice el tiempo que ha pasado entre dos fechas.

Si tengo las dos fechas no hay problema pero si no tengo una de las dos fechas como no puede calcualar el tiempo que ha pasado me sale #¡Tipo! ¿Podría dejarmelo en blanco o que pusiese un mesaje de "no hay fecha fin"'? Como lo podría hacer.

1 Respuesta

Respuesta
2

Puedes intentarlo con la función siinm(), algo así :

SiInm( EsNulo(fechafin); "no hay fecha fin"; aquí tu expresión)

Muchas gracias pero no se muy bien como se utiliza.

¿Lo tengo que poner a continuación de función de calcular?

Es un campo calculado  con la siguiente función =fncDiferenciaFechas([inicio];[fin])

Muchas gracias y perdona con mi desconicimiento

Pues como te decía, y ya que creo que haces el cálculo directamente en el origen del control del cuadro de texto, sería:

=SiInm( EsNulo([fin]); "no hay fecha fin"; fncDiferenciaFechas([inicio];[fin]))

Al usar una función personalizada, como fncDiferenciaFechas (que tiene pinta de que la sacaste de alguna de mis otras respuestas), tendrías otras dos opciones:

1º/ Modificar la propia función para que valide internamente si existen las dos fechas y devuelva un resultado u otro. Aquí no te puedo decir a ciencia cierta, porque no sé exactamente cual es la función que usas, pero podrías hacer algo así:

'--------------------------------------------------------------------------------------------
' Función para calcular la diferencia entre fechas en años, meses y días
'--------------------------------------------------------------------------------------------
Public Function fncDiferenciaFechas(laFechaIni As Variant, laFechaFin As Variant) As String
Dim vAño As Double
Dim vMes As Double
Dim vDia As Double
Dim temp As Date
'Si no se metió alguna de las dos fechas, salimos sin más
If IsNull(laFechaIni) Or IsNull(laFechaFin) Then
    fncDiferenciaFechas = ""  ' Aquí puedes poner un texto en vez de dejarlo en blanco
    Exit Function
End If
'Comprobamos que la fecha inicial sea más antigua que la final
If laFechaIni > laFechaFin Then
    temp = laFechaIni
    laFechaIni = laFechaFin
    laFechaFin = temp
ElseIf laFechaIni = laFechaFin Then 'Si las dos fechas son la misma
    fncDiferenciaFechas = "0 días"
    Exit Function
End If
'Calculas la diferencia en años
If Month(laFechaIni) > Month(laFechaFin) Then
    vAño = DateDiff("yyyy", laFechaIni, laFechaFin) - 1
Else
    vAño = DateDiff("yyyy", laFechaIni, laFechaFin)
End If
'Calculas la diferencia en meses
If Day(laFechaIni) > Day(laFechaFin) Then
    vMes = DateDiff("m", DateAdd("yyyy", vAño, laFechaIni), laFechaFin) - 1
    If vMes < 0 Then
        vMes = 12 + vMes
        vAño = vAño - 1
    End If
Else
    vMes = DateDiff("m", DateAdd("yyyy", vAño, laFechaIni), laFechaFin)
End If
'Calculas la diferencia en días
vDia = DateDiff("d", DateAdd("m", vAño * 12 + vMes, laFechaIni), laFechaFin) ' Mod 7
'Construyes la expresión
If vAño = 1 Then
    fncDiferenciaFechas = vAño & " año"
ElseIf vAño > 1 Then
    fncDiferenciaFechas = vAño & " años"
End If
If vMes = 1 Then
    fncDiferenciaFechas = IIf(fncDiferenciaFechas = "", "", fncDiferenciaFechas & " y ") & vMes & " mes"
ElseIf vMes > 1 Then
    fncDiferenciaFechas = IIf(fncDiferenciaFechas = "", "", fncDiferenciaFechas & " y ") & vMes & " meses"
End If
If vDia = 1 Then
    fncDiferenciaFechas = IIf(fncDiferenciaFechas = "", "", fncDiferenciaFechas & " y ") & vDia & " día"
ElseIf vDia > 1 Then
    fncDiferenciaFechas = IIf(fncDiferenciaFechas = "", "", fncDiferenciaFechas & " y ") & vDia & " días"
End If
End Function

2º/ Hacer la validación previamente a la llamada a la función, por ejemplo (por código):

If Isnull(me.Fin) Then

Me.txtCampo=""  'o el texto que quieras

Else

Me.txtCampo=FncDiferenciaDias(Me.Inicio,Me.Fin)

End If

¡Gracias! He optado por la primera opción. Funciona fenomenal...

La función creo que si es tuya que la saque de alguna pregunta

Mil gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas