Non sono esperto ma mi permetto uguale... non mi fischiate sopra seguivo il vostro 3d dal quale è nato questo, inizialmente interessante poi meno, con comunque buoni spunti di approfondimento per chi non è esperto come Voi ma ha Voglia di imparare, per chi come me non gli interessano soluzioni pronte ma gli interessa la logica che Vi sta sotto...ok chiusa parentesi.

Nel codice di Optime notavo questo:

sSql = "SELECT * FROM txxxxx ORDER BY Codice"
rs.Open sSql, cn

Ciò vuol dire che ha allocato in memoria un oggetto rs = RecordSet, ma per fare quel semplice popolamento di listbox non sarebbe meglio fare:

rs = cn.Execute("sSql")

Che non necessità dell'allocamento di un oggetto ADO

Vi ripetto non mi fischiate sopra la mia è solo un osservazione che ho appreso da Voi.