Usuário com melhor resposta
Identificar se uma data é um dia útil

Pergunta
-
Oi Pessoal,
Eu criei um funcao que identifica se uma data é util. O problema é que ela nao funciona quando a data é digitada na celula.
Por exemplo:
se eu digitar o feriado do carnaval(24/02/2009) na celula A1 e chamar a funcao =util(a1) o resultado é verdadeiro, ou seja, ela reconhece como um dia util( a funcao nao está correta).
agora se digitar a data direto na funcao..=util(24/02/2009) o resultado é falso, ou seja, a funcao reconhece que data nao é dia util( a funcao está correta).
Algum sabe qual o motivo? ja tentei monte de coisas e nada resolve..
o codigo esta abaixo:Public Function Util(DataAbreviada As Date) As Boolean
Dim Holidays(757) As Date
Dim t As Integer
Dim k As Integer
Dim M As IntegerHolidays(1) = #1/1/2001#
Holidays(2) = #2/26/2001#
Holidays(3) = #2/27/2001#
Holidays(4) = #4/13/2001#
Holidays(5) = #5/1/2001#
Holidays(6) = #6/14/2001#
Holidays(7) = #9/7/2001#
Holidays(8) = #10/12/2001#
.
.
.holidays(757)=.....If Weekday(DataAbreviada) = 1 Or Weekday(DataAbreviada) = 7 Then
k = 1
Else
k = 0
End If
For t = 1 To 757
If Holidays(t) = CDate(DataAbreviada) Then
M = 1
Else
M = 0
End If
Next t
If k + M = 0 Then
Util = True
Else
Util = False
End If
End Function
Respostas
-
É só fazer o laço for até 8 que é o número do índice de Holliday. Assim:
..........
For t = 1 To 8
If Holidays(t) = CDate(DataAbreviada) Then
M = 1
Else
M = 0
End If
Next t.........
Se o laço for até 757, ele compara valores nulos com a Data abreviada e aí vai dar false. Exemplo: Holidays(200) = Cdate(Data Abreviada). Esta sentença é falsa, pois o o valor de Holidays(200) é zero e é diferente de Cdate(Data Abreviada)
- Sugerido como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 14 de junho de 2014 17:31
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 14 de junho de 2014 17:31
Todas as Respostas
-
Olá Fradique,
a função de dia útil poderia ser melhorada, e muito. Mas considerando que ele esteja funcionando, vejo duas possíveis razões para o problema:
a) A data não foi cadastrada corretamente na função, ou seja, não faz parte da matriz de feriados.
b) Na chamada da função, o Excel não está reconhecendo 24/02/2009 como data, mas sim como número (24 dividido por 2 dividido por 2009. Experimente usar DATA(2009;2;24) e veja se funciona.
Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br -
É só fazer o laço for até 8 que é o número do índice de Holliday. Assim:
..........
For t = 1 To 8
If Holidays(t) = CDate(DataAbreviada) Then
M = 1
Else
M = 0
End If
Next t.........
Se o laço for até 757, ele compara valores nulos com a Data abreviada e aí vai dar false. Exemplo: Holidays(200) = Cdate(Data Abreviada). Esta sentença é falsa, pois o o valor de Holidays(200) é zero e é diferente de Cdate(Data Abreviada)
- Sugerido como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 14 de junho de 2014 17:31
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 14 de junho de 2014 17:31