【Excel VBA】控件应用(1)

您所在的位置:网站首页 vb如何在列表框输入 【Excel VBA】控件应用(1)

【Excel VBA】控件应用(1)

2023-07-31 18:27| 来源: 网络整理| 查看: 265

12.1 限制文本框的输入

用户在使用文本框输入数据时,往往希望可以限制输入数据的类型,例如,只允许输入数字,但是文本框的现有属性无法直接实现这样的要求。此时可以在文本框的KeyPress事件过程和Change事件过程中编写代码来判断输入的字符类型。只允许输入数字字符和一个"-"号、一个"."号,示例代码如下。

 Private Sub txtDemo_KeyPress(ByVal KeyANSI As MSForms.ReturnInteger)      Select Case KeyANSI'判断参数的值          Case Asc("0") To Asc("9")          Case Asc("-")              If InStr(1, Me.txtDemo.Text, "-") > 0 Or _                  Me.txtDemo.SelStart > 0 Then                  KeyANSI = 0              End If          Case Asc(".")              If InStr(1, Me.txtDemo.Text, ".") > 0 Then                  KeyANSI = 0              End If          Case Else              KeyANSI = 0      End Select  End Sub

当用户按下一个ANSI键时触发KeyPress事件。

KeyPress事件的语法格式如下。

 Private Sub object_KeyPress( ByVal KeyANSI As MSForms.ReturnInteger)

其中,Object是必需的,代表一个有效的对象。

参数KeyANSI是可选的,其值为整数型,代表标准的ANSI键代码。

第3行代码利用Asc函数将字符串转换为字符代码。

第4~8行用来判断字符"-",只能在文本框第1位输入单个"-"。如果键盘输入的是"-",先使用InStr函数判断文本框中是否存在"-",如果InStr函数的返回值大于0,说明文本框已存在"-"。接下来使用文本框的SelStart属性来检测插入点,如果文本框SelStart的属性值大于0,说明插入点不是第1个。

将KeyANSI参数值设置为0,取消键盘输入。

第5行代码中的Me表示当前窗体,txtDemo是窗体中文本框的名称,如下图所示。文本框的Text属性返回当前文本框中的字符串。

 

但是以上代码无法禁止中文字符的输入和粘贴。利用文本框的Change事件可以解决此问题,示例代码如下。

 Private Sub txtDemo_Change()      Dim i As Integer      Dim strEntry As String      With txtDemo          For i = 1 To Len(.Text)'逐个提起文本框中的字符进行判断              strEntry = Mid(.Text, i, 1)              Select Case strEntry                  Case ".", "-", "0" To "9"                  Case Else                      .Text = Replace(.Text, strEntry, "")              End Select          Next i      End With  End Sub

第10行代码使用Replace函数将非法输入字符替换成空字符串。当替换文本框的字符时,会触发Change事件。

增加Change事件过程后,在文本框中只能输入数字和一个"."以及在第一位输入一个"-"。

12.2 自动换行的文本框

当使用文本框显示一段很长的文本时,需要将文本框设置成多行显示,否则文本内容只能在一行中显示,此时应设置文本框的WordWrap属性和MultiLine属性,示例代码如下。

 Private Sub UserForm_Initialize()      With Me.txtDemo          .WordWrap = True          .MultiLine = True          .Text = "文本框是一个灵活的控件,受下列属性的影响:Text、" _              & "MultiLine、WordWrap和AutoSize。" & vbCrLf _              & "Text 包含显示在文本框中的文本。" & Chr(10) _              & "MultiLine 控制文本框是单行还是多行显示文本。" _              & "换行字符用于标识在何处结束一行并开始新的一行。" _              & "如果 MultiLine 的值为False,则文本将被截断," _              & "而不会换行。如果文本的长度大于文本框的宽度," _              & "WordWrap允许文本框根据其宽度自动换行。" & Chr(10) _              & "如果不使用 WordWrap,当文本框在文本中遇到换行字符时," _              & "开始一个新行。如果关闭WordWrap,TextBox中可以有不能" _              & "完全适合其宽度的文本行。文本框根据该宽度,显示宽度以" _              & "内的文本部分,截断宽度以外的那部分文本。只有当" _              & "MultiLine为True时,WordWrap才起作用。" & Chr(10) _              & "AutoSize 控制是否调节文本框的大小,以便显示所有文本。" _              & "当文本框使用AutoSize 时,文本框的宽度按照文本框中的" _              & "文字量以及显示该文本的字体大小收缩或扩大。"      End With  End Sub

第3行代码设置文本框的WordWrap属性为True。

WordWrap属性指定控件的内容在行末是否自动换行。设置为True,文本将自动换行;设置为False,文本不换行。

第4行代码设置文本框的MultiLine属性为True。

MultiLine属性指定控件能否接受和显示多行文本。设置为True,支持多行显示文本。

如果将文本框的MultiLine属性设置为False,则文本框的所有字符都合并为一行,包括非打印字符(如回车符和换行符)。

注:对于同时支持这两个属性的控件,当MultiLine属性设置为False时,WordWrap属性将被忽略。

当需要强制换行时,可以在文本中插入vbCrLf进行换行。

运行结果如下。

 

12.3 自动选择文本框内容

如果希望文本框获得焦点时能自动选中其内容,可以在MouseUp事件和Enter事件中设置文本框的SelLength属性,示例代码如下。

 Private Sub txtDemo_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)      If Button = 2 Then'被释放的是否为鼠标右键          With txtDemo              .SelStart = 0              .SelLength = Len(.Text)          End With      End If  End Sub  Private Sub txtDemo_Enter()      txtDemo.SelStart = 0      txtDemo.SelLength = Len(txtDemo.Text)  End Sub

第1~8行代码为文本框的MouseUp事件过程,在文本框中右击时自动选中文本框中的内容。

按下鼠标右键时触发控件的MouseDown事件,释放鼠标时触发控件的MouseUp事件,其语法格式如下。

 Private Sub object_MouseUp( ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single)

MouseDown 和 MouseUp 事件的语法包含以下成分:

成分说明object必需。一个有效的对象。index必需。发生特定事件的多页和 TabStrip 中的页索引或标签索引。Button必需。标识引起该事件的鼠标按键的整数值。Shift必需。规定 Shift、Ctrl 和 Alt 的状态。X, Y必需。窗体、框架或页的位置的横坐标与纵坐标,以磅为单位,分别从左边和顶边开始测量。

参数Button是必需的,标识引起该事件的鼠标按键值,如下表所示。

Button 的设置如下:

常量值说明fmButtonLeft1按下左键。fmButtonRight2按下右键。fmButtonMiddle4按下中键。

Shift 的设置如下:

值说明1按下 Shift。2按下 Ctrl。3同时按下 Shift 和 Ctrl。4按下 Alt。5同时按下 Alt 和 Shift。6同时按下 Alt 和 Ctrl。7同时按下 Alt 、Shift 和 Ctrl。

第3~6行代码设置文本框的SelStart属性为0,SelLength属性为文本框中字符串的长度。

SelStart属性指定选中文本的起点,如果没有选中的文本,则指定插入点。

SelLength属性指定文本框或组合框中的文本被选中的字符数。

对于SelLength和SelStart,其默认值均为0,设置值的有效范围是从0到组合框或文本框编辑区中的全部字符的长度。

第9~12行代码为文本框的Enter事件过程,在文本框实际接收焦点前自动选中文本框中的内容。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3