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

    [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8

    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8 Empty Rotina criada por Alexandre Neves . Não funciona no Windows 8

    Mensagem  Assis 26/4/2013, 18:31

    Rotina Criada por Alexandre Neves

    No Windows 7 não tinha problemas.
    Obrigado Alexandre se puder dar uma vista de olhos..... erro a vermelho

    Sub CriaTurnos()
    'On Error Resume Next
    Dim RstOperadores As DAO.Recordset, RstTurnos As DAO.Recordset, RstAusencias As DAO.Recordset
    Dim dtData As Date, Inicio As Date, Fim As Date, Turno As Byte

    Set RstOperadores = CurrentDb.OpenRecordset("SELECT * FROM Operadores;")
    Set RstTurnos = CurrentDb.OpenRecordset("SELECT * FROM Turnos;")
    Set RstAusencias = CurrentDb.OpenRecordset("SELECT Letra,Inicio,Fim FROM Ausencias LEFT JOIN Operadores ON Ausencias.Operador=Operadores.Nome;")
    Inicio = Forms!Rotina!Inicio
    Fim = Forms!Rotina!Fim

    ''''
    CurrentDb.Execute "DELETE * FROM Turnos"
    ''''
    For dtData = Inicio To Fim
    RstTurnos.AddNew
    RstTurnos(1) = dtData

    RstAusencias.MoveFirst
    Do While Not RstAusencias.EOF
    If dtData >= RstAusencias("Inicio") And dtData <= RstAusencias("Fim") Then RstTurnos("Ausencia") = RstTurnos("Ausencia") & RstAusencias("Letra") & ","
    RstAusencias.MoveNext
    Loop
    If Not IsNull(RstTurnos("Ausencia")) Then RstTurnos("Ausencia") = Mid(RstTurnos("Ausencia"), 1, Len(RstTurnos("Ausencia")) - 1)
    For Turno = 1 To Forms!Rotina!NTurnos
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica1:
    If InStr(1, RstTurnos("Ausencia"), RstOperadores("Letra")) > 0 Then
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica1
    End If

    RstTurnos(Turno + 1) = RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica2:
    If InStr(1, RstTurnos("Ausencia"), RstOperadores("Letra")) > 0 Then
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica2
    End If

    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica3:
    If InStr(1, RstTurnos("Ausencia"), RstOperadores("Letra")) > 0 Then
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica3
    End If

    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica4:
    If InStr(1, RstTurnos("Ausencia"), RstOperadores("Letra")) > 0 Then
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica4
    End If

    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    RstOperadores.MoveNext

    Next

    RstTurnos.Update

    Next

    RstTurnos.MoveFirst
    Do While Not RstTurnos.EOF
    RstOperadores.MoveFirst
    RstTurnos.Edit
    Do While Not RstOperadores.EOF

    If InStr(1, RstTurnos(2) & RstTurnos(3) & RstTurnos(4) & RstTurnos("Ausencia"), RstOperadores("Letra")) = 0 Then
    RstTurnos("Descanso") = RstTurnos("Descanso") & RstOperadores("Letra") & ","
    End If

    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    Loop
    If Right(RstTurnos("Descanso"), 1) = "," Then RstTurnos("Descanso") = Mid(RstTurnos("Descanso"), 1, Len(RstTurnos("Descanso")) - 1)
    RstTurnos.Update
    RstTurnos.MoveNext
    Loop
    Set RstTurnos = Nothing: Set RstOperadores = Nothing

    End Sub


    .................................................................................
    *** Só sei que nada sei ***
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8 Empty Re: [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8

    Mensagem  Assis 14/5/2013, 14:44

    Boa tarde
    Alexandre

    Pode dar uma vista.

    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8 Empty Re: [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8

    Mensagem  Alexandre Neves 14/5/2013, 21:20

    Boa noite, Assis
    Se apenas não funciona no Windows8, terá a ver com alteração de codificação, que não conheço porque não tenho o Windows8


    .................................................................................
    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
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8 Empty Re: [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8

    Mensagem  Assis 14/5/2013, 21:51

    Boa noite

    Alexadre
    Desculpe voltar ao assunto.

    Mas esta roda lindamente, repare na letra a azul é igual a que da erro.
    A outra marca todos os dias.
    Esta não marca nos feriados


    Sub CriaTurnosF()
    On Error Resume Next
    Dim RstOperadores As DAO.Recordset, RstTurnos As DAO.Recordset, RstAusencias As DAO.Recordset
    Dim dtData As Date, Inicio As Date, Fim As Date, Turno As Byte

    Set RstOperadores = CurrentDb.OpenRecordset("SELECT * FROM Operadores;")
    Set RstTurnos = CurrentDb.OpenRecordset("SELECT * FROM Turnos;")
    Set RstAusencias = CurrentDb.OpenRecordset("SELECT Letra,Inicio,Fim FROM Ausencias LEFT JOIN Operadores ON Ausencias.Operador=Operadores.Nome;")
    Inicio = Forms!Rotina!Inicio
    Fim = Forms!Rotina!Fim

    ''''
    CurrentDb.Execute "DELETE * FROM Turnos"
    ''''

    For dtData = Inicio To Fim

    If DCount("*", "Feriados", "DataFeriado=#" & Format(dtData, "mm-dd-yyyy") & "#") = 0 _
    And Weekday(dtData) <> 1 And Weekday(dtData) <> 7 Then


    RstTurnos.AddNew
    RstTurnos(1) = dtData

    RstAusencias.MoveFirst
    Do While Not RstAusencias.EOF
    If dtData >= RstAusencias("Inicio") And dtData <= RstAusencias("Fim") Then RstTurnos("Ausencia") = RstTurnos("Ausencia") & RstAusencias("Letra") & ","
    RstAusencias.MoveNext
    Loop
    If Not IsNull(RstTurnos("Ausencia")) Then RstTurnos("Ausencia") = Mid(RstTurnos("Ausencia"), 1, Len(RstTurnos("Ausencia")) - 1)
    For Turno = 1 To Forms!Rotina!NTurnos
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica1:
    If InStr(1, RstTurnos("Ausencia"), RstOperadores("Letra")) > 0 Then
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica1
    End If

    RstTurnos(Turno + 1) = RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica2:
    If InStr(1, RstTurnos("Ausencia"), RstOperadores("Letra")) > 0 Then
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica2
    End If

    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica3:
    If InStr(1, RstTurnos("Ausencia"), RstOperadores("Letra")) > 0 Then
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica3
    End If

    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica4:
    If InStr(1, RstTurnos("Ausencia"), RstOperadores("Letra")) > 0 Then
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica4
    End If

    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    RstOperadores.MoveNext

    Next
    End If
    RstTurnos.Update

    Next

    RstTurnos.MoveFirst
    Do While Not RstTurnos.EOF
    RstOperadores.MoveFirst
    RstTurnos.Edit
    Do While Not RstOperadores.EOF

    If InStr(1, RstTurnos(2) & RstTurnos(3) & RstTurnos(4) & RstTurnos("Ausencia"), RstOperadores("Letra")) = 0 Then
    RstTurnos("Descanso") = RstTurnos("Descanso") & RstOperadores("Letra") & ","
    End If

    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    Loop
    If Right(RstTurnos("Descanso"), 1) = "," Then RstTurnos("Descanso") = Mid(RstTurnos("Descanso"), 1, Len(RstTurnos("Descanso")) - 1)
    RstTurnos.Update
    RstTurnos.MoveNext
    Loop
    Set RstTurnos = Nothing: Set RstOperadores = Nothing

    End Sub


    .................................................................................
    *** Só sei que nada sei ***
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8 Empty Re: [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8

    Mensagem  Alexandre Neves 14/5/2013, 21:53

    Se o edit dá erro, apesar de achar estranho, será por não aceitar este método


    .................................................................................
    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
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8 Empty Re: [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8

    Mensagem  Assis 14/5/2013, 22:09

    Alexandre
    O Erro é este


    .................................................................................
    *** Só sei que nada sei ***
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8 Empty Re: [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8

    Mensagem  Alexandre Neves 14/5/2013, 22:11

    Será melhor reiniciar o computador. Pode ter ficado algum registo de anterior abertura da tabela.


    .................................................................................
    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
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8 Empty Re: [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8

    Mensagem  Assis 14/5/2013, 22:36

    Alexandre
    Repare no erro

    Uma estava assim
    'On Error Resume Next


    A outra assim
    On Error Resume Next

    Com o Win 7 nunca deu erro, com o 8 estava a dar.
    Repare o que está antes do On a vermelho.

    Obrigado amigo


    .................................................................................
    *** Só sei que nada sei ***

    Conteúdo patrocinado


    [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8 Empty Re: [Resolvido]Rotina criada por Alexandre Neves . Não funciona no Windows 8

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 29/4/2024, 04:37