Um pouco mais sobre datas (Parte 4)
Olá caros leitores, estão gostando das dicas desta série de artigos?
A maioria das informações que utilizamos hoje em dia, necessitam de um elo que as situe e se ajustem ao que queremos. As datas, se não forem bem trabalhadas e tratadas, podem gerar uma imensa dor de cabeça para nós. Por isso, estou ajudando vocês a não passarem por esse terrÃvel caminho sem visualizarem a LUZ no fim do túnel.
Para quem ainda não leu os artigos anteriores desta série, pode fazê-lo pelos links abaixo:
- Um pouco mais sobre datas – Parte 1
- Um pouco mais sobre datas – Parte 2
- Um pouco mais sobre datas – Parte 3
IV – Saber quantos dias úteis existem no mês.
Estamos quase chegando ao final destas dicas sobre extração de informações de datas. Com isso, muita coisa nós já aprendemos e a partir de agora, vai depender de nossas necessidades para adaptarmos as nossas funções ou desenvolvermos outras. Sempre lembrando que as funções podem ser dependentes entre si. Uma função já escrita anteriormente pode ter a informação que eu preciso obter em um outra rotina, de maneira que eu não precise mais escrevê-la novamente, posso apenas chamá-la dentro de minha nova função, informando os parâmetros necessários, obtendo, assim, a informação que desejo.
Será o nosso caso agora. Já temos as funções para:
- Saber o número de dias no mês: fnUltimoDiaDoMes;
- Saber o total de sábados no mês: TotalDeSabadosNoPeriodo;
- Saber o total de domingos no mês: TotalDeDomingosNoPeriodo;
- Saber o total de feriados no mês: TotalDeFeriadosNoMes;
Agora queremos saber quantos dias, em determinado mês, são úteis, ou seja, não são nem sábado, nem domingo, nem feriado. Percebeu? Molezinha né?!!
Faremos uma verificação pelos dias do mês, verificando se é feriado, ou sábado ou domingo e só incrementaremos a contagem caso não seja nenhumas dessas alternativas. Beleza! Então vamos lá.
Podemos montar a seguinte função.
Function TotalDeDiasUteisNoMes(iAno As Integer, iMes As Integer) As Integer Dim TotalDeDias As Integer Dim TotalDeDiasNoPeriodo As Integer Dim iContDia As Integer Dim dDataAnalisada As Date Dim dDataInicial As Date Dim dDataFinal As Date Dim iUltimoDiaDoMes As Integer iUltimoDiaDoMes = fnUltimoDiaDoMes(iAno, iMes) 'Pega o ultimo dia do mes dDataInicial = DateSerial(iAno, iMes, 1)   'Primeiro dia do mês em formato data dDataFinal = DateSerial(iAno, iMes, iUltimoDiaDoMes)   'Ultimo dia em formato data TotalDeDias = 1 + DateDiff("d", dDataInicial, dDataFinal) dDataAnalisada = dDataInicial TotalDeDiasNoPeriodo = 0 For iContDia = 1 To TotalDeDias If (VerificaSeFeriado(dDataAnalisada) = False) And (Weekday(dDataAnalisada) <> vbSunday) And (Weekday(dDataAnalisada) <> vbSaturday) Then TotalDeDiasNoPeriodo = TotalDeDiasNoPeriodo + 1 End If dDataAnalisada = DateAdd("d", 1, dDataAnalisada) Next iContDia TotalDeDiasUteisNoMes = TotalDeDiasNoPeriodo End Function |
Para chamar a função, fazemos assim:
Msgbox TotalDeDiasUteisNoMes(2009,11)
O resultado seria 20 dias úteis, pois há 30 dias no mês, 4 sábados, 5 domingos e 2 feriados (sendo que um cai no domingo -15nov).
Grande abraço a todos.




Deixar um comentário