我有一个窗体的文本框。 如果用户没有在这个文本框中输入任何内容,我需要陷阱,迫使一个条目。 我能做到这一点很容易不够,而是通知他们需要一个条目的用户THT后,我想将焦点返回到文本框。 现在,它没有做到这一点。 这里是我的代码:
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
中,如果文本框留空,则弹出提示对话框此代码工作正常。 清除消息框,如果我打又马上进入后,消息框再次出现,这表明重点是在文本框。 但是,如果我尝试输入一个字符(例如像数字“1”)没有出现在文本框中。
任何人都可以建议我怎么能找回焦点在这个文本框的方式,将允许用户输入数据? 谢谢!
你为什么不使用“确定”按钮,完成动作?
而他们的形式输入你不应该打扰邮件用户。 做结尾。
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
问题是,在你的代码要设置焦点,但回车键是继射击。 你并不需要设置焦点,因为该文本已经有你只需要取消回车键的焦点。
其他答案似乎非常复杂。 我有一个类似的问题,真的想要一个文本警告。 这似乎容易,我只是做会显示出来,如果输入是不正确的窗体上的隐形标签。 我也做了标签,红色的背景,这样用户会发现事情不对劲。 这样做,这样保持光标可见,右他们离开的地方。
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
我希望这有助于其他谁以后遇到这个问题。
看着上面的代码,我假设我计数器是保持下去? 对不起有点生疏了,已经几年,因为我已经做了代码。
无论如何,如果多数民众赞成的情况下,你总是可以运行它,而I = 0,这样做(或在真)。
对不起,第一次在这里发帖,希望是有道理的。