none
Identificar se uma data é um dia útil RRS feed

  • 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 Integer

    Holidays(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

      

     

    quarta-feira, 25 de fevereiro de 2009 15:52

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)

    quarta-feira, 4 de agosto de 2010 00:59

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
    domingo, 8 de março de 2009 02:47
    Moderador
  • É 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)

    quarta-feira, 4 de agosto de 2010 00:59