Abrir formulario con Selección Múltiple cuadro de lista

Antes que nada agradezco su tiempo y la predisposición que tengan para darme una mano.
Les comento soy novato y muy poca experiencia en VB.
Paso a contarles lo que estoy tratando de hacer, trabajo en una academia de, que tiene dos sucursales. A principio de año se cargan los cursos que se van a dictar, luego los profesores presentan las planillas de inicio de los cursos y una finalizado presentan la planilla de finalización.
Necesito abrir un formulario continuo donde me figuran todos los que cumplan dos condiciones (num_cur y movi_c) hasta acá no tengo problemas siempre y cuando lo hago uno por uno. Él problema lo tengo cuando quiero seleccionar varios cursos del cuadro de lista y se me abra el otro formulario (formulario continuo) para así modificar luego todos juntos y no hacerlo uno por uno. Por lo que leí hay que coleccionar los datos pero no tengo ni idea, vi que usan itemselect..

Esto lo tengo al hacer clik en un botón y funciona

DoCmd.OpenForm "F_Mov_Lista_Actualizar", acNormal, , "[T_Cur_1.Movi_U] = '" & Forms!F_Pan_1!Lista_Actuliza.Column(2) & "' And T_Cur_1.Num_Cert = " & Forms!F_Pan_1!Lista_Actuliza.Column(1)

Intenté usar la función itemselct pero no hubo caso

DoCmd.OpenForm "F_Mov_Lista_Actualizar", acNormal, , "[T_Cur_1.Movi_U] = '" & Forms!F_Pan_1!Lista_Actuliza.ItemsSelected(2) & "' And T_Cur_1.Num_Cert = " & Forms!F_Pan_1!Lista_Actuliza.ItemsSelected(1)

Aguardo todas las sugerencias.

2 Respuestas

Respuesta
2

Sólo por aportar otra posible solución

Supongamos que tengo la tabla Clientes

Voy a usar el pais para hacer la multiselección, que como bien te dijo Eperezfer tienes que poner el cuadro de lista con Selección Múltiple simple

Creo una tabla llamada Aux que sólo va a servir para "guardar" los paises

Creo un formulario con origen de registros en la tabla Clientes pero se lo modifico de forma

Esto es para que los países que voy a elegir en el cuadro de lista me sirvan como "filtro". Con lo cual el formulario me quedaría

Es decir no me aparecen los campos porque la tabla Aux aún está vacía. Pero si elijo algunos países(en este caso sólo elijo los dos primeros, por problemas de espacio en la imagen) y pulso el botón

Ya puedo cambiar lo que tenga que cambiar. La tabla Aux de momento está como

Pero si vuelvo a pulsar el botón la tabla Aux se vacía, lista para una nueva consulta. Al cuadro de lista lo he llamado Elegir. El código del botón es simplemente

Private Sub Comando18_Click()
If Nz(DCount("*", "aux")) = 0 Then
Dim vFila As Variant
For Each vFila In Me.Elegir.ItemsSelected
DoCmd.RunSQL "insert into aux(pais)values('" & Me.Elegir.ItemData(vFila) & "')"
Me.Requery
Next
Else
DoCmd.RunSQL "delete * from aux"
me.requery
End If
End Sub

Es decir, que si no hay nada en la tabla Aux me realice lo anterior y que si hay algo me lo borre, para la siguiente consulta.

Buen día, icue Gonzáles, voy a probar la idea que pusiste. Gracias

Si vieras que necesitas el ejemplo, y quieres, repito, si quieres, mándame un mensaje(solo el mensaje) a [email protected] y te lo mando. Si lo haces, en el asunto del mensaje pon tu alias Andrespf ya que si no sé quien me escribe ni los abro.

Respuesta
1

Ya he respondido a otras preguntas sobre como se recorre un cuadro de lista. En su caso pruebe con lo siguiente. El cuadro de lista debe tener en Propiedades, Otros "Selección Múltiple"=Simple

Dim varPos As Variant
For Each varPos In Me.Lista_Actuliza.ItemsSelected
     DoCmd.OpenForm "F_Mov_Lista_Actualizar", acNormal, , "[T_Cur_1.Movi_U] = '" & Me.Lista_Actuliza.Column(2,varPos) & "' And T_Cur_1.Num_Cert = " & Me.Lista_Actuliza.Column(1,varPos)
Next VarPos

Gracias por tu pronta respuesta eperezfer,  ahí lo probé pero solo me devuelve la última selección. Osea selecciono tres y solo la última me aparece en el formulario que se abre.

Si efectivamente eso debe suceder, se está abriendo el formulario más de una vez, en este caso se complica un poco por que debe es construir una consulta concatenando cada selección del cuadro de lista. Algo como:

Dim strSQL As String

strSQL="SELECT * FROM tabla_datos WHERE iditem="  Me.Lista_Actuliza.ItemData(varPos) 

strSQL=strSQL & ", & "....."

Y después se pasa como Argumento en el formulario y a este se le cambia el origen de datos al resultado de lo que tenga  en OpenArgs, esto es lo que tenga strSQL, es decir, algo como Me.RecordSource=Me.OpenArgs

DoCmd. OpenForm "F_Mov_Lista_Actualizar", acNormal, , ,strSQL.

Es solo una idea.

De nuevo gracias, a ver me querés decir que primero debo hacer una consulta y luego ejecutarla mediante el botón?..

No la consulta se construye a partir de los datos seleccionados y se pasa como argumento al abrir el formulario, en este caso la orden Docmd. Openform …. Va Después de la instrucción Next varPos

Posiblemente hay otra forma y es CLONAR el formulario pero requiere que tenga conocimiento de programación con CLASES y sirve siempre y cuando no tenga más de 5 o 6 ítems seleccionados, toda vez, que se abrirá en pantalla esas veces el formulario pero cada uno con la información filtrada.

Ah, bien

Dim strSQL As String

*strSQL="SELECT * FROM T_Cur_1 WHERE iditem="  Me.Lista_Actuliza.ItemData(varPos) 

*strSQL=strSQL & ", & "....."

*Esta línea me marca con error en "Me."

Me hizo falta el & antes de Me.

Ah genial, ahí lo probé y me tira error 13 no coinciden los tipos.

Si su información no es confidencial puede enviarme la base de datos a [email protected], así puede entender mejor su consulta.

Si no hay drama se la envío. ¿Por acá se puede?

No al correo que le indiqué es [email protected] y en el Asunto coloca su pregunta.

He preparado un ejemplo sencillo para que pueda ponerlo en practica, a la vez, sirve para otras personas que consultan en TodoExpertos.

Solo muestro las imágenes, quienes estén interesados pueden solicitarlo a [email protected]. Favor colocar en el Asunto "Estoy interesado en el ejemplo Instanciar formulario"

Seleccionar los clientes a editar mediante un cuadro de lista

Ejemplo con clientes seleccionados para editar

Observe que he seleccionado 4 clientes, entonce al hacer clic en "Actualizar", obtendríamos 4 instancias del formulario de edición.

Creo que con esto respondo su pregunta. Solicite el ejemplo solo es adaptarlo a sus necesidades.

NOTA: El ejemplo lo elaboré en Access 2003 y sirve para todas las versiones a partir de ésta.

Estimado, muchas gracias ahí te envié la base. Gracias

La respuesta del amigo Icue es la más acertada cuando al ejecutar el filtro se obtienen muchos registros. Solo elaboré el ejemplo atendiendo su pregunta y el código que trató de ejecutar, lo único es que tiene menos código que la propuesta de Icue y se explica como se crean instancias de los formularios, algo que no han preguntado en TodoExpertos. Me parece excelente lo explicado por Icue.

¡Gracias! voy a probarlo

Buen día, eperezfer, tu ejemplo va de maravilla pero quisiera saber como hago para que no me habrá formularios individuales, sino en un formulario continuo. Gracias

Es igual lo probé inclusive con un subformulario

Intenté pero no hay caso, ya que no conozco mucho de vb, como tuviera que hacer para que se abra un formulario continuo?

Hay que insistir así se aprende revise su correo le envíe los 2 ejemplos.

Ejemplo con subformulario

EJEMPLO CON FORMULARIO CONTINUO

El ejemplo del formulario continúo también puede mostrar todos los registros, en este caso no se hace la llamada a la instancia del formulario.

Estudie el código y me comenta.

A quienes les interese acá les dejo en link para descargar un ejemplo más completo, que incluye la instancia de cada formulario continuo con diferente color de fondo, control de no apertura de la instancia si el formulario continuo no tiene datos, es decir, si no cumple la condición de la selección de la lista.

Este es el link.

https://mega.nz/#!GJ0HVIAZ!7uoejNtj_vxlxVTeOkayampDXtePmlaKIlhzJhbN_z8 

Este otro ejemplo es para formulario con subformulario. Requiere menos código

https://mega.nz/#!2UET0IrY!rhRePqP_Rk0WGCdMCZsf3QJUj7v79DXGH_kI2OuY4Bg 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas