3 participantes
[Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Ennard- Novato
- Respeito às regras :
Sexo :
Localização :
Mensagens : 14
Registrado : 16/08/2011
- Mensagem nº1
Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Caros colegas, tenho uma data inicial, na qual terá início um curso. Preciso encontrar a data de término do curso, ou data final, considerando que tem curso que as aulas são 1 vez na semana, por exemplo, todas as segundas, ou todas as terças e etc. Mas também tem curso que são duas aulas por semana, tipo, seg e qua, ter e qui e etc. Tenho a data inicial e a quantidade de aulas de cada curso, que não ocorrem em feriados. Portanto, além de ter que contar os dias de aula, terei que desconsiderar as aulas que cairem em feriado. Já tenho uma tabela de feriados. Inclusive tenho um código que funcionou certinho, contando os dias da semana e desconsiderando os dias de feriado, mas nele eu preciso inserir a data final, justamente o que eu preciso encontrar. Preciso fazer isso no access 2007, talvez por meio do VBA. Se alguém puder me ajudar este é o momento. Fico agradecido.
criquio- Moderador Global
- Respeito às regras :
Sexo :
Localização :
Mensagens : 11229
Registrado : 30/12/2009
Olá, seja bem vindo ao fórum!
Dê uma pesquisada no fórum. Temos exemplos do que precisa. Procure por "cálculos com datas" e "feriados". Veja na minha assinatura link para um vídeo com dicas de pesquisas mais eficientes no fórum.
Dê uma pesquisada no fórum. Temos exemplos do que precisa. Procure por "cálculos com datas" e "feriados". Veja na minha assinatura link para um vídeo com dicas de pesquisas mais eficientes no fórum.
.................................................................................
Meu novo site: www.vcssistemas.com.br Clique aqui e veja um vídeo que explica como fazer pesquisas no forum. DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo: 1 - faça uma cópia do aplicativo 2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar 3 - use o Compactar/Reparar 4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem) Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário. Positive as mensagens que achar útil, no canto superior direito delas. |
Ennard- Novato
- Respeito às regras :
Sexo :
Localização :
Mensagens : 14
Registrado : 16/08/2011
Obrigado, Criquio, pela atenção.
Pesquisei na busca do Fórum e o código mais próximo do que eu preciso foi postado por você. Esse código me seria ideal, se não pedisse uma data futura, ao invés disso me desse ela, e se envolvesse todos os dias da semana. Ele conta todos os domingos dentro de um período de tempo, excluindo os domingos que forem feriado. Eu preciso que ele conte uma quantidade de dia da semana (qtde de aulas passadas por meio de um controle no formulário access) e quais dias (seg ou ter ou qua, ou ainda seg e qua, ter e qui,.. exceto feriado), a partir de uma data inicial, e dê-me a data final. Tenho os seguintes controles em meu formulário: txtdti (data inicial), txtta (total de aulas), btndom (botão para contar aula de domingo), btnseg (botão para contar aula de segunda)... até btnsab (botão para contar aula de sábado). Tenho também btndomsex (botão para contar aula de domingo e sexta), btnsegqua (botão para contar aula de segunda e quarta), btnterqui (botão para contar aula de terça e quinta). Ao clicar gostaria que txtdtf (data final) mostrasse a data final do curso, já descontados todos os feriados do período que incindirem em dia de aula, os quais estão cadastrados na tabela feriados que tem os seguintes campos: dtferiado (data do feriado) e feriado (nome do feriado). Acho importante mencionar que a data de início é sempre a data da primeira aula.
A seguir, o código do Criquio.
Dim D As Date, N As Integer, rs As Recordset
For D = Me.txtDataInicial To Me.txtDataFinal
If WeekDay(D) = 1 Then
Set rs = CurrentDb.OpenRecordset("Select CampoData FROM TabelaDeFeriados WHERE CampoData=#" & Format(D, "mm/dd/yyyy") & "#")
If rs.RecordCount = 0 Then
N= N + 1
End If
rs.Close
Set rs = Nothing
End If
Next
Me.txtTotalDias = N
Pesquisei na busca do Fórum e o código mais próximo do que eu preciso foi postado por você. Esse código me seria ideal, se não pedisse uma data futura, ao invés disso me desse ela, e se envolvesse todos os dias da semana. Ele conta todos os domingos dentro de um período de tempo, excluindo os domingos que forem feriado. Eu preciso que ele conte uma quantidade de dia da semana (qtde de aulas passadas por meio de um controle no formulário access) e quais dias (seg ou ter ou qua, ou ainda seg e qua, ter e qui,.. exceto feriado), a partir de uma data inicial, e dê-me a data final. Tenho os seguintes controles em meu formulário: txtdti (data inicial), txtta (total de aulas), btndom (botão para contar aula de domingo), btnseg (botão para contar aula de segunda)... até btnsab (botão para contar aula de sábado). Tenho também btndomsex (botão para contar aula de domingo e sexta), btnsegqua (botão para contar aula de segunda e quarta), btnterqui (botão para contar aula de terça e quinta). Ao clicar gostaria que txtdtf (data final) mostrasse a data final do curso, já descontados todos os feriados do período que incindirem em dia de aula, os quais estão cadastrados na tabela feriados que tem os seguintes campos: dtferiado (data do feriado) e feriado (nome do feriado). Acho importante mencionar que a data de início é sempre a data da primeira aula.
A seguir, o código do Criquio.
Dim D As Date, N As Integer, rs As Recordset
For D = Me.txtDataInicial To Me.txtDataFinal
If WeekDay(D) = 1 Then
Set rs = CurrentDb.OpenRecordset("Select CampoData FROM TabelaDeFeriados WHERE CampoData=#" & Format(D, "mm/dd/yyyy") & "#")
If rs.RecordCount = 0 Then
N= N + 1
End If
rs.Close
Set rs = Nothing
End If
Next
Me.txtTotalDias = N
Última edição por Ennard em 8/11/2012, 17:31, editado 2 vez(es)
Alexandre Neves- Moderador Global
- Respeito às regras :
Sexo :
Localização :
Mensagens : 8498
Registrado : 05/11/2009
Boa tarde, Ennard, e bem-vindo ao fórum
Terá de ser criada função para lhe devolver a data final
Parece-me bastante ter como argumentos a data inicial, a quantidade de aulas e os dias de aulas na semana. Dentro da função terá de ser avalizada a data de feriado. Como tem a tabela de feriados?
Terá de ser criada função para lhe devolver a data final
Parece-me bastante ter como argumentos a data inicial, a quantidade de aulas e os dias de aulas na semana. Dentro da função terá de ser avalizada a data de feriado. Como tem a tabela de feriados?
.................................................................................
Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
Ennard- Novato
- Respeito às regras :
Sexo :
Localização :
Mensagens : 14
Registrado : 16/08/2011
- Mensagem nº5
Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
A tabela Feriados tenho ela no access, com os campos que mencionei. Tenho acesso a ela por meio deste código que postei, só que ele me pede a data de início e a data final para então calcular os dias da semana (neste caso, o domingo), exceto feriado, e me dar a quantidade de aulas (ou de domingos) do período. Preciso inverter a lógica, eu dou a data de início e a quantidade de aulas (que podem ocorrer seg ou ter ou... até sab, ou ainda dom e sex, seg e qua, ter e qui) e ele me devolve a data final, já descontados os dias que são feriados e não haverá aula. Não sei o ponto de partida para criar a função que você sugeriu. Espero que possa me ajudar.
Alexandre Neves- Moderador Global
- Respeito às regras :
Sexo :
Localização :
Mensagens : 8498
Registrado : 05/11/2009
Boa tarde, Ennard
Onde mencionou os campos da tabela Feriados? não vi
Onde mencionou os campos da tabela Feriados? não vi
.................................................................................
Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
Ennard- Novato
- Respeito às regras :
Sexo :
Localização :
Mensagens : 14
Registrado : 16/08/2011
- Mensagem nº7
Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Logo acima, quando posto o código do Críquio.
Alexandre Neves- Moderador Global
- Respeito às regras :
Sexo :
Localização :
Mensagens : 8498
Registrado : 05/11/2009
Utilize estas funções
Function DataFinal(DataInicial As Date, Aulas As Integer, Segunda As Boolean, Terca As Boolean, Quarta As Boolean, Quinta As Boolean, Sexta As Boolean) As Date
'criada por Alexandre Neves www.esnips.com\web\alexandreneves
'em 2012-11-16
'para Ennard
'do fórum MaximoAccess
Do
If Feriado(DataInicial) Then DataInicial = DataInicial + 1
Select Case Weekday(DataInicial)
Case 1
Case 2
If Segunda Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 3
If Terca Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 4
If Quarta Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 5
If Quinta Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 6
If Sexta Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 7
End Select
DataInicial = DataInicial + 1
Loop Until Aulas = 0
DataFinal = DataInicial - 1
End Function
Function Feriado(dtData As Date) As Boolean
'criada por Alexandre Neves www.esnips.com\web\alexandreneves
'em 2012-11-16
'para Ennard
'do fórum MaximoAccess
Dim Rst As DAO.Recordset
Set Rst = CurrentDb.OpenRecordset("Select CampoData FROM TabelaDeFeriados")
Rst.FindFirst "CampoData=#" & dtData & "#"
If Rst.NoMatch Then Feriado = False Else Feriado = True
End Function
Function DataFinal(DataInicial As Date, Aulas As Integer, Segunda As Boolean, Terca As Boolean, Quarta As Boolean, Quinta As Boolean, Sexta As Boolean) As Date
'criada por Alexandre Neves www.esnips.com\web\alexandreneves
'em 2012-11-16
'para Ennard
'do fórum MaximoAccess
Do
If Feriado(DataInicial) Then DataInicial = DataInicial + 1
Select Case Weekday(DataInicial)
Case 1
Case 2
If Segunda Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 3
If Terca Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 4
If Quarta Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 5
If Quinta Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 6
If Sexta Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 7
End Select
DataInicial = DataInicial + 1
Loop Until Aulas = 0
DataFinal = DataInicial - 1
End Function
Function Feriado(dtData As Date) As Boolean
'criada por Alexandre Neves www.esnips.com\web\alexandreneves
'em 2012-11-16
'para Ennard
'do fórum MaximoAccess
Dim Rst As DAO.Recordset
Set Rst = CurrentDb.OpenRecordset("Select CampoData FROM TabelaDeFeriados")
Rst.FindFirst "CampoData=#" & dtData & "#"
If Rst.NoMatch Then Feriado = False Else Feriado = True
End Function
.................................................................................
Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
Ennard- Novato
- Respeito às regras :
Sexo :
Localização :
Mensagens : 14
Registrado : 16/08/2011
- Mensagem nº9
Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Alexandre, obrigado pela função.
Uma pergunta, é melhor eu colocá-la num módulo ou no formulário? Vou precisar dela só no formulário. Se for no formulário, em qual evento a coloco?
Grato.
Uma pergunta, é melhor eu colocá-la num módulo ou no formulário? Vou precisar dela só no formulário. Se for no formulário, em qual evento a coloco?
Grato.
Alexandre Neves- Moderador Global
- Respeito às regras :
Sexo :
Localização :
Mensagens : 8498
Registrado : 05/11/2009
- Mensagem nº10
Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Boa tarde, Ennard
A função coloque-a onde pretender. Chame-a no acontecimento do formulário onde pretende que a mesma seja executada
A função coloque-a onde pretender. Chame-a no acontecimento do formulário onde pretende que a mesma seja executada
.................................................................................
Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
Ennard- Novato
- Respeito às regras :
Sexo :
Localização :
Mensagens : 14
Registrado : 16/08/2011
- Mensagem nº11
Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Alexandre,
Resolvi colocar o código num módulo.
Eu testei o código abaixo com e sem a linha "call" e dá a mesma mensagem: "o argumento não é opcional", você poderia me dizer onde estou errando?
o nome do campo onde deve aparecer a data final em meu formulário é "dtf"
Private Sub btnDomingo_Click()
Call DataFinal(Me.dtf.Value)
dtf.Value = DataFinal(dtf.Value)
End Sub
Resolvi colocar o código num módulo.
Eu testei o código abaixo com e sem a linha "call" e dá a mesma mensagem: "o argumento não é opcional", você poderia me dizer onde estou errando?
o nome do campo onde deve aparecer a data final em meu formulário é "dtf"
Private Sub btnDomingo_Click()
Call DataFinal(Me.dtf.Value)
dtf.Value = DataFinal(dtf.Value)
End Sub
Alexandre Neves- Moderador Global
- Respeito às regras :
Sexo :
Localização :
Mensagens : 8498
Registrado : 05/11/2009
- Mensagem nº12
Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Ennard,
Ao tempo que anda pelo fórum, julguei que já soubesse utilizar a função:
Function DataFinal(DataInicial As Date, Aulas As Integer, Segunda As Boolean, Terca As Boolean, Quarta As Boolean, Quinta As Boolean, Sexta As Boolean) As Date
DataInicial - data inicial
Aulas - quantidade de aulas
Segunda - Se sim, tem aula na Segunda-feira
Terça - Se sim, tem aula na Terça-feira
Quarta - Se sim, tem aula na Quarta-feira
Quinta - Se sim, tem aula na Quinta-feira
Sexta - Se sim, tem aula na Sexta-feira
Ao tempo que anda pelo fórum, julguei que já soubesse utilizar a função:
Function DataFinal(DataInicial As Date, Aulas As Integer, Segunda As Boolean, Terca As Boolean, Quarta As Boolean, Quinta As Boolean, Sexta As Boolean) As Date
DataInicial - data inicial
Aulas - quantidade de aulas
Segunda - Se sim, tem aula na Segunda-feira
Terça - Se sim, tem aula na Terça-feira
Quarta - Se sim, tem aula na Quarta-feira
Quinta - Se sim, tem aula na Quinta-feira
Sexta - Se sim, tem aula na Sexta-feira
.................................................................................
Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
Ennard- Novato
- Respeito às regras :
Sexo :
Localização :
Mensagens : 14
Registrado : 16/08/2011
- Mensagem nº13
Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Alexandre,
Agradeço pela desmedida paciência.
É o seguinte: tenho três campos tipo txt no meu formulário, o primeiro é destinado a receber a Data de Início, o segundo a Quantidade de Aulas e o terceiro é onde deve retornar a Data Final.
Tenho também sete botões de comando nomeados como Domingo, Segunda.. até Sábado; e também outros três botões nomeados como Domingo e Sexta, Segunda e Quarta e Terça e Quinta.
Após preencher o campo Data de Início e Quantidade de Aulas, ao clicar num dos botões mencionados, ele me retorne a Data Final, já descontados os feriados do período, que constam na tabela feriado, a qual possui dois campos: dtferiado e feriado.
Não estou entendendo como incrementar a Função para que atenda a toda esta complexidade. Imagino que terei que colocá-la no evento "ao clicar" de cada botão de comando, mas e quanto aos botões que se referem a dois dias de aula?
Agradeço pela desmedida paciência.
É o seguinte: tenho três campos tipo txt no meu formulário, o primeiro é destinado a receber a Data de Início, o segundo a Quantidade de Aulas e o terceiro é onde deve retornar a Data Final.
Tenho também sete botões de comando nomeados como Domingo, Segunda.. até Sábado; e também outros três botões nomeados como Domingo e Sexta, Segunda e Quarta e Terça e Quinta.
Após preencher o campo Data de Início e Quantidade de Aulas, ao clicar num dos botões mencionados, ele me retorne a Data Final, já descontados os feriados do período, que constam na tabela feriado, a qual possui dois campos: dtferiado e feriado.
Não estou entendendo como incrementar a Função para que atenda a toda esta complexidade. Imagino que terei que colocá-la no evento "ao clicar" de cada botão de comando, mas e quanto aos botões que se referem a dois dias de aula?
Alexandre Neves- Moderador Global
- Respeito às regras :
Sexo :
Localização :
Mensagens : 8498
Registrado : 05/11/2009
- Mensagem nº14
Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Tem de organizar: como pode saber a data final a partir da data inicial, a quantidade de aulas e não saber que dia tem aulas para verificar se existe aula ou é feriado.
Escreva um fluxograma do código que pretende
Escreva um fluxograma do código que pretende
.................................................................................
Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
Ennard- Novato
- Respeito às regras :
Sexo :
Localização :
Mensagens : 14
Registrado : 16/08/2011
- Mensagem nº15
Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Vamos lá:
(exemplo)
Data de Início: 20/11/2012 (eu preencho)
Quantidade de Aulas: 48 (eu preencho)
Data Final: ??/??/???? (ele retorna após eu clicar num dos botões abaixo)
Botão Domingo
Botão Segunda
Botão Terça
Botão Quarta
Botão Quinta
Botão Sexta
Botão Sábado
Botão Domingo e Sexta
Botão Segunda e Quarta
Botão Terça e Quinta
Se eu clicar no Botão Domingo, por exemplo, ele deve contar 48 domingos (exceto feriado) e me retornar (em Data Final) a data do último domingo (lembrando que a data de início é a data da primeira aula e a data final é a data da última aula).
Caso eu clique no Botão Domingo e Sexta, por exemplo, ele deve contar 48 domingos e sextas feiras (exceto feriado) e me retornar (em Data Final) a data da última aula que, obviamente, será num Domingo ou Sexta.
Os feriados do período estarão cadastrados na "Tabela Feriados", que tem os campos "Data do Feriado" e "Feriado".
(exemplo)
Data de Início: 20/11/2012 (eu preencho)
Quantidade de Aulas: 48 (eu preencho)
Data Final: ??/??/???? (ele retorna após eu clicar num dos botões abaixo)
Botão Domingo
Botão Segunda
Botão Terça
Botão Quarta
Botão Quinta
Botão Sexta
Botão Sábado
Botão Domingo e Sexta
Botão Segunda e Quarta
Botão Terça e Quinta
Se eu clicar no Botão Domingo, por exemplo, ele deve contar 48 domingos (exceto feriado) e me retornar (em Data Final) a data do último domingo (lembrando que a data de início é a data da primeira aula e a data final é a data da última aula).
Caso eu clique no Botão Domingo e Sexta, por exemplo, ele deve contar 48 domingos e sextas feiras (exceto feriado) e me retornar (em Data Final) a data da última aula que, obviamente, será num Domingo ou Sexta.
Os feriados do período estarão cadastrados na "Tabela Feriados", que tem os campos "Data do Feriado" e "Feriado".
Ennard- Novato
- Respeito às regras :
Sexo :
Localização :
Mensagens : 14
Registrado : 16/08/2011
- Mensagem nº16
Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Se for necessário, Alexandre, posso tentar descrever melhor o que preciso. É só me dizer.
Alexandre Neves- Moderador Global
- Respeito às regras :
Sexo :
Localização :
Mensagens : 8498
Registrado : 05/11/2009
- Mensagem nº17
Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Boa noite, Ennard
No botão Segunda
Msgbox DataFinal(TxtDataInicial, TxtAulas, True, False, False, False, False, False, False)
No botão Terça
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, True, False, False, False, False, False)
No botão Quarta
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, False, True, False, False, False, False)
No botão Quinta
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, False, False, True, False, False, False)
No botão Sexta
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, True, False, False)
No botão Sábado
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, False, True, False)
No botão Domingo
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, False, False, True)
No botão Domingo e Sexta
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, True, False, True)
No botão Segunda e Quarta
Msgbox DataFinal(TxtDataInicial, TxtAulas, true, False, True, False, False, False, False)
No botão Terça e quinta
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, true, False, True, False, False, False)
Function DataFinal(DataInicial As Date, Aulas As Integer, Segunda As Boolean, Terca As Boolean, Quarta As Boolean, Quinta As Boolean, Sexta As Boolean, Sabado as boolean,Domingo as boolean) As Date
'criada por Alexandre Neves www.esnips.com\web\alexandreneves
'em 2012-11-16
'para Ennard
'do fórum MaximoAccess
Do
If Feriado(DataInicial) Then DataInicial = DataInicial + 1
Select Case Weekday(DataInicial)
Case 1
If Domingo Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 2
If Segunda Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 3
If Terca Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 4
If Quarta Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 5
If Quinta Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 6
If Sexta Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 7
If Sabado Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
End Select
DataInicial = DataInicial + 1
Loop Until Aulas = 0
DataFinal = DataInicial - 1
End Function
No botão Segunda
Msgbox DataFinal(TxtDataInicial, TxtAulas, True, False, False, False, False, False, False)
No botão Terça
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, True, False, False, False, False, False)
No botão Quarta
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, False, True, False, False, False, False)
No botão Quinta
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, False, False, True, False, False, False)
No botão Sexta
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, True, False, False)
No botão Sábado
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, False, True, False)
No botão Domingo
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, False, False, True)
No botão Domingo e Sexta
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, True, False, True)
No botão Segunda e Quarta
Msgbox DataFinal(TxtDataInicial, TxtAulas, true, False, True, False, False, False, False)
No botão Terça e quinta
Msgbox DataFinal(TxtDataInicial, TxtAulas, False, true, False, True, False, False, False)
Function DataFinal(DataInicial As Date, Aulas As Integer, Segunda As Boolean, Terca As Boolean, Quarta As Boolean, Quinta As Boolean, Sexta As Boolean, Sabado as boolean,Domingo as boolean) As Date
'criada por Alexandre Neves www.esnips.com\web\alexandreneves
'em 2012-11-16
'para Ennard
'do fórum MaximoAccess
Do
If Feriado(DataInicial) Then DataInicial = DataInicial + 1
Select Case Weekday(DataInicial)
Case 1
If Domingo Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 2
If Segunda Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 3
If Terca Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 4
If Quarta Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 5
If Quinta Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 6
If Sexta Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
Case 7
If Sabado Then
If Not Feriado(DataInicial) Then Aulas = Aulas - 1
End If
End Select
DataInicial = DataInicial + 1
Loop Until Aulas = 0
DataFinal = DataInicial - 1
End Function
.................................................................................
Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
Ennard- Novato
- Respeito às regras :
Sexo :
Localização :
Mensagens : 14
Registrado : 16/08/2011
- Mensagem nº18
Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Alexandre,
Ao clicar em qualquer dos botões ele está dando este erro: "O membro já existe em um módulo de objeto do qual esse módulo deriva." (Detalhe: eu já removi o módulo onde anteriormente havia inserido a função. Agora está tudo no form)
Eis o código com a sua última atualização:
Option Compare Database
Private Sub btnDomingo_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, False, False, True)
End Sub
Private Sub btnSegunda_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, True, False, False, False, False, False, False)
End Sub
Private Sub btnTerca_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, True, False, False, False, False, False)
End Sub
Private Sub btnQuarta_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, False, True, False, False, False, False)
End Sub
Private Sub btnQuinta_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, False, False, True, False, False, False)
End Sub
Private Sub btnSexta_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, True, False, False)
End Sub
Private Sub btnSabado_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, False, True, False)
End Sub
Private Sub btnDomingoeSexta_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, True, False, True)
End Sub
Private Sub btnSegundaeQuarta_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, True, False, True, False, False, False, False)
End Sub
Private Sub btnTercaeQuinta_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, True, False, True, False, False, False)
End Sub
Function DataFinal(datainicial As Date, aulas As Integer, Segunda As Boolean, Terca As Boolean, Quarta As Boolean, Quinta As Boolean, Sexta As Boolean, Sabado As Boolean, Domingo As Boolean) As Date
'criada por Alexandre Neves www.esnips.com\web\alexandreneves
'em 2012-11-16
'para Ennard
'do fórum MaximoAccess
Do
If Feriado(datainicial) Then datainicial = datainicial + 1
Select Case Weekday(datainicial)
Case 1
If Domingo Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
Case 2
If Segunda Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
Case 3
If Terca Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
Case 4
If Quarta Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
Case 5
If Quinta Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
Case 6
If Sexta Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
Case 7
If Sabado Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
End Select
datainicial = datainicial + 1
Loop Until aulas = 0
DataFinal = datainicial - 1
End Function
Function Feriado(dtData As Date) As Boolean
'criada por Alexandre Neves www.esnips.com\web\alexandreneves
'em 2012-11-16
'para Ennard
'do fórum MaximoAccess
Dim Rst As DAO.Recordset
Set Rst = CurrentDb.OpenRecordset("Select dtferiado FROM [TAB ACA - FERIADO]")
Rst.FindFirst "dtferiado=#" & dtData & "#"
If Rst.NoMatch Then Feriado = False Else Feriado = True
End Function
Ao clicar em qualquer dos botões ele está dando este erro: "O membro já existe em um módulo de objeto do qual esse módulo deriva." (Detalhe: eu já removi o módulo onde anteriormente havia inserido a função. Agora está tudo no form)
Eis o código com a sua última atualização:
Option Compare Database
Private Sub btnDomingo_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, False, False, True)
End Sub
Private Sub btnSegunda_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, True, False, False, False, False, False, False)
End Sub
Private Sub btnTerca_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, True, False, False, False, False, False)
End Sub
Private Sub btnQuarta_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, False, True, False, False, False, False)
End Sub
Private Sub btnQuinta_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, False, False, True, False, False, False)
End Sub
Private Sub btnSexta_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, True, False, False)
End Sub
Private Sub btnSabado_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, False, True, False)
End Sub
Private Sub btnDomingoeSexta_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, False, False, False, True, False, True)
End Sub
Private Sub btnSegundaeQuarta_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, True, False, True, False, False, False, False)
End Sub
Private Sub btnTercaeQuinta_Click()
MsgBox DataFinal(TxtDataInicial, TxtAulas, False, True, False, True, False, False, False)
End Sub
Function DataFinal(datainicial As Date, aulas As Integer, Segunda As Boolean, Terca As Boolean, Quarta As Boolean, Quinta As Boolean, Sexta As Boolean, Sabado As Boolean, Domingo As Boolean) As Date
'criada por Alexandre Neves www.esnips.com\web\alexandreneves
'em 2012-11-16
'para Ennard
'do fórum MaximoAccess
Do
If Feriado(datainicial) Then datainicial = datainicial + 1
Select Case Weekday(datainicial)
Case 1
If Domingo Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
Case 2
If Segunda Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
Case 3
If Terca Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
Case 4
If Quarta Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
Case 5
If Quinta Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
Case 6
If Sexta Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
Case 7
If Sabado Then
If Not Feriado(datainicial) Then aulas = aulas - 1
End If
End Select
datainicial = datainicial + 1
Loop Until aulas = 0
DataFinal = datainicial - 1
End Function
Function Feriado(dtData As Date) As Boolean
'criada por Alexandre Neves www.esnips.com\web\alexandreneves
'em 2012-11-16
'para Ennard
'do fórum MaximoAccess
Dim Rst As DAO.Recordset
Set Rst = CurrentDb.OpenRecordset("Select dtferiado FROM [TAB ACA - FERIADO]")
Rst.FindFirst "dtferiado=#" & dtData & "#"
If Rst.NoMatch Then Feriado = False Else Feriado = True
End Function
Alexandre Neves- Moderador Global
- Respeito às regras :
Sexo :
Localização :
Mensagens : 8498
Registrado : 05/11/2009
- Mensagem nº19
Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Bom dia, Ennard
Depure o código
Depure o código
.................................................................................
Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
Ennard- Novato
- Respeito às regras :
Sexo :
Localização :
Mensagens : 14
Registrado : 16/08/2011
- Mensagem nº20
Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Encontrei o problema, os campos não estavam com os mesmos nomes. Já corrigi e está funcionando.
Porém, os cálculos não batem.
Teste 1
Data de Inicio: 01/07/2012
Aulas (a contar): 48
Dias da Semana: dom e sex
Data Final: 21/12/2012 (valor que ele retorna na msgbox)
Feriados do Período: 12/08/2012, 07/09/2012, 12/10/2012, 02/11/2012.
Aulas Contadas no Período: 46
Teste 2
Data de Início: 02/07/2012
Aulas (a contar): 48
Dias da Semana: seg e qua
Data Final: 24/12/2012 (valor que ele retorna na msgbox)
Feriados do Período: 09/07/2012, 15/10/2012.
Aulas Contadas no Período: 49
Teste 3
Data de Inicio: 03/07/2012
Aulas (a contar): 48
Dias da Semana: ter e qui
Data Final: 18/12/2012 (valor que ele retorna na msgbox)
Feriados do Período: 15/11/2012
Aulas Contadas no Período: 48
Como pode ver, apenas no Teste 3, referente a ter e qui, é que o resultado está correto. O que pode estar errado?
A minha Tabela de Feriados do segundo semestre de 2012, período dos cálculos, é a seguinte:
_____________________________________________
| DtFERIADO | FERIADO
| 09/07/2012 | Revolução Constitucionalista
| 12/08/2012 | Dia dos Pais
| 07/09/2012 | Dia da Independência
| 12/10/2012 | Dia das Crianças
| 15/10/2012 | Dia do Professor
| 02/11/2012 | Dia de Finados
| 15/11/2012 | Dia da Proclamação da República
| 25/12/2012 | Natal
_____________________________________________
Porém, os cálculos não batem.
Teste 1
Data de Inicio: 01/07/2012
Aulas (a contar): 48
Dias da Semana: dom e sex
Data Final: 21/12/2012 (valor que ele retorna na msgbox)
Feriados do Período: 12/08/2012, 07/09/2012, 12/10/2012, 02/11/2012.
Aulas Contadas no Período: 46
Teste 2
Data de Início: 02/07/2012
Aulas (a contar): 48
Dias da Semana: seg e qua
Data Final: 24/12/2012 (valor que ele retorna na msgbox)
Feriados do Período: 09/07/2012, 15/10/2012.
Aulas Contadas no Período: 49
Teste 3
Data de Inicio: 03/07/2012
Aulas (a contar): 48
Dias da Semana: ter e qui
Data Final: 18/12/2012 (valor que ele retorna na msgbox)
Feriados do Período: 15/11/2012
Aulas Contadas no Período: 48
Como pode ver, apenas no Teste 3, referente a ter e qui, é que o resultado está correto. O que pode estar errado?
A minha Tabela de Feriados do segundo semestre de 2012, período dos cálculos, é a seguinte:
_____________________________________________
| DtFERIADO | FERIADO
| 09/07/2012 | Revolução Constitucionalista
| 12/08/2012 | Dia dos Pais
| 07/09/2012 | Dia da Independência
| 12/10/2012 | Dia das Crianças
| 15/10/2012 | Dia do Professor
| 02/11/2012 | Dia de Finados
| 15/11/2012 | Dia da Proclamação da República
| 25/12/2012 | Natal
_____________________________________________
Alexandre Neves- Moderador Global
- Respeito às regras :
Sexo :
Localização :
Mensagens : 8498
Registrado : 05/11/2009
- Mensagem nº21
Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Boa noite, Ennard
Verifique a formatação da data
1 - experimente
Rst.FindFirst "CampoData=#" & Format(dtData,"dd-mm-yyyy") & "#"
2 - experimente
Rst.FindFirst "CampoData=#" & Format(dtData,"mm-dd-yyyy") & "#"
Verifique a formatação da data
1 - experimente
Rst.FindFirst "CampoData=#" & Format(dtData,"dd-mm-yyyy") & "#"
2 - experimente
Rst.FindFirst "CampoData=#" & Format(dtData,"mm-dd-yyyy") & "#"
.................................................................................
Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
Ennard- Novato
- Respeito às regras :
Sexo :
Localização :
Mensagens : 14
Registrado : 16/08/2011
- Mensagem nº22
Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Olá Alexandre,
Testei com a segunda opção que vc me passou e os cálculos agora estão corretos. Creio que podemos encerrar este tópico. Obrigado pela valiosa colaboração, sem a qual não seria possível a conclusão deste projeto.
Testei com a segunda opção que vc me passou e os cálculos agora estão corretos. Creio que podemos encerrar este tópico. Obrigado pela valiosa colaboração, sem a qual não seria possível a conclusão deste projeto.
Alexandre Neves- Moderador Global
- Respeito às regras :
Sexo :
Localização :
Mensagens : 8498
Registrado : 05/11/2009
- Mensagem nº23
Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
.................................................................................
Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
Ennard- Novato
- Respeito às regras :
Sexo :
Localização :
Mensagens : 14
Registrado : 16/08/2011
- Mensagem nº24
Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
Obrigado pela dica.
Conteúdo patrocinado
- Mensagem nº25
Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado
» [Resolvido]Calcular data futura com dias úteis (sem finais de semana e feriados nacionais e estaduais)
» Feriados Nacionais no Ano (Inserção automática em tabela, com data, dia da Semana e Nome do Feriado)
» [Resolvido]A partir de uma data inicial, informar uma quantidade de dias úteis a acrescentar a esta data
» [Resolvido]Retornar "dia da semana" por extenso a partir de uma data
» Sql UPDATE não altera registro, exceto quando tem poucos campos.
» Feriados Nacionais no Ano (Inserção automática em tabela, com data, dia da Semana e Nome do Feriado)
» [Resolvido]A partir de uma data inicial, informar uma quantidade de dias úteis a acrescentar a esta data
» [Resolvido]Retornar "dia da semana" por extenso a partir de uma data
» Sql UPDATE não altera registro, exceto quando tem poucos campos.