الطريقة الأكثر فعالية لمعرفة ما إذا كان العنصر موجودًا أم لا في عنصر تحكم مربع القائمة
-
01-07-2019 - |
سؤال
يستند هذا الطلب إلى MS Access VBA.أود أن أعرف ما هي الطريقة الأكثر فعالية لمعرفة ما إذا كان هناك عنصر موجود في عنصر تحكم مربع القائمة.
المحلول
فيما يلي نموذج لوظيفة يمكن تكييفها لتناسبها.
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
نصائح أخرى
لسوء الحظ، لا توجد طريقة أكثر فعالية من البحث الخطي، إلا إذا كنت تعلم أن مربع القائمة الخاص بك تم فرزه أو فهرسته بطريقة معينة.
For i = 1 To TheComboBoxControl.ListCount
if TheComboBoxControl.ItemData(i) = "Item to search for" Then do_something()
Next i
إذا كنت لا تمانع في اللجوء إلى 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)
والذي يجب أن يُرجع فهرس الصف الذي يحتوي على السلسلة المستهدفة.
لا تنتمي إلى StackOverflow