Access表单上的文本框传递先前的值

Posted

技术标签:

【中文标题】Access表单上的文本框传递先前的值【英文标题】:Textbox on Access form passing previous value 【发布时间】:2020-01-04 00:01:42 【问题描述】:

我创建了一个搜索表单。

有一个用于搜索文本的文本框。用户通过点击搜索按钮或按下回车键来触发搜索事件。

按钮点击事件有效。

第一次按下回车键时,文本框将传递上一个事件在文本框中输入的值。如果我第二次按回车键,则当前值通过。

例如,在表单加载时,文本框为空,然后我将搜索文本输入为“Ali”,然后按回车键,然后传递值“NULL”,再次按回车键,然后值“Ali”为通过了。

Option Compare Database

Option Explicit

Private Sub btnSearch_Click()
    Dim SQL, strSearch As String
    strSearch = Nz(Me.txtSearch.Value, "")
    SQL = "SELECT tbl_mst_Employee_Details.emp_ID, " _
        & "tbl_mst_Employee_Details.emp_Name " _
        & "FROM tbl_mst_Employee_Details " _
        & "where [emp_Name] like '*" & strSearch & "*' " _
        & "ORDER BY tbl_mst_Employee_Details.emp_Name;"
    Me.lstEmployee.RowSource = SQL
    Me.lstEmployee.Requery
    Me.txtEmpID.Value = ""
    Me.txtEmpName.Value = ""
    Me.Refresh
End Sub

Private Sub Form_Load()
    Me.txtEmpID.Value = ""
    Me.txtEmpName.Value = ""
    Me.txtSearch.Value = ""
End Sub

Private Sub lstEmployee_Click()
    With lstEmployee
        Me.txtEmpID.Value = .Column(0)
        Me.txtEmpName.Value = .Column(1)
    End With
End Sub

Private Sub lstEmployee_DblClick(Cancel As Integer)
    Forms!frmEmployeeShiftDetails.txtEmpID.Value = Me.txtEmpID
    Forms!frmEmployeeShiftDetails.txtEmpName.Value = Me.txtEmpName
    DoCmd.Close
    Forms!frmEmployeeShiftDetails.txtEmpID.SetFocus
End Sub

Private Sub lstEmployee_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
        lstEmployee_DblClick (0)
    End If
End Sub

Private Sub txtSearch_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
        btnSearch_Click
    End If
End Sub

【问题讨论】:

就用这个:***.com/questions/22792836/… 您的代码不起作用的原因:直到您离开文本框后才设置新的.Value。比较这个最近的问题:***.com/questions/59556810/… 【参考方案1】:

只需先将焦点设置到搜索按钮即可。

此外,我还会检查是否按下制表符(并对返回和制表符都使用常量)。

为了保持不变的 UI 行为,我会注意在搜索框中按 Tab 时搜索按钮会获得焦点,因此请在表单中设置正确的 Tab 键顺序。

Private Sub txtSearch_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then
        btnSearch.SetFocus
        btnSearch_Click
    End If
End Sub

【讨论】:

非常感谢安德烈,这实际上解决了问题 @Anees:不客气。如果您发现它解决了您的问题,请考虑accepting the answer。 @Andre 嗨,Andre,我面临一个问题。我不知道如何在此门户上发送直接请求,因此我使用该方法作为评论回复。以下链接将带您前往该帖子 (***.com/questions/59752046/…)

以上是关于Access表单上的文本框传递先前的值的主要内容,如果未能解决你的问题,请参考以下文章

ms access 2003 - 表单上的文本框:不跳转到任何文本框

Access 2010 Web 数据库 - 从局部变量更新文本框值?

Access 连续表单上的动态文本框内容

根据带有if条件的多个文本框值将值分配给表单上的文本框-MS ACCESS

MS Access 2013 - 根据文本框中的值过滤列表框中的值

何创建文本框掩码以仅允许 Office Access 表单上的文本