MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    Feriados brasileiros

    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7780
    Registrado : 05/11/2009

    Feriados brasileiros Empty Feriados brasileiros

    Mensagem  Alexandre Neves em 13/10/2010, 20:48

    Por várias pessoas procurarem feriados brasileiros, fiz esta função que me parece estar certa.
    De qualquer forma, se existir algum erro ou melhoramento possível, agradeço que me informem.
    Nota: Para os feriados portugueses já existe a função Feriado

    Para colar num módulo:
    Option Compare Database
    Option Explicit

    Enum NomeEstado
    Acre = 1
    Alagoas = 2
    Amapá = 3
    Amazonas = 4
    Bahía = 5
    Ceará = 6
    DistritoFederal = 7
    EspíritoSanto = 8
    Goiás = 9
    Maranhão = 10
    MatoGrosso = 11
    MatoGrossoDoSul = 12
    MinasGerais = 13
    Pará = 14
    Paraíba = 15
    Paraná = 16
    Pernambuco = 17
    Piauí = 18
    RioDeJaneiro = 19
    RioGrandeDoNorte = 20
    RioGrandeDoSul = 21
    Rondônia = 22
    Roraima = 23
    SantaCatarina = 24
    SãoPaulo = 25
    Sergipe = 26
    Tocantins = 27
    End Enum

    Function PascoaB(intAno As Integer) As Date
    Dim X As Byte, Y As Byte
    Dim a As Byte, B As Byte, c As Byte, d As Byte, e As Byte

    If intAno > 1581 And intAno < 1600 Then X = 22: Y = 2
    If intAno > 1599 And intAno < 1700 Then X = 22: Y = 2
    If intAno > 1699 And intAno < 1800 Then X = 23: Y = 3
    If intAno > 1799 And intAno < 1900 Then X = 23: Y = 4
    If intAno > 1899 And intAno < 2000 Then X = 24: Y = 5
    If intAno > 1999 And intAno < 2100 Then X = 24: Y = 5
    If intAno > 2099 And intAno < 2200 Then X = 24: Y = 6
    If intAno > 2199 And intAno < 2300 Then X = 25: Y = 7

    a = intAno Mod 19
    B = intAno Mod 4
    c = intAno Mod 7
    d = ((19 * a) + X) Mod 30
    e = ((2 * B) + (4 * c) + (6 * d) + Y) Mod 7
    If (d + e) < 10 Then
    PascoaB = DateSerial(intAno, 3, d + e + 22)
    Else
    PascoaB = DateSerial(intAno, 4, d + e - 9)
    End If
    If PascoaB = DateSerial(intAno, 4, 26) Then PascoaB = DateAdd("d", -7, PascoaB)
    If PascoaB = DateSerial(intAno, 4, 25) And d = 28 And a > 10 Then PascoaB = DateAdd("d", -7, PascoaB)
    End Function

    Function FeriadoBrasileiro(dtData As Date, Optional strNomeEstado As NomeEstado) As Boolean
    'criada por Alexandre Neves
    'www.esnips.com\web\AlexandreNeves
    FeriadoBrasileiro = False
    Select Case Format(dtData, "dd-mm")
    Case "01=01"
    FeriadoBrasileiro = True
    Case "21-04"
    FeriadoBrasileiro = True
    Case "01-05"
    FeriadoBrasileiro = True
    Case "07-09"
    FeriadoBrasileiro = True
    Case "12-10"
    FeriadoBrasileiro = True
    Case "02-11"
    FeriadoBrasileiro = True
    Case "15-11"
    FeriadoBrasileiro = True
    Case "25-12"
    FeriadoBrasileiro = True
    End Select

    If dtData = DateAdd("d", -47, Pascoa(Year(dtData))) Then FeriadoBrasileiro = True
    If dtData = DateAdd("d", -2, Pascoa(Year(dtData))) Then FeriadoBrasileiro = True
    If dtData = Pascoa(Year(dtData)) Then FeriadoBrasileiro = True
    If dtData = DateAdd("d", 49, Pascoa(Year(dtData))) Then FeriadoBrasileiro = True
    If dtData = DateAdd("d", 56, Pascoa(Year(dtData))) Then FeriadoBrasileiro = True
    If dtData = DateAdd("d", 60, Pascoa(Year(dtData))) Then FeriadoBrasileiro = True

    If Not IsMissing(strNomeEstado) Then
    Select Case strNomeEstado
    Case Acre
    If Format(dtData, "dd-mm") = "15-06" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "06-08" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "05-09" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "17-11" Then FeriadoBrasileiro = True
    Case Alagoas
    If Format(dtData, "dd-mm") = "24-06" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "29-06" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "16-09" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    Case Amapá
    If Format(dtData, "dd-mm") = "19-03" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "05-10" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    Case Amazonas
    If Format(dtData, "dd-mm") = "05-09" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "08-12" Then FeriadoBrasileiro = True
    Case Bahía
    If Format(dtData, "dd-mm") = "28-06" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "02-07" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    Case DistritoFederal
    If Format(dtData, "dd-mm") = "21-04" Then FeriadoBrasileiro = True
    Case EspíritoSanto
    If Format(dtData, "dd-mm") = "23-05" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "28-10" Then FeriadoBrasileiro = True
    Case Goiás
    If Format(dtData, "dd-mm") = "26-07" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "28-10" Then FeriadoBrasileiro = True
    Case Maranhão
    If Format(dtData, "dd-mm") = "28-07" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "28-12" Then FeriadoBrasileiro = True
    Case MatoGrosso
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    Case MatoGrossoDoSul
    If Format(dtData, "dd-mm") = "11-10" Then FeriadoBrasileiro = True
    Case Pará
    If Format(dtData, "dd-mm") = "15-08" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "08-12" Then FeriadoBrasileiro = True
    Case Paraíba
    If Format(dtData, "dd-mm") = "05-08" Then FeriadoBrasileiro = True
    Case Paraná
    If Format(dtData, "dd-mm") = "08-09" Then FeriadoBrasileiro = True
    Case Pernambuco
    If Format(dtData, "dd-mm") = "06-03" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "24-06" Then FeriadoBrasileiro = True
    Case Piauí
    If Format(dtData, "dd-mm") = "13-03" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "19-10" Then FeriadoBrasileiro = True
    Case RioDeJaneiro
    If Format(dtData, "dd-mm") = "21-01" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "23-04" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "18-10" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "28-10" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    Case RioGrandeDoNorte
    If Format(dtData, "dd-mm") = "29-06" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "03-10" Then FeriadoBrasileiro = True
    Case RioGrandeDoSul
    If Format(dtData, "dd-mm") = "20-09" Then FeriadoBrasileiro = True
    Case Rondônia
    If Format(dtData, "dd-mm") = "04-01" Then FeriadoBrasileiro = True
    Case Roraima
    If Format(dtData, "dd-mm") = "05-10" Then FeriadoBrasileiro = True
    Case SantaCatarina
    If Format(dtData, "dd-mm") = "11-08" Then FeriadoBrasileiro = True
    Case SãoPaulo
    If Format(dtData, "dd-mm") = "09-07" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    Case Sergipe
    If Format(dtData, "dd-mm") = "08-07" Then FeriadoBrasileiro = True
    Case Tocantins
    If Format(dtData, "dd-mm") = "05-10" Then FeriadoBrasileiro = True
    End Select
    End If
    End Function


      Data/hora atual: 28/11/2020, 02:03