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

[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]

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

Atte,
Grafeno

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

É isso mesmo…

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?

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

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

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.

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?

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

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