MaximoAccess

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

Obrigado

Administração do MaximoAccess

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


    [Resolvido]Ignorar controle na instrução For Each Next

    avatar
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 15/6/2019, 19:38

    Boa tarde!

    "DEUS SEJA LOUVADO"

    Preciso ignorar o controle do campo código na instrução For Each Next, pois o mesmo tem numeração automática. Alguém saberia como fazer? Estou fazendo uma verificação de campos nulos e o campo código é preenchido automaticamente no final do registro, com isso não consigo finalizar a verificação porque o campo código vai estar sempre vazio.
    Desde já agradeço.
    Grande abraço
    avatar
    renpv
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 217
    Registrado : 12/01/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  renpv em 15/6/2019, 23:46

    If o controle for não nulo e o nome do controle for diferente de codigo them

    Rotina para verificação do controle

    end if
    avatar
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 16/6/2019, 00:48

    Boa noite Renpv

    Ocorre que é exatamente o contrário

    if isnull ctlControle then

    Lembrando que é um For Each Next
    avatar
    renpv
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 217
    Registrado : 12/01/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  renpv em 16/6/2019, 01:02

    Eu entendi. O que eu quis dizer é que no seu caso você vai ter que fazer o teste com o conteúdo do campo e com o nome do campo. E esse teste deve ser feito dentro do for each.

    Se eu não entendi errado, esse for each é pra percorrer todos os campos, né?
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Alexandre Neves em 16/6/2019, 10:23

    Bom dia
    será
    if control.name <>"NomeControloID" then
    executa código
    end if


    .................................................................................
    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
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 16/6/2019, 18:43

    Boa tarde Pessoas!
    "DEUS SEJA LOUVADO"

    Estou tentando anexar a aplicação, fiz como recomendado, porém está dando a mensagem

    "Os seguintes erros foram encontrados

    Não foi possível salvar o anexo.

    Alguém saberia me dizer por quê?

    Compactei o arquivo com a extensão zip tamanho 364 kb.
    Grato
    avatar
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 17/6/2019, 01:29

    Boa noite!

    "DEUS SEJA LOUVADO"

    Segue em anexo o arquivo com a aplicação. Se puderem por gentileza dar uma olhada no que está errado com o código da função ValidaCampos. Escreví um código no btnAgenda700 do frmAgenda e funciona perfeitamente, porém eu teria que reescrever o código para todos os botões Agendar e são muitos, não seria uma boa prática. Eu gostaria de chamar a função ValidaCampos no clique do botão btnAgenda....

    Grato
    Anexos
    [Resolvido]Ignorar controle na instrução For Each Next AttachmentTeste3.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (261 Kb) Baixado 8 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Alexandre Neves em 17/6/2019, 10:12

    Bom dia
    Eliminei-lhe a mensagem referente ao outro tema. Temos de manter o fórum organizado. Pode fazer refrescamento da dúvida no próprio tema

    Sobre esta dúvida,
    1 - coloque o procedimento no módulo
    Código:
    Sub Agendar(NomeCtl As String)
        '----------------------------------------------------------------'
        '  código adaptado por Alexandre Neves, do Fórum MaximoAccess  '
        '    utilize o código livremente mas mantenha os créditos      '
        '----------------------------------------------------------------'
        Dim intIndiceCtl As Integer
        intIndiceCtl = Mid(NomeCtl, 6)
        'Verifica se os campos estão preenchidos
        If ValidaCampos = False Then
            Exit Sub
        'Verifica disponibilidade de horário para procedimento de Nível 4
        ElseIf Me("TxtAgenda" & intIndiceCtl).Value = "07:00" Then
            If Me.cmbHora.Value = "07:00" And MsgBox("Deseja agendar o horário " & Me.cmbHora & " para " & Me.cmbAgendaCliente.Column(1), vbQuestion + vbYesNo, "Agendar Cliente") = vbYes Then
                If Me.cmbAgendaProcedimento.Column(2) = "Nivel 4" Then
                    If Me("TxtAgenda" & intIndiceCtl).Value <> "07:00" Or Me("TxtAgenda" & intIndiceCtl + 30).Value <> "07:30" Or Me("TxtAgenda" & intIndiceCtl + 100).Value <> "08:00" Or Me("TxtAgenda" & intIndiceCtl + 130).Value <> "08:30" Then
                        If MsgBox("Existe(m) cliente(s) agendado(s) no intervalo deste agendamento: Selecione outro horário! ", vbQuestion + vbOKOnly, "Intervalo Agendado") Then
                            Me.cmbHora.SetFocus
                            Me.cmbHora.Dropdown
                            Exit Sub
                        End If
        'Procede o agendamento
                    Else
                        Me("TxtAgenda" & intIndiceCtl).Value = Me.cmbHora & " - " & Me.cmbAgendaProcedimento.Column(1) & " - " & Me.cmbAgendaProcedimento.Column(2) & " - " & Me.cmbAgendaCliente.Column(1)
                        Me("TxtAgenda" & intIndiceCtl + 30).Value = "07:30" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                        Me("TxtAgenda" & intIndiceCtl + 100).Value = "08:00" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                        Me("TxtAgenda" & intIndiceCtl + 130).Value = "08:30" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                        CadastraAgendamento
                    End If
        'Verifica disponibilidade de horário para procedimento de Nível 3
                ElseIf Me.cmbAgendaProcedimento.Column(2) = "Nivel 3" Then
                    If Me("TxtAgenda" & intIndiceCtl).Value <> "07:00" Or Me("TxtAgenda" & intIndiceCtl + 30).Value <> "07:30" Or Me("TxtAgenda" & intIndiceCtl + 100).Value <> "08:00" Then
                        If MsgBox("Existe(m) cliente(s) agendado(s) no intervalo deste agendamento: Selecione outro horário! ", vbQuestion + vbOKOnly, "Intervalo Agendado") Then
                            Me.cmbHora.SetFocus
                            Me.cmbHora.Dropdown
                            Exit Sub
                        End If
        'Procede o agendamento
                    Else
                        Me("TxtAgenda" & intIndiceCtl).Value = Me.cmbHora & " - " & Me.cmbAgendaProcedimento.Column(1) & " - " & Me.cmbAgendaProcedimento.Column(2) & " - " & Me.cmbAgendaCliente.Column(1)
                        Me("TxtAgenda" & intIndiceCtl + 30).Value = "07:30" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                        Me("TxtAgenda" & intIndiceCtl + 100).Value = "08:00" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                        CadastraAgendamento
                    End If
        'Verifica disponibilidade de horário para procedimento de Nível 2
                ElseIf Me.cmbAgendaProcedimento.Column(2) = "Nivel 2" Then
                    If Me("TxtAgenda" & intIndiceCtl).Value <> "07:00" Or Me("TxtAgenda" & intIndiceCtl + 30).Value <> "07:30" Then
                        If MsgBox("Existe(m) cliente(s) agendado(s) no intervalo deste agendamento: Selecione outro horário! ", vbQuestion + vbOKOnly, "Intervalo Agendado") Then
                            Me.cmbHora.SetFocus
                            Me.cmbHora.Dropdown
                            Exit Sub
                        End If
        'Procede o agendamento
                    Else
                        Me("TxtAgenda" & intIndiceCtl).Value = Me.cmbHora & " - " & Me.cmbAgendaProcedimento.Column(1) & " - " & Me.cmbAgendaProcedimento.Column(2) & " - " & Me.cmbAgendaCliente.Column(1)
                        Me("TxtAgenda" & intIndiceCtl + 30).Value = "07:30" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                        CadastraAgendamento
                    End If
        'Verifica disponibilidade de horário
                ElseIf Me.cmbAgendaProcedimento.Column(2) = "Nivel 1" Then
                    If Me("TxtAgenda" & intIndiceCtl).Value <> "07:00" Then
                        If MsgBox("Existe(m) cliente(s) agendado(s) para este horário: Selecione outro! ", vbQuestion + vbOKOnly, "Intervalo Agendado") Then
                            Me.cmbHora.SetFocus
                            Me.cmbHora.Dropdown
                            Exit Sub
                        End If
        'Procede o agendamento
                    Else
                            Me("TxtAgenda" & intIndiceCtl).Value = Me.cmbHora & " - " & Me.cmbAgendaProcedimento.Column(1) & " - " & Me.cmbAgendaProcedimento.Column(2) & " - " & Me.cmbAgendaCliente.Column(1)
                            CadastraAgendamento
                    End If
                End If
            Else
                MsgBox "Agendamento abortado!" & vbCrLf & vbLf & "Ou" & vbCrLf & vbLf & "Horário incompatível com a Agenda. Se você não abortou o agendamento, escolha a agenda correta ou troque o horário!", vbInformation + vbOKOnly, "Agendar Horário"
                Exit Sub
            End If
        Else
            MsgBox "Já existe um cliente agendado para este horário! Escolha outro Horário.", vbInformation, "Agenda Ocupada"
            Me.cmbHora.SetFocus
            Me.cmbHora.Dropdown
            Exit Sub
        End If
    End Sub

    2 - em cada botão chame-o
    Código:
    Agendar (ActiveControl.Name)


    .................................................................................
    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
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 17/6/2019, 13:50

    Bom dia Alexandre Neves!

    "DEUS SEJA LOUVADO"

    Obrigado pela disponibilidade em compartilhar seu conhecimento. Vou fazer os testes e retorno. Só uma dúvida, este sub Agendar não teria que ser público uma vez que vou chamá-lo de outro procedimento? Outra coisa o código da função ValidaCampos tem algo errado, ele só verifica os campos que estão no frmAgenda os campos do subForm frmAgendaB não são verificados. Faça o teste, abra o formulário frmAgenda e clique no botão agendar sem preencher os campos e verá o que eu falei acima.

    Grato
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Alexandre Neves em 17/6/2019, 14:08

    Boa tarde

    Eu apenas adaptei o código para ser utilizado genericamente por qualquer botão. Se não funcionar alguma parte, essa parte já não funcionaria. Mas veja e informe


    .................................................................................
    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
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 17/6/2019, 14:42

    Oi Alexandre!

    Achei bastante interessante este código genérico, porém há um problema que preciso resolver, Ao incrementar o TxtAgenda eu teria que incrementar também na mesma proporção o valor que está depois da igualdade e em todos os locais no código onde exista este valor. Você poderia ver se encontra uma solução. Desculpe, meu conhecimento em Access ainda é limitado.

    ElseIf Me("TxtAgenda" & intIndiceCtl).Value = "07:00" Then

    Outro problema:

    Me("TxtAgenda" & intIndiceCtl).Value = Me.cmbHora & " - " & Me.cmbAgendaProcedimento.Column(1) & " - " & Me.cmbAgendaProcedimento.Column(2) & " - " & Me.cmbAgendaCliente.Column(1)
                       Me("TxtAgenda" & intIndiceCtl + 30).Value = "07:30" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                       Me("TxtAgenda" & intIndiceCtl + 100).Value = "08:00" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                       Me("TxtAgenda" & intIndiceCtl + 130).Value = "08:30" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)

    Se for hora cheia vai funcionar, mas se for hora e meia vai ocorrer erro.

    Ex Agenda730 + 30 = Agenda760

    Creio que para hora e meia teria que ser

    Me("TxtAgenda" & intIndiceCtl).Value = Me.cmbHora & " - " & Me.cmbAgendaProcedimento.Column(1) & " - " & Me.cmbAgendaProcedimento.Column(2) & " - " & Me.cmbAgendaCliente.Column(1)
                      Me("TxtAgenda" & intIndiceCtl + 70).Value = "08:00" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                      Me("TxtAgenda" & intIndiceCtl + 100).Value = "08:30" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                      Me("TxtAgenda" & intIndiceCtl + 170).Value = "09:00" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)


    Grato

    "DEUS SEJA LOUVADO"
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Alexandre Neves em 17/6/2019, 19:53

    Não entendi a primeira parte do que expôs
    A segunda parte do que expôs deve ser assim
    Código:
    Sub Agendar(NomeCtl As String)
        '----------------------------------------------------------------'
        '  código adaptado por Alexandre Neves, do Fórum MaximoAccess  '
        '    utilize o código livremente mas mantenha os créditos      '
        '----------------------------------------------------------------'
        Dim intIndiceCtl As Integer, intIndiceCtl2 As Integer
        intIndiceCtl = Mid(NomeCtl, 6)
        If Right(intIndiceCtl, 2) = 30 Then intIndiceCtl2 = intIndiceCtl + 70 Else intIndiceCtl2 = intIndiceCtl + 30
       
        'Verifica se os campos estão preenchidos
        If ValidaCampos = False Then
            Exit Sub
        'Verifica disponibilidade de horário para procedimento de Nível 4
        ElseIf Me("TxtAgenda" & intIndiceCtl).Value = "07:00" Then
            If Me.cmbHora.Value = "07:00" And MsgBox("Deseja agendar o horário " & Me.cmbHora & " para " & Me.cmbAgendaCliente.Column(1), vbQuestion + vbYesNo, "Agendar Cliente") = vbYes Then
                If Me.cmbAgendaProcedimento.Column(2) = "Nivel 4" Then
                    If Me("TxtAgenda" & intIndiceCtl).Value <> "07:00" Or Me("TxtAgenda" & intIndiceCtl2).Value <> "07:30" Or Me("TxtAgenda" & intIndiceCtl + 100).Value <> "08:00" Or Me("TxtAgenda" & intIndiceCtl2 + 100).Value <> "08:30" Then
                        If MsgBox("Existe(m) cliente(s) agendado(s) no intervalo deste agendamento: Selecione outro horário! ", vbQuestion + vbOKOnly, "Intervalo Agendado") Then
                            Me.cmbHora.SetFocus
                            Me.cmbHora.Dropdown
                            Exit Sub
                        End If
        'Procede o agendamento
                    Else
                        Me("TxtAgenda" & intIndiceCtl).Value = Me.cmbHora & " - " & Me.cmbAgendaProcedimento.Column(1) & " - " & Me.cmbAgendaProcedimento.Column(2) & " - " & Me.cmbAgendaCliente.Column(1)
                        Me("TxtAgenda" & intIndiceCtl2).Value = "07:30" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                        Me("TxtAgenda" & intIndiceCtl + 100).Value = "08:00" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                        Me("TxtAgenda" & intIndiceCtl2 + 100).Value = "08:30" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                        CadastraAgendamento
                    End If
        'Verifica disponibilidade de horário para procedimento de Nível 3
                ElseIf Me.cmbAgendaProcedimento.Column(2) = "Nivel 3" Then
                    If Me("TxtAgenda" & intIndiceCtl).Value <> "07:00" Or Me("TxtAgenda" & intIndiceCtl2).Value <> "07:30" Or Me("TxtAgenda" & intIndiceCtl + 100).Value <> "08:00" Then
                        If MsgBox("Existe(m) cliente(s) agendado(s) no intervalo deste agendamento: Selecione outro horário! ", vbQuestion + vbOKOnly, "Intervalo Agendado") Then
                            Me.cmbHora.SetFocus
                            Me.cmbHora.Dropdown
                            Exit Sub
                        End If
        'Procede o agendamento
                    Else
                        Me("TxtAgenda" & intIndiceCtl).Value = Me.cmbHora & " - " & Me.cmbAgendaProcedimento.Column(1) & " - " & Me.cmbAgendaProcedimento.Column(2) & " - " & Me.cmbAgendaCliente.Column(1)
                        Me("TxtAgenda" & intIndiceCtl2).Value = "07:30" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                        Me("TxtAgenda" & intIndiceCtl + 100).Value = "08:00" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                        CadastraAgendamento
                    End If
        'Verifica disponibilidade de horário para procedimento de Nível 2
                ElseIf Me.cmbAgendaProcedimento.Column(2) = "Nivel 2" Then
                    If Me("TxtAgenda" & intIndiceCtl).Value <> "07:00" Or Me("TxtAgenda" & intIndiceCtl2).Value <> "07:30" Then
                        If MsgBox("Existe(m) cliente(s) agendado(s) no intervalo deste agendamento: Selecione outro horário! ", vbQuestion + vbOKOnly, "Intervalo Agendado") Then
                            Me.cmbHora.SetFocus
                            Me.cmbHora.Dropdown
                            Exit Sub
                        End If
        'Procede o agendamento
                    Else
                        Me("TxtAgenda" & intIndiceCtl).Value = Me.cmbHora & " - " & Me.cmbAgendaProcedimento.Column(1) & " - " & Me.cmbAgendaProcedimento.Column(2) & " - " & Me.cmbAgendaCliente.Column(1)
                        Me("TxtAgenda" & intIndiceCtl2).Value = "07:30" & " - " & "Horário agregado" & " - " & Me.cmbAgendaProcedimento.Column(1)
                        CadastraAgendamento
                    End If
        'Verifica disponibilidade de horário
                ElseIf Me.cmbAgendaProcedimento.Column(2) = "Nivel 1" Then
                    If Me("TxtAgenda" & intIndiceCtl).Value <> "07:00" Then
                        If MsgBox("Existe(m) cliente(s) agendado(s) para este horário: Selecione outro! ", vbQuestion + vbOKOnly, "Intervalo Agendado") Then
                            Me.cmbHora.SetFocus
                            Me.cmbHora.Dropdown
                            Exit Sub
                        End If
        'Procede o agendamento
                    Else
                            Me("TxtAgenda" & intIndiceCtl).Value = Me.cmbHora & " - " & Me.cmbAgendaProcedimento.Column(1) & " - " & Me.cmbAgendaProcedimento.Column(2) & " - " & Me.cmbAgendaCliente.Column(1)
                            CadastraAgendamento
                    End If
                End If
            Else
                MsgBox "Agendamento abortado!" & vbCrLf & vbLf & "Ou" & vbCrLf & vbLf & "Horário incompatível com a Agenda. Se você não abortou o agendamento, escolha a agenda correta ou troque o horário!", vbInformation + vbOKOnly, "Agendar Horário"
                Exit Sub
            End If
        Else
            MsgBox "Já existe um cliente agendado para este horário! Escolha outro Horário.", vbInformation, "Agenda Ocupada"
            Me.cmbHora.SetFocus
            Me.cmbHora.Dropdown
            Exit Sub
        End If
    End Sub


    .................................................................................
    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
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 18/6/2019, 21:33

    Boa tarde Alexandre Neves!

    DEUS SEJA LOUVADO!

    Mais uma vez obrigado por sua disponibilidade.

    A primeira parte é o seguinte

    Se intIndiceCtl for igual a 700

    ElseIf Me("TxtAgenda" & intIndiceCtl).Value = "07:00" Then

    Se intIndiceCtl for igual a 730

    ElseIf Me("TxtAgenda" & intIndiceCtl).Value = "07:30" Then

    Se intIndiceCtl for igual a 800

    ElseIf Me("TxtAgenda" & intIndiceCtl).Value = "08:00" Then

    E assim sucessivamente até:

    Se intIndiceCtl for igual a 2000

    ElseIf Me("TxtAgenda" & intIndiceCtl).Value = "20:00" Then

    Como você declarou a variável intIndiceCtl para incrementar o txtAgenda, precisaria de outra variável para incrementar o "07:00" , "07:30" e assim sucessivamente.

    Dá uma olhada no código do botão btnAg730 e compare com o btnAg700 e vai observar que a comparação é:

    Se txtAgenda700 = "07:00"

    Se txtAgenda730 = "07:30"

    Se txtAgenda800 = "08:00"

    E assim sucerssivamente.

    Grato


    avatar
    renpv
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 217
    Registrado : 12/01/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  renpv em 19/6/2019, 14:11

    Eu dei uma olhada no código e te digo que eu faria diferente.

    Se eu precisasse de uma solução como essa tua, eu criaria uma função para cadastro dos agendamentos (como você fez). A diferença no meu método é que eu criaria essa função com os parâmetros necessários para a verificação e agendamento das atividades.

    Protótipo da função agendar
    Código:

    sub agendar(profissional, cliente, data, hora)

    if(profissionalDisponivel(profissional, data,hora)) then
    'Rotina para agendamento
    else
    'Mensagem de indisponibilidade de horário
    end if
    end sub

    protótipo da função profissionalDisponivel
    Código:

    function profissionalDisponivel(profissional, data, hora)
    if(dcount(*, tabelaAgendamento, profissional and data and hora) = 0)  then
    profissionalDisplonivel = true
    else
    profissionalDisplonivel false
    end if

    Fazendo assim, você poderia chamar essa função pelo botão desse jeito
    Código:

    Private Sub btnAg700_Click()
    agendar(idProfissional, idCliente, data, hora)
    end function

    Bastaria uma linha pra cada controle (botão).

    Outra coisa que vi  no seu código foi muita repetição. E vai aqui um conselho de amigo: quando estiver repetindo código, crie uma função.
    Como eu faço?
    Quando eu tenho vários controles em um formulário e preciso ficar habilitando e desabilitando, crio uma função para usá-la dinamicamente.
    Exemplo:
    Código:

    sub habilitaBotoes(a, b, c, d, e)
        Me.btnAnterior.Enabled = a
        Me.btnCancelar.Enabled = b
        Me.btnEditar.Enabled = c
        Me.btnEncerrar.Enabled = d
        Me.btnExcluir.Enabled = e    
    end sub
    Código para habilitar todos os botões acima
    Código:

    habilitaBotoes(true, true, true, true, true)
    Código para desabilitar todos os botões acima
    Código:

    habilitaBotoes(false, false, false, false, false)
    E a maior vantagem é que dessa forma você pode combinar tudo isso.
    Código:

    habilitaBotoes(true, false, true, false)

    Uma terceira coisa que vi foi que você criou um botão + uma caixa de texto pra cada horário.
    Eu vi que já tem uma combobox pra selecionar horários. Não seria possível usar apenas 1 combobox + 1 botão pra agendar ?

    Sucesso.
    avatar
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 19/6/2019, 18:05

    Bom dia Amigo!

    "DEUS SEJA LOUVADO"

    Esta agenda é para facilitar para o usuário olhar para a tela e ver quais horários estão disponíveis sem a necessidade de ficar olhando relatório, é como se fosse uma agenda de papel, o agendamento mesmo fica em uma tabela separada.

    Em relação a repetição de código é exatamente porque eu não sei criar as funções, uma vez vez que eu terei que chamá-las em cada botão. Observe os demais botões e verá que o código funciona perfeitamente, porém não é uma boa prática. Eu também ainda não consegui resolver o problema de ignorar o campo Código e o campo Observação, ao verificar se os campos estão preenchidos. O campo Código é numeração automática e o campo Observação nem sempre vai estar preenchido, por isso eu preciso ignorá-los ao fazer a verificação.

    Outro problema é que os procedimentos estéticos têm tempo de execução diferentes, procedimentos de nível 4 são realizados em 2 horas, por isso devem ocupar 4 espaços na agenda, outros 1 hora e meia devem ocupar 3 espaços , outros 1 hora, dois espaços e outros apenas meia hora, 1 espaço.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Alexandre Neves em 19/6/2019, 21:10

    Boa noite
    Então substitua
    ElseIf Me("TxtAgenda" & intIndiceCtl).Value = "07:00" Then
    por
    ElseIf Me("TxtAgenda" & intIndiceCtl).Value = "0" & Format(intIndiceCtl, "#:##") Then


    .................................................................................
    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
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 20/6/2019, 02:51

    Boa noite Alexandre!

    "DEUS SEJA LOUVADO"

    O dia hoje foi meio corrido, só agora pude acessar o Fórum. Me desculpe.

    Realmente estou surpreso com suas soluções. Creio que eu teria que fazer o mesmo com a linha abaixo e outros pontos no código onde aparece as horas. Estou certo?

    If Me("TxtAgenda" & intIndiceCtl).Value <> "07:00" Or Me("TxtAgenda" & intIndiceCtl2).Value <> "07:30" Or Me("TxtAgenda" & intIndiceCtl + 100).Value <> "08:00" Or Me("TxtAgenda" & intIndiceCtl2 + 100).Value <> "08:30" Then

    Neste caso eu substituiria o que há depois do <> pelo Format do seu exemplo?

    ElseIf Me("TxtAgenda" & intIndiceCtl).Value = "0" & Format(intIndiceCtl, "#:##") Then

    E ainda tem outro ponto no seu exemplo acima o "0" seria somente até 09:30 depois a partir das "10:00 " eu creio que seria ##:##. Como ficaria?

    Vou fazer os testes e retorno.

    Grato
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Alexandre Neves em 20/6/2019, 09:20

    Bom dia,
    Sim, adeque para as instruções que variam com o argumento

    Sobre o formato, substitua
    "0" & Format(intIndiceCtl, "#:##")
    por
    Format(intIndiceCtl, "00:00")


    .................................................................................
    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
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 20/6/2019, 23:21

    Boa noite Alexandre!

    "DEUS SEJA LOUVADO"

    Vou fazer os testes e assim que eu tiver os resultados posto.
    Grato.
    avatar
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 23/6/2019, 18:07

    Boa tarde Alexandre!

    "DEUS SEJA LOUVADO"

    Fiz as alterações como você sugeriu, funcionou perfeitamente no procedimento ao clicar do btnAg700 (só fiz neste por enquanto), adaptei o código para um procedimento público (genérico) para utilizar em todos os botões (btnAg...). No entanto ao chamar o procedimento ocorre um erro 13 tipos incompatíveis. Poderia por gentileza dar uma olhada e ver o que fiz errado? pois no botão btnAg700 os tipos são os mesmos e não ocorre este erro.
    Segue o arquivo.

    Sobre a função que você sugeriu para habilitar os botões seria assim? Porque tentei desta forma e não funcionou, e fiquei na dúvida pelo fato da função chamar a propriedade Me.btn..., esta propriedade não seria exclusiva do formulário aberto?

    Public Function HabilitaBotoes(a, b, c, d, e, f, g, h, i, j, k, l )

       Me.btnPrimeiro.Enabled = a
       Me.btnAnterior.Enabled = b
       Me.btnProximo.Enabled = c
       Me.btnUltimo.Enabled = d
       Me.btnLocalizar.Enabled = e
       Me.btnNovo.Enabled = f
       Me.btnSalvar.Enabled = g
       Me.btnCancelar.Enabled = h
       Me.btnEditar.Enabled = i
       Me.btnFechar.Enabled = j
       Me.btnEncerrar.Enabled = k
       Me.btnExcluir.Enabled = l

    End Function

    Tentei também sem sucesso.

    Public Function HabilitaBotoes(a, b, c, d, e, f, g, h, i, j, k, l As Boolean).
    Public Sub HabilitaBotoes(a, b, c, d, e, f, g, h, i, j, k, l )
    Sub HabilitaBotoes(a, b, c, d, e, f, g, h, i, j, k, l )

    Grato.
    Anexos
    [Resolvido]Ignorar controle na instrução For Each Next AttachmentSteticSysMaximo.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (378 Kb) Baixado 2 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Alexandre Neves em 23/6/2019, 21:55

    Boa noite,

    Descarreguei a bd e não encontrei as funções que indicou
    Compile o projecto para verificar alguns erros (refere muitos controlos que não existem)
    Não encontrei explicação detalhada da forma de chegar ao erro


    .................................................................................
    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
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 24/6/2019, 21:49

    Boa tarde Alexandre!

    "DEUS SEJA LOUVADO"

    Uma vez mais agradeço sua disponibilidade.

    Tentei criar uma função para habilitar/desabilitar botões como você sugeriu, mas sem sucesso. Execute o formulário frmModelo e clique no botão novo, você será direcionado para o erro no código. O outro erro está no formulário frmAgenda, criei um código no botão btnAg700 (Agendar das 07:00) que funciona perfeitamente, eu tentei criar um procedimento genérico como você sugeriu porém ao chamar o mesmo ocorre um erro (Tipos incompatíveis) que não ocorre no código do btnAg700. Execute o frmAgenda e clique no botão btnAg700 (Agendar das 07:00) você verá que funciona perfeitamente, porém o mesmo código em um procedimento ocorre o erro mencionado, clique no botão btnAg1200 (Agendar das 12:00) e será direcionado para o código onde ocorre o erro. Desculpe não ter dado detalhes na mensagem anterior. Se puder dar uma olhada nos dois códigos e corrigir o que eu fiz errado fico grato.

    Segue o arquivo com as alterações
    Anexos
    [Resolvido]Ignorar controle na instrução For Each Next AttachmentSteticSysMaximo2.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (306 Kb) Baixado 2 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Alexandre Neves em 25/6/2019, 08:55

    Bom dia,

    No módulo só pode designar Me. quando estiver no objecto (form, relatório), noutro sítio tem de invocar o nome do objecto; não designe por função pois não devolve nada, apenas executa

    Veja agora
    Anexos
    [Resolvido]Ignorar controle na instrução For Each Next AttachmentSteticSysMaximo.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (450 Kb) Baixado 6 vez(es)


    .................................................................................
    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
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 25/6/2019, 22:12

    Boa tarde Alexandre!

    "DEUS SEJA LOUVADO"

    Testei o código e funcionou 100%. Sobre o procedimento para habilitar os botões que você sugeriu, eu criei um procedimento no módulo mdlHabilitaBotoes, porém não consegui fazer funcionar. Poderia por gentileza dar uma olhada no código e corrigir o que está errado?

    Segue o DB.

    Grato.
    Anexos
    [Resolvido]Ignorar controle na instrução For Each Next AttachmentSteticSysMaximoV2.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (374 Kb) Baixado 4 vez(es)
    avatar
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 27/6/2019, 21:08

    Boa tarde Alexandre!

    "DEUS SEJA LOUVADO"

    Poderia por gentileza dar uma olhada no código HabilitaBotões e me dizer onde está o erro?

    Grato
    avatar
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 29/6/2019, 15:12

    Bom dia Alexandre!

    "DEUS SEJA LOUVADO"

    Quero dar o tópico por encerrado, porém creio que seja necessário alterar o nome do tópico, pois o assunto referente ao mesmo acabou sendo desviado. Creio que o nome ideal deveria ser "Passar argumento para controle de formulário (Código genérico)". O assunto do tópico na verdade acabou não sendo resolvido. Sobre a sub que você sugeriu para habilitar/desabilitar botões também não consegui resolver, mas vou abrir outro tópico com o assunto. Adaptei seu código para os botões cancelar também. Segue o DB. Mais uma vez agradeço sua disponibilidade em repassar seu conhecimento, aprendi muito com suas soluções.
    Grato
    Anexos
    [Resolvido]Ignorar controle na instrução For Each Next AttachmentStetycSysMaximoV3.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (603 Kb) Baixado 3 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Alexandre Neves em 24/7/2019, 09:01

    Bom dia,
    Estive algum tempo ausente e estou de volta
    Sobre a última dúvida apresentada
    Onde colocou
    HabilitaBotoes(False, False, False, False, False, False, True, True, False, False, False, False)
    coloque
    Call HabilitaBotoes(False, False, False, False, False, False, True, True, False, False, False, False)


    .................................................................................
    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
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 24/7/2019, 22:04

    Boa tarde Alexandre!

    Que bom que está de volta. Eu já havia tentado chamar com call, mas não funcionou. Então criei o procedimento abaixo mas estava errando na chamada, então o colega renpv aqui do máximo me mostrou a solução. Ficou assim:

    Public Sub HabilitaBotoes(ObjHabilita As Object, a, b, c, d, e, f, g, h, i, j, k, l As Boolean)

    ObjHabilita.btnPrimeiro.Enabled = a
    ObjHabilita.btnAnterior.Enabled = b
    ObjHabilita.btnProximo.Enabled = c
    ObjHabilita.btnUltimo.Enabled = d
    ObjHabilita.btnLocalizar.Enabled = e
    ObjHabilita.btnNovo.Enabled = f
    ObjHabilita.btnSalvar.Enabled = g
    ObjHabilita.btnCancelar.Enabled = h
    ObjHabilita.btnEditar.Enabled = i
    ObjHabilita.btnFechar.Enabled = j
    ObjHabilita.btnEncerrar.Enabled = k
    ObjHabilita.btnExcluir.Enabled = l

    End Sub

    Call HabilitaBotoes(Me, False, False, False, False, False, False, True, True, False, False, False, False)

    Mais uma vez obrigado pela ajuda. Grande abraço.
    avatar
    Edelson Vieira
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 198
    Registrado : 22/08/2015

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Edelson Vieira em 24/7/2019, 22:06

    Tópico resolvido. Obrigado a todos que colaboraram. Grande abraço.

    Conteúdo patrocinado

    [Resolvido]Ignorar controle na instrução For Each Next Empty Re: [Resolvido]Ignorar controle na instrução For Each Next

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 21/11/2019, 17:27