Filtrare multiselect in formular, cu ajutorul ListBox

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

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.

' Filtrarea propriu-zisa
Me.f_test_s.Form.Filter = critList
Me.f_test_s.Form.FilterOn = True

Sursa: Microsoft.com

Author: Ovidiu.S

Suficient de pasionat de această zonă profesională ca, în cazul în care ştiu ceva - cât de puţin - să împărtăşesc cu alţii.

Lasă un răspuns