龙空技术网

对不起,我只能接受八个字符,这是VBA代码给我的魔咒

VBA语言専攻 646

前言:

目前兄弟们对“vba键盘事件keydown”大约比较珍视,兄弟们都想要了解一些“vba键盘事件keydown”的相关资讯。那么小编在网上汇集了一些关于“vba键盘事件keydown””的相关内容,希望小伙伴们能喜欢,朋友们一起来学习一下吧!

大家好,我们今日继续讲解VBA代码解决方案的第93讲内容:在利用文本框完成人机对话过程,如何智能控制录入数据的字符多少,这个问题具有一定的代表性,希望能起到抛砖引玉的作用。在上一讲的内容中我们讲了利用文本框完成复杂的录入过程。其实,在录入数据的时候往往会有很多的限制,以期望我们的录入数据是准确的。

今天讲的例子就是录入数据字符长度的限制,比如,这个文本框是需要录入身份证号码的,那么我们就可以设定这个文本框的长度值,以免我们录入错误。

在使用文本框输入数据时,限制能输入的字符长度,即只能输入一定长度的字符,超过设置数值就不能输入,这时可以通过设置文本框的MaxLength属性来实现,应用于文本框控件的MaxLength属性规定用户可以在文本框中输入的最多字符数,语法如下:

object.MaxLength [= Long]

参数a) object是必须的,是一个有效的对象。

b) Long是可选的,整数,表示所允许的字符数。

注意:如果将MaxLength属性设置为0,表示只要内存允许则没有限制。

让我们先来看看这个属性在什么地方来设置:如下面的截图,就在那里直接设置即可。

那么有没有办法在代码中设置呢?当然有的,我们看看下面的代码:

如下面的代码所示。

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

With TextBox1

If Len(Trim(.Value)) > 0 Then

If KeyCode = vbKeyReturn Then

Sheets("sheet11").Range("A65536").End(xlUp).Offset(1, 0) = .Value

.Text = ""

End If

End If

End With

End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Select Case KeyAscii

Case Asc("0") To Asc("9")

Case Asc("-")

If InStr(1, Me.TextBox1.Text, "-") > 0 Or _

Me.TextBox1.SelStart > 0 Then

KeyAscii = 0

End If

Case Asc(".")

If InStr(1, Me.TextBox1.Text, ".") > 0 Then

KeyAscii = 0

End If

Case Else

KeyAscii = 0

End Select

End Sub

Private Sub UserForm_Activate()

TextBox1.MaxLength = 8

End Sub

Sub MyNzC()

UserForm1.Show

End Sub

代码解析:

工作表录入窗口的激活事件发生后,将文本框的MaxLength属性设置为8,使文本框只能输入8个字符,超过8个字符即不能输入。代码的截图窗口如下:

在上面的代码中,我把之前几篇文章中用到的代码也一同测试了。

今日内容回向:

1 如何限制文本框中字符长度?

2 完成控件属性的设置有什么方法?

标签: #vba键盘事件keydown