treelistview控件失去焦点_如果数据校验不合规,VBA代码将自动控制光标焦点返回...

大家好,我们今日继续讲解VBA代码解决方案的第94讲内容:如果文本框的录入校验不能通过,光标仍返回文本框中

在之前的讲解中我讲了利用文本框完成高级人机对话过程的实现,在这个实现过程中数据的校验是非常重要的,需要验证你录入的是否为数字,数字的长度是否符合要求,等等。一般会在录入到工作表格之前完成一系列的校验,如果错误,则清空文本框内容,提示用户重新输入。但此时光标已经不在文本框中,需要重新选择文本框才能输入。如下图所示,虽然程序提示了录入数据1的数据是不对的,当前的文本框已经失去了焦点,焦点已经移到了数据2的录入文本框中:

3606017c469cd8998d4d7b7846532f81.png
7c06eb3ae3d2e0f6af31b9939398f8a3.png

那么有没有办法实现光标仍停留在当前的文本框中呢?是的,可以,我在讲解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 <> """这一条件,那么在窗体显示后,如果用户取消输入或关闭输入窗体,也会提示输入错误。所以在录入到工作表之前再验证文本框是否为空,

代码截图窗口:

93865072521afbc8021730c8979189ff.png

运行后:

当数据不对时,会提示:

f3efe226707faafcf64412bb32c1bb8e.png

此时按下"确定",焦点仍在当前的数据录入1的对话框中:

5a7bb2e88ad46dd242a0f5a2d2a57aaa.png

今日内容回向:

1 当数据录入不符合验证时如何使当前的文本框不失去焦点?

2 文本框的Exit事件是在什么时候发生的呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值