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

2 participantes

    Laço de Repetição DO While

    avatar
    Luthi_Access
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 20/12/2022

    Laço de Repetição DO While Empty Laço de Repetição DO While

    Mensagem  Luthi_Access 21/12/2022, 01:17

    Senhores boa noite.

    Estou quebrando a cabeça para elaborar um laço de repetição no VBA para o banco de dados Access. Abaixo explicarei melhor as informações.

    Eu tenho no banco de dados mais de 850 linhas com duas colunas, que possuem os seguintes dados:

    status-----------Ciclo
    Em dia------------1
    atrasado ---------1
    atrasado----------2
    em dia------------3
    em dia----------- 3
    pendente---------3


    Eu gostaria que quando estivéssemos no 12º dia útil do mês, o VBA ao ser aberto ele rodava um laço de repetição  tipo do While para substituir o Status dos clientes do ciclo 03, colocando o Status Atrasado, isto percorrendo todas as 850 linhas e verificando quem fosse deste ciclo (3) e alterasse o status.  

    Este laço irá se repetir nos dias 22º para o ciclo 2 útil e no 3º dia útil para o ciclo 01.

    Estou com a cabeça queimando.

    Alguém pode me ajudar?

    Grato
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1310
    Registrado : 21/01/2012

    Laço de Repetição DO While Empty Re: Laço de Repetição DO While

    Mensagem  Cláudio Más 21/12/2022, 13:05

    Bom dia,

    Crie a seguinte função em um módulo:

    Código:
    Public Function f_DiasUteis(vDias) As Integer

    Dim DataInicial As Date, DataFinal As Date
    Dim qDiasUteis As Integer, dias As Integer
    Dim diaSemana As Integer
        
    DataInicial = CDate("01/" & Format$(Date, "MM/yyyy"))

    qDiasUteis = vDias

    dias = 0
    DataFinal = DataInicial
    While dias < qDiasUteis
        DataFinal = DataFinal + 1
        diaSemana = Weekday(DataFinal)
        If diaSemana <> 1 And diaSemana <> 7 Then
           dias = dias + 1
        End If
    Wend
        
    f_DiasUteis = Day(DataFinal)

    End Function

    O código abaixo deve fazer a atualização da tabela:

    Código:
    If Day(Date) = f_DiasUteis(12) Then CurrentDb.Execute "UPDATE NomeTabela SET status = 'atrasado' WHERE Ciclo = 3"

    Recomendo testar em uma cópia do banco de dados, não fiz os testes necessários.
    avatar
    Luthi_Access
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 20/12/2022

    Laço de Repetição DO While Empty Laço de Repetição DO While

    Mensagem  Luthi_Access 22/12/2022, 00:06

    Olá Cláudio boa noite

    Testei e não rodou no access

    Public Function f_DiasUteis(vDias) As Integer

    Dim DataInicial As Date, DataFinal As Date
    Dim qDiasUteis As Integer, dias As Integer
    Dim diaSemana As Integer
       
    DataInicial = CDate("01/" & Format$(Date, "MM/yyyy"))

    qDiasUteis = vDias

    dias = 0
    DataFinal = DataInicial
    While dias < qDiasUteis
       DataFinal = DataFinal + 1
       diaSemana = Weekday(DataFinal)
       If diaSemana <> 1 And diaSemana <> 7 Then
          dias = dias + 1
       End If
    Wend
       
    f_DiasUteis = Day(DataFinal)

    End Function


    Grato pela atençaõ
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1310
    Registrado : 21/01/2012

    Laço de Repetição DO While Empty Re: Laço de Repetição DO While

    Mensagem  Cláudio Más 22/12/2022, 00:24

    O segundo trecho de código na minha mensagem anterior é que vai fazer a atualização da tabela, você tentou?

    Código:
    If Day(Date) = f_DiasUteis(12) Then CurrentDb.Execute "UPDATE NomeTabela SET status = 'atrasado' WHERE Ciclo = 3"
    avatar
    Luthi_Access
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 20/12/2022

    Laço de Repetição DO While Empty Laço de Repetição DO While

    Mensagem  Luthi_Access 22/12/2022, 00:27

    Olá Cláudio

    codifiquei sim, porém ele não rodou, vou te enviar o formato do código para vc verificar.


    Criei um módulo e desenvolvi desta forma

    Public Function f_DiasUteis(vDias) As Integer

    Dim DataInicial As Date, DataFinal As Date
    Dim qDiasUteis As Integer, dias As Integer
    Dim diaSemana As Integer

    Set rs = New ADODB.Recordset

    Call CONECTARBD


    SQL = "SELECT * FROM Cadastro_escola "


    DataInicial = CDate("01/" & Format$(Date, "MM/yyyy"))

    qDiasUteis = vDias

    dias = 0
    DataFinal = DataInicial
    While dias < qDiasUteis
    DataFinal = DataFinal + 1
    diaSemana = Weekday(DataFinal)
    If diaSemana <> 1 And diaSemana <> 7 Then
    dias = dias + 1
    End If
    Wend

    f_DiasUteis = Day(DataFinal)
    If Day(Date) = f_DiasUteis(21) Then CurrentDb.Execute "UPDATE Cadastro_escola SET status = 'atrasado' WHERE Ciclo = 3"

    End Function
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1310
    Registrado : 21/01/2012

    Laço de Repetição DO While Empty Re: Laço de Repetição DO While

    Mensagem  Cláudio Más 22/12/2022, 01:15

    Rodou sim.

    f_DiasUteis(21) retorna o vigésimo primeiro dia útil deste mês, que é dia 30.
    Por isso a tabela não é atualizada, já que hoje não é dia 30.

    Tente com f_DiasUteis(14)

      Data/hora atual: 27/1/2023, 04:51