2011-01-10 9 views
10

Próbuję użyć filtru w VBA tak:Dostęp Filtr VBA

Private Sub Form_Load() 

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

End Sub 

Gdzie AlvoAtual jest zmienną globalną, ale nic się nie dzieje. Kiedy zmieniam AlvoAtual dla określonej wartości nic się nie dzieje. W ten sposób:

Private Sub Form_Load() 

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

End Sub 

Ktoś zna problem?


jestem przyjmując pytanie (VBAWhatnow) w nadziei, że to bez odpowiedzi, zamiast zrobić duplikat jak byłem advised.

Próbuję zrobić to samo, z wyjątkiem zmiennych lokalnych.

Mój filtr działa prawidłowo, kiedy ręcznie zdefiniować wartości, ale kiedy wprowadzać zmienne filtr nie działa

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

Czy ktoś pomoże mi znaleźć dobre rozwiązanie?

+0

to może być literówka, ale 'Me.Filter = "[Alvo] =" & AlvoAtual',' Me.FilterOn = TRUE i 'Me.Requery' trzeba być na oddzielnych liniach –

+0

@oracle certified professional W Stackoverflow, chyba że użyjesz przycisku kodu, {} lub
, tekst pojawi się jak wyżej. – Fionnuala

+0

Czy na pewno Alvo to nazwa pola w źródle zapisu, a nie nazwa kontrolki? Jeśli Alvo jest tekstem, potrzebujesz cytatów, jak pokazano w twoim drugim przykładzie, ale nie są one pokazane w twoim pierwszym przykładzie. Access 2007 ma nową właściwość "FilterOnLoad", czy używasz> = 2007? – Fionnuala

Odpowiedz

0

Spróbuj wymienić swoje 3 instrukcji przez to:

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

Zauważ, że można też ustawić stan ręcznie i ustaw opcję FilterOnLoad True i zapisać formularz. W tym przypadku nie jest wymagane programowanie.
„Najlepszy makro ma makro ...”

+0

Nie widzę, jak to pomoże, gdy musi istnieć jakiś podstawowy problem z instrukcją "[Alvo] =" & AlvoAtual – Fionnuala

+0

Próbowałem DoCmd.ApplyFilter wherecondition: = "[Alvo ] = "& AlvoAtual lub DoCmd.ApplyFilter wherecondition: =" [Alvo] = 'AAAA' " i nie działały. Kiedy ręcznie ustawię warunek, działa, ale problemem jest to, że nie mogę ręcznie wprowadzić zmiennej globalnej. Używam biura 2007. Kolejna sugestia? – user569709

+1

Spróbuj dodać wiersz z napisem: debugowanie.? "-", AlvoAtual, "-" do sub-formularza FormLoad. Po załadowaniu formularza naciśnij ctrl + G, aby wyświetlić okno debugowania. –

3

You (VBAWhatnow) powiedział „Mój filtr działa prawidłowo, kiedy ręcznie zdefiniować wartości, ale kiedy wprowadzać zmienne filtr nie działa”.

Następnie w przypisania filtra ...

.Filter = "Filterby = FilterCrit" 

Więc jestem zakładając FilterCrit to nazwa zmiennej lokalnej. Jeśli to prawda, zbuduj wyrażenie filtru, używając wartości zmiennej, a nie jej nazwy.

Jeśli Filterby jest numeryczny typ pola ...

.Filter = "Filterby = " & FilterCrit 

Jeśli Filterby jest typem pola tekstowego ...

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

Jeśli żadna z tych zmian jest odpowiedź dla Ciebie, daj nas więcej informacji o Filterby i FilterCrit.

+1

Przyznam nagrodę za to pytanie. Widząc jak VBWhatNigdy nie wrócił, zakładam, że to rozwiązanie działa. –

0

Cześć spróbuj zmienić kod do następujących:

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 

Pod warunkiem, że nazwa zmiennej jest pisane prawo i zawiera ciąg znaków wtedy filtr powinien pracować. Pod warunkiem, że masz nazwę kolumny o nazwie Alvo w aktualnej formie.

Nawiasem mówiąc, nie widzę powodu, dla którego konieczne byłoby wykonanie żądania w zdarzeniu ładowania formularzy.

Nadzieja to pomaga

0

Jego problemy z obsługą swoich pojedynczych i podwójnych cudzysłowów. Spróbuj jak to & zadziała

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