Problemas al ejecutar un filtro desde un subformulario hacia otro

Tengo un formulario con dos suformularios: "Sub_A" y "Subformulario_contenidos". "Sub_A" está en modo vista hoja de datos en donde se muestra un solo campo (txt_objetivo). Lo que quiero es que, al hacer clic en un "objetivo" (txt_objetivo), se filtren en "Subformulario_contenidos" los registros cuyo campo "txt_objetivo2" sea igual al campo "txt_objetivo".

Para ello tengo este código que no sé donde está fallando:

    Dim Filtro As String
    Filtro = "txt_objetivo2 LIKE '" & txt_objetivo
    Me.Parent.Subformulario_Contenidos.Form.Filter = Filtro
    Me.Parent.Subformulario_Contenidos.Form.FilterOn = True
    Me. Refresh

Algo tengo que estar haciendo mal que no doy con la solución.

1 Respuesta

Respuesta
1

Pedro: Antes de nada asegura que el "Control" continente del o los subformularios ciertamente se llaman igual que los contenidos. Pueden ser distintos, pero al citarlos, lo has de hacer por el Nombre del "Control".

Dicho ésto, el Parent de cada uno de los SubFormularios, es el Formulario Principal.

Los Subformularios en principio, no son ni siquiera primos segundos.

Forms!NombreDelPrincipal!Subformulario_Contenidos.Form.Filter = Filtro
 Forms!NombreDelPrincipal!Subformulario_Contenidos.Form.FilterOn = True

Tampoco no veo claro ese Filtro porque por ahí falta algún * (asterisco) >> Algo así

Normalmente suelo usar mucho las variables, porque suelo tener Funciones o Procedimientos Públicos a los que llamo

Dim ElCampo As String; FiltroAcumulado As String

ElCampo = "txt_Objetivo2"

FiltroAcumulado = "" & ElCampo & " LIKE '*" & Txt_Objetivo & "*'"

Mis saludos >> Jacinto

Gracias Jacinto. Como siempre respondiendo en tiempo record.

He hecho lo que me has dicho, pero me sale un error en la siguiente linea:

Forms!Configurar!Subformulario_Contenidos.Form.FilterOn = True

En concreto me pide que introduzca el valor del parámetro de "txt_objetivo2". 

El resto lo he dejado así, siguiente tu sugerencia:

Dim FiltroAcumulado As String, ElCampo As String
ElCampo = "txt_objetivo2"

FiltroAcumulado = "" & ElCampo & " LIKE '*" & txt_objetivo & "*'"

Forms!Configurar!Subformulario_Contenidos.Form.Filter = FiltroAcumulado
Forms!Configurar!Subformulario_Contenidos.Form.FilterOn = True
Me.Refresh

Perdón, Jacinto. No me sale error. Simplemente me pide que introduzca el valor del parámetro, pero no funciona.

He interpretado que el Txt_Objetivo2, era el campo de la Tabla por que querías Filtrar y Txt_Objetivo el dato del Formulario desde el que filtrabas. De no ser así, lógicamente no sabe qué es ese Txt_Objetivo2 y te lo pide. Has de sustituirlo, por "Nombre" del campo de la Tabla o consulta, que tienes como Fuente de Datos del SubFormulario_Contenidos, con lo bonito que sería un Nombre cortito y significativo como ContSubF. Dentro de que es una broma, te lo comento porque los Nombres cortos y sin espacios, suelen ser muy prácticos a la hora de escribir código.

Ya me contarás. Saludos >> Jacinto

Es correcto. "txt_objetivo2" es el nombre del campo de la tabla que quiero filtrar y que se encuentra dentro del "Subformulario_Contenidos". El nombre del campo en el diseño de la tabla es "[subobjetivo]". Pero poniendo eso, tampoco funciona:

ElCampo = "[Subobjetivo]"

No me da error, pero el filtro no funciona.

Pedro: Haz lo siguiente y me haces una captura de pantalla para intentar ver de donde viene la anomalía.

FiltroAcumulado = "" & ElCampo & " LIKE '*" & txt_objetivo & "*'"

'Pon ésta línea de código para ver el valor que toma el Filtro

MsgBox "El valor que ha tomado el Filtro es:  " & FiltroAcumulado

Pones un punto de Interrupción del Código en la línea de abajo

Forms!Configurar!Subformulario_Contenidos.Form.Filter = FiltroAcumulado

Pedro: Tengo la uda de por qué pide ese parámetro.

Entonces y para estar seguro de la estructura ¿El origen de datos del Subformulario_Contenidos, es una Tabla o Consulta?. Si fuera una consulta y quieres poner la SQL aquí, mejor para el análisis.

Un saludo >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas