ImageVerifierCode 换一换
格式:DOCX , 页数:182 ,大小:3.62MB ,
资源ID:24224596      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24224596.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ExcelVBA常用技巧第08章控件与用户窗体.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ExcelVBA常用技巧第08章控件与用户窗体.docx

1、ExcelVBA常用技巧第08章控件与用户窗体VBA常用技巧第8章 控件与用户窗体技巧1 限制文本框的输入用户在使用文本框输入数据时,往往希望能限制输入数据的类型,比如只能输入数字。但是没有内置的属性能限制在文本框中只能输入数字,只能在文本框的事件过程中使用代码来测试输入的是哪类字符,然后只允许输入数字字符和一个“-”号、一个“.”号,如下面的代码所示。#001 Private Sub TextBox1_KeyPress(ByVal KeyANSI As MSForms.ReturnInteger)#002 Select Case KeyANSI#003 Case Asc(0) To Asc(

2、9)#004 Case Asc(-)#005 If InStr(1, Me.TextBox1.Text, -) 0 Or _#006 Me.TextBox1.SelStart 0 Then#007 KeyANSI = 0#008 End If#009 Case Asc(.)#010 If InStr(1, Me.TextBox1.Text, .) 0 Then#011 KeyANSI = 0#012 End If#013 Case Else#014 KeyANSI = 0#015 End Select#016 End Sub代码解析:文本框的KeyPress事件过程,测试键盘输入的是哪类字符,

3、只允许输入数字字符和一个“-”号、一个“.”号。KeyPress事件的语法如下:Private Sub object_KeyPress( ByVal KeyANSI As MSForms.ReturnInteger)参数Object是必需的,一个有效的对象。参数KeyANSI是可选的,整数值,代表标准的数字ANSI 键代码。第2行代码使用Case Else语句测试文本框KeyPress事件的KeyANSI参数值。第3行代码,如果键盘输入的是0到9之间的数字字符,则允许输入。如果想在文本框中允许其它类型的字符输入,在此句代码中列出允许输入的字符即可。第4行到第8行代码,如果键盘输入的是“-”号,

4、先使用InStr函数测试文本框中是否已有“-”号,如果InStr函数返回值大于0,说明文本框中已有“-”号。接下来使用文本框的SelStart 属性来测试插入点,如果文本框的SelStart 属性值大于0,说明“-”号的插入点不是第一个。如果以上两个条件中有任何一个成立,将KeyAscii参数值设置为0,使文本框只能在第一位输入一个“-”号。第9行到第12行代码,如果键盘输入的是“.”号的话,使用InStr函数测试文本框中是否已有“.”号,如果已有“.”号,将KeyAscii参数值设置为0,使文本框只能输入一个“.”号。第13、14行代码,如果键盘输入的是其他字符则将KeyAscii参数值设置

5、为0,使文本框不能输入其他字符。经过以上设置文本框只允许输入数字字符和一个“-”号、一个“.”号,但是能输入中文字符。如果希望限制中文字符的输入,可以在文本框的Change事件中进行设置,如下面的代码所示。#001 Private Sub TextBox1_Change()#002 Dim i As Integer#003 Dim s As String#004 With TextBox1#005 For i = 1 To Len(.Text)#006 s = Mid(.Text, i, 1)#007 Select Case s#008 Case ., -, 0 To 9#009 Case E

6、lse#010 .Text = Replace(.Text, s, )#011 End Select#012 Next#013 End With#014 End Sub代码解析:文本框的Change事件,判断输入的字符是否为数字字符和“-”号、“.”号,如果不是则使用Replace函数将文本框中输入的其他字符替换成空白。第5、6行代码在文本框输入的所有字符中循环。第8行代码列出允许输入的字符。如果想在文本框中允许其它字符输入,在此句代码中列出即可。第9、10行代码,如果不是允许输入的字符,使用Replace函数替换成空白。经过以上的设置,文本框中只能在第一位输入一个“-”号、一个“.”号和“0

7、”到“9”的数字。技巧2 文本框添加右键快捷菜单VBA中的控件没有提供右键快捷菜单,用户可以使用Excel 中的命令栏自已添加右键快捷菜单。步骤1:按组合键进入VBE窗口,单击菜单“插入”“模块”,在其代码窗口输入以下代码:#001 Private ActiveTB As MSForms.TextBox#002 Public Sub CreateShortCutMenu()#003 Dim ShortCutMenu As CommandBar#004 Dim ShortCutMenuItem As CommandBarButton#005 Dim sCaption As Variant#006

8、 Dim iFaceId As Variant#007 Dim sAction As Variant#008 Dim i As Integer#009 sCaption = Array(剪切(&C), 复制(&T), 贴粘(&P), 删除(&D)#010 iFaceId = Array(21, 19, 22, 1786)#011 sAction = Array(Action_Cut, Action_Copy, Action_Paste, Action_Delete)#012 On Error Resume Next#013 Application.CommandBars(ShortCut).D

9、elete#014 Set ShortCutMenu = Application.CommandBars.Add(ShortCut, msoBarPopup)#015 With ShortCutMenu#016 For i = 0 To 3#017 Set ShortCutMenuItem = .Controls.Add(msoControlButton)#018 With ShortCutMenuItem#019 .Caption = sCaption(i)#020 .faceID = Val(iFaceId(i)#021 .OnAction = sAction(i)#022 End Wit

10、h#023 Next#024 End With#025 End Sub代码解析:第1行代码,在模块级别中声明变量ActiveTB是用来对应窗体中的文本框所触发的所有事件的变量。CreateShortCutMenu过程用来创建标题为“ShortCut”的右键快捷菜单,并添加4个菜单项。关于自定义右键快捷菜单请参阅技巧86 。#001 Public Sub ShowPopupMenu(txtCtr As MSForms.TextBox)#002 Dim Action As Variant#003 Set ActiveTB = txtCtr#004 With Application.CommandB

11、ars(ShortCut)#005 .Controls(1).Enabled = txtCtr.SelLength 0#006 .Controls(2).Enabled = .Controls(1).Enabled#007 .Controls(3).Enabled = txtCtr.CanPaste#008 .Controls(4).Enabled = .Controls(1).Enabled#009 .ShowPopup#010 End With#011 End Sub代码解析:ShowPopupMenu过程根据文本框中字符的选中状态设置右键快捷菜单菜单项的Enabled属性后使用ShowP

12、opup方法显示右键快捷菜单。第5行代码,如果当前文本框中已有选中的字符则“剪切”按钮有效。第6行代码,如果当前文本框中已有选中的字符则“复制”按钮有效。第7行代码,如果剪贴板中包含对象支持的数据。则“贴粘”按钮有效。第8行代码,如果当前文本框中已有选中的字符则“删除”按钮有效。第9行代码,显示快捷菜单。#001 Public Sub Action_Cut()#002 ActiveTB.Cut#003 End Sub#004 Public Sub Action_Copy()#005 ActiveTB.Copy#006 End Sub#007 Public Sub Action_Paste()#

13、008 ActiveTB.Paste#009 End Sub#010 Public Sub Action_Delete()#011 Dim s As String#012 With ActiveTB#013 s = .SelText#014 .Value = Replace(.Value, s, )#015 End With#016 End Sub代码解析:Action_Cut过程是快捷菜单中单击“剪切”菜单项所运行的过程。使用Cut 方法将当前选中的文本框中的文本删除并移至剪贴板。Action_Copy过程是快捷菜单中单击“复制”菜单项所运行的过程。使用Copy方法将文本框选中的文本复制到剪

14、贴板上。Action_Paste过程是快捷菜单中单击“贴粘”菜单项所运行的过程。使用Paste方法把剪贴板上的内容传送到一个文本框中。Action_Delete过程是快捷菜单中单击“贴粘”菜单项所运行的过程。使用Replace函数将文本框中选中的文本的文本替换成空字符。#001 Public Sub DeleteShortCutMenu()#002 On Error Resume Next#003 Application.CommandBars(ShortCut).Delete#004 End Sub代码解析:DeleteShortCutMenu过程删除创建的右键快捷菜单。步骤2:在VBE窗口

15、中,单击菜单“插入”“用户窗体”,在窗体上添加两个文本框控件。双击窗体,在其代码窗口中输入下面的代码。#001 Private Sub UserForm_Initialize()#002 Call CreateShortCutMenu#003 End Sub#004 Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)#005 If Button = 2 Then ShowPopupMenu ActiveControl

16、#006 End Sub#007 Private Sub TextBox2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)#008 If Button = 2 Then ShowPopupMenu ActiveControl#009 End Sub#010 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)#011 Call DeleteShortCutMenu

17、#012 End Sub代码解析:第1行到第3行代码,窗体的Initialize事件,在窗体初始化时运行CreateShortCutMenu过程创建右键快捷菜单。第4行到第9行代码,文本框的MouseUp事件,当用户右健单击文本框时运行ShowPopupMenu过程在选中的菜单项上显示右键快捷菜单。第10行到第12行代码,窗体的QueryClose事件,在关闭窗体时运行DeleteShortCutMenu过程删除右键快捷菜单。窗体运行后,右键单击文本框显示右键快捷菜单,如图 991所示。图 991 文本框快捷菜单技巧3 文本框回车自动输入在使用文本框向工作表输入数据时,为了加快输入速度,可以利

18、用文本框的KeyDown事件,回车后自动输入并清空文本框,如下面的代码所示。#001 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)#002 With TextBox1#003 If Len(Trim(.Value) 0 Then#004 If KeyCode = vbKeyReturn Then#005 Sheet1.Range(A65536).End(xlUp).Offset(1, 0) = .Value#006 .Text = #007 End If#

19、008 End If#009 End With#010 End Sub代码解析:文本框的KeyDown事件,在输入数据并按键后自动将数据录入到工作表A列最后一个非空单元格的下一个单元格中。KeyDown事件在按下键盘按键时发生,语法如下:Private Sub object_KeyDown( ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As fmShiftState)参数object是必需的,一个有效的对象。参数KeyCode是必需的,代表被按下的键的键代码。参数Shift是可选的,Shift、Ctrl 和Alt的状态。第3行代码,为

20、了防止误输入空白数据,使用Len 函数和Trim 函数检查文本框内是否为有效数据。第4行代码,根据KeyCode参数值判断是否按下了回车键。如果用户按下了回车键,KeyCode参数返回常数vbKeyReturn。第5、6行代码,将文本框数据输入到工作表A列的最后一个单元格内,同时清空文本框内容准备下一次输入。技巧4 自动选择文本框内容如果希望光标进入文本框时能自动选择文本框内容,可以在文本框的MouseUp事件中来完成,如下面的代码所示。#001 Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integ

21、er, ByVal X As Single, ByVal Y As Single)#002 With TextBox1#003 If Button = 2 Then#004 .SelStart = 0#005 .SelLength = Len(.Text)#006 End If#007 End With#008 End Sub代码解析:文本框的MouseUp事件,在光标进入文本框释放鼠标右键时自动选择文本框内容。MouseUp事件在用户释放鼠标按键时发生,语法如下:Private Sub object_MouseUp( ByVal Button As fmButton, ByVal Shift

22、 As fmShiftState, ByVal X As Single, ByVal Y As Single)参数object是必需的,一个有效的对象。参数Button是可选的,设置引起该事件的鼠标按键的整数值,如表格 1011所示。常数值说明fmButtonLeft1按下左键。fmButtonRight2按下右键。fmButtonMiddle3按下中键。表格 1011 Button参数值参数Shift是可选的,Shift、Ctrl 和Alt的状态。参数X和参数Y是可选的,窗体、框架或页的位置的横坐标与纵坐标。第3行到第6行代码,如果用户进入文本框释放鼠标右键,设置文本框的SelStart 属

23、性为0,SelLength属性为文本框的全部字符数。SelStart 属性指定选中文本的起点,语法如下:object.SelStart = Long参数object是必需的,一个有效的对象。参数Long是可选的,指定选中文本的起点。SelLength 属性指定文本框或组合框的文本部分中选中的字符数,语法如下:object.SelLength = Long参数object是必需的,一个有效的对象。参数Long是可选的,指定选中的字符数。运行窗体,当光标进入文本框释放鼠标右键时自动选择文本框内容,如图 1011所示。图 1011 自动选择文本框内容技巧5 设置文本框数据格式文本框在用来输入数据时,

24、除了限制输入的数据类型外,还可以设置文本框的数据格式,如下面的代码所示。#001 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)#002 TextBox1 = Format(TextBox1, 0.00)#003 End Sub#004 Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)#005 TextBox2 = Format(TextBox2, 0.00)#006 End Sub代码解析:文本框的Exit事件过程,在文本框输入数据

25、时使用Format函数格式化为两位小数格式。控件的Exit事件在同一窗体中的一个控件即将把焦点转移到另一个控件之前发生,语法如下:Private Sub object_Exit( ByVal Cancel As MSForms.ReturnBoolean)参数Object是必需的,一个有效的对象。参数Cancel是必需的,事件状态。如果设置为False表示由该控件处理这个事件(默认方式)。设置为True表示由应用程序处理这个事件,并且焦点留在当前控件上。当文本框在输入完数据失去焦点时使用Format函数格式化自定义数值格式。Format函数语法如下:Format(expression, for

26、mat, firstdayofweek, firstweekofyear)参数expression是必需的,任何有效的表达式。参数format是可选的,有效的命名表达式或用户自定义格式表达式。参数firstdayofweek是可选的,常数,表示一星期的第一天。参数firstweekofyear是可选的,常数,表示一年的第一周。在本例中,将文本框的数据格式化成自定义的两位小数的数值格式,关于Format函数格式化日期和时间等其他数据请参阅VBA中Format函数的帮助。#001 Private Sub TextBox1_Change()#002 TextBox3 = Format(Val(Tex

27、tBox1) * Val(TextBox2), 0.00)#003 End Sub#004 Private Sub TextBox2_Change()#005 TextBox3 = Format(Val(TextBox1) * Val(TextBox2), 0.00)#006 End Sub代码解析:文本框的Change事件过程,在两个文本框输入完数据后,使用文本框的Change事件使TextBox3显示其相乘的金额并格式化为两位小数的数据格式。Change事件在控件的 Value 属性改变时发生,语法如下:Private Sub object_Change( )参数object是必需的,一个

28、有效的对象。Change事件过程可以使显示在控件上的数据同步或一致。在本例中,当TextBox1或TextBox2的数据发生改变时,两者相乘的金额的金额也随之改变并在TextBox3中显示。因为文本框的数据类型是文本字符串,不能直接进行计算的,所以计算前先使用Val函数转换为数字,才能进行计算。运行窗体,输入数据后格式化为两位小数的数据格式,如图 1021所示。图 1021 设置文本框的数据格式技巧6 限制文本框的输入长度在使用文本框输入数据时,可能希望限制能输入的字符长度,即只能输入一定长度的字符,超过设置数值就不能输入,这时可以通过设置文本框的MaxLength属性来实现,如下面的代码所示

29、。#001 Private Sub Worksheet_Activate()#002 Me.TextBox1.MaxLength = 6#003 End Sub代码解析:工作表的激活事件过程,将文本框的MaxLength属性设置为6,使文本框只能输入6个字符,超过6个字符即不能输入。应用于文本框控件的MaxLength属性规定用户可以在文本框中输入的最多字符数,语法如下:object.MaxLength = Long参数object是必需的,一个有效的对象。参数Long是可选的,整数,表示所允许的字符数。如果将MaxLength属性设置为0,表示只要内存允许则没有限制。技巧7 将光标返回文本框

30、中在用文本框往工作表录入数据时,一般会在录入到工作表前验证输入的数据是否正确,如果错误,则清空文本框内容,提示用户重新输入。但此时光标已经不在文本框中,需要重新选择文本框才能输入。可以在Exit事件中可以设置Cancel参数值使光标停留在当前文本框中,如下面的代码所示。#001 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)#002 With TextBox1#003 If .Text And Len(Trim(.Text) 15 And Len(Trim(.Text) 18 Then#004 .Text = #

31、005 MsgBox 身份证号码录入错误!#006 Cancel = True#007 End If#008 End With#009 End Sub代码解析:文本框的Exit事件,在输入身份证号码后即将把焦点转移到录入按钮控件之前检查输入的身份证号码是否正确。Exit事件在一个控件从同一窗体的另一个控件实际接收到焦点之前发生,语法如下:Private Sub object_Exit( ByVal Cancel As MSForms.ReturnBoolean)Cancel参数为事件状态。False表示由该控件处理这个事件(这是默认方式)。True表示由应用程序处理这个事件,并且焦点应当留在当前控件

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1