用户窗体 - 在 MsgBox 之后将焦点重定向到文本框
Userform - Redirect focus on textbox after MsgBox
我希望这不是那么愚蠢,但我确实没有找到适合我的 post。
情况:我希望有人在用户表单的文本框中输入日期。
ErrorHandler: 如果用户没有输入正确的格式,我想有一个非常简单的解决方案。 (EB_Start.Activate 和 EB_Start.SetFocus 根本不起作用)
为此我得到了:
Private Sub EB_Ende_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Error_Handler
Me.EB_Ende = CDate(Me.EB_Ende)
Error_Handler:
EB_Start.Activate
EB_Start.SetFocus
MsgBox ("Please enter a valid date"), , "Datum"
End Sub
问题:
我现在的问题是,如何将焦点重定向到文本框 (EB_Ende)
目前的反应是,用户在 MsgBox 出现后按 Enter 后,它继续到下一个文本框,但我希望用户被强制在文本框中重新输入有效日期。
如果有人可以帮助我解决这个问题,或者将我重定向到 Post 或 link 来回答我的问题,我将不胜感激。
此致,
卢查
这是整个用户窗体
有趣的是,您将答案用作问题的标签:
Me.EB_Ende.SetFocus
Here 是关于 SetFocus
的更多信息。
其他可能有用的东西...您可以更改对象 "tabbed" 通过的默认顺序。 (即,在当前控件中按 Enter 或 Tab 键后哪个单元格应获得焦点:
在 BeforeUpdate
事件中设置焦点将不起作用 - 太早了。它在焦点移动到下一个控件之前触发。更好的方法是处理 Exit
事件并在需要时取消它:
Private Sub EB_Ende_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Error_Handler
EB_Ende = CDate(EB_Ende)
Exit Sub '<-- exit sub when there is no error
Error_Handler:
Cancel = True
MsgBox ("Please enter a valid date"), , "Datum"
End Sub
您的代码存在一些问题(例如,未在错误处理程序之前退出,您是否希望在出现错误时使用 Cancel=msoTrue
取消对 EB_Ende
的文本输入?)所以你可以试试这个:
Private Sub EB_Ende_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Error_Handler
Me.EB_Ende = CDate(Me.EB_Ende)
Exit Sub
Error_Handler:
EB_Start.SetFocus
MsgBox ("Please enter a valid date"), , "Datum"
End Sub
或者,您可以完全跳过 error-hander:
Private Sub EB_Ende_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If IsDate(Me.EB_Ende) Then
Me.EB_Ende = CDate(Me.EB_Ende)
Else
Cancel = msoTrue
EB_Start.SetFocus
MsgBox ("Please enter a valid date"), , "Datum"
End If
End Sub
工作完美
Private Sub txtSalary_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
如果不是 IsNumeric(txtSalary) 那么
MsgBox "请只输入数字!", vbRetryCancel
取消 = 真
txt薪资=“”
结束如果
If IsNumeric(txtSalary) 那么
txtSalary = Format(txtSalary, "$#,##0.00")
万一
结束子
我希望这不是那么愚蠢,但我确实没有找到适合我的 post。
情况:我希望有人在用户表单的文本框中输入日期。
ErrorHandler: 如果用户没有输入正确的格式,我想有一个非常简单的解决方案。 (EB_Start.Activate 和 EB_Start.SetFocus 根本不起作用)
为此我得到了:
Private Sub EB_Ende_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Error_Handler
Me.EB_Ende = CDate(Me.EB_Ende)
Error_Handler:
EB_Start.Activate
EB_Start.SetFocus
MsgBox ("Please enter a valid date"), , "Datum"
End Sub
问题: 我现在的问题是,如何将焦点重定向到文本框 (EB_Ende) 目前的反应是,用户在 MsgBox 出现后按 Enter 后,它继续到下一个文本框,但我希望用户被强制在文本框中重新输入有效日期。
如果有人可以帮助我解决这个问题,或者将我重定向到 Post 或 link 来回答我的问题,我将不胜感激。
此致, 卢查
这是整个用户窗体
有趣的是,您将答案用作问题的标签:
Me.EB_Ende.SetFocus
Here 是关于 SetFocus
的更多信息。
其他可能有用的东西...您可以更改对象 "tabbed" 通过的默认顺序。 (即,在当前控件中按 Enter 或 Tab 键后哪个单元格应获得焦点:
在 BeforeUpdate
事件中设置焦点将不起作用 - 太早了。它在焦点移动到下一个控件之前触发。更好的方法是处理 Exit
事件并在需要时取消它:
Private Sub EB_Ende_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Error_Handler
EB_Ende = CDate(EB_Ende)
Exit Sub '<-- exit sub when there is no error
Error_Handler:
Cancel = True
MsgBox ("Please enter a valid date"), , "Datum"
End Sub
您的代码存在一些问题(例如,未在错误处理程序之前退出,您是否希望在出现错误时使用 Cancel=msoTrue
取消对 EB_Ende
的文本输入?)所以你可以试试这个:
Private Sub EB_Ende_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Error_Handler
Me.EB_Ende = CDate(Me.EB_Ende)
Exit Sub
Error_Handler:
EB_Start.SetFocus
MsgBox ("Please enter a valid date"), , "Datum"
End Sub
或者,您可以完全跳过 error-hander:
Private Sub EB_Ende_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If IsDate(Me.EB_Ende) Then
Me.EB_Ende = CDate(Me.EB_Ende)
Else
Cancel = msoTrue
EB_Start.SetFocus
MsgBox ("Please enter a valid date"), , "Datum"
End If
End Sub
工作完美
Private Sub txtSalary_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
如果不是 IsNumeric(txtSalary) 那么 MsgBox "请只输入数字!", vbRetryCancel 取消 = 真 txt薪资=“” 结束如果
If IsNumeric(txtSalary) 那么
txtSalary = Format(txtSalary, "$#,##0.00")
万一
结束子