Mam raport z listą kilku spotkańkilka rekordów na spotkanie. Skonfigurowałem wyskakujący formularz, aby wybrać konkretną datę spotkania za pomocą pola kombi i użyć go do filtrowania formularza do celów drukowania. (Wbudowane filtrowanie po kliknięciu jest nieporęczne i najwyraźniej pola kombi nie pracuj nad raportami.) Wszystko działa dobrze za pierwszym razem. Problem pojawia się, gdy próbuję wybrać inną datę spotkania - raport nadal wyświetla pierwsze wybrane spotkanie pomimo wszystkich wysiłków, aby wyczyścić filtr, oprócz zamknięcia formularza i ponownego otwarcia. W przycisku raportu, który otwiera formularz wyboru, umieściłem następujący kod:
Private Sub cmdMeetingSelect_Click()
"Clear any pre-existing filter
Me.Filter = ""
Me.FilterOn = False
"Open form to filter the report
DoCmd.OpenForm "frmMeetingSelect"
End Sub
Formularz zostanie otwarty, widzę, że filtr wyłącza się w raporcie i jestem w stanie wybrać nową datę w formularzu, ale stara data jest nadal używana do ponownego filtrowania raportu.
Umieszczenie następujących elementów w formularzu wyboru nie pomaga:
Private Sub Form_Open(Cancel As Integer)
Me.cboMeetingSelect = ""
End Sub
Jest to kod w formularzu wyboru, wysyłający wybór filtra z powrotem do raportu. Nie jestem pewien, czy coś w tym sprawia, że działa tylko raz:
Private Sub cmdFilterMeeting_Click()
"Run a filter on the RSVPAttendance report
Reports!rptRSVPAttendance.Filter = "MeetingDate = Forms!frmMeetingSelect.cboMeetingSelect"
Reports!rptRSVPAttendance.FilterOn = True
"Close selection form
DoCmd.Close
End Sub
Kliknięcie Advanced -> Clear All Filters
w raporcie jest również nieskuteczne.
Widziałem kilka starych raportów o błędach dotyczących filtrowania formularzy za pomocą pól kombi w programie Access 2010, ale na pewno to już zostało rozwiązane? Czego jeszcze mi brakuje?
Odpowiedzi:
2 dla odpowiedzi № 1Twój ciąg filtrów jest dziwny. Powinien brzmieć:
Reports!rptRSVPAttendance.Filter = "MeetingDate = #" & Format(Forms!frmMeetingSelect.cboMeetingSelect.Value, "yyyy/mm/dd") & "#"
0 dla odpowiedzi nr 2
jest tu kilka rzeczy, które wydają się dziwne:
pozbyć się tych wierszy w cmdMeetingSelect_Click, nic nie robią dla twojego raportu, który kontroluje filtry w formularzu: Me.Filter = "" Me.FilterOn = False
Wystąpił błąd składniowy w kryteriach filtrowania,ale to nie o to chodzi. Myślę, że oczekujesz, że filtr zmieni się po otwarciu raportu. to nie zadziała, musisz zamknąć raport i otworzyć go ponownie, i nie możesz w ten sposób zmieniać filtrów. sugeruję zamiast tego ustawić warunek where w raporcie zamiast próbować zastosować filtr. Jednak zanim to zrobisz, otwórz ten raport w trybie projektowania i usuń istniejący filtr, a także wyłącz filtry. Następnie zastąp to, co masz w cmdFilterMeeting_Click:
Const RptName As String = "rptRSVPAttendance"
"close report if already open
If SysCmd(acSysCmdGetObjectState, AcObjectType.acReport, RptName) = 1 Then "report is open
DoCmd.Close acReport, RptName
End If
"open report with where criteria, no filtering needed
DoCmd.OpenReport RptName, acViewPreview, , ("[MeetingDate] = #" & Me.cboMeetingSelect.Value & "#")
"close form
DoCmd.Close acForm, Me.Name