Evento NotInList. Mensaje.

16/04/2011 - 14:35 por Alex | Informe spam
Esto es algo repetitivo, lo sé. Incluso algo en que he incurrido
alguna vez ya olvidada. Buscando he encontrado diversos post y no me
doy cuenta que estoy haciendo mal.

Tengo un combo para agregar Propiedades a un formulario y luego, por
medio de éste, a una tabla. Ahora bien. Invoco el evento NotInList
para dar una fácil opción al usuario de agregar una propiedad nueva si
ésta no estuviera. El problema es que al hacerlo sale el mensaje "El
texto que ha especificado no es un elemento de la lista". He revisado
el código con otros ejemplos y no logro ver qué está mal o qué falta.

Podrías guiarme. Gracias.

Aquí va el código:

Private Sub ccPropiedades_NotInList(NewData As String, Response As
Integer)
Dim ctl As Control
Set ctl = Me![ccPropiedades]
'Pide al usuario que compruebe que desea agregar un nuevo valor.
If MsgBox("La propiedad no existe ¿Desea agregarla?.", vbOKCancel)
= vbOK Then
' Establece el argumento Response para indicar que se han agregado
los datos.
Response = acDataErrAdded
' Agrega la cadena del argumento adNewRec al origen de las filas.
On Error GoTo Err_ccPropiedades_NotInList
DoCmd.OpenForm "frmPropiedades", acNormal
DoCmd.GoToRecord , , acNewRec
Response = acDataErrAdded
Exit_ccPropiedades_NotInList:
Exit Sub
Err_ccPropiedades_NotInList:
MsgBox Err.Description
Resume Exit_ccPropiedades_NotInList
Else
' Si el usuario elige Cancel, suprimir el mensaje de error y
deshacer los cambios.
Response = acDataErrContinue
ctl.Undo
End If
End Sub

Preguntas similare

Leer las respuestas

#1 Raipon
19/04/2011 - 09:10 | Informe spam
Hola, probablemente debas abrir el formulario frmPropiedades así :
DoCmd.OpenForm "frmPropiedades", acNormal, , , , acDialog

Esto parará la ejecución del código del evento, y dará tiempo a que
desde el formulario crees la nueva propiedad.

Adios, un saludo.
Respuesta Responder a este mensaje
#2 Alex
19/04/2011 - 17:03 | Informe spam
On 19 abr, 04:10, Raipon wrote:
Hola, probablemente debas abrir el formulario frmPropiedades así :
DoCmd.OpenForm "frmPropiedades", acNormal, , , , acDialog

Esto parará la ejecución del código del evento, y dará tiempo a que
desde el formulario crees la nueva propiedad.

Adios, un saludo.



Exacto. Gracias Raipon. No me tira más el mensaje. Sin embargo, ocurre
lo siguiente. Abre el formulario frmPropiedades pero lo hace en el
primer registro y no en el último. ¿Cómo hago para que se abra el
formulario en un registro nuevo y en el campo correspondiente al
nombre ya me agregue automáticamente el nombre, cosa que sólo necesite
agregar los restantes datos pero no ese?
Respuesta Responder a este mensaje
#3 Pancho
22/04/2011 - 07:40 | Informe spam
On 19 abr, 17:03, Alex wrote:
On 19 abr, 04:10, Raipon wrote:

> Hola, probablemente debas abrir el formulario frmPropiedades así :
> DoCmd.OpenForm "frmPropiedades", acNormal, , , , acDialog

> Esto parará la ejecución del código del evento, y dará tiempo a que
> desde el formulario crees la nueva propiedad.

> Adios, un saludo.

Exacto. Gracias Raipon. No me tira más el mensaje. Sin embargo, ocurre
lo siguiente. Abre el formulario frmPropiedades pero lo hace en el
primer registro y no en el último. ¿Cómo hago para que se abra el
formulario en un registro nuevo y en el campo correspondiente al
nombre ya me agregue automáticamente el nombre, cosa que sólo necesite
agregar los restantes datos pero no ese?



Hola
Para que el formulario se abra en un registro nuevo debes poner
Docmd.OpenForm "frmPropiedades",acNormal,,,acFormAdd
frmPropiedades!MiCampo=NewData
Otra cosa, creo que estas repitiendo "Response = acDataErrAdded" dos
veces, yo borraria el primero, algo asi:

If MsgBox("La propiedad no existe ¿Desea agregarla?.",
vbOKCancel)
= vbOK Then
' Agrega la cadena del argumento adNewRec al origen de las
filas.
On Error GoTo Err_ccPropiedades_NotInList
DoCmd.OpenForm "frmPropiedades", acNormal,,,acFormAdd
DoCmd.GoToRecord , , acNewRec
frmPropiedades!MiCampo=NewData
Response = acDataErrAdded
Exit_ccPropiedades_NotInList:
Exit Sub
Err_ccPropiedades_NotInList:
MsgBox Err.Description
Resume Exit_ccPropiedades_NotInList
Else
' Si el usuario elige Cancel, suprimir el mensaje de error y
deshacer los cambios.
Response = acDataErrContinue
ctl.Undo
End If
End Sub
Respuesta Responder a este mensaje
#4 Pancho
22/04/2011 - 07:50 | Informe spam
Hola
Para que el formulario se abra en un registro nuevo debes poner
Docmd.OpenForm "frmPropiedades",acNormal,,,acFormAdd
para usar el nuevo valor en tu formulario:
frmPropiedades!MiCampo=NewData
Otra cosa, creo que estas repitiendo "Response = acDataErrAdded" dos
veces, yo borraria el primero, ademas borraria "DoCmd.GoToRecord , ,
acNewRec" algo asi:

If MsgBox("La propiedad no existe ¿Desea agregarla?.",
vbOKCancel)
= vbOK Then
' Agrega la cadena del argumento adNewRec al origen de las
filas.
On Error GoTo Err_ccPropiedades_NotInList
DoCmd.OpenForm "frmPropiedades", acNormal,,,acFormAdd
frmPropiedades!MiCampo=NewData
Response = acDataErrAdded
Exit_ccPropiedades_NotInList:
Exit Sub
Err_ccPropiedades_NotInList:
MsgBox Err.Description
Resume Exit_ccPropiedades_NotInList
Else
' Si el usuario elige Cancel, suprimir el mensaje de error y
deshacer los cambios.
Response = acDataErrContinue
ctl.Undo
End If
End Sub
Respuesta Responder a este mensaje
#5 Alex
25/04/2011 - 22:03 | Informe spam
On 22 abr, 02:50, Pancho wrote:
Hola
Para que el formulario se abra en un registro nuevo debes poner
Docmd.OpenForm "frmPropiedades",acNormal,,,acFormAdd
para usar el nuevo valor en tu formulario:
frmPropiedades!MiCampo=NewData
Otra cosa, creo que estas repitiendo "Response = acDataErrAdded" dos
veces, yo borraria el primero, ademas borraria "DoCmd.GoToRecord , ,
acNewRec" algo asi:

   If MsgBox("La propiedad no existe ¿Desea agregarla?.",
        vbOKCancel)
       = vbOK Then
       ' Agrega la cadena del argumento adNewRec al origen de las
         filas.
       On Error GoTo Err_ccPropiedades_NotInList
         DoCmd.OpenForm "frmPropiedades", acNormal,,,acFormAdd
         frmPropiedades!MiCampo=NewData
         Response = acDataErrAdded
       Exit_ccPropiedades_NotInList:
          Exit Sub
       Err_ccPropiedades_NotInList:
          MsgBox Err.Description
          Resume Exit_ccPropiedades_NotInList
   Else
     ' Si el usuario elige Cancel, suprimir el mensaje de error y
       deshacer los cambios.
        Response = acDataErrContinue
        ctl.Undo
    End If
End Sub



Gracias Pancho pero abre el formulario frmPropiedades en el pirmer
registro y no me agrega la propiedad ingresada en el combo en forma
automática. Debería abrir el formulario en un registro nuevo ya
agregando el nombre de dicha propiedad. Le he dado mil vueltas y
siempres hay algún error ¿será tan difícil esto?

Un abrazo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida