CALCULA IDADE - ERRO

USUARIO.EXCLUIDOS 06/04/2005 16:17:32
#77035
Boa tarde galera estou com o seguinte problema eu uso essa função para calcular a idade da pessoa só que se a pessoa tiver nascido com a data de 31 da um erro de Type mismatch. o erro ocorre na linha em vermelho.
Public Function CalcularIdade(DTNasc As Date) As String
Dim Anos As Single, Meses As String, dias As Single
Dim UTDTNasc As Date
If Month(DTNasc) <= Month(Date) Then
If Month(DTNasc) <> Month(Date) Then
UTDTNasc = Day(DTNasc) & "/" & Month(DTNasc) & "/" & Year(Format(Date, "dd/mm/yyyy"))
Else
If Day(DTNasc) <= Day(Date) Then
UTDTNasc = Day(DTNasc) & "/" & Month(DTNasc) & "/" & Year(Format(Date, "dd/mm/yyyy"))
Else
GoTo NPassou
End If
End If
Else
NPassou:
UTDTNasc = Day(DTNasc) & "/" & Month(DTNasc) & "/" & Year(Format(Date, "dd/mm/yyyy")) - 1
End If
Anos = DateDiff("yyyy", DTNasc, UTDTNasc)
Meses = DateDiff("m", UTDTNasc, Date)
If Day(Date) < Day(UTDTNasc) Then
Meses = Meses - 1
dias = DateDiff("d", DateAdd("m", -1, Day(DTNasc) & "/" & Month(Date) & "/" & Year(Format(Date, "dd/mm/yyyy"))), Date)
ElseIf Day(Date) = Day(UTDTNasc) Then
dias = 0
ElseIf Day(Date) > Day(UTDTNasc) Then
[txt-color=#ff0000] dias = DateDiff("d", Day(DTNasc) & "/" & Month(Date) & "/" & Year(Format(Date, "dd/mm/yyyy")), Date)[/txt-color] End If
CalcularIdade = Anos & " Ano(s) " & Meses & " Mês(es) " & dias & " Dia(s)"
End Function
USUARIO.EXCLUIDOS 06/04/2005 17:25:37
#77052
Tente assim amigo

Public Function CalcularIdade(DTNasc As Date) As String
Dim Anos As Single, Meses As String, dias As Single
Dim UTDTNasc As Date
If Month(DTNasc) <= Month(Date) Then
If Month(DTNasc) <> Month(Date) Then
UTDTNasc = Day(DTNasc) & "/" & Month(DTNasc) & "/" & Year(Format(Date, "dd/mm/yyyy"))
Else
If Day(DTNasc) <= Day(Date) Then
UTDTNasc = Day(DTNasc) & "/" & Month(DTNasc) & "/" & Year(Format(Date, "dd/mm/yyyy"))
Else
GoTo NPassou
End If
End If
Else
NPassou:
UTDTNasc = Day(DTNasc) & "/" & Month(DTNasc) & "/" & Year(Format(Date, "dd/mm/yyyy")) - 1
End If
Anos = DateDiff("yyyy", DTNasc, UTDTNasc)
Meses = DateDiff("m", UTDTNasc, Date)
If Day(Date) < Day(UTDTNasc) Then
Meses = Meses - 1
dias = DateDiff("d", DateAdd("m", -1, Day(DTNasc) & "/" & Month(Date) & "/" & Year(Format(Date, "dd/mm/yyyy"))), Date)
ElseIf Day(Date) = Day(UTDTNasc) Then
dias = 0
ElseIf Day(Date) > Day(UTDTNasc) Then
dias = DateDiff("d", Day(DTNasc) & "/" & Month(Date) & "/" & Year(Format(Date, "dd/mm/yyyy")), Date)
[txt-color=#0000ff]End If[/txt-color]
CalcularIdade = Anos & " Ano(s) " & Meses & " Mês(es) " & dias & " Dia(s)"
End Function


'Exemplo de uso:
Private Sub Command1_Click()
MsgBox CalcularIdade[txt-color=#0000ff](#4/9/1982#)[/txt-color]
End Sub

Os possíveis problemas estavam nos itens em azul, já foram corrigidos... tente...
USUARIO.EXCLUIDOS 06/04/2005 17:34:20
#77053
Germanir mais uma vez obrigado pela atenção
o primeiro não era o End If ele ficou na frente foi na hora que eu postei
na realidade eu eu uso o calculaidade com um text tipo:
Text1.Text = CalculaIdade(txtidade)
tentei fazer assim mas deu erro
Text1.Text = CalculaIdade(#txtidade#)
obrigado
TROVAM 06/04/2005 17:54:02
#77056
Resposta escolhida
A sua rotina pega por exemplo o dia 31/05/1981 menos [txt-color=#ff0000] 31/04/2005 [/txt-color], só que essa data à± existe. entã ovc tem q fazer da seguinte maneira:

Public Function CalcularIdade(DTNasc As Date) As String
Dim Anos As Single, Meses As String, dias As Single
Dim UTDTNasc As Date
If Month(DTNasc) <= Month(Date) Then
If Month(DTNasc) <> Month(Date) Then
UTDTNasc = Day(DTNasc) & "/" & Month(DTNasc) & "/" & Year(Format(Date, "dd/mm/yyyy"))
Else
If Day(DTNasc) <= Day(Date) Then
UTDTNasc = Day(DTNasc) & "/" & Month(DTNasc) & "/" & Year(Format(Date, "dd/mm/yyyy"))
Else
GoTo NPassou
End If
End If
Else
NPassou:
UTDTNasc = Day(DTNasc) & "/" & Month(DTNasc) & "/" & Year(Format(Date, "dd/mm/yyyy")) - 1
End If
Anos = DateDiff("yyyy", DTNasc, UTDTNasc)
Meses = DateDiff("m", UTDTNasc, Date)
If Day(Date) < Day(UTDTNasc) Then
Meses = Meses - 1

[txt-color=#0000ff] aux = IsDate(Day(DTNasc) & "/" & Month(Date) & "/" & Year(Format(Date, "dd/mm/yyyy")))

If aux = True Then
dias = DateDiff("d", DateAdd("m", -1, Day(DTNasc) & "/" & Month(Date) & "/" & Year(Format(Date, "dd/mm/yyyy"))), Date)
Else
dias = DateDiff("d", DateAdd("m", -1, (Day(DTNasc) - 1) & "/" & Month(Date) & "/" & Year(Format(Date, "dd/mm/yyyy"))), Date)
End If

[/txt-color]

ElseIf Day(Date) = Day(UTDTNasc) Then
dias = 0
ElseIf Day(Date) > Day(UTDTNasc) Then
dias = DateDiff("d", Day(DTNasc) & "/" & Month(Date) & "/" & Year(Format(Date, "dd/mm/yyyy")), Date)
End If
CalcularIdade = Anos & " Ano(s) " & Meses & " Mês(es) " & dias & " Dia(s)"
End Function

Até mais...
USUARIO.EXCLUIDOS 06/04/2005 19:30:55
#77074
Tente chamar a função por:
Text1.Text = CalculaIdade([txt-color=#0000ff]CDate(txtidade)[/txt-color])
Até mais!
USUARIO.EXCLUIDOS 06/04/2005 20:14:21
#77079
Luan:

Use esta ocx que eu fiz quando era mais novinho.

http://www.vbmania.com.br/vbmdetail.php?varID=199
Tópico encerrado , respostas não são mais permitidas