Mensaje de "No es un elemento de lista"

Quisiera ver si hay posibilidad de solucionar esto. La cuestión es que tengo tres combos en cascada, Familia, Subfamilia y Articulo, actúan como filtro, al buscar un articulo si no está en lista quiero lanzar el evento no esta en lista, pero quiero quitar el mensaje de access. He puesto las típicas lineas de

DoCmd.SetWarnings False y DoCmd. SetWarnings True, entre medias he colocado un mensaje para ver si lanza, el problema es que no me quita el mensaje de access de no esta en lista. Estas lineas las tengo en otros combos y si funciona bien, pero cuando tengo estos combos en cascada no, ¿qué puedo estar haciendo mal?

2
Respuesta
2

Si quieres usar el evento "al no estar en la lista", puedes hacerlo así (con la propiedad "limitar a la lista" en Sí):

Private Sub NombreCombo_NotInList(NewData As String, Response As Integer)
MsgBox "El artículo seleccionado no existe"
Response = acDataErrContinue
End Sub

Te avisará y no te dejará seguir hasta elegir un valor que sí exista.

Tendrías otras opciones, si no quieres solo avisar, como añadirlo a la tabla/lista de valores del combo...

 https://geeks.ms/access/evento-notinlist-en-access-2007/ 

https://docs.microsoft.com/es-es/office/vba/api/access.combobox.notinlist 

1 respuesta más de otro experto

Respuesta
2

Te digo lo que haría( dependiendo de como tengas construida la base). Vamos a suponer que la tabla donde aparecen los artículos se llama igual Artículos. Le quitaría lo de limitar a la lista y le pondría en el evento Antes de actualizar

If nz(dcount("*","articulos","articulo='" & me.nombredelcombinado & "'"))=0 then

If msgbox("Ese artículo no existe",vbokonly,"Otra vez será")=vbok then

lo que quieres que haga en ese caso

end if

elseif nz(dcount("*","articulos","articulo='" & me.nombredelcombinado & "'"))>=1 then

lo que quieras que haga en caso de que ese producto exista

end if

Esta forma me parece mejor, he puesto lo siguiente:

If Nz(DCount("*", "tbl_Articulos", "articulo='" & Me.Cuadro_combinado1281 & "'")) = 0 Then

If MsgBox("Ese artículo no existe", vbOKOnly, "Otra vez será") = vbOK Then


End If

ElseIf Nz(DCount("*", "tbl_Articulos", "articulo='" & Me.Cuadro_combinado1281 & "'")) >= 1 Then

MsgBox "lo que quieras que haga en caso de que ese producto exista"

End If

He puesto un combo en un formulario para probarlo y lo que ocurre es que , si el articulo existe sale el primer mensaje  "Ese articulo no existe..." y no debería ser así porque existe, esto no es problema porque haciendo cambios se puede solucionar. El problema sigue siendo que si ingreso un articulo que no existe me sigue saliendo el aviso de access, esto es "El texto especificado no es un elemento de lista"

Pero eso es porque no has cambiado de lo de Limitar a la lista=No

Mira, si tengo un formulario con un combinado llamado Elegir, donde elijo escribo un nombre de pais. Escribo el país que ves y pulso Enter

Me queda como

Al pulsar Aceptar, el cursor se vuelve al combinado para que cambie el país. Pero si pongo

y Pulso Enter

Cuando pulso Aceptar, me ejecuta lo que le diga en el código. Le he puesto

Private Sub Elegir_BeforeUpdate(Cancel As Integer)
If Nz(DCount("*", "clientes", "pais='" & Me.Elegir & "'")) = 0 Then
MsgBox "Ese pais no esta en la lista", vbOKOnly, "Que no te das cuen..."
DoCmd.CancelEvent
ElseIf Nz(DCount("*", "clientes", "pais='" & Me.Elegir & "'")) >= 1 Then
MsgBox "¡¡ Por fin, has acertado !!", vbOKOnly, "Ya era hora"
' lo que quieres que haga en este caso
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas