Effizienteste Weg, um zu sehen, ob ein Element ist oder nicht, in einer Steuerelement List-Box
-
01-07-2019 - |
Frage
Dieser Antrag basiert auf MS Access VBA. Ich würde gerne wissen, was der effizienteste Weg ist, um zu sehen, ob ein Element in einem Listenfeld-Steuerelement vorhanden ist.
Lösung
Hier ist eine Beispielfunktion, die angepasst werden könnten.
Function CheckForItem(strItem, ListB As ListBox) As Boolean
Dim rs As DAO.Recordset
Dim db As Database
Dim tdf As TableDef
Set db = CurrentDb
CheckForItem = False
Select Case ListB.RowSourceType
Case "Value List"
CheckForItem = InStr(ListB.RowSource, strItem) > 0
Case "Table/Query"
Set rs = db.OpenRecordset(ListB.RowSource)
For i = 0 To rs.Fields.Count - 1
strList = strList & " & "","" & " & rs.Fields(i).Name
Next
rs.FindFirst "Instr(" & Mid(strList, 10) & ",'" & strItem & "')>0"
If Not rs.EOF Then CheckForItem = True
Case "Field List"
Set tdf = db.TableDefs(ListB.RowSource)
For Each itm In tdf.Fields
If itm.Name = strItem Then CheckForItem = True
Next
End Select
End Function
Andere Tipps
Leider gibt es keine effizientere Art und Weise als eine lineare Suche, es sei denn, Sie wissen, dass Ihr listbox ist in einer bestimmten Art und Weise sortiert oder indiziert werden.
For i = 1 To TheComboBoxControl.ListCount
if TheComboBoxControl.ItemData(i) = "Item to search for" Then do_something()
Next i
Wenn Sie nichts dagegen nicht auf den Windows-API zurückgreifen Sie eine Zeichenfolge wie folgt suchen:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const LB_FINDSTRINGEXACT = &H1A2
Dim index as Integer
Dim searchString as String
searchString = "Target" & Chr(0)
index = SendMessage(ListBox1.hWnd, LB_FINDSTRINGEXACT , -1, searchString)
, die den Index der Zeile zurückgeben soll, die die Zielzeichenfolge enthält.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow