Notifications
Clear all

Não inserir valor repetido

4 Posts
3 Usuários
0 Reactions
1,010 Visualizações
(@wfranca)
Posts: 297
Honorable Member
Topic starter
 

Pessoal, boa tarde!

Estou usando o código abaixo em um botão do meu Form. Esse form contem textbox com valores na qual insiro em uma planilha. A idéia é que ao inserir uma "ordem de produção" de valor igual ele não deixe inserir a ordem selecionada pois o valor já consta lançado na planilha. Só que esse código está apenas reconhecendo a ultima linha inserida e não deixa prosseguir, nem fazer lançamentos que não constam na planilha como mostra a imagem.

Private Sub btnok_Click()

On Error Resume Next
Dim nLinComp As Integer, nLinFim As Integer
Dim Resp As String
nLinFim = 2
Do While Not IsEmpty(Cells(nLinFim, 1))
nLinFim = nLinFim + 1
Loop
nLinComp = 1
Do While nLinComp <= nLinFim - 1
If Cells(nLinFim - 1, 2).Value = Cells(nLinComp, 2).Value Then
Cells(nLinFim - 1, 1).Activate
Resp = MsgBox("O Valor " & "'" & ActiveCell & "" & " já consta na planilha." & _
vbCrLf & vbCrLf & "Este Valor será Excluido !", vbCritical, " Valor !")
Exit Sub
Else
nLinComp = nLinComp + 1
End If
Loop
Cells(nLinComp + 1, 2).Activate
end sub
 
Postado : 28/08/2014 2:08 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Primeiro, porque vc não troca essa parte:

Do While Not IsEmpty(Cells(nLinFim, 1))
nLinFim = nLinFim + 1
Loop

Por essa:

nLinFim = Cells(Rows.Count, 1).End(xlUp).Row

Segundo:

Essa linha:

If Cells(nLinFim - 1, 2).Value = Cells(nLinComp, 2).Value Then

Está buscando a coluna B, e não a coluna A (da pra ver pela imagem que ali tem valores duplicados).

Terceiro, em vez de lopar todas as linhas, pq vc não usa corresp pra ver se o valor já existe?

Chame a função com:
application.WorksheetFunction.Match

 
Postado : 28/08/2014 3:24 pm
(@wfranca)
Posts: 297
Honorable Member
Topic starter
 

Pesquisei no Forum e encontrei essa sub que pode muito me atender, mas acho que ela busca as informações num banco de dados separado, consigo adaptar para buscar dentro da minha própria plan1?

Private Sub Duplicado()
Dim NumeroComanda As String
Dim myRange As Range
Dim F As Range
NumeroComanda = Me.Txtbox1.Text
Set myRange = wbClientes.Worksheets("BDConvenio").Range("e:e")
Set F = myRange.Find(NumeroComanda)
If F > 0 Then
    MsgBox "Comanda ja Cadastrada: " & NumeroComanda, vbOKCancel, "Comanda Existente"
        If vbOK Then
            'Aqui o que fazer
        Else
            'Aqui o que fazer ou
            Exit Sub
        End If
    Else
End If
End Sub
 
Postado : 29/08/2014 2:30 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Veja meu arquivo modelo!!
https://www.sendspace.com/file/3mqk7z

Att

 
Postado : 29/08/2014 6:42 pm