http://ask.libreoffice.org/pt-br/users/18/grafeno/ (Grafeno) editaram um 
http://ask.libreoffice.org/pt-br/question/752/como-posso-converter-um-macro-criado-no-excel-2007-que-me-da-os-feriados-como-forma-de-funcao/?answer=808#post-id-808
 (answer).

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 Boolean

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

1

Case dPascoa, FeriadosMoveis(0), FeriadosMoveis(1), FeriadosMoveis(2)

VerificaSeFeriado = True

1

Case Else

VerificaSeFeriado = False

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

In reply to Jorge Thomaz's question:

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

Tags:

Macro, função, FERIADO, Calc.

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

Para mudar a frequência e conteúdo dos alertas, visite 
http://ask.libreoffice.org/pt-br/users/279/lista-usuarios/subscriptions/ (seu 
perfil de usuário).

Se achar que essa mensagem foi enviada por engano, avise o administrador do 
forum em mailto:evgeny.fad...@gmail.com (evgeny.fad...@gmail.com).

Atenciosamente,Administrador do
-- 
Você está recebendo e-mails da lista usuarios@pt-br.libreoffice.org
# Informações sobre os comandos disponíveis (em inglês):
  mande e-mail vazio para usuarios+unsubscr...@pt-br.libreoffice.org
# Cancelar sua assinatura: mande e-mail vazio para:
  usuarios+unsubscr...@pt-br.libreoffice.org
# Arquivo de mensagens: http://listarchives.libreoffice.org/pt-br/usuarios/

Responder a