MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    Se o campo estiver sujo "liberar vbKeyReturn" se estiver vazio "trancar vbKeyReturn"

    avatar
    mfmaiafilho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 161
    Registrado : 02/08/2018

    Se o campo estiver sujo "liberar vbKeyReturn" se estiver vazio "trancar vbKeyReturn" Empty Se o campo estiver sujo "liberar vbKeyReturn" se estiver vazio "trancar vbKeyReturn"

    Mensagem  mfmaiafilho em 30/4/2020, 12:13

    bom dia gente, tudo bem com vocês, espero que sim !

    estou com uma dificuldade com esse código, é de um campo de texto, que teria como principal função salvar após colocar a data do encerramento com a tecla de atalho ENTER

    era pra ser Se o Campo estiver Sujo então liberar vbKeyReturn, alguém pode me ajudar ?


    ' ao apertar tecla ENTER dentro do campo DATA ENCERRAMENTO após preencher..

    Private Sub DataEncerramento_KeyDown(KeyCode As Integer, Shift As Integer)
       Select Case KeyCode
           Case vbKeyReturn

           If Me.Dirty Then                                                                      > esse é o caso Se o campo estiver sujo, então liberar vbKeyReturn.

           DoCmd.Save
           msg = MsgBox("Salvo com sucesso!", vbInformation + vbOKOnly + vbDefaultButton2, "Mensagem")
           DoCmd.GoToRecord , , acNewRec
           Me.Periodo.Enabled = True
           Me.DataRegistro.Enabled = True
           Me.Solicitante.Enabled = True
           Me.Setor.Enabled = True
           Me.TipoOcorrencia.Enabled = True
           Me.Descreva.Enabled = True
           Me.Prioridade.Enabled = True
           Me.DataAtendimento.Enabled = True
           Me.Procedimento.Enabled = True
           Me.HoraInicio.Enabled = True
           Me.HoraFim.Enabled = True
           Me.DataEncerramento.Enabled = False
           Me.Periodo.SetFocus
           Me.BTN_DESFAZER.Enabled = False
           Me.BTN_NOVO.Enabled = False
           Me.BTN_SALVAR.Enabled = False
           Me.BTN_SAIR.Enabled = True
           Else
           End If
           KeyCode = 0
    End Select

    End Sub
    avatar
    Luizmilk
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 05/03/2020

    Se o campo estiver sujo "liberar vbKeyReturn" se estiver vazio "trancar vbKeyReturn" Empty Re: Se o campo estiver sujo "liberar vbKeyReturn" se estiver vazio "trancar vbKeyReturn"

    Mensagem  Luizmilk em 12/5/2020, 01:37

    Não sei se entendi o que você quer. Mas vou fazer uma pergunta:

    Você está buscando um Form sujo ou um Campo que tenha alguma informação???
    Pelo que vi, isto faz diferença.

    Fiz um teste com este código e funciona. Lembrando que Texto8 é o campo.

    Código:
    Private Sub Texto8_KeyDown(KeyCode As Integer, Shift As Integer)
           Select Case KeyCode
            Case vbKeyReturn
                If Me.Texto8.Text <> "" Then
                    MsgBox "Vazio!!!"
                Else
                    MsgBox "Com Conteúdo"
                End If
           End Select
    End Sub

    if Ajudei = True then
        "Abraço"  
    else
       "excuse me"
    End if

    Luizmilk
    avatar
    mfmaiafilho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 161
    Registrado : 02/08/2018

    Se o campo estiver sujo "liberar vbKeyReturn" se estiver vazio "trancar vbKeyReturn" Empty Re: Se o campo estiver sujo "liberar vbKeyReturn" se estiver vazio "trancar vbKeyReturn"

    Mensagem  mfmaiafilho em 12/5/2020, 16:54

    bom dia amigo, a questão do campo é a seguinte,

    eu tenho o comando salvar e fechar ao pressionar a tecla ENTER nesse campo DATA_ENCERRAMENTO porém esse comando só pode ser ativo quando o usuáio preencher a data de encerramento

    nesse caso hoje mesmo não preenchendo a data de encerramento ele deixa eu salvar e fechar usando a tecla enter no ultimo campo, DATA_ENCERRAMENTO>
    avatar
    Luizmilk
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 05/03/2020

    Se o campo estiver sujo "liberar vbKeyReturn" se estiver vazio "trancar vbKeyReturn" Empty Re: Se o campo estiver sujo "liberar vbKeyReturn" se estiver vazio "trancar vbKeyReturn"

    Mensagem  Luizmilk em 13/5/2020, 01:17

    O código acima funcionaria para fazer o que você deseja. Porém há outras maneiras para você realizar isso.

    Você pode fazer uma análise para ver qual campo é obrigatório colocar o código nas Propriedades do Form >>> Antes de atualizar.

    Assim você não deixa ele salvar sem que todos os campos obrigatórios estejam preenchidos.

    Esta é uma das formas de realizar a tarefa que você deseja.

    Vou dar um exemplo (Neste caso acima, você pode colocar um botão para salvar e ao clicar (antes de atualizar) ele vai verificar):

    Código:
    Private Sub Form_BeforeUpdate(Cancel As Integer)

    If nz(len(txtCampoObrigatrio);0)>0 then '==== Se o campo obrigatório tiver algum dado então faça
    '==== Faça alguma coisa (Ou se não colocar nada, volta automaticamente para a sub de salvamento)

    Else '==== Caso esteja vazio
         Cancel = True  '==== Cancela o evento

    End if

    End Sub

    No seu caso em que o campo obrigatório é uma data, você pode usar este método para analisar:

    IsDate(txtCampoObrigatorio)

    Ou seja se o que estiver dentro do campo não for uma data válida (não apenas ter conteúdo, será necessário ser uma data válida), ele não proseguirá o salvamento.

    Você pode analisar este link também: https://www.maximoaccess.com/t5549-campo-obrigatorio-em-um-sub-formulario

    If Ajudei = True then
      MsgBox  "Abraço!"  
    Else
      MsgBox "excuse me!"
    End if

    Luizmilk
    avatar
    mfmaiafilho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 161
    Registrado : 02/08/2018

    Se o campo estiver sujo "liberar vbKeyReturn" se estiver vazio "trancar vbKeyReturn" Empty Re: Se o campo estiver sujo "liberar vbKeyReturn" se estiver vazio "trancar vbKeyReturn"

    Mensagem  mfmaiafilho em 13/5/2020, 13:21

    o grande problema é que estou fazendo isso no evento "ao apertar tecla" pq só assim ele me deixa salvar com ENTER

    Private Sub DataEncerramento_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
    Case vbKeyReturn

    If Me.Dirty Then < esse é o dia código que queria modificar.... tipo eu não sei como dizer ao VBA se o campo estiver sujo ele bloqueia o Select Case.


    DoCmd.Save
    msg = MsgBox("Salvo com sucesso!", vbInformation + vbOKOnly + vbDefaultButton2, "Mensagem")
    DoCmd.GoToRecord , , acNewRec
    Me.Periodo.Enabled = True
    Me.DataRegistro.Enabled = True
    Me.Solicitante.Enabled = True
    Me.Setor.Enabled = True
    Me.TipoOcorrencia.Enabled = True
    Me.Descreva.Enabled = True
    Me.Prioridade.Enabled = True
    Me.DataAtendimento.Enabled = True
    Me.Procedimento.Enabled = True
    Me.HoraInicio.Enabled = True
    Me.HoraFim.Enabled = True
    Me.DataEncerramento.Enabled = False
    Me.Periodo.SetFocus
    Me.BTN_DESFAZER.Enabled = False
    Me.BTN_NOVO.Enabled = False
    Me.BTN_SALVAR.Enabled = False
    Me.BTN_SAIR.Enabled = True
    Else
    End If
    KeyCode = 0
    End Select
    avatar
    Luizmilk
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 05/03/2020

    Se o campo estiver sujo "liberar vbKeyReturn" se estiver vazio "trancar vbKeyReturn" Empty Re: Se o campo estiver sujo "liberar vbKeyReturn" se estiver vazio "trancar vbKeyReturn"

    Mensagem  Luizmilk em 14/5/2020, 02:24

    Amigo,

    Em fevereiro eu entrei de cabeça no Access. Ainda não sei usar os termos e não sei explicar o porquê de alguns funcionamentos que tenho observado.

    Algumas coisas tem pouca difença, mas como envolve um código EXTREMAMENTE obediente ao que nós programamos, estas pequenas diferenças fazem muita diferença.

    Ex. Temos em um Caixa de Texto determinados eventos que parecem iguais (Ao apertar a tecla e Ao pressionar a tecla). No português estes dois eventos são sinônimos, porém na linguagem VBA, não são. Estes eventos se comportam diferentes.

    Quando você colocar Me. Dirty, ele está vendo o formulário e não a Caixa de Texto onde você está armazenando a Data.

    Testei o código que passei para você na primeira vez. coloquei no mesmo lugar que você esta usando. Com a mesma ideia inicial sua. (mesmo não sendo o lugar preferido meu, onde coloquei na segunda vez).
    Vou colocar o primeiro código abaixo e colocar comentário antes de cada linha:

    ' uso o mesmo evento que você, só não nomeei minha caixa de texto.
    Private Sub Texto8_KeyDown(KeyCode As Integer, Shift As Integer)

    ' Coloco um select Case como você, para que ele observe a tecla retorno

          Select Case KeyCode                                                            

    ' Então você pode apertar qualquer tecla que não vai haver ação neste evento, mas se apertar ENTER ele vai agir
           Case vbKeyReturn                                                                

    ' Aqui coloquei um Condição a se analisada CASO tenha apertado o ENTER. analisei que há ou não texto na CAIXA de Texto.
               If Me.Texto8.Text <> "" Then                                            

    ' SE não há texto (Ou seja, se estiver vaizo) coloquei uma mensagem. Porém aqui você pode além da mensagem colocar outras ações que desejar
                   MsgBox "Vazio!!!"                                                        

    ' Senão está vazio, ou seja está com alguma informação
               Else                                                                

    ' Coloquei uma mensagem avisando que possui conteúdo. _
    ' É aqui que você pode analisar se o conteúdo é uma data válida que aconselhei você a fazer na segunda resposta ou proibir uma data futura e/ou passada se desejar
    ' Aqui você pode colocar todos os seus códigos habilitando ou desabilitando campos e botões

                   MsgBox "Com Conteúdo"                                              
               End If
          End Select
    End Sub


    Como disse, há muitos caminhos para fazer a mesma acão. Você disse que somente no evento apertar tecla que voce pode fazer isso. Veja outra maneira em outro evento.

    Toda vezes que você aperta o ENTER, o cursor segue o fluxo da tabulação, ou seja ele vai para o proximo lugar que está determinado a parada do Tab. Então se você aperta a tecla ENTER ai neste campo ele vai sair para outro lugar.

    Você então tem outro envento chamado "Ao Sair", "Antes de Atualizar", "Após Atualizar" e  "Ao perder o Foco". Todos estes podem fazer o que você deseja depois de apertar o ENTER, pois apertando o ENTER eles vão acontecer independente de sua vontade. Você só teria que escolher o melhor para o momento.

    Se você der o comando para verificar campo obrigatório não são todos os que vão atingir o que deseja.

    Se desejar mandar a parte do Banco de Dados por aqui. Posso ajudar você na prática.

    Talves outros colegas teriam uma maneira mais prática de fazer isso. Podemos esperar.

    If Ajudei = True then
     MsgBox  "Abraço!"  
    Else
     MsgBox "excuse me!"
    End if

    Luizmilk

      Data/hora atual: 5/8/2020, 19:31