分享

VBA常用代码解析(第二十四讲)

 wdmexcel 2015-09-04

095 禁用工具栏的自定义

Excel中,用户可以通过依次单击菜单“视图”→“工具栏”→“自定义”,显示“自定义”选项卡来调整菜单栏和工具栏。

如果不希望用户使用“自定义”选项卡来调整菜单栏和工具栏,可以禁用工具栏的自定义功能,如下面的代码所示。

Sub nCustomize()

Application.CommandBars.DisableCustomize= True

End Sub

代码解析:

nCustomize 过程禁用工具栏的自定义功能,应用于CommandBars 集合对象的DisableCustomize属性设置是否禁用工具栏的自定义。如果禁用,返回True,否则返回False

用于启用工具栏的自定义的代码是:

Sub yCustomize()

Application.CommandBars.DisableCustomize= False

End Sub运行nCustomize过程,禁用工具栏的自定义对话框,自定义菜单项消失,。

096 屏蔽所有的命令栏

在使用自定义的操作界面时,需要屏蔽Excel中所有的命令栏,可以使用下面的代码。

Sub Shielding_1()

Dimi As Integer

Fori = 1 To Application.CommandBars.Count

Application.CommandBars(i).Enabled = False

Next

End Sub

代码解析:

Shielding_1过程使用For...Next语句遍历Excel命令栏,并将其Enabled属性设置为False,使之无效。

还可以使用For Each...Next 语句遍历所有的CommandBars对象,代码如下:

Sub Shielding_2()

DimCmd As CommandBar

ForEach Cmd In Application.CommandBars

Cmd.Enabled = False

Next

End Sub

运行Shielding_1Shielding_2过程工作簿。

在需要恢复时只需将Enabled属性设置为True即可,如下面的代码所示。

Sub Recovery_1()

Dimi As Integer

Fori = 1 To Application.CommandBars.Count

Application.CommandBars(i).Enabled = True

Next

End Sub

Sub Recover_2()

DimCmd As CommandBar

ForEach Cmd In Application.CommandBars

Cmd.Enabled = True

Next

End Sub

代码解析:

Recovery_1Recover_2过程分别使用For...Next语句和For Each...Next 语句遍历所有的CommandBars对象,设置其Enabled属性为True,显示所有的命令栏。

097 恢复Excel的命令栏

如果用户经常添加、删除Excel的菜单和工具栏而又没有及时恢复的话,有时会破坏Excel默认的用户界面,即使用Reset方法也不能恢复成初始状态。

此时可以在电脑的本地硬盘中查找扩展名为*.xlb的文件,该文件在电脑中的位置会因Excel版本的不同而不同,在XP操作系统中,该文件位于系统盘的Documents and Settings\Administrator\Application Data\Microsoft\Excel文件夹,其中Administrator是电脑的用户名。找到它最简单的方法是使用Windows的搜索功能。按<Win+F>组合键调出Windows的搜索窗口,然后用*.xlb为目标在本地硬盘中进行搜索。

如果搜索没有结果,请检查“更多高级选项”中是否选中“搜索隐藏的文件和文件夹”选项。

Excel用户界面的任何修改都会保存在*.xlb文件中,找到后删除该文件,然后重新启动ExcelExcel会重新创建一个*.xlb文件,而菜单和工具栏也会全部恢复成初始状态。

098 限制文本框的输入

用户在使用文本框输入数据时,往往希望能限制输入数据的类型,比如只能输入数字。但是没有内置的属性能限制在文本框中只能输入数字,只能在文本框的事件过程中使用代码来测试输入的是哪类字符,然后只允许输入数字字符和一个“-”号、一个“.”号,如下面的代码所示。

Private Sub TextBox1_KeyPress(ByVal KeyANSI AsMSForms.ReturnInteger)

SelectCase KeyANSI

Case Asc('0') To Asc('9')

Case Asc('-')

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

Me.TextBox1.SelStart > 0 Then

KeyANSI = 0

End If

Case Asc('.')

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

KeyANSI = 0

End If

Case Else

KeyANSI = 0

EndSelect

End Sub

代码解析:

文本框的KeyPress事件过程,测试键盘输入的是哪类字符,只允许输入数字字符和一个“-”号、一个“.”号。

KeyPress事件的语法如下:

Private Sub object_KeyPress(ByVal KeyANSI As MSForms.ReturnInteger)

参数Object是必需的,一个有效的对象。

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

2行代码使用Case Else语句测试文本框KeyPress事件的KeyANSI参数值。

3行代码,如果键盘输入的是09之间的数字字符,则允许输入。如果想在文本框中允许其它类型的字符输入,在此句代码中列出允许输入的字符即可。

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

9行到第12行代码,如果键盘输入的是“.”号的话,使用InStr函数测试文本框中是否已有“.”号,如果已有“.”号,将KeyAscii参数值设置为0,使文本框只能输入一个“.”号。

1314行代码,如果键盘输入的是其他字符则将KeyAscii参数值设置为0,使文本框不能输入其他字符。

经过以上设置文本框只允许输入数字字符和一个“-”号、一个“.”号,但是能输入中文字符。如果希望限制中文字符的输入,可以在文本框的Change事件中进行设置,如下面的代码所示。

Private Sub TextBox1_Change()

Dimi As Integer

Dims As String

WithTextBox1

For i = 1 To Len(.Text)

s = Mid(.Texti1)

Select Case s

Case '.''-''0'To '9'

Case Else

.Text = Replace(.Texts““)

End Select

Next

EndWith

End Sub

代码解析:

文本框的Change事件,判断输入的字符是否为数字字符和“-”号、“.”号,如果不是则使用Replace函数将文本框中输入的其他字符替换成空白。

56行代码在文本框输入的所有字符中循环。

8行代码列出允许输入的字符。如果想在文本框中允许其它字符输入,在此句代码中列出即可。

910行代码,如果不是允许输入的字符,使用Replace函数替换成空白。

经过以上的设置,文本框中只能在第一位输入一个“-”号、一个“.”号和“0”到“9”的数字。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多