DIA E FERIADO
Gente, tenho um botão em um form em VBA Excel 2003 que carrega um listview com os dias do mês informando uma data inicial.Também exibe os dias da semana.é um controle de entradas e saidas e valor a pagar por dia.Só que preciso que nos dias que for feriado, seja exibido a palavra FERIADO na linha correspondente do mês. Com sabados e domingos já consegui. Só que quando se trata de feriados envolve funções, e não sei como chamar essas funções. A parte inicial consegui com a ajuda dos colegas do forum e pesquisando aqui mesmo no forum achei uma função, mas não estou conseguindo juntar as duas coisas. Segue:
O que eu tenho no momento funcionando:
Private Sub cmdGerar_Click()
Dim bFeriado As Boolean
l = txtTotalDiasTrabalhados.Text [ô] Quantidade de DIAS
Dim MyArray(31) As Date [ô] Indica que o numero Maximo de DIAS será 31
Dim i As Integer
MyArray(0) = txtDataInicial.Text [ô] Indica que Myarray começara no (0) que será o valor de txtdatainicial
For i = 0 To l [ô] Indica que (i) irá de 0 até o Valor de (l)
MyArray(i) = DateAdd([Ô]d[Ô], i, txtDataInicial) [ô] indica que Myarray Somara o Valor de (i) que será o Numero de dias e (d) indica o dia
Dim lst As ListItem
Set lst = ListView1.ListItems.Add(, , Text)
lst.ListSubItems.Add Text:=Format(MyArray(i), [Ô]dd/mm/yyyy[Ô]) [ô] Indica que O Numero de dias Será Inserido em lst
lst.ListSubItems.Add Text:=WeekdayName(Weekday((MyArray(i)))) [ô] ja vai retornar o dia da semana (segunda, terça....)
If Weekday(MyArray(i)) = 1 Then [ô]Or Weekday(MyArray(i)) = 7 Then [ô] Se for de segunda a sexta acrescenta o restante
lst.ListSubItems.Add Text:=[Ô]Domingo[Ô]
lst.ListSubItems.Add Text:=[Ô]Domingo[Ô]
lst.ListSubItems.Add Text:=[Ô]Domingo[Ô]
lst.ListSubItems.Add Text:=[Ô]Domingo[Ô]
lst.ListSubItems.Add Text:=[Ô]0[Ô]
lst.ListSubItems.Add Text:=[Ô]0[Ô]
lst.ListSubItems.Add Text:=[Ô]0[Ô]
ElseIf Weekday(MyArray(i)) = 7 Then
lst.ListSubItems.Add Text:=[Ô]Sábado[Ô]
lst.ListSubItems.Add Text:=[Ô]Sábado[Ô]
lst.ListSubItems.Add Text:=[Ô]Sábado[Ô]
lst.ListSubItems.Add Text:=[Ô]Sábado[Ô]
lst.ListSubItems.Add Text:=[Ô]0[Ô]
lst.ListSubItems.Add Text:=[Ô]0[Ô]
lst.ListSubItems.Add Text:=[Ô]0[Ô]
[ô] ElseIf bFeriado = EFeriado(Weekday(MyArray(i))) Then [ô] nesse trecho comentado do código que preciso inserir a função feriado
[ô] bFeriado = True
[ô] lst.ListSubItems.Add Text:=[Ô]Feriado[Ô] [ô]Me.txtEntrada.Text
[ô] lst.ListSubItems.Add Text:=[Ô]Feriado[Ô] [ô]Me.txtSaida.Text
[ô] lst.ListSubItems.Add Text:=[Ô]Feriado[Ô] [ô]Me.txtEntrada2.Text
[ô] lst.ListSubItems.Add Text:=[Ô]Feriado[Ô] [ô]Me.txtSaida2.Text
[ô] lst.ListSubItems.Add Text:=[Ô]0[Ô] [ô]Format(Me.ComboBox_CargaHorariaDia, [Ô]h:mm[Ô])
[ô] lst.ListSubItems.Add Text:=[Ô]0[Ô] [ô]ComboBox_ValorHora.Text
[ô] lst.ListSubItems.Add Text:=[Ô]0[Ô] [ô]txtValorReceber.Text
Else
lst.ListSubItems.Add Text:=Me.txtEntrada.Text
lst.ListSubItems.Add Text:=Me.txtSaida.Text
lst.ListSubItems.Add Text:=Me.txtEntrada2.Text
lst.ListSubItems.Add Text:=Me.txtSaida2.Text
lst.ListSubItems.Add Text:=Format(Me.ComboBox_CargaHorariaDia, [Ô]h:mm[Ô])
lst.ListSubItems.Add Text:=ComboBox_ValorHora.Text
lst.ListSubItems.Add Text:=txtValorReceber.Text
End If
Next [ô] Indica que tera que voltar no começo até que Myarray seja do mesmo valor de (l)
ExportaParaPlanilha
End Sub
ESSA é A FUNÇÃO QUE DESCOBRI AQUI NO FORUM:
Private Function VerificaSeFeriado(dDataX As Date) As Boolean
Dim FeriadosFixos(7) As Date
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([Ô]12/10/[Ô] & iAnoX) [ô]Nossa Senhora Aparecida
FeriadosFixos(5) = CDate([Ô]2/11/[Ô] & iAnoX) [ô]Finados
FeriadosFixos(6) = CDate([Ô]15/11/[Ô] & iAnoX) [ô]Proclamação da Repúplica
FeriadosFixos(7) = CDate([Ô]25/12/[Ô] & iAnoX) [ô]Natal
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)
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
O que eu tenho no momento funcionando:
Private Sub cmdGerar_Click()
Dim bFeriado As Boolean
l = txtTotalDiasTrabalhados.Text [ô] Quantidade de DIAS
Dim MyArray(31) As Date [ô] Indica que o numero Maximo de DIAS será 31
Dim i As Integer
MyArray(0) = txtDataInicial.Text [ô] Indica que Myarray começara no (0) que será o valor de txtdatainicial
For i = 0 To l [ô] Indica que (i) irá de 0 até o Valor de (l)
MyArray(i) = DateAdd([Ô]d[Ô], i, txtDataInicial) [ô] indica que Myarray Somara o Valor de (i) que será o Numero de dias e (d) indica o dia
Dim lst As ListItem
Set lst = ListView1.ListItems.Add(, , Text)
lst.ListSubItems.Add Text:=Format(MyArray(i), [Ô]dd/mm/yyyy[Ô]) [ô] Indica que O Numero de dias Será Inserido em lst
lst.ListSubItems.Add Text:=WeekdayName(Weekday((MyArray(i)))) [ô] ja vai retornar o dia da semana (segunda, terça....)
If Weekday(MyArray(i)) = 1 Then [ô]Or Weekday(MyArray(i)) = 7 Then [ô] Se for de segunda a sexta acrescenta o restante
lst.ListSubItems.Add Text:=[Ô]Domingo[Ô]
lst.ListSubItems.Add Text:=[Ô]Domingo[Ô]
lst.ListSubItems.Add Text:=[Ô]Domingo[Ô]
lst.ListSubItems.Add Text:=[Ô]Domingo[Ô]
lst.ListSubItems.Add Text:=[Ô]0[Ô]
lst.ListSubItems.Add Text:=[Ô]0[Ô]
lst.ListSubItems.Add Text:=[Ô]0[Ô]
ElseIf Weekday(MyArray(i)) = 7 Then
lst.ListSubItems.Add Text:=[Ô]Sábado[Ô]
lst.ListSubItems.Add Text:=[Ô]Sábado[Ô]
lst.ListSubItems.Add Text:=[Ô]Sábado[Ô]
lst.ListSubItems.Add Text:=[Ô]Sábado[Ô]
lst.ListSubItems.Add Text:=[Ô]0[Ô]
lst.ListSubItems.Add Text:=[Ô]0[Ô]
lst.ListSubItems.Add Text:=[Ô]0[Ô]
[ô] ElseIf bFeriado = EFeriado(Weekday(MyArray(i))) Then [ô] nesse trecho comentado do código que preciso inserir a função feriado
[ô] bFeriado = True
[ô] lst.ListSubItems.Add Text:=[Ô]Feriado[Ô] [ô]Me.txtEntrada.Text
[ô] lst.ListSubItems.Add Text:=[Ô]Feriado[Ô] [ô]Me.txtSaida.Text
[ô] lst.ListSubItems.Add Text:=[Ô]Feriado[Ô] [ô]Me.txtEntrada2.Text
[ô] lst.ListSubItems.Add Text:=[Ô]Feriado[Ô] [ô]Me.txtSaida2.Text
[ô] lst.ListSubItems.Add Text:=[Ô]0[Ô] [ô]Format(Me.ComboBox_CargaHorariaDia, [Ô]h:mm[Ô])
[ô] lst.ListSubItems.Add Text:=[Ô]0[Ô] [ô]ComboBox_ValorHora.Text
[ô] lst.ListSubItems.Add Text:=[Ô]0[Ô] [ô]txtValorReceber.Text
Else
lst.ListSubItems.Add Text:=Me.txtEntrada.Text
lst.ListSubItems.Add Text:=Me.txtSaida.Text
lst.ListSubItems.Add Text:=Me.txtEntrada2.Text
lst.ListSubItems.Add Text:=Me.txtSaida2.Text
lst.ListSubItems.Add Text:=Format(Me.ComboBox_CargaHorariaDia, [Ô]h:mm[Ô])
lst.ListSubItems.Add Text:=ComboBox_ValorHora.Text
lst.ListSubItems.Add Text:=txtValorReceber.Text
End If
Next [ô] Indica que tera que voltar no começo até que Myarray seja do mesmo valor de (l)
ExportaParaPlanilha
End Sub
ESSA é A FUNÇÃO QUE DESCOBRI AQUI NO FORUM:
Private Function VerificaSeFeriado(dDataX As Date) As Boolean
Dim FeriadosFixos(7) As Date
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([Ô]12/10/[Ô] & iAnoX) [ô]Nossa Senhora Aparecida
FeriadosFixos(5) = CDate([Ô]2/11/[Ô] & iAnoX) [ô]Finados
FeriadosFixos(6) = CDate([Ô]15/11/[Ô] & iAnoX) [ô]Proclamação da Repúplica
FeriadosFixos(7) = CDate([Ô]25/12/[Ô] & iAnoX) [ô]Natal
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)
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
acho que vc não coloca o weekday() nesta função, pois não vai retornar uma data que é o que a Função pede então tente isso
acho que já resolve
ElseIf EFeriado(MyArray(i)) = True Then
lst.ListSubItems.Add Text:=[Ô]Feriado[Ô] [ô]Me.txtEntrada.Text
lst.ListSubItems.Add Text:=[Ô]Feriado[Ô] [ô]Me.txtSaida.Text
lst.ListSubItems.Add Text:=[Ô]Feriado[Ô] [ô]Me.txtEntrada2.Text
lst.ListSubItems.Add Text:=[Ô]Feriado[Ô] [ô]Me.txtSaida2.Text
lst.ListSubItems.Add Text:=[Ô]0[Ô] [ô]Format(Me.ComboBox_CargaHorariaDia, [Ô]h:mm[Ô])
lst.ListSubItems.Add Text:=[Ô]0[Ô] [ô]ComboBox_ValorHora.Text
lst.ListSubItems.Add Text:=[Ô]0[Ô] [ô]txtValorReceber.Text
acho que já resolve
MARCELO-TREZE fechou todas. Vou encerrar e pontuar.....!!!!!!!!!!!
Tópico encerrado , respostas não são mais permitidas