5

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

  • 文本框tbxLastName(人的姓氏)
  • 文本框tbxFirstName(人的名字)

我的问题是:我使用什么文本框属性,所以当我在tbxLastName中输入文本时,CombinedName 文本框会立即更新,然后保存在表Contacts中。

微软的网站上,我发现输入文本框时的步骤如下:

KeyDown → KeyPress → BeforeInsert → 更改 → KeyUp

我尝试使用 OnChange 和 OnKeyDown 属性,但无济于事。哪个属性,结合什么代码,将允许 update-as-you-type 操作起作用?

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

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

感谢您提前提供的所有帮助。

4

2 回答 2

8

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

在更改事件中:

lastName = tbxLName.Text

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

但是,这是一个数据库,一般规则是您不能不存储计算字段。可以很容易地从查询中获得全名。

于 2012-08-16T11:35:28.723 回答
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
于 2012-08-16T13:56:59.320 回答