Correção de macro que informe os feriados

perguntadas 2013-12-20 13:03:01 +0200

esta mensagem está marcada como wiki comunitário

Esta mensagem é um wiki. Qualquer pessoa com karma >75 é bem-vinda para a melhorar.

[Bom dia, tentei refazer a minha macro para que seja uma função que informe os feriados mas ainda está dando erro #NOME?]

[REM  *****  BASIC  *****

Public Function VerificaSeFeriado As Boolean

  Dim dDatax As Date
  Dim FeriadosFixos(10) As String
  Dim mFeriados(3) As Date
  Dim dPascoa As Date

 iAno% = Year(dDataX)
 dPascoa = CalculaPascoa(iAno%)

 FeriadosFixos(1) = "1/1"             'Confraternização Universal
 FeriadosFixos(2) = "21/4"            'Tiradentes
 FeriadosFixos(3) = "1/5"             'Trabalho
 FeriadosFixos(4) = "7/9"             'Independência do Brasil
 FeriadosFixos(5) = "20/9"            'Revolução Farroupilha
 FeriadosFixos(6) = "12/10"           'Nossa Senhora Aparecida
 FeriadosFixos(7) = "2/11"            'Finados
 FeriadosFixos(8) = "15/11"           'Proclamação da Repúplica
 FeriadosFixos(9) = "25/12"           'Natal
 FeriadosFixos(10) = "2/2"             'Navegantes

 mFeriados(1) = DateAdd("d", -2, dPascoa)       'Sexta Paixão
 mFeriados(2) = DateAdd("d", -47, dPascoa)      'Carnaval
 mFeriados(3) = DateAdd("d", 60, dPascoa)       'Corpus Christi

With com.sun.star.text.textfield.Datetime

 Select Case dDataX
 Case FeriadosFixos(0), FeriadosFixos(1), FeriadosFixos(2), FeriadosFixos(3), FeriadosFixos(4), FeriadosFixos(5), FeriadosFixos(6), FeriadosFixos(7), FeriadosFixos(8), FeriadosFixos(9)
 VerificaSeFeriado = True
 Case mFeriados(0), mFeriados(1), mFeriados(2)
 VerificaSeFeriado = True
 Case Else
 VerificaSeFeriado = False
 End Select

End With

 End Function

Private Function CalculaPascoa As Date
 Dim A As Integer
 Dim B As Integer
 Dim C As Integer
 Dim D As Integer
 Dim E As Integer
 Dim F As Integer
 Dim G As Integer
 Dim H As Integer
 Dim I As Integer
 Dim J As Integer
 Dim K As Integer
 Dim L As Integer
 Dim M As Integer
 Dim N As Integer
 Dim O As Integer
 Dim P As Integer
 Dim Q As Integer
 Dim R As Integer

 Dim iAno As Integer

 Dim Calculo As String

 CalculaPascoa = Calculo

 A = iAno \ 100      'o inteiro de (Ano ÷ 100)
 B = iAno Mod 19     'o resto de (Ano ÷ 19)
 c = (A - 17) \ 25   'o inteiro de [(A - 17) ÷ 25]
 D = A \ 4           'o inteiro de (A ÷ 4)
 E = (A - c) \ 3     'o inteiro de [(A - C) ÷ 3]
 F = (A - D - E + (19 * B) + 15) Mod 30    'o resto de {[A - D - E + (19xB) + 15] ÷ 30}
 G = F \ 28          'o inteiro de (F ÷ 28)
 H = 29 \ (F + 1)    'o inteiro de [29 ÷ (F + 1)]
 I = (21 - B) \ 11   'o inteiro de [(21 - B) ÷ 11]
 J = G * H * I
 K = F - (G * (1 - J))
 L = iAno \ 4         'o inteiro de (Ano ÷ 4)
 M = (iAno + L + K + 2 - A + D) Mod 7       'o resto de [(Ano + L + K + 2 - A + D) ÷ 7 ...
(mais)
editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

Há uma forma mais rápida de buscar o feriado da Páscoa, usando a função do Calc =DOMINGODEPÁSCOA(), mas eu vou pesquisar mais...

imagem do gravatar de OlivierOlivier ( 2013-12-20 14:41:33 +0200 )editar

Para esclarecer a apresentei a planilha e a fórmula para me dá o resultado, no site em anexo:http://s6.postimg.org/5vud1n9tt/Sem_t_tulo2.jpg

imagem do gravatar de Jorge ThomazJorge Thomaz ( 2013-12-20 17:55:38 +0200 )editar

Jorge, pelo que entendi, na planilha anexa, coluna ASSINATURA DE ENTRADA, deveria aparecer no dia feriado a palavra FERIADO, é isso. Se sim pode faze-lo com a função CONT.SE; 1o. Cria tabela data/feriado; 2o. Exemplo: em B17 (01/10/2013), você conta a data na tabela, se (>0) sim "FERIADO" se (=0) não "em branco" ou Sábado ou Domingo.[ envie para gilberto@schiavinatto.com copia da planilha que devolvo com o exemplo).

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2013-12-22 00:49:46 +0200 )editar