ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 16114|回复: 13

[原创]限制用户窗体中文本框的输入

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-6-22 16:01 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:窗体

以下是Chip Pearson关于如何限制用户窗体中文本框输入的文章,试译了一下,供参考.

主要是用VBA代码实现在文本框中只允许输入哪类字符,不允许输入哪类字符.但我应用了之后,发现句点不能输入,中文字符可以输入,与作者所说的有点小差异,是不是语言版本的问题?

文档 9SMnsExc.rar (4.33 KB, 下载次数: 504)


TA的精华主题

TA的得分主题

发表于 2007-3-7 01:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

限制文本框的输入

如果你运用过VBA用户窗体,那么你肯定使用过文本框控件。在某些情况下,你可能想限制用户在文本框中输入某类型的数据,比如在文本框中仅能输入数字。不巧的是,没有内置的属性能限制在文本框中只能输入数字。但你能在文本框对象的KeyPress事件过程中使用一些简单的代码来测试能输入哪类字符,然后(作修改后)仅允许数字字符输入。

例如,假设将用户窗体中的文本框命名为TextBox1,下面的代码将允许在文本框中输入数字0-9、一个句点和负号。代码限制用户输入的数据中包含小数点,并且只局限于将负号作为第一个字符输入。

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

 

如果想在文本框中允许其它类型的字符输入,在代码的第一个Case语句中列出(允许输入的字符)即可。

(译者注:该代码能允许中文字符的输入,但不能输入句点。By fanjy in 2006-6-22)

附:原文

Restricting Entry In Text Box 

If you are using a VBA Userform, you are almost surely using the TextBox control, and in many of these circumstances you may wish to restrict what sort of data the user is allowed to enter, such as numeric only. Unfortunately, there is no built-in property to restrict a text box to numeric only. However, you can use some simple code in the KeyPress event procedure of the TextBox object to test which character was entered, and allow only numeric (and supporting) characters.

For example, suppose your textbox is named TextBox1. The following code will allow the digits 0-9, a period (.) and a negative sign. The code also limits the user to including a single decimal point, and restricts the minus sign to the first character.

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

 

To allow other characters, list them in the first Case statement.

(By Chip Pearson)

TA的精华主题

TA的得分主题

发表于 2007-3-7 07:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-3-7 20:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

支挂

TA的精华主题

TA的得分主题

发表于 2007-3-7 21:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

不错正用得着,下来研究研究,谢谢。

TA的精华主题

TA的得分主题

发表于 2007-3-7 22:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

挺好的,我正学习用户窗体,收藏了研究一下,谢谢!

TA的精华主题

TA的得分主题

发表于 2007-6-24 16:20 | 显示全部楼层

好象只能防止键盘敲入非法字符,但不能防止通过Ctrl+V粘贴一个非法字符。

我是这样做的,请参考:

窗体中有一个TextBox,一个“确定”按钮。要求在TextBox中输入到一个合法的文件名:

在声明段中:
Private ErrTxt() As String

Private Sub UserForm_Initialize()
    ReDim ErrTxt(9)
    ErrTxt(0) = Chr(34)
    ErrTxt(1) = "\"
    ErrTxt(2) = "/"
    ErrTxt(3) = ":"
    ErrTxt(4) = "*"
    ErrTxt(5) = "?"
    ErrTxt(6) = "<"
    ErrTxt(7) = ">"
    ErrTxt(8) = "\"
    ErrTxt(9) = "-"
End Sub

Private Sub TextBox1_Change()
    Dim i As Integer
    If TxtName.Value = "" Then      '如果空,“确定”按钮不可用
        CmdOK.Enabled = False
    Else
        '判断输入的名称是否有非法字符,如果无,“确定按钮”可用,否则不可用
        For i = 0 To 9
            If InStr(TxtName.Value, Txt(i)) > 0 Then
                CmdOK.Enabled = False
                Exit Sub
            End If
        Next i
     End If
End Sub

也可以通过错误陷阱检测,这是应“限制输入非法字符”要求的一种方法,请参考。

TA的精华主题

TA的得分主题

发表于 2010-10-23 00:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
各位太有才华了

TA的精华主题

TA的得分主题

发表于 2011-11-26 07:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-12-15 11:42 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 19:06 , Processed in 0.042963 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表