大家好,我们今日继续讲解VBA代码解决方案的第94讲内容:如果文本框的录入校验不能通过,光标仍返回文本框中
在之前的讲解中我讲了利用文本框完成高级人机对话过程的实现,在这个实现过程中数据的校验是非常重要的,需要验证你录入的是否为数字,数字的长度是否符合要求,等等。一般会在录入到工作表格之前完成一系列的校验,如果错误,则清空文本框内容,提示用户重新输入。但此时光标已经不在文本框中,需要重新选择文本框才能输入。如下图所示,虽然程序提示了录入数据1的数据是不对的,当前的文本框已经失去了焦点,焦点已经移到了数据2的录入文本框中:
那么有没有办法实现光标仍停留在当前的文本框中呢?是的,可以,我在讲解VBA,那么VBA的强大功能会让他逐渐的发挥,发挥到最大。今天讲解实现光标仍停留在当前的文本框中的第一种办法,就是干预Exit事件的方法。下一讲还会讲到另外的方法。
Exit事件在一个控件从同一窗体的另一个控件实际接收到焦点之前发生,语法如下:
Private Sub object_Exit( ByVal Cancel As MSForms.ReturnBoolean)
Cancel参数为事件状态。False表示由该控件处理这个事件(这是默认方式)。True表示由应用程序处理这个事件,并且焦点应当留在当前控件上。
可以在Exit事件中可以设置Cancel参数值使光标停留在当前文本框中,如下面的代码所示。
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With TextBox1
If .Text <> "" And Len(Trim(.Text)) <> 5 Then
MsgBox "您录入的数据1是错误的,请确认!"
Cancel = True
Else
Sheets("SHEET11").Range("a65536").End(xlUp).Offset(1, 0) = .Text
.Text = ""
End If
End With
End Sub
代码解析:
文本框的Exit事件,在输入数据1完成,将把焦点转移到录入输入数据2之前检查输入的数据是否正确。
第3行代码,使用Len函数和Trim函数检查输入的数据是否为5位,和不能为空格。
第4行到第6行代码,如果输入的数据不正确,提示用户,设置Cancel参数为True使光标停留在文本框中。
在Exit事件中之所以把文本框为空也做为通过验证的条件之一,因为如果不加上"TextBox1.Text <> """这一条件,那么在窗体显示后,如果用户取消输入或关闭输入窗体,也会提示输入错误。所以在录入到工作表之前再验证文本框是否为空,
代码截图窗口:
运行后:
当数据不对时,会提示:
此时按下"确定",焦点仍在当前的数据录入1的对话框中:
今日内容回向:
1 当数据录入不符合验证时如何使当前的文本框不失去焦点?
2 文本框的Exit事件是在什么时候发生的呢?