Diciamo che non funziona non che funziona in parte.
Se la ListBox ha come RowSourceType = Tabella/Query, il RowSource è appunto un predicato SQL.
Non puoi modificare Runtime il RowSourrceType come fai... perchè il Requery che viene generato, ripropone poi il RowSource salvato nell'Oggetto...
Quindi la soluzione è questa, ipotizzando 2 Colonne, se sono di più adeguerai:
Strutturi la ListBox in modalità RowSourceType="Elenco Valori", e su Load della Form, apri il rs e la popoli...
Private sub Form_Load()
Dim rs As DAO.Recordset
Dim sRow As String
Set rs=DbEngine(0)(0).OpenRecordset("SELECT....",dbOpenSnapshot,dbReadOnly)
If not(rs.bof AND rs.Eof) Then
rs.moveFirst
Do Until rs.Eof
sRow=sRow & rs.Fields("Campo1") & ";" & rs.Fields("Campo1") & ";" ' se vuoi usare AddItem devi modificare così:
' Me.lbox_utente_ass.AddItem rs.Fields("Campo1") & ";" & rs.Fields("Campo1"), Indice ' quindi serve una Variabile Counter
rs.MoveNext
Loop
' ovviamente se usi AddItem questo non serve
Me.lbox_utente_ass.RowSource=sRow
End if
End Sub
Ho usato una stringa in quanto è discretamente più veloce del metodo AddItem che impatta sulla rigenerazione dell'Oggetto ad ogni iterazione, oltre che avere la piena retrocompatibilità fino ad Access2.
A quel punto per cancellare usi un codice più scorrevole anche:
Private Sub cmd_del_utente_Click()
Dim vItem As Variant
If Me.lbox_utente_ass.ListIndex < 0 Then Exit Sub
For Each vItem In Me.lbox_utente_ass.ItemsSelected
Me.lbox_utente_ass.RemoveItem (vItem)
Next
End Sub
Saluti.