Buscar registros duplicados dentro de un subformulario continuo

Tengo un from dentro de el un subformulario continuo

El cual quiero que en el formulario continuo no se repitan los códigos

Ejemplo del subformulario continuo

Nodocumento código

12                       23456

12                      47899

Dentro de esto quiero que con el nodocumento me haga una búsqueda y si tengo ya el código me indique que ya esta

Si en nodocumento anteriores ya esta el dicho código no valide eso si no con el actual que no se repita con el mismo nodocumento espero me de entender

1 respuesta

Respuesta
1

Si el Código, lo entras manualmente, puedes programar su evento Antes de Actualizar (BeforeUpdate) con algo como ésto.

Private Sub Código_BeforeUpdate(Cancel As Integer)
Dim CriterioUno As String, CriterioDos As String, Criterios As String
Dim LaPareja As Byte
On Error GoTo Código_BeforeUpdate_TratamientoErrores
'Compruebo si ese Código realmente existe con el Documento
CriterioUno = "[NoDocumento] = " & Me.[NoDocumento]
CriterioDos = "[Código] = " & Me.[Código]
Criterios = CriterioUno & " AND " & CriterioDos
LaPareja = Nz(DCount("[Código]", "[NombreDeTuTabla]", Criterios), 0)
If LaPareja > 0 Then
        MsgBox "Esta Pareja de Documento y Código ya existe en la Tabla NombreDeTuTabla........" & vbCrLf & "Repasa la entrada e intenta de nuevo", vbCritical, "Código EXISTENTE"
        DoCmd.CancelEvent
        Me![Código].Undo
End If
Código_BeforeUpdate_Salir:
On Error GoTo 0
Exit Sub
Código_BeforeUpdate_TratamientoErrores:
MsgBox "Error " & Err & " en Procedimiento.: Código_BeforeUpdate de Documento VBA: NombreDeTuSubForm (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume Código_BeforeUpdate_Salir
End Sub

Para una mejor comprensión te he puesto variables parciales que concateno después

Tendrás que sustituir por tus Nombres >>NombreDeTuTabla y NombtrDeTuSubForm

Mis saludos >> Jacinto

gracias jacinto por la ayuda la verdad es justo lo que ocupaba 

pero  si 

Código es de tipo texto me manda un erro ya que si es de tipo numero sin problema 

te agradezco 

saludos.....

Si Código es de tipo Texto, solo tienes que sustituir >>

CriterioDos = "[Código] = " & Me.[Código]

Por éste otro:

CriterioDos = "[Código] = '" & Me.[Código] & "'"

Un saludo >> Jacinto

¡Gracias! 

te agradezco infinitamente amigo jacinto 

por esa gran ayuda saludos... feliz año que tengamos jacinto  para rato ....

cierro el  pregunta 

disculpa referente al mismo tema como puedo hacer para  mandar el SetFocus repetido dentro de codigo

Private Sub Código_BeforeUpdate(Cancel As Integer)
Dim CriterioUno As String, CriterioDos As String, Criterios As String
Dim LaPareja As Byte
On Error GoTo Código_BeforeUpdate_TratamientoErrores
'Compruebo si ese Código realmente existe con el Documento
CriterioUno = "[NoDocumento] = " & Me.[NoDocumento]
CriterioDos = "[Código] = " & Me.[Código]
Criterios = CriterioUno & " AND " & CriterioDos
LaPareja = Nz(DCount("[Código]", "[NombreDeTuTabla]", Criterios), 0)
If LaPareja > 0 Then
        MsgBox "Esta Pareja de Documento y Código ya existe en la Tabla NombreDeTuTabla........" & vbCrLf & "Repasa la entrada e intenta de nuevo", vbCritical, "Código EXISTENTE"
        DoCmd.CancelEvent
        Me![Código].Undo
End If
Código_BeforeUpdate_Salir:
On Error GoTo 0
Exit Sub
Código_BeforeUpdate_TratamientoErrores:
MsgBox "Error " & Err & " en Procedimiento.: Código_BeforeUpdate de Documento VBA: NombreDeTuSubForm (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume Código_BeforeUpdate_Salir
End Sub

No entiendo lo que quieres decir con ..."mandar el SetFocus repetido.

El foco debe quedarse en el "Control" >> Código, para que introduzcas otro correcto.

O al menos eso creo. Un saludo >> Jacinto

Si el código esta ya dentro de Nodocumento

Ejemplo

Registro Nodocumento código

         1           12                       23456

         2           12                       47899

         3           12                       5678

         4           12                     

Al teclear el código 23456 en el registro 4 lo encontrara duplicado ya con el

Código_BeforeUpdate

entonces lo que quiero es que me mande el Focus al registro donde lo encuentra en este caso el 1

saludos...

Ya es un poco tarde aquí y si no acierto, porque lo hago sobre la marcha, me comentas y mañana le doy una ojeada. La parte de >>

If LaPareja > 0 Then
        MsgBox "Esta Pareja de Documento y Código ya existe en la Tabla NombreDeTuTabla........" & vbCrLf & "Repasa la entrada e intenta de nuevo", vbCritical, "Código EXISTENTE"
        DoCmd.CancelEvent
        Me![Código].Undo
End If

Sustituyela por >>

If LaPareja > 0 Then
    'Guardo el Valor del Código en una Variable
    Dim ElCodigo As String
    ElCodigo = Me.[Código]
        MsgBox "Esta Pareja de Documento y Código ya existe en la Tabla NombreDeTuTabla........" & vbCrLf & "Repasa la entrada e intenta de nuevo", vbCritical, "Código EXISTENTE"
        DoCmd.CancelEvent
        Me![Código].Undo
End If
With Me.RecordsetClone
     .FindFirst "[Código] = '" & ElCodigo & "'"
     If Not .NoMatch Then
         Me.Bookmark = .Bookmark
    End If
End With

Un saludo >> Jacinto

¡Gracias!

gracias amigo 

si me funciono te lo agradezco infinitamente tenia días con eso y no me quedaba   el proceso 

saludos... 

Estupendo que hayas podido resolverlo, y si valoras la respuesta, no me quedan asuntos pendientes. Un saludo >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas