Impedir la introducción de valores repetidos

08/09/2008 - 01:10 por Dinkye | Informe spam
Hola grupo:

Perdonad en primer lugar si aparece mas de un mensaje con estos datos.
No se por que razón no han publicado mis anteriores mensajes (seguramente
error mio), y me veo obligado a hacerlo de nuevo.

Tengo un formulario donde recojo los datos de la Hoja2 y los ingreso en
la Hoja1.

Mi pregunta es si podria impedir la introduccion de valores repetidos
cuando los ingreso por medio del formulario.

Ya se que se puede impedir por medio de la validación de datos, pero
solamente lo he conseguido, cuando los datos son introducidos directamente a
la hoja.

Aqui os dejo los datos del codigo:

Private Sub TextBox1_AfterUpdate()
Dim w As Worksheet
Dim c As Range
Set w = Sheets("Hoja2")
For Each c In w.Range("A2:A50")
If c.Value = TextBox1.Text Then
TextBox2.Text = w.Cells(c.Row, 2)

End If
Next c
End Sub


Private Sub CommandButton1_Click()
Dim CeldaInicial As Variant
Dim col As Integer
Dim fila As Integer
CeldaInicial = "B1"
Set CeldaInicial = Range(CeldaInicial)
col = CeldaInicial.Column
If CeldaInicial.Offset(1, 0).Value = "" Then
fila = 2
Else
fila = CeldaInicial.End(xlDown).Row + 1
End If

Cells(fila, col).Value = TextBox1.Value
Cells(fila, col + 1).Value = TextBox2.Value

Set CeldaInicial = Nothing
TextBox1 = Empty
TextBox2 = Empty
TextBox1.SetFocus

End Sub



Esto seria el formulario. En cuanto a la formula que se puede colocar en
validación de datos, que no se aplicarla en el formulario:

=CONTAR.SI(B:B;B2)<2

Agradecer a Hector Miguel sus aportaciones en otras consultas, que si
bien no lo entendi en un principio, cuando repasé sus notas, me fue de gran
ayuda.

Rafael.
 

Leer las respuestas

#1 Héctor Miguel
08/09/2008 - 01:38 | Informe spam
hola, Rafael !

Tengo un formulario donde recojo los datos de la Hoja2 y los ingreso en la Hoja1.
Mi pregunta es si podria impedir la introduccion de valores repetidos cuando los ingreso por medio del formulario.
Ya se que se puede impedir por medio de la validación de datos, pero solamente lo he conseguido
cuando los datos son introducidos directamente a la hoja. (...)

... En cuanto a la formula que se puede colocar en validacion de datos, que no se aplicarla en el formulario:
=CONTAR.SI(B:B;B2)<2



1) las reglas de validacion son (exclusivamente) para entradas directas por parte del usuario en la interfase grafica
no aplican cuando se utiliza codigo para la introduccion de los datos, y se sobre-escriben al copiar/pegar de otros rangos

2) podrias prevenir/evitar duplicados si utilizas la funcion contar.si (por codigo) +/- como sigue:
asumiendo que el dato que se busca ha quedado en el TextBox1

If Application.CountIf(Worksheets("hoja2").Range("a2:a50"), TextBox1.Value) Then
MsgBox "Este dato ya se encuentra registrado !"
' aqui otras acciones como borrar el textbox1, re-activar el textbox1 para correcciones, o ??? '
Else
' aqui las acciones en caso de que no se trate de un dato duplicado '
End If

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ el codigo expuesto __
Private Sub TextBox1_AfterUpdate()
Dim w As Worksheet
Dim c As Range
Set w = Sheets("Hoja2")
For Each c In w.Range("A2:A50")
If c.Value = TextBox1.Text Then
TextBox2.Text = w.Cells(c.Row, 2)
End If
Next c
End Sub

Private Sub CommandButton1_Click()
Dim CeldaInicial As Variant
Dim col As Integer
Dim fila As Integer
CeldaInicial = "B1"
Set CeldaInicial = Range(CeldaInicial)
col = CeldaInicial.Column
If CeldaInicial.Offset(1, 0).Value = "" Then
fila = 2
Else
fila = CeldaInicial.End(xlDown).Row + 1
End If
Cells(fila, col).Value = TextBox1.Value
Cells(fila, col + 1).Value = TextBox2.Value
Set CeldaInicial = Nothing
TextBox1 = Empty
TextBox2 = Empty
TextBox1.SetFocus
End Sub

Preguntas similares