Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Dias Uteis entre duas Datas [RESOLVIDO]

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Avatar do usuário
Marcus Bull
Colaborador
Colaborador
Mensagens: 40
Registrado em: Qua Mai 09, 2012 8:31 am

Dias Uteis entre duas Datas [RESOLVIDO]

Mensagem por Marcus Bull »

Boa noite,

Preciso saber os dias uteis ente duas datas sendo :

txt_DataCadastro (onde digito no formulário) e a outra data seria a data do dia para saber qtos dias transcorreram a cada consulta.

tentei usar assim :

mDias = CDate(txt_DataCadastro.Value) - Weekday(Now().Value), mas não funcionou.

Alguem pode me ajudar

Obrigado..
Editado pela última vez por Marcus Bull em Sex Out 31, 2014 9:55 am, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Dias Uteis entre duas Datas

Mensagem por Reinaldo »

A função weekDay, em português corresponde à função dia.da.semana, retorna o numero referente ao dia da semana em uma determinada data.
Se desejar a diferença de dias entre duas datas no VBA pode utilizar:

Código: Selecionar todos

nDias=Date-Cdate(txt_DataCadastro.text)
Assim terá o numero de dias entre duas datas, incluindo sábado/domingo/feriado.

Se o objetivo for desconsiderar final de semana e feriado, como a função diatrabalhototal (networkdays) não é reconhecida no vba, pode-se utilizar assim:

Código: Selecionar todos

Dim nDias As String
nDias = "01/05/2014"
Range("A1").FormulaLocal = "=DIATRABALHOTOTAL(data.valor(""" & nDias & """);Hoje();o1:o12)"
nDias = Range("A1").Value
MsgBox nDias
Range("a1") = ""
Onde O1:O12 corresponde a range com os feriados, e A1 uma celula qualquer para o calculo da função na planilha

Eventualmente se preferir, pode utilizar a UDF proposta em http://www.cpearson.com/excel/betternetworkdays.aspx


Avatar do usuário
Marcus Bull
Colaborador
Colaborador
Mensagens: 40
Registrado em: Qua Mai 09, 2012 8:31 am

Re: Dias Uteis entre duas Datas

Mensagem por Marcus Bull »

Olá Rmarco
O objetivo mesmo é desconsiderar final de semana e feriados, seria possível adaptar para essa rotina ?

Private Sub btn_Cadastrar_Click()

If txt_NomeAluno = "" Or txt_DataCadastro = "" Then
Me.txt_Protocolo.BorderColor = &HFF&
Me.txt_DataCadastro.BorderColor = &HFF&
Me.txt_NomeAluno.BorderColor = &HFF&
Me.txt_Matricula.BorderColor = &HFF&
MsgBox "Campos em DESTAQUE são obrigatórios", vbCritical, Soft
Unload Me
Form_SEEDUC.Show
End If
'Exit Sub

Dim ID As Long
Dim NomeAluno As String
Dim Matricula As String
Dim Protocolo As String
Dim Dias As String
Dim Solicitacao As String
Dim resposta As String
Dim status As String
Dim xATV As String

Plan11.Activate
Range("A1048576").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
Dim Data As String
Dim linha As Long


ID = txt_id
Me.Chk_Pendente = 0
Matricula = txt_Matricula
NomeAluno = txt_NomeAluno
Data = txt_DataCadastro
Protocolo = txt_Protocolo
Solicitacao = Txt_Solicitacao
resposta = Txt_Resposta

linha = Range("A" & Rows.Count).End(xlUp).Row + 1
xATV = "N": If Me.Chk_Pendente = 0 Then xATV = "S"
Cells(linha, 1) = ID
Cells(linha, 2) = xATV
Cells(linha, 3) = Protocolo
Cells(linha, 4) = Data
Cells(linha, 5) = NomeAluno
Cells(linha, 6) = Matricula
Cells(linha, 7) = Solicitacao
Cells(linha, 8) = resposta
Cells(linha, 9) = Dias <---------- seria gravado nessa variável e posteriormente na planilha

Unload Me
Form_SEEDUC.Show
End Sub

obrigado


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Dias Uteis entre duas Datas

Mensagem por Reinaldo »

Não entendi Marcus?
A variavel Dias é "carregada" de uma celula de uma planilha (Cells(linha,9)), então já foi calculada?


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Marcus Bull
Colaborador
Colaborador
Mensagens: 40
Registrado em: Qua Mai 09, 2012 8:31 am

Re: Dias Uteis entre duas Datas

Mensagem por Marcus Bull »

oa tarde Rmarco,

Na verdade não me expressei direito.

Na planilha eu uso essa formula, =SE(D14=0;"";DIATRABALHOTOTAL(D14;HOJE())), só que a cada registro q eu gravo eu tenho que copiar para linha abaixo, se não copiar aparece em branco na ListView, por isso que eu mandei a rotina para ver se tinha como implementar o que vc me passou. Seria um Luxo se fizesse o calculo e na hora de gravar já gravaria os dias úteis.

Um abraço


Avatar do usuário
Marcus Bull
Colaborador
Colaborador
Mensagens: 40
Registrado em: Qua Mai 09, 2012 8:31 am

Re: Dias Uteis entre duas Datas

Mensagem por Marcus Bull »

Boa tarde Rmarco,

Na verdade não me expressei direito.

Na planilha eu uso essa formula, =SE(D14=0;"";DIATRABALHOTOTAL(D14;HOJE())), só que a cada registro q eu gravo eu tenho que copiar para linha abaixo, se não copiar aparece em branco na ListView, por isso que eu mandei a rotina para ver se tinha como implementar o que vc me passou. Seria um Luxo se fizesse o calculo e na hora de gravar já gravaria os dias úteis.

Um abraço


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Dias Uteis entre duas Datas

Mensagem por Reinaldo »

Talvez assim:

Código: Selecionar todos

Private Sub btn_Cadastrar_Click()
'Declaração das Variaveis
Dim ID As Long, Linha As Long
Dim NomeAluno As String, Matricula As String, Protocolo As String
Dim Solicitacao As String, Resposta As String, Status As String
Dim xATV As String, Dias As String, Data As String

If txt_NomeAluno = "" Or txt_DataCadastro = "" Then
    Me.txt_Protocolo.BorderColor = &HFF&
    Me.txt_DataCadastro.BorderColor = &HFF&
    Me.txt_NomeAluno.BorderColor = &HFF&
    Me.txt_Matricula.BorderColor = &HFF&
    MsgBox "Campos em DESTAQUE são obrigatórios", vbCritical, Soft
    Unload Me
    Form_SEEDUC.Show
End If
'Exit Sub

Plan11.Activate
Range("A1048576").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select

ID = txt_id
Me.Chk_Pendente = 0
Matricula = txt_Matricula
NomeAluno = txt_NomeAluno
Data = txt_DataCadastro
Protocolo = txt_Protocolo
Solicitacao = Txt_Solicitacao
Resposta = Txt_Resposta

Linha = Range("A" & Rows.Count).End(xlUp).Row + 1
xATV = "N": If Me.Chk_Pendente = 0 Then xATV = "S"
Cells(Linha, 1) = ID
Cells(Linha, 2) = xATV
Cells(Linha, 3) = Protocolo
Cells(Linha, 4) = Data
Cells(Linha, 5) = NomeAluno
Cells(Linha, 6) = Matricula
Cells(Linha, 7) = Solicitacao
Cells(Linha, 8) = Resposta
Cells(Linha, 9).FormulaLocal = "=DIATRABALHOTOTAL(data.valor(""" & Data & """);Hoje();o1:o12)"
'Dias '<---------- seria gravado nessa variável e posteriormente na planilha

Unload Me
Form_SEEDUC.Show
End Sub


Avatar do usuário
Marcus Bull
Colaborador
Colaborador
Mensagens: 40
Registrado em: Qua Mai 09, 2012 8:31 am

Re: Dias Uteis entre duas Datas

Mensagem por Marcus Bull »

Bom dia Rmarco,

Ficou perfeito,funcionou certinho.
muito obrigado

obs.: estou clicando na mãozinha mas aparece agradecimento invalido !!


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder