MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


3 participantes

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    avatar
    Ennard
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 16/08/2011

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Ennard 8/11/2012, 03:34

    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
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  criquio 8/11/2012, 12:10

    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.


    .................................................................................
    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.

    avatar
    Ennard
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 16/08/2011

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Ennard 8/11/2012, 16:35

    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


    Última edição por Ennard em 8/11/2012, 17:31, editado 2 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Alexandre Neves 8/11/2012, 16:52

    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?


    .................................................................................
    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
    avatar
    Ennard
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 16/08/2011

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Ennard 16/11/2012, 16:16

    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
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Alexandre Neves 16/11/2012, 17:20

    Boa tarde, Ennard
    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
    avatar
    Ennard
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 16/08/2011

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Ennard 16/11/2012, 20:47

    Logo acima, quando posto o código do Críquio.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Alexandre Neves 16/11/2012, 22:32

    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


    .................................................................................
    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
    avatar
    Ennard
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 16/08/2011

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Ennard 20/11/2012, 16:05

    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.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Alexandre Neves 20/11/2012, 16:12

    Boa tarde, Ennard
    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
    avatar
    Ennard
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 16/08/2011

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Ennard 20/11/2012, 19:12

    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
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Alexandre Neves 20/11/2012, 19:41

    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


    .................................................................................
    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
    avatar
    Ennard
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 16/08/2011

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Ennard 20/11/2012, 20:25

    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?
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Alexandre Neves 20/11/2012, 20:33

    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


    .................................................................................
    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
    avatar
    Ennard
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 16/08/2011

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Ennard 20/11/2012, 23:10

    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".
    avatar
    Ennard
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 16/08/2011

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Ennard 22/11/2012, 21:12

    Se for necessário, Alexandre, posso tentar descrever melhor o que preciso. É só me dizer.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Alexandre Neves 22/11/2012, 23:17

    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


    .................................................................................
    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
    avatar
    Ennard
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 16/08/2011

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Ennard 23/11/2012, 03:18

    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

    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Alexandre Neves 23/11/2012, 10:09

    Bom dia, Ennard
    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
    avatar
    Ennard
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 16/08/2011

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Ennard 23/11/2012, 22:58

    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
    _____________________________________________
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Alexandre Neves 24/11/2012, 20:47

    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") & "#"


    .................................................................................
    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
    avatar
    Ennard
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 16/08/2011

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Ennard 26/11/2012, 03:27

    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.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Alexandre Neves 26/11/2012, 18:41

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado MaximoAccess%20ResolvidoMarcado


    .................................................................................
    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
    avatar
    Ennard
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 16/08/2011

    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Ennard 26/11/2012, 20:19

    Obrigado pela dica.

    Conteúdo patrocinado


    [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado Empty Re: [Resolvido]Encontrar data futura a partir da data inicial, contando dia específico da semana, exceto quando feriado

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 21/11/2024, 23:13