MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Adequação calculo período

    Compartilhe

    socgyn
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 105
    Registrado : 01/05/2013

    [Resolvido]Adequação calculo período

    Mensagem  socgyn em Qua 23 Abr 2014, 01:34

    Estou tentando efetuar um cálculo entre datas (Período Inicial, que está com o nome Dtini) e Período final, que está com o nome DtFin), já segui vários exemplos para calcular em ano, mês e dia e não obtive êxito. Há alguns exemplos que ao clicar em um botão aparece o resultado em uma caixa de texto, só que quero automaticamente, tipo ao colocar a data inicial e a final em uma terceira caixa apareça o resultado em anos, meses e dias.

    Vi um código seu que teria que criar um módulo e uma caixa de texto com o nome txtDataResult. Criei o módulo e adequei os nomes dos campos, criei a cx de texto citada, coloquei no load do formulário:

    Me.txtDataResult.SetFocus
    txtDataResult = CalculaPeriodo(Dtini, DtFin)

    na hora que carrego o formulário abre o vb com a crítica:

    erro de compilação
    Era esperada variável ou procedimento, não módulo

    Clicando em ok da mensagem é focado o campo calculaPeriodo no vb

    Private Sub Form_Load()
    Me.txtDataResult.SetFocus
    txtDataResult = CalculaPeriodo(Dtini, DtFin)
    End Sub

    o módulo está assim:

    Option Compare Database
    Option Explicit
    Private Function CalculaPeriodo(Dtini As Date, DtFin As Date)
    If Dtini > DtFin Then
    MsgBox "Data Inicial não pode ser maior que Data actual!", vbExclamation, "Erro"
    Exit Function
    End If

    Dim Anos, meses, dias
    Dim iAnos As Double, iMeses As Double, Intervalo As Double

    Intervalo = DtFin - Dtini

    ' Um ano tem exatamente 365,2425 dias, ou
    ' 365 dias, 5 horas, 49 minutos e 12 segundos.
    ' Ou aproximadamente 365,25 dias.
    iAnos = Intervalo / 365.2425
    Anos = Int(iAnos)
    iMeses = (iAnos - Anos) * 12
    meses = Int(iMeses)

    dias = DateDiff("d", DateSerial(DatePart("yyyy", Dtini) + Anos, DatePart("m", Dtini) + meses, Day(Dtini)), DtFin)

    Select Case dias
    Case -1
    dias = 30
    meses = meses - 1
    Case -2
    dias = 29
    meses = meses - 1
    Case 30 Or 31
    dias = 0
    meses = meses + 1
    End Select

    If meses = 12 Then
    meses = 0
    Anos = Anos + 1
    End If

    Fim:
    If Anos > 1 Then
    Anos = Anos & " anos "
    Else
    Anos = Anos & " ano "
    End If

    If meses > 1 Then
    meses = meses & " meses "
    Else
    meses = meses & " mês "
    End If

    If dias > 1 Then
    dias = dias & " dias"
    Else
    dias = dias & " dia"
    End If

    CalculaPeriodo = Anos & meses & dias
    End Function

    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1819
    Registrado : 13/04/2012

    Re: [Resolvido]Adequação calculo período

    Mensagem  Fernando Bueno em Qua 23 Abr 2014, 04:06

    Boa noite Sandro, veja esse topico...

    [Você precisa estar registrado e conectado para ver este link.]


    .................................................................................
    Um abraço
    Fernando Bueno


    O aumento do conhecimento é como uma esfera dilatando-se no espaço
    quanto maior a nossa compreensão,
    maior o nosso contacto com o desconhecido
    [Você precisa estar registrado e conectado para ver esta imagem.]

    socgyn
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 105
    Registrado : 01/05/2013

    Adequação calculo período

    Mensagem  socgyn em Qua 23 Abr 2014, 23:25

    Grato pelo apoio, já havia visto esse código tentei adequar mas não consegui. Darei por encerrado consegui uma outra forma, apesar de puxar só os meses.
    Vou colocar abaixo caso alguém precise.

    ao receber foco na caixa de texto não acoplada coloquei

    Private Sub dbldiff_GotFocus()
    dbldiff = DateDiff("m", Dtini, DtFin)
    End Sub

    e no após atualizar do campo DtFin coloquei

    Private Sub DtFin_AfterUpdate()
    If Dtini > DtFin Then
    MsgBox "A data final não pode ser menor que a inicial, Digite novamente!.", vbInformation, "Guinchos Chaves"

    Cancel = True
    Me.DtFin.Undo
    Me.Dtini.SetFocus
    Else
    dbldiff = DateDiff("m", Dtini, DtFin)
    End If
    End Sub

    Até mais
    Sandro
    Goiânia

    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1819
    Registrado : 13/04/2012

    Re: [Resolvido]Adequação calculo período

    Mensagem  Fernando Bueno em Qua 23 Abr 2014, 23:38

    Ok, agradeço o retorno em nome do forúm.


    .................................................................................
    Um abraço
    Fernando Bueno


    O aumento do conhecimento é como uma esfera dilatando-se no espaço
    quanto maior a nossa compreensão,
    maior o nosso contacto com o desconhecido
    [Você precisa estar registrado e conectado para ver esta imagem.]

      Data/hora atual: Sab 10 Dez 2016, 12:44