Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


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.fadeev@gmail.com (evgeny.fadeev@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+unsubscribe@pt-br.libreoffice.org
# Cancelar sua assinatura: mande e-mail vazio para:
  usuarios+unsubscribe@pt-br.libreoffice.org
# Arquivo de mensagens: http://listarchives.libreoffice.org/pt-br/usuarios/

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.