Boa tarde, pessoal!
Estou amarrado na seguinte situação:
Tenho um campo DATA_NASCIMENTO (Fonte do Controle = DATA_NASCIMENTO, Texto sem formatação, Máscara de entrada = 00/00/0000;0;_), tendo em seu Evento Após Atualizar o seguinte código:
Private Sub DATA_NASCIMENTO_AfterUpdate()
Me.IDADE = CalcularIdade(DATA_NASCIMENTO)
Me.txtIdadeCompleta = AnoMesDia(DATA_NASCIMENTO)
Me.IDADE.Requery
Me.txtIdadeCompleta.Requery
End Sub
Ao chamar o Formulário, aparece no campo ‘txtIdadeCompleta’: (#Tipo! )
Ao apertar a tecla TAB no teclado, pelo Formulário, no campo DATA_NASCIMENTO, o Access 2013 emite a seguinte mensagem:
Erro em tempo de execução ‘-2147352567 (80020009)’:
Você não pode atribuir um valor a este objeto.
[Fim] [Depurar] [Ajuda]
Se clicar em [Fim], o Access executa normalmente a ação nos dois campos IDADE e IDADE COMPLETA;
Se clicar em [Depurar], o Access abre a janela de código na seguinte marcação:
Me.txtIdadeCompleta = AnoMesDia(DATA_NASCIMENTO)
Segue o código do módulo que calcula a idade:
--------------------------------------------------------------
Public Function CalcularIdade(DATA_NASCIMENTO As Date) As Integer
If IsDate(DATA_NASCIMENTO) And Not IsNull(DATA_NASCIMENTO) Then
CalcularIdade = Int((Date - [DATA_NASCIMENTO]) / 365.25)
Else
CalcularIdade = 0
End If
End Function
Segue o código do módulo que calcula a idade completa:
---------------------------------------------------------------------------
Public Function AnoMesDia(DATA_NASCIMENTO As Date) As String
On Error GoTo AnoMesDia_Err
Dim sTmp As String
Dim nDMA As Long
Dim NewDate As Date
Dim sSngPlural As String
Dim dtData2 As Date
dtData2 = Now
' Bloco Ano ---------------------
' Calcula número inteiro de anos
nDMA = DateDiff("yyyy", DATA_NASCIMENTO, dtData2)
' Se Data1+nDMA>Data2, subtrai 1 ano
If DateAdd("yyyy", nDMA, DATA_NASCIMENTO) > dtData2 Then
nDMA = nDMA - 1
End If
sSngPlural = " ano, "
If nDMA > 1 Then sSngPlural = " anos, "
sTmp = nDMA & sSngPlural
' Bloco Mês ---------------------
' Nova data de referência
NewDate = DateAdd("yyyy", nDMA, DATA_NASCIMENTO)
nDMA = DateDiff("m", NewDate, dtData2)
' Se Data1+nDMA>Data2, subtrai 1 mês
If DateAdd("m", nDMA, NewDate) > dtData2 Then
nDMA = nDMA - 1
End If
sSngPlural = " mês e "
If nDMA > 1 Then sSngPlural = " meses e "
sTmp = sTmp & nDMA & sSngPlural
' Bloco Dia ---------------------
NewDate = DateAdd("m", nDMA, NewDate)
nDMA = DateDiff("d", NewDate, dtData2)
sSngPlural = " dia"
If nDMA > 1 Then sSngPlural = " dias"
sTmp = sTmp & nDMA & sSngPlural
' Valor final da função
AnoMesDia = sTmp
AnoMesDia_Fim:
Exit Function
AnoMesDia_Err:
MsgBox Err.Description
Resume AnoMesDia_Fim
End Function
Estou amarrado na seguinte situação:
Tenho um campo DATA_NASCIMENTO (Fonte do Controle = DATA_NASCIMENTO, Texto sem formatação, Máscara de entrada = 00/00/0000;0;_), tendo em seu Evento Após Atualizar o seguinte código:
Private Sub DATA_NASCIMENTO_AfterUpdate()
Me.IDADE = CalcularIdade(DATA_NASCIMENTO)
Me.txtIdadeCompleta = AnoMesDia(DATA_NASCIMENTO)
Me.IDADE.Requery
Me.txtIdadeCompleta.Requery
End Sub
Ao chamar o Formulário, aparece no campo ‘txtIdadeCompleta’: (#Tipo! )
Ao apertar a tecla TAB no teclado, pelo Formulário, no campo DATA_NASCIMENTO, o Access 2013 emite a seguinte mensagem:
Erro em tempo de execução ‘-2147352567 (80020009)’:
Você não pode atribuir um valor a este objeto.
[Fim] [Depurar] [Ajuda]
Se clicar em [Fim], o Access executa normalmente a ação nos dois campos IDADE e IDADE COMPLETA;
Se clicar em [Depurar], o Access abre a janela de código na seguinte marcação:
Me.txtIdadeCompleta = AnoMesDia(DATA_NASCIMENTO)
Segue o código do módulo que calcula a idade:
--------------------------------------------------------------
Public Function CalcularIdade(DATA_NASCIMENTO As Date) As Integer
If IsDate(DATA_NASCIMENTO) And Not IsNull(DATA_NASCIMENTO) Then
CalcularIdade = Int((Date - [DATA_NASCIMENTO]) / 365.25)
Else
CalcularIdade = 0
End If
End Function
Segue o código do módulo que calcula a idade completa:
---------------------------------------------------------------------------
Public Function AnoMesDia(DATA_NASCIMENTO As Date) As String
On Error GoTo AnoMesDia_Err
Dim sTmp As String
Dim nDMA As Long
Dim NewDate As Date
Dim sSngPlural As String
Dim dtData2 As Date
dtData2 = Now
' Bloco Ano ---------------------
' Calcula número inteiro de anos
nDMA = DateDiff("yyyy", DATA_NASCIMENTO, dtData2)
' Se Data1+nDMA>Data2, subtrai 1 ano
If DateAdd("yyyy", nDMA, DATA_NASCIMENTO) > dtData2 Then
nDMA = nDMA - 1
End If
sSngPlural = " ano, "
If nDMA > 1 Then sSngPlural = " anos, "
sTmp = nDMA & sSngPlural
' Bloco Mês ---------------------
' Nova data de referência
NewDate = DateAdd("yyyy", nDMA, DATA_NASCIMENTO)
nDMA = DateDiff("m", NewDate, dtData2)
' Se Data1+nDMA>Data2, subtrai 1 mês
If DateAdd("m", nDMA, NewDate) > dtData2 Then
nDMA = nDMA - 1
End If
sSngPlural = " mês e "
If nDMA > 1 Then sSngPlural = " meses e "
sTmp = sTmp & nDMA & sSngPlural
' Bloco Dia ---------------------
NewDate = DateAdd("m", nDMA, NewDate)
nDMA = DateDiff("d", NewDate, dtData2)
sSngPlural = " dia"
If nDMA > 1 Then sSngPlural = " dias"
sTmp = sTmp & nDMA & sSngPlural
' Valor final da função
AnoMesDia = sTmp
AnoMesDia_Fim:
Exit Function
AnoMesDia_Err:
MsgBox Err.Description
Resume AnoMesDia_Fim
End Function