我在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
此代码工作正常,如果文本框留空,则会弹出消息框。清除消息框后,如果我再次立即按Enter键,则会再次出现消息框,提示焦点位于文本框上。但是,如果我尝试输入一个字符(例如数字'1'),文本框中就不会出现任何内容。
有人可以建议我如何以允许用户输入数据的方式重新关注此文本框?谢谢!
答案 0 :(得分:8)
为什么不使用“确定”按钮来完成操作?
当用户在表单中输入内容时,您不应该使用消息来打扰用户。最后做。
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
如果你真的想要使用你要求的行为,那么试试这个:
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
问题在于,在您的代码中,您正在设置焦点,但输入键随后会触发。您无需设置焦点,因为文本框已经具有取消输入键所需的焦点。
答案 1 :(得分:0)
其他答案看起来很复杂。我有类似的问题,真的想要一个文本警告。如果输入不正确,我在表单上制作一个看不见的标签似乎更容易。我还将标签的背景设为红色,以便用户注意到有问题。这样做可以使光标保持可见,并且就在它们离开的位置。
Public Function amount(ByRef cont As MSForms.TextBox) As Integer
'makes sure that a number is used
'could change to account for decimals if necessary
Dim i As Long
On Error Resume Next
i = 0
If (cont.Value = "") Then Exit Function
Do While i < 1000000
If (cont.Value = i) Then
UserForm1.Label257.Visible = False
Exit Function
End If
i = i + 1
Loop
UserForm1.Label257.Visible = True
amount = 1
End Function
Public Sub qty_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If amount(UserForm1.qty) = 1 Then
Cancel = True
End If
End Sub
我希望这可以帮助后来遇到此问题的其他人。
答案 2 :(得分:-2)
看看上面的代码,我假设i计数器是为了让它继续下去?抱歉有点生疏,自从我完成代码以来已经过了几年。
无论如何,如果是这样的话,你总是可以在i = 0的情况下运行它,那么(或者是真的)。
对不起,第一次在这里发帖,希望有道理。