USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Ajuda em Função Dias Uteis entre Datas
JGD
não registrado
ENUNCIADA !
Postada em 16/05/2007 18:22 hs   
 
Olá Pessoal,
Preciso projetar continuamente os dias uteis de cada mês ( jan, fev, mar,... dez).
Aí pesquisei na net(aqui mesmo) e achei a função abaixo:
 
Public Function DiasUteis(dtInicio As Variant, dtFinal As Variant) As Integer
   Dim intSemanas As Integer
   Dim varDataCont As Variant
   Dim intFimDias As Integer
   dtInicio = DateValue(dtInicio)
   dtFinal = DateValue(dtFinal)
   intSemanas = DateDiff("w", dtInicio, dtFinal)
   varDataCont = DateAdd("ww", intSemanas, dtInicio)
   intFimDias = 0
   Do While varDataCont < dtFinal
       If Format(varDataCont, "ddd") <> "Sun" And _
           Format(varDataCont, "ddd") <> "Sat" Then
       intFimDias = intFimDias + 1
       End If
       varDataCont = DateAdd("d", 1, varDataCont)
   Loop
   DiasUteis = intSemanas * 5 + intFimDias
End Function
 
 
 
Se eu informo :
strDia = "01"
strMes = "01"
strAno = "2007"

strDia2 = "31"
strMes2 = "01"
strAno2 = "2007"
 
strData = CVDate(strDia & "/" & strMes & "/" & strAno
strData2 = CVDate(strDia2 & "/" & strMes2 & "/" & strAno2
strNroDias = DiasUteis2(strData, strData2)
 
O resultado é 23 dias uteis
 
Mais seu eu coloco dastas do ano 2008 :

Se mes de Janeiro :
strDia = "01"
strMes = "01"
strAno = "2008"

strDia2 = "31"
strMes2 = "01"
strAno2 = "2008"
O resultado é 22 + o correto seria 23 dias.
 
Se Fevereiro :
O resultado sai 20 + o correto seria 21 dias.

Se Março :
O resultado sai 22 + o correto seria 21 dias.

Se Abril:
o resultado sai 21 + o correto seria 22 dias.

Sempre há uma diferença a maior ou a menor... Eu tenho a impressão que apesar de eu  informar datas futuras (2008) a função calcula sobre 2007.
 
Será que tem aguma coisa a ver com o ano Bissexto.
 
Agradeço qualquer ajuda.
 
Abraço
 
JGD
   
LCRamos
Pontos: 2843
GOIANIA
GO - BRASIL
ENUNCIADA !
Postada em 17/05/2007 05:01 hs            
Voce pode usar a função WEEKDAY para verificar se é sábado ou domingo.
 
If Weekday(varDataCont) <> 1 And Weekday(varDataCont) <> 7 Then
    intFimDias = intFimDias + 1
End If
1 = Domingo
7 = Sábado
 
vlu//
   
ghost_jlp
Pontos: 2843 Pontos: 2843 Pontos: 2843 Pontos: 2843
SÃO PAULO
SP - BRASIL
ENUNCIADA !
Postada em 17/05/2007 14:27 hs            
Opa! O nosso colega ÉLECÊ (rsrsrs, brincadeira LC Ramos Emoções) tem razão a função aí tem 2 equívocos... ajuste assim:
 
Public Function DiasUteis(dtInicio As Variant, dtFinal As Variant) As Integer
   Dim intSemanas As Integer
   Dim varDataCont As Variant
   Dim intFimDias As Integer
   dtInicio = DateValue(dtInicio)
   dtFinal = DateValue(dtFinal)
   intSemanas = DateDiff("w", dtInicio, dtFinal)
   varDataCont = DateAdd("ww", intSemanas, dtInicio)
   intFimDias = 0
   Do While varDataCont <= dtFinal
       If WeekDay(varDataCont) <> 1 And _
          WeekDay(varDataCont) <> 7 Then
       intFimDias = intFimDias + 1
       End If
       varDataCont = DateAdd("d", 1, varDataCont)
   Loop
   DiasUteis = intSemanas * 5 + intFimDias
End Function
 
 
1) Tinha quer <= e não podia ser  apenas <.
 
2) User o weekday pois ele utiliza constantes numéricas, a função estava usando "Sun" e "Sat" com referência aos dias escritos em inglês mas o seu computador é em português então ele traduz para "Sáb" e "Dom" os quais não são iguais ok?
 
FUI!!!!!
   
LCRamos
Pontos: 2843
GOIANIA
GO - BRASIL
ENUNCIADA !
Postada em 18/05/2007 16:34 hs            
Valeu Ghost, foi feita a função aqui, sem teste.
Por isto este forum é demaisss.
 
vlu//
   
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página