目前我有一个文本框,会根据搜索条件显示一些文字。显示的文本将是表的名称。是否有可能让我这样做,如果我点击文本框中的表格名称,它会为我打开表格吗?
答案 0 :(得分:2)
在文本框的点击事件中:
DoCmd.OpenTable Me.MyTextbox
编辑重新评论,这是一个草图,如果表名有空格,则不起作用。
Private Sub Text0_Click()
i = Me.Text0.SelStart
j = InStr(i, Me.Text0, " ")
k = InStrRev(Me.Text0, " ", i)
tbl = Mid(Me.Text0, k, j - k)
DoCmd.OpenTable tbl
End Sub
或者更好的是,按行而不是在文本框中捕获列表框中的构造。
根据您的代码示例,您可以说:
Public Sub SearchTables(SearchString As String)
Dim tdf As DAO.TableDef
Dim sTable As String
Dim sField As String
Dim sMsg As String
sMsg = ""
For Each tdf In CurrentDb.TableDefs
sTable = tdf.Name
sField = SearchTable(sTable, SearchString)
If sField <> vbNullString Then
sMsg = sMsg & ";" & sTable & ";" & sField
End If
Next
'listbox0
'Row source type: Value List
'Column count: 2
'You will get a two column listbox with table in one column
'and field in another
Forms!Search!listbox0.RowSource = Mid(sMsg, 2)
End Sub
然后在listbox0的点击事件中:
Private Sub listbox0_Click()
DoCmd.OpenTable Me.listbox0
End Sub
答案 1 :(得分:1)
你的意思是专门点击名称的文字...... 所以,如果文本是“约翰12345 THE TABLE”,你只想打开桌子吗?
没有足够的信息来提供可靠的答案,但如果您想从上面的文本中获取THE TABLE,那么您可以根据您在文本位置相关的位置使用屏幕坐标。以另一种方式做起来会容易得多......
答案 2 :(得分:1)
如果您的文字格式如下:
Table = NAMEOFTABLE Field = NAMEOFSEARCH Table = NAMEOFTABLE2 Field = NAMEOFSEARCH2
您可以使用此代码:
Private Sub Text0_Click()
i = Me.Text0.SelStart
If i > 0 Then
startTable = InStrRev(Me.Text0, "Table = ", i)
startField = InStr(startTable + 8, Me.Text0, "Field = ")
If startTable > 0 And i < InStr(startTable + 8, Me.Text0, "Field = ") Then
DoCmd.OpenTable Mid(Me.Text0, startTable + 8, startField - startTable - 9)
End If
End If
End Sub
如果您点击任何表的名称,它将打开该表。
这里有一点解释:使用光标的当前位置,我向后搜索"Table = "
字符串,然后我从那里搜索下一个字符串"Field = "
。我们所要做的就是检查光标是否在下一个字段之前。