2008-09-19 8 views

답변

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 
1

목록 상자가 특정 방식으로 정렬되거나 색인되어 있지 않다면 불행히도 선형 검색보다 효율적인 방법이 없습니다.

For i = 1 To TheComboBoxControl.ListCount 
    if TheComboBoxControl.ItemData(i) = "Item to search for" Then do_something() 
Next i 
1

당신이이 같은 문자열을 검색 할 수 있습니다 윈도우 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) 

대상 문자열을 포함한 행의 인덱스를 반환해야합니다.