在键入期间更新文本框

时间:2012-08-16 11:33:55

标签: vba ms-access textbox access-vba auto-update

在Access中,我有一个表单,其中有三个文本框。 我正在尝试使用两者的组合更新名为 tbxCombinedName 的文本框:

  • textbox tbxLastName (此人的姓氏)
  • textbox tbxFirstName (人名)

我的问题是:我使用什么文本框属性,因此当我在 tbxLastName 中键入文本时,CombinedName文本框会立即更新 ,然后保存在表格中联系人

Microsoft's website上,我发现在文本框中输入时的步骤处理如下:

KeyDown→KeyPress→BeforeInsert→更改→KeyUp

我尝试过使用OnChange和OnKeyDown属性,但无济于事。哪个属性与什么代码相结合,将允许按类型更新操作?

这是我之前写的,但没有用:

Private Sub tbxLName_change()

Dim lastName As String
Dim nameCode As String

lastName = tbxLName.Value
Debug.Print lastName
nameCode = tbxNameCode.Value
nameCode = lastName
Debug.Print nameCode

End Sub

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:8)

这是您应该引用.text属性的少数情况之一。

在Change事件中:

lastName = tbxLName.Text

.text属性仅在控件具有焦点时可用,并且它引用控件的可见内容。

但是,这是一个数据库,一般规则是您不能存储计算字段。可以从查询中轻松获取全名。

答案 1 :(得分:1)

只是几个笔记:

您可能希望使用KeyPress,因为它可以更改或取消用户推送的密钥。

在下面的示例中,只允许使用字母,小写字母为大写字母:

Private Sub tbxLName_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        Const ASCII_LOWER_RANGE = 65
        Const ASCII_UPPER_RANGE = 122
        Const ASCII_LOWER_A = 97
        Const ASCII_LOWER_Z = 122
        Const UPPER_MODIFIER = -32
        Const ASCII_CANCEL_CODE = 0

        Select Case KeyAscii
            Case ASCII_LOWER_RANGE To ASCII_UPPER_RANGE
                If KeyAscii >= ASCII_LOWER_A And KeyAscii <= ASCII_LOWER_Z Then
                    KeyAscii = KeyAscii + UPPER_MODIFIER
                End If
            Case Else
                KeyAscii = ASCII_CANCEL_CODE  'Cancel Key Press
        End Select
End Sub