有几种方法可以做到这一点,例如:
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