Como criar duas funções para calcular a idade em meses e em anos no Access

Avançado: requer codificação especializada, interoperabilidade e competências multiutilizadas.

Este artigo aplica-se a uma base de dados do Microsoft Office Access (.accdb e .mdb) e ao projeto do Microsoft Access (.apd).

Resumo

Este artigo mostra-lhe como criar duas funções que pode utilizar para calcular a idade de uma pessoa ou coisa com base numa data especificada.

Nota

Pode ver uma demonstração da técnica utilizada neste artigo no ficheiro de exemplo Qrysmp00.exe.

Mais informações

Criar as Funções

Escreva ou cole o seguinte código num módulo:

'==========================================================
' General Declaration
'==========================================================
Option Explicit

'*************************************************************
' FUNCTION NAME: Age()
'
' PURPOSE:
'    Calculates age in years from a specified date to today's date.
'
' INPUT PARAMETERS:
'    StartDate: The beginning date (for example, a birth date).
'
' RETURN
'    Age in years.
'
'*************************************************************
Function Age (varBirthDate As Variant) As Integer
   Dim varAge As Variant

If IsNull(varBirthdate) then Age = 0: Exit Function

varAge = DateDiff("yyyy", varBirthDate, Now)
   If Date < DateSerial(Year(Now), Month(varBirthDate), _
                        Day(varBirthDate)) Then
      varAge = varAge - 1
   End If
   Age = CInt(varAge)
End Function

'*************************************************************
' FUNCTION NAME: AgeMonths()
'
' PURPOSE:
'  Compliments the Age() function by calculating the number of months
'  that have expired since the last month supplied by the specified date.
'  If the specified date is a birthday, the function returns the number of
'    months since the last birthday.
'
' INPUT PARAMETERS:
'    StartDate: The beginning date (for example, a birthday).
'
' RETURN
'    Months since the last birthday.
'*************************************************************
Function AgeMonths(ByVal StartDate As String) As Integer

Dim tAge As Double
   tAge = (DateDiff("m", StartDate, Now))
   If (DatePart("d", StartDate) > DatePart("d", Now)) Then
      tAge = tAge - 1
   End If
   If tAge < 0 Then
      tAge = tAge + 1
   End If

AgeMonths = CInt(tAge Mod 12)

End Function

Testar as Funções Age() e AgeMonths()

Para testar as funções Age() e AgeMonths(), siga estes passos.

Importante

Os passos seguintes pedem-lhe para alterar a data no seu computador. Certifique-se de que conclui o passo 6 para repor a data para a data atual.

  1. Ao utilizar a ferramenta Data/Hora no Painel de Controlo, anote a data atual e, em seguida, defina a data para 3 de junho de 2001.

  2. Abra um módulo ou crie um novo.

  3. No Viewmenu, clique em Janela Imediata.

  4. Suponha que a data de nascimento do seu amigo era 15 de novembro de 1967 e hoje é 3 de junho de 2001. Escreva a seguinte linha na janela Imediato e, em seguida, prima ENTER:

    ? Idade("15/11/67")

    Tenha em atenção que o Microsoft Access responde com o valor 33 (anos).

  5. Escreva a seguinte linha e, em seguida, prima ENTER:

    ? AgeMonths("15/11/67")

    Tenha em atenção que o Microsoft Access responde com o valor 6, indicando que se passaram seis meses desde o último aniversário desta pessoa. O seu amigo tem 33 anos e 6 meses.

  6. Ao utilizar a ferramenta Data/Hora no Painel de Controlo, reponha a data para a data atual que anotou no passo 1.

Utilizar as Funções Age() e AgeMonths()

O procedimento seguinte explica como marcar encomendas antigas ao colocar o valor de idade num novo controlo.

  1. Na base de dados de exemplo Northwind.mdb, escreva as funções Age() e AgeMonth() num novo módulo.

  2. Abra o formulário Encomendas na vista Estrutura e adicione um controlo de caixa de texto desvinculado.

  3. Escreva a seguinte linha na propriedade ControlSource do novo controlo de caixa de texto:

    =Age([OrderDate]) & " yrs " & AgeMonths([OrderDate]) & " mos"

  4. Ver o formulário na vista Formulário. Tenha em atenção que a idade da encomenda é apresentada no novo controlo de caixa de texto.

Referências

Para obter mais informações sobre as diferenças de datas, no Visual Basic Revisor, clique em Ajuda do Microsoft Visual Basic no menu Ajuda, escreva função datediff no Assistente do Office ou no Assistente de Respostas e, em seguida, clique em Procurar para ver o tópico.