これを行うには、いくつかの方法があります。たとえば、次のとおりです。
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
から: http://wiki.lessthandot.com/index.php/Listbox:_Does_an_Item_Exist
ただし、間違った方向から問題に取り組んでいる可能性があると思います。複数の隠しコントロールが良い考えになることはめったになく、ニーズをより完全に説明する方がよい場合があります。
コメントを編集
この例は高速ではありませんが、非常に簡単です。
Sub SearchTables(strFind As String)
''Reference: Microsoft DAO x.x Object Library
Dim db As Database
Dim tdf As TableDef
Dim fld As DAO.Field
Dim rs As DAO.Recordset
Dim strSQL As String
Dim strMessage As String
Set db = CurrentDb
For Each tdf In db.TableDefs
strFieldList = ""
For Each fld In tdf.Fields
strFieldList = strFieldList & " & [" & fld.Name & "]"
Next
strSQL = "SELECT * FROM [" & tdf.Name & "] " _
& "WHERE Instr(" & Mid(strFieldList, 4) & ",'" & strFind & "') > 0"
Set rs = CurrentDb.OpenRecordset(strSQL)
If Not rs.EOF Then
rs.MoveLast '' Populate recordset, a little slower
strMessage = strMessage & vbCrLf & tdf.Name & " : " & rs.RecordCount
End If
Next
MsgBox "Found in - " & vbCrLf & IIf(strMessage = vbNullString, "None", strMessage)
End Sub