Boa noite, André
De facto, esqueci-me dos feriados
1 - Cole num módulo
Option Compare Database
Option Explicit
' 'criada por Alexandre Neves
' 'www.esnips.com\web\AlexandreNeves
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 DiasUteisBrasileiros(DataInicial As Date, DataFinal As Date, Optional Estado As NomeEstado) As Integer
Dim DataActual As Date
DiasUteisBrasileiros = 0
For DataActual = DataInicial To DataFinal
If Not FeriadoBrasileiro(DataActual, Estado) And Weekday(DataActual) <> 1 And Weekday(DataActual) <> 7 Then DiasUteisBrasileiros = DiasUteisBrasileiros + 1
Next
End Function
Function PascoaB(intAno As Integer) As Date
' 'criada por Alexandre Neves
' 'www.esnips.com\web\AlexandreNeves
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, PascoaB(Year(dtData))) Then FeriadoBrasileiro = True
If dtData = DateAdd("d", -2, PascoaB(Year(dtData))) Then FeriadoBrasileiro = True
If dtData = PascoaB(Year(dtData)) Then FeriadoBrasileiro = True
If dtData = DateAdd("d", 49, PascoaB(Year(dtData))) Then FeriadoBrasileiro = True
If dtData = DateAdd("d", 56, PascoaB(Year(dtData))) Then FeriadoBrasileiro = True
If dtData = DateAdd("d", 60, PascoaB(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
2 - Na consulta, coloque =DiasUteisBrasileiros(dtNF;DtEntrega)