このリクエストは、MS Access VBA に基づいています。リストボックス コントロールに項目が存在するかどうかを確認するための最も効率的な方法を知りたいです。
Curtis Inderwiesche
質問する
5561 次
3 に答える
2
これは、適合する可能性のあるサンプル関数です。
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
于 2008-09-19T23:14:06.453 に答える
1
残念ながら、リストボックスが特定の方法でソートまたはインデックス付けされていることがわかっていない限り、線形検索よりも効率的な方法はありません。
For i = 1 To TheComboBoxControl.ListCount
if TheComboBoxControl.ItemData(i) = "Item to search for" Then do_something()
Next i
于 2008-09-19T22:24:48.833 に答える
1
Windows API を使用してもかまわない場合は、次のような文字列を検索できます。
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)
ターゲット文字列を含む行のインデックスを返す必要があります。
于 2008-09-19T22:33:41.480 に答える