Formular unic
Pentru a realiza dezideratul din titlu este necesară o tabelă, un formular şi puţin cod VBA. Formularul va conţine, pe lângă câmpurile tabelei, un control de tip List Box şi un buton.
Sursa listbox-ului: SELECT DISTINCT t_test.oras FROM t_test;
Pentru a putea realiza multiselecţie, fiind în modul Design View, mergem în panoul de Proprietăţi (Properties), al controlului ListBox, în tab-ul Other, de unde vom trece opţiunea Multi Select pe Simple (mai este şi opţiunea Extended, diferenţa fiind următoarea: în timp ce la Simple, este suficient să dăm clic succesiv pentru a realiza selecţia, la varianta Extended este necesară apăsarea tastei Control pentru selecţie necontigue sau Shift pentru cele succesive).
Codul butonului de filtrare
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Private Sub btnList_Click() Dim critList As String Dim i As Variant critList = "" ' Realizarea unui criteriu pentru elementele selectate din listbox For Each i In lst_oras.ItemsSelected If critList <> "" Then critList = critList & " OR " End If critList = critList & "[oras]='" & lst_oras.ItemData(i) & "'" Next i ' Filtrarea propriu-zisa Forms!f_test.Filter = critList Forms!f_test.FilterOn = True End Sub |
Formular cu subformular
După cum se poate observa în imaginea de la începutul articolului, dezavantajul plasării unui listbox în acelaşi formular este că arată oarecum inestetic, având un spaţiu nefolosit. Rezolvarea problemei ar putea fi dacă includem formularul în altul. Tot în acel nou formular (părinte) aducem şi listbox-ul. Codul suferă o mică modificare, pe ultimele linii, cele de sub comentariul „Filtrarea propriu-zisă„. În imaginea alăturată se poate vedea rezultatul.
1 2 3 |
' Filtrarea propriu-zisa Me.f_test_s.Form.Filter = critList Me.f_test_s.Form.FilterOn = True |
Sursa: Microsoft.com