Bom dia, Será que alguém me pode ajudar na resolução de um problema que de seguida irei apresentar?
Eu saquei da net este código e guardei como função do Excel mas precisava que fosse alterado para o calendário português,
Muito Agradecido
Option Explicit
Function diaUtil(ByVal argData As Date) As Boolean
If Weekday(argData) = vbSunday Or Weekday(argData) = vbSaturday Then
diaUtil = False
Else
If feriado(argData) Then
diaUtil = False
Else
diaUtil = True
End If
End If
End Function
Function feriado(ByVal argData As Date) As Boolean
On Error GoTo Err_Feriado
'===========================================================
'Esta função tem como objetivo verificar se a data inserida
'é um feriado brasileiro, retornando True em caso positivo.
'
'
' *** Função de livre uso se mantidos os créditos ***
'
'===========================================================
If IsNull(argData) Then Exit Function
Dim a%, b%, c%, d%, e%, f%, g%, h%, i%, j%, k%, l%, m%, p%, q%
Dim intAno As Integer, intConta As Integer
Dim Pascoa As Date, varData(12) As Date
argData = Day(argData) & "/" & Month(argData) & "/" & Year(argData)
feriado = False
intAno = Year(CDate(argData))
' Calcula a data da Páscoa
If intAno >= 1583 Then ' Jean Baptiste Joseph Delambre (1749-1822)
a = intAno Mod 19
b = Fix(intAno / 100)
c = intAno Mod 100
d = Fix(b / 4)
e = b Mod 4
f = Fix((b + 8 )/ 25)
g = Fix((b - f + 1) / 3)
h = (19 * a + b - d - g + 15) Mod 30
i = Fix(c / 4)
k = c Mod 4
l = (32 + 2 * e + 2 * i - h - k) Mod 7
m = Fix((a + 11 * h + 22 * l) / 451)
p = Fix((h + l - 7 * m + 114) / 31)
q = (h + l - 7 * m + 114) Mod 31
Pascoa = DateSerial(intAno, p, q + 1)
Else ' Calendário Juliano
a = intAno Mod 4
b = intAno Mod 7
c = intAno Mod 19
d = (19 * c + 15) Mod 30
e = (2 * a + 4 * b - d + 34) Mod 7
f = Fix((d + e + 114) / 31)
g = (d + e + 114) Mod 31
Pascoa = DateSerial(intAno, f, g + 1)
End If
' Define feriados móveis
varData(0) = Pascoa - 48 ' Segunda-feira de Carnaval
varData(1) = Pascoa - 47 ' Terça-feira de Carnaval
varData(2) = Pascoa - 2 ' Paixão de Cristo
varData(3) = Pascoa ' Páscoa
varData(4) = Pascoa + 60 ' Corpus Christi
' Feriados Nacionais (lei 10.607/2002)
varData(5) = CDate("01/01/" & intAno) ' Confraternização Universal
varData(6) = CDate("21/04/" & intAno) ' Tiradentes
varData(7) = CDate("01/05/" & intAno) ' Dia do trabalho
varData( = CDate("07/09/" & intAno) ' Independência
varData(9) = CDate("12/10/" & intAno) ' Padroeira do Brasil
varData(10) = CDate("02/11/" & intAno) ' Finados
varData(11) = CDate("15/11/" & intAno) ' Proclamação da República
varData(12) = CDate("25/12/" & intAno) ' Natal
'... Insira aqui os feriados regionais e altere o tamanho da matriz
' Verifica data
For intConta = 0 To UBound(varData)
If CDate(argData) = varData(intConta) Then
feriado = True
Exit Function
End If
Next
Sair:
Exit Function
Err_Feriado:
MsgBox "Erro: " & Err.Number & " - " & Err.Description
Resume Sair
End Function
Eu saquei da net este código e guardei como função do Excel mas precisava que fosse alterado para o calendário português,
Muito Agradecido
Option Explicit
Function diaUtil(ByVal argData As Date) As Boolean
If Weekday(argData) = vbSunday Or Weekday(argData) = vbSaturday Then
diaUtil = False
Else
If feriado(argData) Then
diaUtil = False
Else
diaUtil = True
End If
End If
End Function
Function feriado(ByVal argData As Date) As Boolean
On Error GoTo Err_Feriado
'===========================================================
'Esta função tem como objetivo verificar se a data inserida
'é um feriado brasileiro, retornando True em caso positivo.
'
'
' *** Função de livre uso se mantidos os créditos ***
'
'===========================================================
If IsNull(argData) Then Exit Function
Dim a%, b%, c%, d%, e%, f%, g%, h%, i%, j%, k%, l%, m%, p%, q%
Dim intAno As Integer, intConta As Integer
Dim Pascoa As Date, varData(12) As Date
argData = Day(argData) & "/" & Month(argData) & "/" & Year(argData)
feriado = False
intAno = Year(CDate(argData))
' Calcula a data da Páscoa
If intAno >= 1583 Then ' Jean Baptiste Joseph Delambre (1749-1822)
a = intAno Mod 19
b = Fix(intAno / 100)
c = intAno Mod 100
d = Fix(b / 4)
e = b Mod 4
f = Fix((b + 8 )/ 25)
g = Fix((b - f + 1) / 3)
h = (19 * a + b - d - g + 15) Mod 30
i = Fix(c / 4)
k = c Mod 4
l = (32 + 2 * e + 2 * i - h - k) Mod 7
m = Fix((a + 11 * h + 22 * l) / 451)
p = Fix((h + l - 7 * m + 114) / 31)
q = (h + l - 7 * m + 114) Mod 31
Pascoa = DateSerial(intAno, p, q + 1)
Else ' Calendário Juliano
a = intAno Mod 4
b = intAno Mod 7
c = intAno Mod 19
d = (19 * c + 15) Mod 30
e = (2 * a + 4 * b - d + 34) Mod 7
f = Fix((d + e + 114) / 31)
g = (d + e + 114) Mod 31
Pascoa = DateSerial(intAno, f, g + 1)
End If
' Define feriados móveis
varData(0) = Pascoa - 48 ' Segunda-feira de Carnaval
varData(1) = Pascoa - 47 ' Terça-feira de Carnaval
varData(2) = Pascoa - 2 ' Paixão de Cristo
varData(3) = Pascoa ' Páscoa
varData(4) = Pascoa + 60 ' Corpus Christi
' Feriados Nacionais (lei 10.607/2002)
varData(5) = CDate("01/01/" & intAno) ' Confraternização Universal
varData(6) = CDate("21/04/" & intAno) ' Tiradentes
varData(7) = CDate("01/05/" & intAno) ' Dia do trabalho
varData( = CDate("07/09/" & intAno) ' Independência
varData(9) = CDate("12/10/" & intAno) ' Padroeira do Brasil
varData(10) = CDate("02/11/" & intAno) ' Finados
varData(11) = CDate("15/11/" & intAno) ' Proclamação da República
varData(12) = CDate("25/12/" & intAno) ' Natal
'... Insira aqui os feriados regionais e altere o tamanho da matriz
' Verifica data
For intConta = 0 To UBound(varData)
If CDate(argData) = varData(intConta) Then
feriado = True
Exit Function
End If
Next
Sair:
Exit Function
Err_Feriado:
MsgBox "Erro: " & Err.Number & " - " & Err.Description
Resume Sair
End Function