如何根据需要将焦点放在文本框中

And*_*Dev 1 excel vba textbox excel-vba setfocus

我在userform上有一个文本框.如果用户无法在此文本框中输入任何内容,我需要捕获该内容以强制输入.我可以很容易地做到这一点,但在通知用户他们需要输入后,我希望焦点返回到文本框.现在,它没有这样做.这是我的代码:

Private Sub txtAnswer_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

Select Case KeyCode
    Case 13:
        If Me.txtAnswer.Value = "" Then
            temp = MsgBox("You need to enter an answer!", vbCritical + vbOKOnly, "No Answer Found!")
            Me.txtAnswer.SetFocus
        Else
            recordAnswer
        End If
    End Select

End Sub
Run Code Online (Sandbox Code Playgroud)

此代码工作正常,如果文本框留空,则弹出消息框.清除消息框后,如果我再次立即按Enter键,则会再次出现消息框,提示焦点位于文本框上.但是,如果我尝试输入一个字符(例如数字'1'),文本框中就不会出现任何内容.

任何人都可以建议我如何以允许用户输入数据的方式将焦点重新放在此文本框上?谢谢!

Rea*_*idy 8

你为什么不使用'ok'按钮来完成动作?

当用户在表单中键入内容时,您不应该使用消息来打扰用户.最后做.

Private Sub OK_Click()

    '// Validate form
    If txtAnswer.Text = vbNullString Then
        MsgBox "You need to enter an answer!", vbExclamation, "No Answer Found!"
        txtAnswer.SetFocus
        Exit Sub
    End If

    '// You have reached here so form is correct carry on
    recordAnswer

End Sub
Run Code Online (Sandbox Code Playgroud)

如果你真的想要使用你要求的行为,那么试试这个:

Private Sub txtAnswer_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    Select Case KeyCode
    Case 13:
        If Me.txtAnswer.Value = "" Then
            temp = MsgBox("You need to enter an answer!", vbCritical + vbOKOnly, "No Answer Found!")              
            KeyCode = 0
        Else
            recordAnswer
        End If
    End Select

End Sub
Run Code Online (Sandbox Code Playgroud)

问题是,在您的代码中,您正在设置焦点,但输入键随后会触发.您无需设置焦点,因为文本框已经具有取消输入键所需的焦点.