MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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


3 participantes

    Subtrair duas data

    rlauro
    rlauro
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 27
    Registrado : 27/06/2014

    Subtrair duas data Empty Subtrair duas data

    Mensagem  rlauro 17/8/2014, 01:58

    Prezados Internautas do Forum
    Mais uma vez por aqui para solicitar ajuda. Estou tentando fazer um banco para controlar lançamentos de ferias de táxi, criei um formulário para cadastro de motoristas, criei tb. um subformulario, onde eu coloco a data de Inicio, e quando sai coloco a data da saida. Peguei um código da internet e adptei para meus campos, so que estou tendo problema com o retorno da função, vou exemplificar:
      Inicio                      Final
    16/04/2007    13/06/2007   pela função retorna 2 meses 28 dias   - quando o correto seria   1 mes  28 dias
    30/01/2007    03/02/2007   pela função retorna 1 mes  4 dias       - quando o correto seria   4 dias

    Algumas datas do banco de dados funciona correto
    Ja tentei modificar, mas não tive sucesso, vou postar aqui a função, como disse não sei o autor, pois pequei na internet, e era usado para retornas a data de nascimento em anos, meses, dias.

    Public Function fncTempo(Final, Inicio As Date) As String
    On Error GoTo trataerro
    Dim anos As Byte, meses As Variant, dias As Byte, DataRef As Date
    If Final >= Date Or Final = 0 Then
       fncTempo = ""
       Exit Function
    End If
    If Inicio = Date Then
       fncTempo = 0
       Exit Function
    End If

    If IsNull(Final) Then
    Final = Date
    End If



    'Ajusta dataNascimento se cair em ano bissexto
    Inicio = IIf(Format(Inicio, "mm/dd") = "02/29", Inicio - 1, Inicio)

    anos = Int(IIf(DateDiff("d", Inicio, Final) = 365, 365.25, DateDiff("d", Inicio, Final)) / 365.25)
    DataRef = DateSerial(Year(Final) + (Format(Inicio, "mmdd") > Format(Final, "mmdd")), Format(Inicio, "mm"), Format(Inicio, "dd"))
    meses = DateDiff("m", DataRef, Final) + (Format(Final, "dd") > Format(Final, "dd"))
    DataRef = DateSerial(Year(Final), Format(Final, "mm") + (Format(Inicio, "dd") > Format(Final, "dd")), Format(Inicio, "dd"))
    DataRef = IIf(Format(Inicio, "dd") <> Format(DataRef, "dd"), DataRef - Format(DataRef, "dd"), DataRef)
    dias = CDbl(Final) - CDbl(DataRef)
    fncTempo = 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 ")
    sair:
       Exit Function
    trataerro:
       MsgBox "Erro: " & Err.Number & vbCrLf & Err.Description, vbCritical, "Aviso", Err.HelpFile, Err.HelpContext
       Resume sair:
    End Function


    Aguardo ajuda dos amigos, pois sei que é possivel fazer, estou aprendendo access sozinho, agradeço antecipado
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3877
    Registrado : 04/04/2010

    Subtrair duas data Empty Re: Subtrair duas data

    Mensagem  Avelino Sampaio 17/8/2014, 08:36

    Olá!

    Creio que seu erro esteja nesta linha

    meses = DateDiff("m", DataRef, Final) + (Format(Final, "dd") > Format(Final, "dd"))

    Troque para:

    meses = DateDiff("m", DataRef, Final) + (Format(Inicial, "dd") > Format(Final, "dd"))

    Aguardamos


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso irrestrito ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    rlauro
    rlauro
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 27
    Registrado : 27/06/2014

    Subtrair duas data Empty Re: Subtrair duas data

    Mensagem  rlauro 17/8/2014, 14:05

    Prezado Professor Avelino, fiz as correções e deu certo, agradeço a atenção do iluste tutor, que não mede esforços para ajudar,
    PARA A AJUDA RESPONDIDA FOI RESOLVIDO

    Se não for abusar, peços mais uma ajuda neste topico mesmo:

    Explico:

    Neste sub formulário criei os campos codigo, codtabmot, inicio, final + O CAMPO acoplado onde recebe o resultado da função fncTempo()
    No sub formulário entro e digito a data inicial e na data final  para a função não retornar erro, eu coloquei o seguinte código.

    If IsNull(Final) Then
    Final = Date
    End If

    Só que ao dar enter no campo abaixo no código aparece a palavra  * (Novo)
    No campo não acoplado do sub formulário aparecere a palavra #Erro
    Teria como implementar um código dentro da Função para não gerar este erro.

    Agradeceria antecipado.
    toyebom
    toyebom
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 1128
    Registrado : 18/07/2012

    Subtrair duas data Empty Subtrair duas data

    Mensagem  toyebom 17/8/2014, 14:56

    Utilize a função NZ() para tratar o resultado nulo que pode estar causando o erro.

    exemplo..

    Código:
    =soma([campo1]*[campo2])


    tratando com NZ()

    Código:
    =soma(nz([campo1])*nz([campo2]))

    o certo é rastrear a causa do erro..

    porem se de toda forma voce não conseguir se livrar do ERRO.. use uma funcao seimed() que retorne nulo ou zero quando ocorrer erro.


    Código:
    'sintaxe:
    'seimed(expressao; valor se verdadeiro; valor se falso)

    'retornando nulo caso erro = verdadeiro:
    =seimed(iserror([campo_total]); ""; [campo_total])

    'retornando zero em vez de nulo:
    =seimed(iserror([campo_total]); "0"; [campo_total])


    .................................................................................
    Gente Simples, fazendo coisas pequenas, em lugares pouco importantes, consegue mudanças extraordinárias.
    rlauro
    rlauro
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 27
    Registrado : 27/06/2014

    Subtrair duas data Empty Re: Subtrair duas data

    Mensagem  rlauro 17/8/2014, 17:44

    Prezado amigo, tentei de todas as formas, mas o #Erro continua no campo novo em branco * (Novo), ou seja novo campo, eu gostaria que ficasse sem nada
    Não descobri ainda de onde ele vem.
    grato por enquanto
    aguardo mais informações se possível.

    Conteúdo patrocinado


    Subtrair duas data Empty Re: Subtrair duas data

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 28/3/2024, 21:00