Como evito duplicados en desde mi userform

Como puedo hacer para evitar se registren duplicados desde la caja de texto txtcodigo.

y este es el código que estoy utilizando.

Private Sub Guardar()
        Sheets("Estudiante").Select
        Range("A1").Select
        Application.GoTo Reference:="R65000C1"
        Selection.End(xlUp).Select
        ActiveCell.Offset(1, 0).Range("A1").Select
        ActiveCell.Offset(0, 0).Value = Val(TxtCodigo)
        ActiveCell.Offset(0, 1).Value = TxtAlumno
        ActiveCell.Offset(0, 2).Value = Val(TxtEdad)
        MsgBox "registrado con éxito!", vbInformation, "Guardar"
End Sub

2 Respuestas

Respuesta
1

Todoexpertos me ha notificado que has hecho esta pregunta para mí. Rafael Cruz te dio la respuesta correcta. CountIf es el método más usado, no es el único pero hace lo que necesitas.

PD: Mirando tu código de insertar los datos en la hoja, te diría que se puede mejorar bastante.

Maria, he visto que no quedaste muy complacida con nuestras respuestas. Bueno te hice un código y un ejemplo, y espero te sirva como una nueva idea para tu repertorio.

Viendo tu ejemplo, en la vida real varias personas podrían tener el mismo nombre y la misma edad, por lo que supongo que lo único que no debe repetirse es el código. Bueno se me ocurrió hacerte algo mas divertido.

Observa el video demo que grabé: Video demo

¿Qué tal si el código se pone automáticamente? En el ejemplo, el TextBox del código esta deshabilitado, por lo que el usuario no podría entrar un código manualmente. Este código se genera a partir del ultimo dato y le suma 1, haciendo los números consecutivos y únicos.

Este es el código (son dos, uno para el evento Initialize del UserForm, y otro para el botón de guardar):

Private Sub CommandButton1_Click()
If Me.TextBox2.Value = "" Then MsgBox "Debe poner un nombre", vbExclamation, "Falta nombre": Me.TextBox2.SetFocus: Exit Sub
If Me.TextBox3.Value = "" Then MsgBox "Debe poner la edad", vbExclamation, "Falta edad": Me.TextBox3.SetFocus: Exit Sub
Dim Estudiante As Worksheet: Set Estudiante = Sheets("Estudiante")
Dim nF As Long: nF = Estudiante.Range("A" & Rows.Count).End(xlUp).Row + 1
Cells(nF, 1).Value = Me.TextBox1.Value
Cells(nF, 2).Value = Me.TextBox2.Value
Cells(nF, 3).Value = Me.TextBox3.Value
    Me.TextBox2.Value = ""
    Me.TextBox3.Value = ""
Call UserForm_Initialize
End Sub
Private Sub UserForm_Initialize()
Dim Estudiante As Worksheet: Set Estudiante = Sheets("Estudiante")
Dim uF As Long: uF = Estudiante.Range("A" & Rows.Count).End(xlUp).Row
Me.TextBox1.Value = Range("A" & uF).Value + 1
End Sub

Tambien te mejore la manera en que guardas los datos, tambien te agregue una validación al comienzo para asegurarse que el usuario sí introdujo algún nombre y alguna edad, y no haya dejado campos en blanco. Tambien puedes ejecutar estas instrucciones desde cualquier hoja sin tener que activar la hoja Estudiantes.

[

Respuesta
1

lo que quieres realizar se logra introduciendo en VBA lo que seria la equivalencia a la formula contar.si, en el código se llama Countif en la cual especificaras que columna o rango debe contar y después le dices que si el resultado es = o mayor 1 entonces entonces te emita un mensaje informándote que el registro ya existe.

Lo que debes de establecer es cual es el dato o datos que no se pueden repetir y usarlo en cada caso...

Encontré un vídeo donde lo explican muy a detalle te dejo el linck, espero puedas adecuarlo si no me comentas y lo vemos, suerte video

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas