Vídeo recomendado
https://youtu.be/diWPPPhW-9E

[RESOLVIDO] Botão Ok - Restringir salvamento

Esclarecimentos e dúvidas sob o Modelo de Aplicativo de Cadastro em VBA no Microsoft Excel publicado no site e blog http://www.tomasvasquez.com.br
SaraOliveira
Colaborador
Colaborador
Mensagens: 17
Registrado em: Sex Set 15, 2017 8:29 am

[RESOLVIDO] Botão Ok - Restringir salvamento

Mensagem por SaraOliveira »

Bom dia,

Gostaria de uma ajuda no desenvolvimento de uma função que impeça que usuário de salvar/alterar um registro, caso os campos 'Título' e 'Autor' já estejam registrados.


Modelo .zip
(60.29 KiB) Baixado 339 vezes
Editado pela última vez por SaraOliveira em Sex Out 13, 2017 10:11 am, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Rafael Monteiro
Consultor
Consultor
Mensagens: 277
Registrado em: Seg Nov 28, 2011 8:27 am
Localização: Sorocaba - SP
Contato:

Re: Botão Ok - Restringir salvamento

Mensagem por Rafael Monteiro »

Boa noite Sara Oliveira,

Eu penso ter entendido o que você pretendo. Mas talvez seja mais viável você adicionar o código dentro do optAlterar, já que a intenção é impedir que aja alterações. Então eu pensei nesse código dentro do optAlterar:

Código: Selecionar todos

Private Sub optAlterar_Click()

If Cadastro.txtTitulo = "" Then
'Continua sem interrupção
Else
MsgBox "Esse Registro não pode ser alterado!", vbExclamation, "Informação"
btnCancelar_Click

If Cadastro.txtAutor = "" Then
'Continua sem interrupção
Else
MsgBox "Esse Registro não pode ser alterado!", vbExclamation, "Informação"
btnCancelar_Click

lblMensagem.Caption = ""
If txtCodigo.Text <> vbNullString And txtCodigo.Text <> "" Then
Call HabilitaControles
Call DesabilitaBotoesAlteracao
'dá o foco ao primeiro controle de dados
txtTitulo.SetFocus
Else

lblMensagem.Caption = "Não há livro a ser alterado"
End If
End If
End If
End Sub


SaraOliveira
Colaborador
Colaborador
Mensagens: 17
Registrado em: Sex Set 15, 2017 8:29 am

Re: Botão Ok - Restringir salvamento

Mensagem por SaraOliveira »

oi Rafael, boa noite!

Obrigado pela resposta!
Entendi o que você fez, mas meu objetivo é outro.
No meu caso, o objetivo é: quando o usuário realizar o registro de um livro, aparecer uma mensagem avisando que o mesmo já existe. E, se ele for alterar um livro, mas essa alteração ja constar na biblioteca tambem exibir um aviso.
Em resumo: evitar itens duplicados na biblioteca


SaraOliveira
Colaborador
Colaborador
Mensagens: 17
Registrado em: Sex Set 15, 2017 8:29 am

Re: Botão Ok - Restringir salvamento

Mensagem por SaraOliveira »

Olá!

Resolvi o problema criando uma função e chamando-a, no botão Ok.

Código: Selecionar todos

Private Function DetectarRepetidos()
       
        Dim Titulo, Autor
        Dim Rng1, Rng2
        
        Titulo = txtTitulo.Value
        Autor = txtAutor.Value
        
        Set Rng1 = Sheets("Livros").Range("B:B").Find(Titulo)
        Set Rng2 = Sheets("Livros").Range("C:C").Find(Autor)
       
        If Not Rng1 Is Nothing And Not Rng2 Is Nothing Then
       
        DetectarRepetidos = True
        Exit Function
        Else
            DetectarRepetidos = False
        End If

End Function

E para aciona-la:

Código: Selecionar todos

Private Sub btnOK_Click()
    Dim proximoId As Long

    'Altera
    If optAlterar.Value Then
         If txtTitulo = "" Or txtAutor = "" Or cbCategoria.Value = "" Then
           MsgBox "Os campos 'Título', 'Autor' e 'Categoria' devem ser preenchidos!", 16, "Campos em branco"
        Exit Sub
        End If
         Call DetectarRepetidos
         If DetectarRepetidos = True Then
         MsgBox "O livro já existe nos registros!", 16, "Duplicados"
         LimpaControles
         txtTitulo.SetFocus         
    Exit Sub
          
          Else
         
        Call SalvaRegistro(CLng(txtCodigo.Text), indiceRegistro)
         lblMensagem.Caption = ""
        lblMensagem.Caption = "Registro alterado com sucesso"
    End If
   End If
  
    'Novo
    If optNovo.Value Then
        proximoId = PegaProximoId
        'pega a próxima linha
        Dim proximoIndice As Long
        proximoIndice = wsCadastro.UsedRange.Rows.Count + 1
         
        If txtTitulo = "" Or txtAutor = "" Or cbCategoria.Value = "" Then
           MsgBox "Os campos 'Título', 'Autor' e 'Categoria' devem ser preenchidos!", 16, "Campos em branco"
        Exit Sub
        End If 
        
        Call DetectarRepetidos
        
        If DetectarRepetidos = True Then
         MsgBox "O livro já existe nos registros!", 16, "Bookworm informa: Duplicados"
         
             LimpaControles
             txtTitulo.SetFocus
        Exit Sub
          
          Else
            Call SalvaRegistro(proximoId, proximoIndice)
            txtCodigo = proximoId
            lblMensagem.Caption = ""
            lblMensagem.Caption = "Registro salvo com sucesso"
        End If
    End If

Pode não ser o melhor método, mas atendeu muito bem a minha necessidade!

;)


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder