• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

foxymop

[Resolvido] Detectar valores existentes

5 mensagens neste tópico

Boas! Tenho um codigozito no Excel que apartir de um formulario, vou introduzindo dados para as cells. No entanto uma das colunas não pode ter valores repetidos. O que se passa é que não estou a conseguir fazer com que ele detecte os valores ja existentes e dê um erro caso seja introduzido um valor ja existente no campo Codaluno. Funciona  para a row 2 , mas para a 3 ja não funca...

vbaee7.th.gif

Private Sub baceitar_Click()
If Cells(1, 1).Value = "" Then
       lCurrentRow = 1
    Else
       lCurrentRow = ActiveSheet.UsedRange.Rows.Count + 1
    End If
    Cells(lCurrentRow, 2).Value = TextBox1.Text
    
   ' ---------------------
    CurrentRow = 2
  Do While Cells(CurrentRow, 1).Value = TextBox2.Text
  MsgBox "Erro"
CurrentRow = CurrentRow + 1

Loop

  Cells(lCurrentRow, 1).Value = TextBox2.Text

Escusado será dizer qeu sou bastante nabo no que toca a programação... :D

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Algumas ideia para começar:

Primeiro deves sempre declarar as variáveis para evitar problemas. Deves definir no inicio do documento "Option Explicit" que irá obrigar-te a fazer as coisas como deve ser.

Depois o metodo de procurar a ultima linha não é muito fiavel e tem falhas (ActiveSheet.UsedRange.Rows.Count + 1). Vê a solução correcta, onde se selecciona a ultima linha e faz-se um xlUp, que é como carregares em CTRL+UP (tecla).

Para acabar não deves fazer um ciclo em todas as linhas para procurar um valor, mas sim fazer uma pesquisa.

Acho que este exemplo que adaptei do teu código deve ajudar a entender e deve funcionar:

Option Explicit

Private Sub Grava()

Dim lastRow As Long

Dim rg As Range

    ' Verifica qual a ultima linha preenchida

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

   

    ' Guarda a area a procurar

    Set rg = Range("A2:A" & lastRow)

   

    ' Caso não encontre nenhum nome igual

    If rg.Find(TextBox1.Text) Is Nothing Then

        Cells(lastRow + 1, 1) = TextBox1.Text

        Cells(lastRow + 1, 2) = TextBox2.Text

    Else

        MsgBox "Não é possível inserir este aluno. O código já existe!", vbCritical

    End If

End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado! Vou ver se resolvo o problema com a tua ajuda! Mais uma vez Obrigado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado! Vou ver se resolvo o problema com a tua ajuda! Mais uma vez Obrigado!

Ok, depois diz qualquer coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora