J'ai une base de données Access dans laquelle j'utilise un contrôle Tab (sans onglets) pour simuler un assistant. Une des pages d'onglet a un contrôle MSForms.ListBox appelé lstPorts et un bouton nommé cmdAdd qui ajoute le contenu d'une zone de texte à la zone de liste. J'essaye alors de garder le contenu du ListBox trié. Toutefois, l'appel à la méthode Sort provoque une incompatibilité de type.Incompatibilité de type MSForms.ListBox dans Access
Voici le code cmdAdd_Click() derrière:
Private Sub cmdAdd_Click()
Dim test As MSForms.ListBox
lstPorts2.AddItem (txtPortName)
Call SortListBox(lstPorts2)
End Sub
Voici le SortListBox Sub:
Public Sub SortListBox(ByRef oLb As MSForms.ListBox)
Dim vaItems As Variant
Dim i As Long, j As Long
Dim vTemp As Variant
'Put the items in a variant array
vaItems = oLb.List
For i = LBound(vaItems, 1) To UBound(vaItems, 1) - 1
For j = i + 1 To UBound(vaItems, 1)
If vaItems(i, 0) > vaItems(j, 0) Then
vTemp = vaItems(i, 0)
vaItems(i, 0) = vaItems(j, 0)
vaItems(j, 0) = vTemp
End If
Next j
Next i
'Clear the listbox
oLb.Clear
'Add the sorted array back to the listbox
For i = LBound(vaItems, 1) To UBound(vaItems, 1)
oLb.AddItem vaItems(i, 0)
Next i
End Sub
Toute aide là-bas? Étant donné que la routine de tri fait explicitement référence à MSForms.ListBox, la plupart des résultats de Google ne sont pas applicables.
Jason
Le code comme ceci "lstPorts2.AddItem (txtPortName)" est sloppy et dangrous. Le formulaire parent doit être spécifié, c'est-à-dire, Me! LstPorts2.AddItem (MetxtPortName) ou Me.lstPorts2.AddItem (Me.txtPortName). –
Pourquoi utilisez-vous un contrôle de liste de sélection étranger? Cela me semble être une erreur de conception majeure. –