試試這個
Public Sub FindInAllTables(ByVal s As String)
Dim db As DAO.Database, rs As DAO.Recordset
Dim tdf As DAO.TableDef, fld As DAO.Field
Dim pattern As String
pattern = "*" & s & "*"
Set db = CurrentDb
For Each tdf In db.TableDefs
If (tdf.Attributes And dbSystemObject) = 0 Then
On Error Resume Next
Set rs = tdf.OpenRecordset(dbOpenSnapshot)
If err.Number = 0 Then
On Error GoTo 0
Debug.Print "Scanning [" & tdf.Name & "] ";
Do Until rs.EOF()
For Each fld In rs.Fields
If fld.Value Like pattern Then
Debug.Print
Debug.Print " Match in [" & tdf.Name & "].[" & _
fld.Name & "] ===> """ & fld.Value & """";
Exit Do
End If
Next fld
If rs.AbsolutePosition Mod 1000 = 999 Then
Debug.Print ".";
End If
rs.MoveNext
Loop
Debug.Print
rs.Close
Else
On Error GoTo 0
Debug.Print "Cannot open table [" & tdf.Name & "]"
End If
End If
Next tdf
db.Close
End Sub
此發現包含在一個字段的任何部分字符串。如果您只想查找整個字段,請用If fld.Value = s Then
替換If fld.Value Like pattern Then
。
當我試圖在即時窗口中執行它時,它會顯示「運行時錯誤3167」:記錄被刪除。「 – Antrim
奇怪。這不會發生在我的數據庫中。有人在同一時間在同一個數據庫上工作嗎?嘗試添加一些錯誤處理('On Error Resume Next'或類似的)。 –
我試了兩種方法,並且都拋出「運行時錯誤'3167':記錄被刪除。」任何想法有什麼不對? – Antrim