Imprimir página | Cerrar ventana

Abrir formulario filtrado en un cuadro de lista

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=87074
Fecha de impresión: 26/Marzo/2026 a las 15:54


Tema: Abrir formulario filtrado en un cuadro de lista
Publicado por: José Luis Kara
Asunto: Abrir formulario filtrado en un cuadro de lista
Fecha de publicación: 09/Junio/2025 a las 12:10
Buenas tardes. Tengo un cuadro de lista en un formulario con unos datos, y quisiera que al hacer doble clic sobre uno de los registros del cuadro de lista se abra otro formulario filtrado por ese registro. Lo he intentado de varias maneras pero no lo consigo. ¿Podríais ayudarme? Muchas gracias.

-------------
Kara



Respuestas:
Publicado por: Mihura
Fecha de publicación: 09/Junio/2025 a las 12:14
Hola bienvenido,

¿qué tal vas de VBA?


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: José Luis Kara
Fecha de publicación: 09/Junio/2025 a las 18:34
Pues lo tengo bastante oxidado. He estado mirando ejemplos de módulos pero no encuentro nada que se adapte a mí...

-------------
Kara


Publicado por: Mihura
Fecha de publicación: 09/Junio/2025 a las 19:33
Pues vamos a ver lo oxidado que lo tienes LOL:
- en el evento doble clic del cuadro de lista
- abres el formulario pasándole en el parámetro WhereCondition el valor que quieras (y el código por dónde vas a filtrar)




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: José Luis Kara
Fecha de publicación: 09/Junio/2025 a las 20:20
Sí, eso ya lo tengo. En el cuadro de lista tengo el siguiente evento:

 El problema es que ahora no sé cómo decirle que me abra el nuevo formulario cogiendo el valor que he seleccionado en el cuadro de lista. Esa es la parte que no consigo...


-------------
Kara


Publicado por: José Luis Kara
Fecha de publicación: 09/Junio/2025 a las 20:21
Perdona que no sé si se ve la imagen. Es esto:

Private Sub ListaIncidencias_DblClick(Cancel As Integer)


    DoCmd.OpenForm "F_EDICION", , , , , , Me.ListaIncidencias
    
    
End Sub



-------------
Kara


Publicado por: xavi
Fecha de publicación: 09/Junio/2025 a las 22:54
Hola,

Parece que estás utilizando el argumento OpenArgs para pasar el valor de un control llamado ListaIncidencias.

Se asume que:
- el formulario F_EDICION tiene origen del registro la tabla o una SQL sobre la tabla
- el formulario F_EDICION se abre mostrando registros (no es DataEntry)
- El campo identificador del registro es IdIncidencias 
- El campo IdIncidencias es un numérico

Opción 1. El WhereCondition (lo que dice Jesús)
Es el cuarto argumento del OpenForm y lo debes pasar mas o menos así:

DoCmd.OpenForm "F_EDICION",,,"IdIncidencias = " & Me!ListaIncidencias

Opción 2. Utilizando el OpenArgs (lo que tienes tú)
En el Load del F_EDICION deberás evaluar que estás recibiendo un valor y posicionarte en el registro adecuado. Yo tiraría de RecordsetClone y Bookmark

Dim rst As DAO.Recordset
If Nz(Me.OpenArgs, "") <> "" Then
  Set rst = Me.RecordsetClone
  rst.FindFirst "IdIncidencias = " & CLng(Me.OpenArgs)
  If rst.NoMatch Then
    MsgBox "No se encuentra el registro", vbExclamation
  Else
    Me.Bookmark = rst.BookMark
  End If
  rst.Close
  Set rst = Nothing
End If

(todo el código escrito al vuelo)

Como podrás observar la Opción 1 es bastante más sencilla.

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: José Luis Kara
Fecha de publicación: 10/Junio/2025 a las 10:43
Muchas gracias por la respuesta. He probado ambas opciones y no me funciona. Seguiré probando a ver, pero muchas gracias de todas formas...

-------------
Kara


Publicado por: José Luis Kara
Fecha de publicación: 10/Junio/2025 a las 11:19
Hola de nuevo. Finalmente he hecho un poco de mezcla de las 2 opciones y me ha funcionado. Muchísimas gracias por los consejos.
Un saludo,


-------------
Kara


Publicado por: Mihura
Fecha de publicación: 10/Junio/2025 a las 15:14
Es una buena costumbre (aunque cueste teclear más) el llamar a los argumentos por nombre, evitan errores y ayudan mucho en el seguimiento y la depuración de procesos.

DoCmd.OpenForm "MiForm", OpenArgs:=Me.Lista

DoCmd.OpenForm "MiForm", WhereCondition:="CampoCodigo = " & Me.Lista





-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es



Imprimir página | Cerrar ventana