Access vba: Como citar controles dentro de una variable Formulario

Tengo un formulario con un control lista que contiene datos filtrados por un cuadro de texto del mismo formulario en el que ingreso el criterio.

El problema surge que cuando lo abro como una variable para abrir varias instancias del mismo formulario, el cuadro de lista no encuentra el cuadro de texto donde tomar el filtro de los datos. ¿Se entendió?

Ej. Un formulario ventas (que necesito abrir varios a la vez) el cual muestra un cuadro de lista de artículos según el criterio de busqueda de un cuadro de texto) todo perfecto mientras no abra intancias del formulario, sino el propio formulario.

1 Respuesta

Respuesta

Marcelo: Al ignorar el código que usas para las nuevas instancias, es dificil sugerirte una solución adecuada, pero imagino que a cada instancia le pasas datos del Formulario "Padre".

Si eso es así, puedes pasarle el valor el cuadro de texto del Origen e incluso la opción de filtrado que quieras. Si con ésto no solucionas el problema deberías poner el código para las nuevas instancias y vemos que puedo hacer. Mis saludos >> Jacinto

Muchas gracias por la respuesta Jacinto, 

Te explico mejor. con el siguiente código creo las instancias de un formulario ventas:

'# 0002 Declaro unas variables para abrir varias instancias del formulario ventas.....................

            'Variable para un array que almacene las instancias del formulario

            Public MiFrmClientesArrays As Collection

            'Variable para ver cuantas instancias tengo abiertas en simultaneo

            Public MiCuenta As Long

            'Variable que crea las instancias del formulario

            Public MiFrm As Form

'# 0002 Fin..........................................................................................

'# 003 Abrir una o varias instancias de un mismo formulario-----------------------------------------------

                Public Function AbreInstanciaClientesVentas()

            If MiFrmClientesArrays Is Nothing Then

                Set MiFrmClientesArrays = New Collection

            End If

            Set MiFrm = New Form_Frm_BuscarClientes

            MiFrm.Visible = True

            If MiCuenta >= 0 Then

                MiCuenta = MiCuenta + 1

            End If

            MiFrm.Caption = " Buscar Cliente: "

            MiFrmClientesArrays.Add MiFrm

            Set MiFrm = Nothing

        End Function

'# 003 fin-------------------------------------------------------------------------------------------------------------

hasta ahí, todo perfecto. 

Ahora, dentro del formulario tengo un control de tipo listbox el cual tiene la siguiente consulta en su propiedad "Origen de Fila":

SELECT Tbl_Cliente.id_cliente, Tbl_Cliente.cliente_nombre, Tbl_Cliente.cliente_cuit FROM Tbl_Cliente WHERE (((Tbl_Cliente.cliente_nombre) Like "*" & [Formularios]![MiFrmBuscarClientesVentas]![Texto_busca_nombre] & "*")) ORDER BY Tbl_Cliente.cliente_nombre; 

siendo la condición WHERE un campo dentro del mismo formulario.

El problema no surge si abro el formulario con una instruccion docmd.openform. Pero si abro la instancia del formulario, no encuentra el cuadro de texto y me pide el valor del parametro y no se´como reemplazar esta instrucción.

Espero ser claro en lo que necesito. 

Una vez más, muchísimas gracias por tu respuesta.

Marcelo: Por el código que me envías, abres la instancia sin pasarle ningún dato.

Prueba algo así, porque la idea es pasarle esa parte que comentas, del Formulario Padre, con lo cual y para que tome el dato del Texbox ha de estar abierto

Public Function AbreInstanciaClientesVentas()
If MiFrmClientesArrays Is Nothing Then
   Set MiFrmClientesArrays = New Collection
End If
Set MiFrm = New Form_Frm_BuscarClientes
MiFrm.Visible = True
If MiCuenta >= 0 Then
   MiCuenta = MiCuenta + 1
End If
MiFrmClientesArrays.Add MiFrm
Dim StrSQL
With MiFrm
   .Caption = " Buscar Cliente: " ‘Esta línea ya la tenias
   .[Texto_busca_nombre].Value = Forms![MiFrmBuscarClientesVentas].[Texto_busca_nombre]
   StrSQL = "SELECT Tbl_Cliente.id_cliente, Tbl_Cliente.cliente_nombre, Tbl_Cliente.cliente_CUIT "
   StrSQL = StrSQL & "FROM Tbl_Cliente WHERE (((Tbl_Cliente.cliente_nombre) Like "*" &  .[Texto_busca_nombre] & "*")) "
   StrSQL = StrSQL & "ORDER BY Tbl_Cliente.cliente_nombre;" 
   .ListBox.RowSource = StrSQL 'ListBox lo has de sustituir por el Nombre de tu control LisBox
End With  
Set MiFrm = Nothing
End Function

La idea ya la ves que es pasarle datos del Formulario Padre. Solo el TextBox y de modo provisional, porque después lo puedes modificar. No he probado ese código que te en vío. Saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas