Duplicados, afterupdate y deshacer

En un campo indexado de un formulario he conseguido que al entrar un número de factura que ya estaba entrado me diera un mensaje de "este registro está duplicado".
Pero intento que después de darle el OK al mensaje me haga dos "deshacer" para que me borre lo escrito y me deshaga campo/registro activo; pero si en la macro, después del "CuadroMsj" y del CancelarEvento le meto dos Deshacer no me funciona.
En cambio, si hago la macro sin los dos deshacer, voy al formulario, meto un duplicado, acepto el mensaje y le hago dos veces deshacer vía edición-deshacer, los deshacer que me hace son "deshacer escribir" y "deshacer campo/registro activo". Que es lo que quiero conseguir que me haga de forma automática.
¿Alguien me podría aconsejar como hacerlo?
1

1 Respuesta

490.150 pts. Si no valoras las respuestas, no esperes que te...
Cada uno es libre de poner el código donde quiera, pero yo te aconsejaría que lo pusieras en el evento Antes de actualizar. ¿Para qué vas a esperar a actualizar un valor, y después vas a anularlo?
Por ejemplo, supongamos que tienes una Tabla2 con un campo Numfactura y un formulario Ventas con ese mismo cuadro de texto. En sus propiedades-eventos-Antes de actualizar, puedes crear un procedimiento de evento y entre Private Sub y End Sub escribir
If dcount("numfactura","tabla2","[numfactura]=[forms]![Ventas]![numfactura]")>=1 then
msgbox"Esa factura ya existe",vbokonly
docmd.cancelevent
end if
Esto lo que hace es que cuando escribas un número, ANTES de guardarlo mira si ya hay otro en la tabla. Si lo hay te aparece el mensaje y "no te deja" pasar de Numfactura.
De todas formas, puedes hacer exactamente lo que quieres (también en el evento Antes de actualizar) poniendo
el código como
Dim respuesta As Integer
If DCount("numfactura", "tabla2", "[numfactura]=[forms]![tabla2]![numfactura]") >= 1 Then
DoCmd.CancelEvent
respuesta = MsgBox("Ya existe ese número de factura", vbOKOnly)
If respuesta = vbOK Then
Numfactura.Undo
End If
End If
Se diferencia en que ahora te borra lo escrito.
Ok, lo he puesto en antes de actualizar, con esto consigo que me borre lo escrito, pero no consigo que me deshaga campo/registro activo.
El problema que tengo es que en el evento "al salir" tengo una acción actualizar (ya que me interesa que me salgan unos datos de otra tabla en función de lo que meta en numfactura). Con esto, si quiero salir después de meter un numero de factura duplicado y que me lo borre, no me deja, ya que me dice que la clave principal no puede ser nula. Lo que querría es que me deshiciera campo/registo activo, pero no me lo hace ni metiendo otro Undo, en cambio, si que me lo hace metiendo el deshacer vía menús.
¿Cómo lo soluciono eso?
Gracias por la colaboración
Al final lo he solucionado co este código que adjunto, siguiendo el consejo e incorporando DoCmd.RunCommand acCmdUndo
--------------------------------------------------
Private Sub A3_BeforeUpdate(Cancel As Integer)
Dim respuesta As Integer
If DCount("NºAEF", "FacturesObra", "[NºAEF]=[forms]![Factures Obra]![A3]") >= 1 Then
DoCmd.CancelEvent
respuesta = MsgBox("Aquesta factura ja està entrada. Per modificar-la, busca-la amb els binocles.", vbOKOnly)
If respuesta = vbOK Then
A3.Undo
DoCmd.RunCommand acCmdUndo
End If
End If
End Sub
--------------------------------------------------
Gracias por la ayuda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas