关于vba:按Enter键后,请继续关注文本框

Keep focus on textbox after pressing enter

在VBA表单中按Enter键后,如何将焦点保持在文本框中?

这段代码将文本添加到列表框,我想将重点放在文本框上,以准备接收其他项目。

当我单击添加按钮时,它将文本添加到列表框,并将焦点返回到文本框,但是当我按Enter键时,它并没有,即使它使用相同的代码也是如此。 有什么建议吗?

这是我的文本框代码:

1
2
3
4
5
6
7
Private Sub TxtOtherAsset_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    If KeyCode = 13 Then
        CmdAddOtherAsset_Click
    End If

End Sub

这是我的按钮的代码:

1
2
3
4
5
6
7
8
9
10
Private Sub CmdAddOtherAsset_Click()

    If TxtOtherAsset.Text <>"" Then
        ListAddedAssets.AddItem TxtOtherAsset.Text
        TxtOtherAsset.Text =""
    End If

    TxtOtherAsset.SetFocus

End Sub

我尝试了几种方法,但无法将焦点返回到文本框。 按Enter键后,焦点将移至TabIndex中的下一个。


从我的头开始:尝试将KeyCode设置为0。此外,使用KeyCodeConstants类(来自Core库)来确定Enter键的值。

像这样:

1
2
3
4
If KeyCode = KeyCodeConstants.vbKeyReturn Then
    CmdAddOtherAsset_Click
    KeyCode = 0
End If

删除您试图将焦点放在另一个子(TxtOtherAsset.SetFocus)上的行。

希望对你有效。 我没有测试。


您是否使用Enter键作为触发来捕获对文本框的更改? 如果是这种情况,请尝试使用更新后事件。 另外,请查看"退出时"事件。 当我看时,我注意到它有一个Cancel参数。 如果您仍想在Key Down事件中捕获Enter键,则可以在On Exit事件中阻止离开文本框。 当然,这可能意味着您永久地陷入困境,并且可能需要设置一种允许退出的方法。