Pergunte aqui
0

Como posso converter um macro criado no excel 2007 que me dá os feriados como forma de função

perguntadas 2013-09-17 21:08:18 +0200

imagem do gravatar de Jorge Thomaz

updated 2013-09-17 21:12:36 +0200

imagem do gravatar de Olivier
[Public Function VerificaSeFeriado(dDataX As Date) As Boolean
  Dim FeriadosFixos(9) As String
  Dim FeriadosMoveis(2) As Date
  Dim iAnoX As Integer
  Dim dPascoa As Date

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

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

 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 FeriadosMoveis(0), FeriadosMoveis(1), FeriadosMoveis(2)
 VerificaSeFeriado = True
 Case Else
 VerificaSeFeriado = False
 End Select

 End Function

Private Function CalculaPascoa(iAno As Integer) 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 P As Integer
 Dim Q As Integer
 Dim R As Integer
 Dim S As Integer

 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]
 N = K - M
 P = (N + 40) \ 44    'o inteiro de [(N + 40) ÷ 44]
 Q = 3 + P
 R = Q \ 4           'o inteiro de (Q ÷ 4)
 S = N + 28 - (31 * R)

 CalculaPascoa = CDate(S & "/" & Q & "/" & iAno)

 End Function]
editar alterar tag assinalar como ofensivo fechar mesclar Excluir

2 Respostas

0

respondidas 2013-10-06 20:26:19 +0200

imagem do gravatar de Grafeno

updated 2013-10-16 00:24:28 +0200

Olá,

Para converter funções, bem como macros, é preciso reescrevê-las, obedecendo a API UNO do LibreOffice.

No seu caso, não havia nenhuma função interna ou método exclusivo do VBA no código que pudesse comprometer as funções. Apenas encontrei algumas pequenas inconsistências, que tomei a liberdade de corrigir:

Obs.: Editei a primeira função (VerificaSeFeriado) para retornar 1 para verdadeiro (é feriado) e 0 para falso (não é feriado). Assim, deixou de dar o erro "#Valor!" quando usada dentro da função SE().

Public Function VerificaSeFeriado(dDataX As Date) As Integer
Dim FeriadosFixos(9) as String
Dim FeriadosMoveis(2) as Date
Dim iAnoX as Integer
Dim dPascoa as Date

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

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


   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 = 1
     Case dPascoa, FeriadosMoveis(0), FeriadosMoveis(1), FeriadosMoveis(2)
       VerificaSeFeriado = 1
     Case Else
       VerificaSeFeriado = 0
   End Select

End Function

Private Function CalculaPascoa(iAno As Integer) As Date
Dim A, B, C, D, E, F, G, H, I as Integer
Dim J, K, L, M, N, P, Q, R, S as Integer

   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 ...
(more)
editar assinalar como ofensivo Excluir Link mais

Comentários

Planilha de exemplo com o código: http://www.sendspace.com/file/w9wsjm

imagem do gravatar de GrafenoGrafeno ( 2014-02-17 02:51:03 +0200 )editar
0

respondidas 2013-10-14 17:27:07 +0200

imagem do gravatar de Jorge Thomaz

updated 2013-10-18 02:42:41 +0200

É isso mesmo......

editar assinalar como ofensivo Excluir Link mais

Comentários

Também estou usando o LibO 4.1.1.2 e não recebi nenhum erro. Será que a célula de origem da data não está com o formato texto? Como você está "chamando" as funções?

imagem do gravatar de GrafenoGrafeno ( 2013-10-14 19:17:01 +0200 )editar

Jorge Thomaz, depois de editar a função na minha resposta, a fórmula funcionou corretamente no meu LibO 4.1.1.2 >>> http://s14.postimg.org/6qqqkfjmp/Sem_t_tulo.jpg

imagem do gravatar de GrafenoGrafeno ( 2013-10-16 00:30:19 +0200 )editar

O erro "#VALOR!" dá a entender que o conteúdo da célula A17 não é uma data. Veja se colocando "1/11/2012" lá dentro o resultado vem. Depois você pode ir em "" Formatar >> Células... >> Categoria: Data > Código do Formato: DD "" para exibir apenas o dia na célula.

imagem do gravatar de GrafenoGrafeno ( 2013-10-17 18:04:35 +0200 )editar

Tentei fazer como vc disse mas não teu certo....estou enviando imagem em que me dá as mensagens...... http://s6.postimg.org/mv3bgwl1d/Sem_t_tulo1.jpg , http://s6.postimg.org/5vud1n9tt/Sem_t_tulo2.jpg

imagem do gravatar de Jorge ThomazJorge Thomaz ( 2013-10-17 20:30:30 +0200 )editar

Desculpe Jorge, mas parece que não tinha entendido completamente sua demanda. Você queria converter as funções para usar no arquivo do formato .xls?

imagem do gravatar de GrafenoGrafeno ( 2013-10-17 21:39:10 +0200 )editar

Oi pessoal, até agora não consegui resolver o meu problema de informar os feriados como função/macro no calc.

imagem do gravatar de Jorge ThomazJorge Thomaz ( 2013-12-05 15:29:06 +0200 )editar

Jorge Thomaz, acredito que a solução seja adotar o formato ODS para a planilha. O LibO não está interpretando seu código dentro de um módulo VBA xls. Para exemplificar subi uma planilha no link http://www.sendspace.com/file/w9wsjm

imagem do gravatar de GrafenoGrafeno ( 2014-02-17 02:47:51 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2013-09-17 21:08:18 +0200

Lidas: 571 vezes

Última atualização: Oct 18 '13