2011-01-10 11 views
10

Estoy tratando de utilizar un filtro en VBA así:de acceso al filtro de VBA

Private Sub Form_Load() 

    Me.Filter = "[Alvo] = " & AlvoAtual 
    Me.FilterOn = True 
    Me.Requery 

End Sub 

Dónde AlvoAtual es variable global, pero nada sucede. Cuando cambio el AlvoAtual por un valor específico, no sucede nada. De esta manera:

Private Sub Form_Load() 

    Me.Filter = "[Alvo] = 'AAAA'" 
    Me.FilterOn = True 
    Me.Requery 

End Sub 

¿Alguien sabe el problema?


estoy adoptando esta pregunta (VBAWhatnow) con la esperanza de que conseguir contestado en lugar de hacer un duplicado como estaba advised.

Estoy tratando de hacer lo mismo excepto con variables locales.

Mi filtro funciona correctamente cuando defino manualmente los valores, pero cuando me presento a las variables del filtro ya no funciona

Forms![frmPendingActions]![qryPendingAction subform].Form.Filter = "Filterby = FilterCrit" 

Podría alguien ayudarme a encontrar una buena solución?

+0

esto podría ser un error tipográfico, pero 'Me.Filter = "[Alvo] =" & AlvoAtual',' Me.FilterOn = TRUE y 'Me.Requery' necesitan estar en líneas separadas –

+0

@oracle professional certificado En Stackoverflow, a menos que use el botón de código, {}, o
, el texto aparece como se indica arriba. – Fionnuala

+0

¿Estás seguro de que Alvo es el nombre del campo en tu fuente de registro y no el nombre un control? Si Alvo es texto, necesita comillas, como se ilustra en su segundo ejemplo, pero estas no se muestran en su primer ejemplo. Access 2007 tiene una nueva propiedad "FilterOnLoad", ¿está utilizando> = 2007? – Fionnuala

Respuesta

0

intente reemplazar sus instrucciones 3 por esto:

DoCmd.ApplyFilter wherecondition:= "[Alvo] = " & AlvoAtual 

Tenga en cuenta que también se puede establecer la condición de forma manual, y establezca la opción FilterOnLoad a True y guardar su forma. No se requiere programación en ese caso.
"La mejor macro no es una macro ..."

+0

No puedo ver cómo esto ayudará cuando deba haber algún problema subyacente con la declaración "[Alvo] =" & AlvoAtual – Fionnuala

+0

Intenté DoCmd.ApplyFilter wherecondition: = "[Alvo ] = "& AlvoAtual o DoCmd.ApplyFilter wherecondition: =" [Alvo] = 'AAAA' " y tampoco funcionó. Cuando pongo la condición manualmente, funciona, pero el problema es que no puedo poner una variable global manualmente. Estoy usando Office 2007. ¿Otra sugestión? – user569709

+1

Intente agregar una línea que diga: depurar.? "-", AlvoAtual, "-" a su sub FormLoad. Cuando se carga el formulario, presione ctrl + G para ver la ventana de depuración. –

3

Usted (VBAWhatnow) dijo: "Mi filtro funciona correctamente cuando defino manualmente los valores, pero cuando me presento a las variables del filtro ya no funciona".

Luego, en su asignación de filtro ...

.Filter = "Filterby = FilterCrit" 

Así que estoy asumiendo FilterCrit es el nombre de la variable local. Si eso es cierto, construya la expresión del filtro usando el valor de la variable en lugar de su nombre.

Si Filterby es un tipo de campo numérico ...

.Filter = "Filterby = " & FilterCrit 

Si Filterby es un tipo de campo de texto ...

.Filter = "Filterby = """ & FilterCrit & """" 

Si ninguna de estas variaciones es la respuesta para usted, dar nosotros más información sobre Filterby y FilterCrit.

+1

He otorgado la recompensa por esta pregunta. Viendo cómo VBWhatNow nunca regresó, asumiré que esta solución funcionó. –

0

Hola trate de cambiar el código a la siguiente:

Private Sub Form_Load() 
    If Len(AlvoAtual & "") > 0 Then 
     Me.Filter = "[Alvo] = '" & AlvoAtual & "'" 
     Me.FilterOn = True 
     'Me.Requery 
     MsgBox AlvoAtual 
    Else 
     Msgbox "No Value set for variable AlvoAtual" 
    End If 
End Sub 

indicará el nombre variable se deletrea a la derecha y contiene un valor de cadena a continuación, el filtro debería funcionar. También se proporciona un nombre de columna llamado Alvo en el formulario actual.

Por cierto, no puedo ver por qué necesitarías hacer una Requery en el evento de carga de formularios.

Esperanza esto ayuda

0

Su problema con el manejo de sus comillas simples y dobles. Trate como esto & trabajará

Private Sub Form_Load() 

    Me.Filter = "[Alvo] = '" & AlvoAtual & "'""" 'make sure to copy all these quotes correctly. "" is to print 1 double quote. 
    Me.FilterOn = True 
    Me.Requery 

End Sub 
Cuestiones relacionadas