Cálculo de idade - anos, meses e dias

Utilizei aqui, determinadas funções nativas do Access e fiz algumas combinações para obter a idade completa de uma pessoa.   O help do VBA fornece explicações detalhadas para cada uma destas funções! Sugiro que você assista a vídeo-aula deste meu artigo para conhecer a melhor forma de estudar o Access!  

Conheça um pouquinho das funções aqui utilizadas:

Date() Retorna à data atual do sistema. 
Year() Obtém o ano da data informada.

year(date) :::> retorna ao ano corrente.
dateDiff() Retorna a um intervalo de tempo entre duas datas específicas.
 

Retorna 1 ano:  dateDiff("yyyy",#15/05/2011#,#20/05/2012#)

Retorna 371 dias:  dateDiff("d",#15/05/2011#,#20/05/2012#)

dateSerial() Monta uma data específica. Sua estrutura: dateSerial(ano,mês,dia)

Exemplo: dateSerial(2012,05,18) :::> retorna 18/05/2012
 

Esta função é ótima para nos fornecer o último dia do mês, que pode ser 28,29,30 ou 31:

O primeiro dia do mês corrente:  DateSerial(Year(Date), Month(Date), 1)

O último dia do mês corrente: DateSerial(Year(Date), Month(Date) + 1, 0) 

O primeiro dia do mês anterior: DateSerial(Year(Date), Month(Date) - 1, 1)

O último dia do mês anterior:  DateSerial(Year(Date), Month(Date), 0)
 

Cdbl() Função que transforma uma expressão em um número do tipo Double.

 

Você sabia que a data e a hora, na verdade, são tratadas como número pelo Access?

Cdbl(#29/04/2012#) :::> retorna 41028

Cdbl(#13:53#) :::> retorna 0,578472222222222

Observe o resultado, se eu informar a date e a hora ao mesmo tempo:

Cdbl(#29/04/2012 13:53#) :::> retorna 41028,5784722222

A parte inteira corresponde a data e a fração corresponde as horas:

Cdbl(#07/04/2012# - #03/04/2012#) :::> retorna 122 dias

Estranhou o resultado? É que o VBA trabalha com padrão americano (mm/dd/yyyy).  O cálculo é 4 de julho menos 4 de março.

Format() Com a função format() posso obter qualquer parte de uma data.

 

format(#15/05/2012#,"dd") :::> retorna o dia 15

format(#15/05/2012#,"mm") :::> retorna o mês 05

format(#15/05/2012#,"yyyy") :::> retorna o ano 2012

format(#15/05/2012#,"mmdd") :::> retorna o mês, seguido do dia 0515

 

int() Obtém a parte inteira de um número.

 

int(41028,5784722222) :::> retorna 41028

Podemos obter a parte fracionada da seguinte forma:

(41028,5784722222 - int(41028,5784722222)) ::::> retorna 0,5784722222

1 ano = 365.25 1 ano corresponde a 365 dias + 1/4 do dia, que equivale a 365,25 dias

 

Um outro detalhe que você deve aprender sobre o VBA, é que podemos realizar perguntas e obter como resposta o valor verdadeiro ou falso.  Por exemplo, se pergunto ao VBA:

- Um é igual a zero? Ele me responderá que é Falso(False)

1=0 :::> Retorna Falso

Pergunto se 3 é maior que 2 e ele irá me responder que é Verdadeiro(true)

3 > 2 :::> retorna  Verdadeiro

False e True, na verdade, são números :::>  0 (false) e -1 (true)

Então, se montarmos o cálculo, conforme a forma abaixo:

5 + (3 = 2) :::> Isso é o mesmo que (5 + False), que é igual a (5 + 0).   Teremos como resultado o valor  5

E se montarmos o cálculo desta outra forma:

5 + (3 > 2) :::> Isso é o mesmo que (5 + true), que é igual a (5 + (-1)).   Teremos como resultado o valor 4

Veja na imagem, os valores obtidos do VBA, pela janela Verificação imediata:

Usando Access - Janela Imediata VBA

Agora que você conhece os ingredientes, vamos preparar a função para obter a idade. Vamos supor que eu tenha nascido em 15/05/1980.  Se usar a função dateDiff() para subtrair esta minha data pela data atual, posso obter a quantidade de dias. 

A data atual, utilizada para todos os cálculos abaixo, é 28/04/2012,  obtida da função date()

dateDiff("d",#15/05/1980#,date) sendo date = 28/04/2012
 
Teremos o resultado de 11671 dias

Que tal, então, dividir os 11671 dias,  pela quantidade de dias de 1 ano (365,25)?

dateDiff("d",#15/05/1980#,date)/365.25
 
Teremos o resultado de 31,9534565366188 anos

Se não for de seu interesse ter a precisão dos meses e dias, basta extrair a parte inteira, com a função int()

int(dateDiff("d",#15/05/1980#,date)/365.25) 
 
Você Terá como resultado 31 anos

Agora, vamos aprender como obter os meses. 

Observe bem que quero calcular apenas os meses restantes, porque os 31 anos completos vão até a data do meu último aniversário (15/05/2011).  Então, a idéia é a de obter os meses entre 15/05/2011 e 28/04/2012.  Isto porque o meu dia/mês de aniversário, ultrapassou o dia/mês da data atual. 

E se a data do meu nascimento fosse 20/02/1980?  O meu último aniversário seria em 20/02/2012.  O intervalo para analisar os meses restantes seria entre 20/02/2012 e 28/04/2012.  A questão principal aqui é que o ano do meu último aniversário poderá cair no ano anterior ou no ano corrente, dependendo do meu dia/mês, comparado ao dia/mês da data corrente.

Para montar a data de referência para o cálculo dos meses restantes, utilizaremos a função dateSerial

dateSerial(year(date)-1,format(#15/05/1980#,"mm"),format(#15/05/1980#,"dd"))
 
Temos como resultado 15/05/2011

Como havia dito, dependendo do dia/mês de aniversário, se cair antes ou depois do dia/mês da data atual,  devemos subtrair 1 ao ano, na montagem da data :::> year(date) + (-1 ou 0)

É importante lembrar sobre a questão de obter -1 ou 0, perguntando ao VBA sobre a comparação de valores.  O que vou fazer aqui é justamente isso!  Observe a expressão:

Format(#15/05/1980#, "mmdd") > Format(Date, "mmdd")
 
Estamos perguntando ao VBA se 0515 > 0428
 
Teremos como resposta Verdadeiro (-1)
 

Vamos supor que a data do meu nascimento é 20/02/1980. 
 
Estaremos comparando 0220 > 0428. Logo, o VBA retornará Falso(0)

A montagem final da data de referência para o cálculo dos meses:

'Pergunto se o dia/mês do meu aniversário é maior que o dia/mês corrente

Resultado = (Format(#15/05/1980#,"mmdd") > Format(Date,"mmdd"))

'Monta a data do meu último Aniversário

Dref = dateSerial(year(date)+Resultado,format(#15/05/1980#,"mm"),format(#15/05/1980#,"dd"))

'Obtenho a quantidade de meses

Meses = DateDiff("m", DRef, Date) + (Format(#15/05/1980#, "dd") > Format(Date, "dd"))

Você seria capaz de me responder por que estou fazendo uma pergunta ao VBA sobre o dia, neste cálculo dos meses?  (Format(#15/05/1980#, "dd") > Format(Date, "dd")).

Vou apresentar a função completa e deixar você estudar a lógica para o cálculo dos dias.

Public Function fncIdadeCompleta(DataNascimento As Date) As String
Dim Anos As Byte, Meses, Dias As Byte, DataRef As Date
Dim Resultado as Boolean, AjustaAno as Date
 
If DataNascimento > Date Or DataNascimento = 0 Then
    fncIdadeCompleta = ""
    Exit Function
End If

If DataNascimento = Date Then
    fncIdadeCompleta = 0
    Exit Function
End If
 
'Ajusta ano bissexto
DataNascimento = IIf(Format(DataNascimento, "mm/dd") = "02/29",DataNascimento - 1,DataNascimento)
 
'Ajusta cálculo para aniversário de 1 ano
AjustaAno= IIf(DateDiff("d", DataNascimento, Date) = 365, 365.25, DateDiff("d", DataNascimento, Date))
 
Anos = Int(AjustaAno / 365.25)
 
resultado = (Format(DataNascimento, "mmdd") > Format(Date, "mmdd"))

DataRef = DateSerial(Year(Date) + resultado,Format(DataNascimento, "mm"),Format(DataNascimento,"dd"))

Meses = DateDiff("m", DataRef, Date) + (Format(DataNascimento, "dd") > Format(Date, "dd"))
 
resultado = (Format(DataNascimento, "dd") > Format(Date, "dd"))

DataRef = DateSerial(Year(Date), Format(Date, "mm") + resultado, Format(DataNascimento, "dd"))
DataRef = IIf(Format(DataNascimento, "dd") <> Format(DataRef, "dd"), DataRef - Format(DataRef, "dd"), DataRef)

Dias = CDbl(Date) - CDbl(DataRef)

fncIdadeCompleta = IIf(Anos <= 1, IIf(Anos = 0, "", Anos & " ano "), Anos & " anos ") & _
                              IIf(Meses <= 1, IIf(Meses = 0, "", Meses & " mes "), Meses & " meses ") & _
                              IIf(Dias <= 1, IIf(Dias = 0, "", Dias & " dia "), Dias & " dias ")
End Function

Veja o resultado da consulta, que ofereço no arquivo exemplo! Lembrando que a data de referência para o cálculo abaixo é 28/04/2012, extraída da função date():

Usando Access - Cálculo Idade Completa

 

Segue abaixo, o arquivo exemplo para você estudar!  Altere algumas Datas de Nascimento e analise os resultados.

 


 

 


26 comentário(s)

MARCIO MELO - RJ   29/04/2012 14:06:49

Gostei muito desse artigo, e passarei utilizar dessa sua função bem elaborada, posta + uma função q uso:
Function FormatInterval(ByVal Interval As Variant, Fmt As String)
'
' Formata a diferença entre duas datas ou soma de dois horários para mostrar
' em dias, horas, minutos e segundos
' Suporta os seguintes formatos:
' D 5 Dias
' D H 5 Days 5 Hours
' D H:MM 5 Days 5:15
' D HH:MM 5 Days 05:15
' D H:MM:SS 5 Days 5:15:45
' D HH:MM:SS 5 Days 05:15:45
' H M 125 Hours 15 Minutes
' H:MM 125:15
' H:MM:SS 125:15:45
' M S 7515 Minutes 45 Seconds
'
Dim Days As Long, Hours As Long, Minutes As Long, Seconds As Long
'
' testa para tipos Data (Date) ou dupla precisão (Double)
'
If varType(Interval) <> 7 And varType(Interval) <> 5 Then Exit Function
'
' Extrai dias
'
Days = Int(Interval)
Interval = Interval - Days
If Interval > #11:59:59 PM# Then
Days = Days + 1
Interval = 0#
End If
'
' Extrai horas
'
Interval = Interval * 24
Hours = Int(Interval)
Interval = Interval - Hours
If Interval > 3599# / 3600# Then
Hours = Hours + 1
Interval = 0#
End If
'
' Extrai minutos
'
Interval = Interval * 60
Minutes = Int(Interval)
Interval = Interval - Minutes
If Interval > 59# / 60# Then
Minutes = Minutes + 1
Interval = 0#
End If
'
' Extrai segundos
'
Seconds = Int(Interval * 60 + 0.5)
'
' Normaliza
'
If Seconds = 60 Then
Minutes = Minutes + 1
Seconds = 0
End If
If Minutes > 59 Then
Hours = Hours + 1
Minutes = Minutes - 60
End If
If Hours > 23 Then
Days = Days + 1
Hours = Hours - 24
End If
'
' Cria formato
'
Select Case Fmt
Case "D"
FormatInterval = Days & IIf(Days <> 1, " Dias ", " Dia ") '& Hours & IIf(Hours <> 1, " Horas", " Hora")
Case "D H"
FormatInterval = Days & IIf(Days <> 1, " Dias ", " Dia ") & Hours & IIf(Hours <> 1, " Horas", " Hora")
Case "D H:MM"
FormatInterval = Days & IIf(Days <> 1, " Dias ", " Dia ") & Hours & ":" & Format(Minutes, "00")
Case "D HH:MM"
FormatInterval = Days & IIf(Days <> 1, " Dias ", " Dia ") & Format(Hours, "00") & ":" & Format(Minutes, "00")
Case "D H:MM:SS"
FormatInterval = Days & IIf(Days <> 1, " Dias ", " Dia ") & Hours & ":" & Format(Minutes, "00") & ":" & Format(Seconds, "00")
Case "D HH:MM:SS"
FormatInterval = Days & IIf(Days <> 1, " Dias ", " Dia ") & Format(Hours, "00") & ":" & Format(Minutes, "00") & ":" & Format(Seconds, "00")
Case "H M"
Hours = Hours + Days * 24
FormatInterval = Hours & IIf(Hours <> 1, " Horas ", " Hora ") & Minutes & IIf(Minutes <> 1, " Minutes", " Minute")
Case "H:MM"
Hours = Hours + Days * 24
FormatInterval = Hours & ":" & Format(Minutes, "00")
Case "H:MM:SS"
Hours = Hours + Days * 24
FormatInterval = Hours & ":" & Format(Minutes, "00") & ":" & Format(Seconds, "00")
Case "M S"
Minutes = Minutes + (Hours + Days * 24) * 60
FormatInterval = Minutes & IIf(Minutes <> 1, " Minutes ", " Minute ") & Seconds & IIf(Seconds <> 1, " Seconds", " Second")
Case Else
FormatInterval = Null
End Select
End Function

Sou mais Brasil!

Gilson   29/04/2012 17:22:19

Excelente foi passar a utilizar para calcular o período em que o réu permanece preso provisoriamente, antes fazia este calculo apenas em dias, agora, ficará muita mais legitimo com anos, meses e dias. Obrigado pelo contribuição.

Avelino João   29/04/2012 18:06:12

Magnifica aula como sempre você é o maior especialista em access graça a você hoje, faço a diferença em Angola com o Access e Excel, brevemente terei um site e espero ter um link do teu site ao meu e poder fazer publicidade desse grande site que é o teu; Uma sujeitão gostaria que você volta-se a convidar o kartoffel para falar um pouco sobre como fazer filtro na lista do formulário Access com MySQL ou uma combobox para localizar registo e preencher o formulário.

Adão Elias   30/04/2012 09:06:03

Parábens!
Uma aula dinâmica, cheia de informações importantes.
Obrigado por compartilhar...

Antonio v.   30/04/2012 10:54:35

Parabéns Avelino!
Era o que eu estava precisando!
Que Deus o abençoe...

Idenilton   04/05/2012 17:35:23

Muito bom, gostei, eu já havia feito um calcula de idade mais não dessa forma. Essa é bem mais completo...

Marcelo Silva   17/05/2012 14:26:09

Boa tarde Avelino!

Preciso de uma ajuda, quero colocar uma função na linha critério na minha consulta para me trazer dados em um determinado intervalo.

Entre (forms![00_17_Devolução Geral_UNION].[Mês]&*) E (Forms![Frm_GerarBaseCFR_Gerar]![Mes]&*)

É possível eu usar uma função deste tipo na consulta, esta acima esta dando erro, quando eu deixo apenas uma regra ela funciona perfeitamente.

Como(forms![00_17_Devolução Geral_UNION].[Mês])&*

Onde estou errando na criação desta função, desde já agradeço ajuda.

Avelino Sampaio   18/05/2012 04:55:48

Marcelo,

primeiro priciso saber o formato do campo [Mês] que vc esta usando. Esta incluindo o ano (05/2012) ou está incluido uma data completa (18/05/2012) ?

No aguardo

Marcelo Silva   22/05/2012 11:20:10

Bom dia Avelino!

Estou usando um campo com data completa (18/05/2012).

Avelino Sampaio   23/05/2012 05:33:57

Marcelo,

experimente algo assim:

Entre format(forms![00_17_Devolução Geral_UNION]![Mês];"yyyymm") E format(Forms![Frm_GerarBaseCFR_Gerar]![Mes];"yyyymm")

Sucesso!


William Lima   17/07/2012 12:33:42

Bom dia, estou tentando utilizar um critério juntamento com a função DATADIF, e está dando erro. Existe a possibilidade de utilizar com critério?
Exemplo:
DateDiff("d",[SELECT]![DATA_PROPOSTA],[SELECT]![DATA ATIVACAO])<180

Avelino Sampaio   17/07/2012 13:46:47

William,

o que é este [select] ?

Supondo que as datas estejam em campos de um formulário, tente assim:

if DateDiff("d",me!DATA_PROPOSTA,me!DATA ATIVACAO)<180 then
'verdadeiro
else
'falso
end if

Lembrando que a propriedade "formato" dos campos tem que estar setados para tipo DATA.

Sucesso!

William   06/08/2012 11:48:44

Vou testar isso Avelino, mas desde já muito obrigado pela sua atenção.

Att,
William

Eliana   17/10/2012 11:48:03

Como faço para calcular o numero de dias proporcional dentro do mês, por exemplo tenho a data 27/09/12 e preciso calcular dentro de um determinado período 26/09/12 a 25/10/12, quantos dias tem.

Eliana   17/10/2012 12:11:14

Complementando eu usei essa função Dias: DifData("d";[data_mobilização];[date]), o que calcula o dia certo, porém, eu preciso que o retorno seja feito somente para um determinado periodo, ou seja de 26 do mes anterior a 25 do mês atual.

Avelino Sampaio   17/10/2012 12:23:35

Eliana,

pode resolver com a função dateSerial(). Exemplo:

datediff("d",dateserial(year(date()),month(date())-1,26),dateserial(year(date()),month(date()),25))

Substitua date() pelos seus campos específicos

Sucesso!

Eliana   17/10/2012 12:57:53

vc diz isto
datediff("d";dateserial(year(data_mobilização);month(data_mobilização)-1,26;dateserial(year(data_mobilização);month(data_mobilização);25))



ACFT   19/10/2012 04:44:12

Muito bom.
Muito bom, mesmo.
Parabéns pela forma clara como tudo foi explicado, mas sobretudo pelo espírito de partilha do saber adquirido.
Um excelente exemplo a seguir.

Marcelo Varella   02/05/2013 18:56:00

Avelino, muito bons seus exemplos. Gostaria de pedir sua ajuda para este caso: Preciso extrair o periodo em anos, meses e dias de um periodo entre INÍCIO DE EXERCÍCIO e uma DATA DE REFERÊNCIA, que não pode ser NOW. Ela deverá ser preenchida a critério do usuário. Desde já agradeço!

Luis Ussuy   17/01/2014 11:35:05

Parabéns pela Função! Muito simples e salvou minha vida!

AMANDA   21/01/2014 14:57:06

BOA TARDE AVELINO,TENHO A SEGUINTE DUVIDA,TENHO UMA TABELA PACIENTES E ENTRE OS CAMPOS TENHO UM QUE SE CHAMA DATA AVALIAÇÃO,POIS BEM,ESSA FAZENDO UMA CONSULTA COM BASE NESTA TABELA EU POSSO PEDIR PARA ME MOSTRAR SOMENTE OS AVALIADOS DE TAL DATA,MAS E SE EU QUISER QUE ME MOSTRE OS AVALIADOS DE DUAS OU MAIS DATAS,NAO É INTERVALO,É APENAS DATAS,EX:QUERO QUE A CONSULTA ME MOSTRE SOMENTE OS AVALIADOS DOS DIAS 20/11/13,5/11/13 E 10/01/14. E TAMBEM QUE GERE UM RELATORIO.

Ronaldo Adriano Gama de Souza   02/02/2014 02:22:33

ESTAVA INSPIRADO E ACRESCENTEI MAIS UMA OPÇÃO - ESCOLHER A FORMA DE RETORNO DA IDADE: POR EXTENSO OU POR INTEIROS(anos,meses,dias).

'IMPLEMENTADO POR ronaldogamadesouza(arroba)gmail(ponto)com
'ABAIXO VAI O CÓDIGO COM IMPLEMENTAÇÃO DE ALGUMAS IDÉIAS QUE EU TIVE
'1 - AGORA É POSSIVEL CALCULAR A IDADE NÃO SOMENTE COM A DATA ATUAL E SIM COM A DATA QUE VOCE PASSAR NO PARAMETRO
'2 - COLOQUEI A OPÇÃO DE VOCE ESCOLHER COMO QUER OS RESULTADOS: POR EXTENSO, POR ANOS, POR MESES, E POR DIAS, ASSIM VOCÊ PODE USAR A FUNÇÃO DE VÁRIAS FORMAS


'EXEMPLOS DE COMO FAZER A CHAMADA AGORA
'EM UMA CONSULTA
'Idade Completa: fncIdadeCompleta(Nz([DataNascimento];0);#01/01/2014#;"extenso") passando no parâmetro uma data desejada e solicitando o resultado por extenso
'Idade Completa: fncIdadeCompleta(Nz([DataNascimento];0);Data();"extenso") passando no parâmetro a data atual e solicitando o resultado por extenso
'NO VISUAL BASIC BASTA TROCAR OS PONTO E VÍRGULAS POR VÍRGULAS
'Idade Completa = fncIdadeCompleta(Nz([DataNascimento],0),#01/01/2014#,"extenso") passando no parâmetro uma data desejada e solicitando o resultado por extenso
'Idade Completa = fncIdadeCompleta(Nz([DataNascimento],0),Date,"extenso") passando no parâmetro a data atual e solicitando o resultado por extenso
'Idade Anos = fncIdadeCompleta(Nz([DataNascimento],0),Date,"extenso") passando no parâmetro a data atual e solicitando o resultado em anos inteiros
'espero ter ajudado, quem quiser pode dar sugestoes
'BY RONALDO


Public Function fncIdadeCompleta(DataNascimento As Date, DataReferencia As Date, resultado As String) As String
'PARAMETROS PARA DATA DE NASCIMENTO: uma data válida que seja igual ou inferior a data de referência
'PARAMETROS PARA DATA DE REFERENCIA: Data() ou Date() ou uma data válida tipo #01/01/2014# que seja igual ou superior a data de nascimento
'PARAMETROS PARA RESULTADO: "extenso" ou "anos" ou "meses" ou "dias"
'DECLAREI O PARAMETRO "DataReferencia" PARA CALCULAR COM A DATA QUE QUISER E NAO SOMENTE COM A DATA ATUAL


On Error GoTo trataerro
Dim Anos As Byte, Meses As Variant, Dias As Byte, DataRef As Date

'CASO A DATA DE NASCIMENTO FOR > QUE A DATA DE REFERENCIA RETORNA UM RESULTADO VAZIO
If DataNascimento > DataReferencia Or DataNascimento = 0 Then
fncIdadeCompleta = ""
Exit Function
End If

'TRATAMENTO PARA QUEM NASCEU NO DIA 29 DE FEVEREIRO
If (Day(DataNascimento) = 29) And _
(Month(DataNascimento) = 2) Then
DataNascimento = 28 & "/" & 2 & "/" & Year(DataNascimento)
End If

Anos = Int(DateDiff("d", DataNascimento, DataReferencia) / 365.25)
DataRef = DateSerial(Year(DataReferencia) + (Format(DataNascimento, "mmdd") > Format(DataReferencia, "mmdd")), Format(DataNascimento, "mm"), Format(DataNascimento, "dd"))
Meses = DateDiff("m", DataRef, DataReferencia) + (Format(DataNascimento, "dd") > Format(DataReferencia, "dd"))
DataRef = DateSerial(Year(DataReferencia), Format(DataReferencia, "mm") + (Format(DataNascimento, "dd") > Format(DataReferencia, "dd")), Format(DataNascimento, "dd"))
DataRef = IIf(Format(DataNascimento, "dd") <> Format(DataRef, "dd"), DataRef - Format(DataRef, "dd"), DataRef)
Dias = CDbl(DataReferencia) - CDbl(DataRef)

'CASO A DATA DE NASCIMENTO FOR IGUAL A DATA DE REFERENCIA IDADE É IGUAL A ZERO
If DataNascimento = DataReferencia Then
fncIdadeCompleta = 0
Anos = 0
Meses = 0
Dias = 0
'Exit Function
End If

'NAO ESTAVA CALCULANDO QUANDO ERA UM ANO EXATO ENTAO COMPLEMENTEI COM O CÓDIGO ABAIXO
If (Day(DataReferencia) = Day(DataNascimento)) And _
(Month(DataReferencia) = Month(DataNascimento)) And _
(Year(DataReferencia) - 1 = Year(DataNascimento)) Then
fncIdadeCompleta = "1 ano"
Anos = 1
Meses = 0
Dias = 0
'Exit Function
End If

If resultado = "extenso" Then
fncIdadeCompleta = IIf(Anos <= 1, IIf(Anos = 0, "", Anos & " ano "), Anos & " anos ") & _
IIf(Meses <= 1, IIf(Meses = 0, "", Meses & " mes "), Meses & " meses ") & _
IIf(Dias <= 1, IIf(Dias = 0, "", Dias & " dia "), Dias & " dias ")
ElseIf resultado = "anos" Then
fncIdadeCompleta = Anos
ElseIf resultado = "meses" Then
fncIdadeCompleta = Meses
ElseIf resultado = "dias" Then
fncIdadeCompleta = Dias
Else
fncIdadeCompleta = "parametros inválidos"
End If

sair:
Exit Function
trataerro:
MsgBox "Erro: " & Err.Number & vbCrLf & Err.Description, vbCritical, "Aviso", Err.HelpFile, Err.HelpContext
Resume sair:
End Function

Ronaldo Adriano Gama de Souza   02/02/2014 02:40:43

AMANDA, se voce quiser calcular da data de avaliação até a data atual voce vai jogar em uma coluna na consulta o seguinte:
Periodo: fncIdadeCompleta(Nz([data da avaliação];0);Data();"extenso")

se for da data de avaliação até uma data a especificar jogue em uma coluna da consulta o seguinte:
Periodo: fncIdadeCompleta(Nz([data da avaliação];0);#01/01/2014#;"extenso")

se voce tem um campo de data de retorno jogue em uma coluna da consulta o seguinte:
Periodo: fncIdadeCompleta(Nz([data da avaliação];0);[data de retorno];"extenso")


e para filtrar somente as datas especificas que voce quer coloque no critério de data de avaliaçao um dos seguinte abaixo:
entre [] e []
entre #01/01/2014# e #30/01/2014#
#05/01/2014# ou #11/01/2014# ou #14/01/2014# ou #21/01/2014#

ESPERO TER AJUDADO.

Ronaldo Adriano Gama de Souza   02/02/2014 11:14:24

TROQUEI O TRATAMENTO PRA QUEM NASCEU NO DIA 29 DE FEVEREIRO PARA FICAR PERFEITO

'TRATAMENTO PARA QUEM NASCEU NO DIA 29 DE FEVEREIRO
If (Day(DataNascimento) = 29) And (Month(DataNascimento) = 2) And ((Day(DataReferencia) = 28) And (Month(DataReferencia) = 2) And (IsDate("29/02/" & Year(DataReferencia)) = False)) Then
DataNascimento = 28 & "/" & 2 & "/" & Year(DataNascimento)
End If

Wagner Filho   01/04/2014 12:03:22

Olá... gostaria de uma ajuda dos colegas. Preciso fazer um cálculo entre duas datas informadas pelo usuário: Uma data inicial e uma data final.

Como poderia usar este código utilizando uma data final informada por mim ao invés da data final ser a data do sistema - função date().

Assim teria uma data inicial que neste exemplo é a DataNascimento e uma DataFinal, ambas informadas pelo usuário, para o resultado retornar em "Anos" "Meses" e "Dias"

obrigado

Avelino Sampaio   02/04/2014 07:22:55

Wagner,

me passe seu email aqui pela seção CONTATO que eu te mando a função modificada para o seu caso.

No aguardo


Envie seu comentário: