VBA技巧详细教程(3)

上传人:gui****hi 文档编号:60383318 上传时间:2022-03-07 格式:DOC 页数:99 大小:2.36MB
返回 下载 相关 举报
VBA技巧详细教程(3)_第1页
第1页 / 共99页
VBA技巧详细教程(3)_第2页
第2页 / 共99页
VBA技巧详细教程(3)_第3页
第3页 / 共99页
点击查看更多>>
资源描述
第7章菜单和工具栏1技巧79在菜单中添加菜单项3技巧80在菜单栏指定位置添加菜单6技巧81屏蔽和删除工作表菜单8技巧82改变系统菜单的操作9技巧83定制自己的系统菜单10技巧84改变菜单按钮图标16技巧85右键快捷菜单增加菜单项17技巧86自定义右键快捷菜单18技巧87使用右键菜单制作数据有效性21技巧88禁用工作表右键菜单23技巧89创建自定义工具栏24技巧90自定义工具栏按钮图标27技巧91自定义工作簿图标28技巧92移除工作表的最小最大化和关闭按钮29技巧93在工具栏上添加下拉列表框30技巧94屏蔽工作表的复制功能32技巧95禁用工具栏的自定义33技巧96屏蔽所有的命令栏36技巧97恢复Excel的命令栏37第8章控件与用户窗体39技巧98限制文本框的输入39技巧99文本框添加右键快捷菜单41技巧100文本框回车自动输入45技巧101自动选择文本框内容46技巧102设置文本框数据格式47技巧103限制文本框的输入长度49技巧104将光标返回文本框中50技巧105文本框的自动换行52技巧106多个文本框数据相加54技巧107控件跟随活动单元格55技巧108高亮显示按钮56技巧109组合框和列表框添加列表项的方法58109-1使用RowSource属性添加列表项58109-2使用List属性添加列表项59109-3使用AddItem方法添加列表项60技巧110去除列表框数据源的重复值和空格62技巧111移动列表框条目64技巧112允许多项选择的列表框67技巧113多列组合框和列表框的设置70113-1多列组合框和列表框添加列表项70113-2多列列表框写入工作表72技巧114输入时逐步提示信息74技巧115二级组合框81技巧116使用DTP控件输入日期83技巧117使用RefEdit控件选择区域86技巧118如何注册控件87技巧119遍历控件的方法90119-1使用名称中的变量遍历控件90119-2使用对象类型遍历控件92119-3使用程序标识符遍历控件93119-4使用名称中的变量遍历图形94119-5使用FormControlType属性遍历图形95技巧120使微调框最小变动量小于196第7章 菜单和工具栏技巧79 在菜单中添加菜单项在Excel工作表的菜单中可以添加新的菜单项和子菜单,如下面的代码所示。#001 Sub myTools()#002 Dim myTools As CommandBarPopup#003 Dim myCap As Variant#004 Dim myid As Variant#005 Dim i As Byte#006 myCap = Array(基础应用, VBA程序开发, 函数与公式, 图表与图形, 数据透视表)#007 myid = Array(281, 283, 285, 287, 292)#008 With Application.CommandBars(Worksheet menu bar)#009 .Reset#010 Set myTools = .Controls(帮助(&H).Controls.Add(Type:=msoControlPopup, Before:=1)#011 With myTools#012 .Caption = Excel Home 技术论坛#013 .BeginGroup = True#014 For i = 1 To 5#015 With .Controls.Add(Type:=msoControlButton)#016 .Caption = myCap(i - 1)#017 .FaceId = myid(i - 1)#018 .OnAction = myC#019 End With#020 Next#021 End With#022 End With#023 Set myTools = Nothing#024 End Sub代码解析:myTools过程使用Add方法在Excel工作表菜单栏中的“帮助”菜单中添加一个标题为“Excel Home 技术论坛”的菜单项和5个子菜单。第2行到第5行代码声明变量类型。第6、7行代码使用Array函数创建两个数组用于保存子菜单的名称和图标ID。第9行代码,在添加菜单项前先使用Reset方法重置菜单栏以免重复添加菜单项。Reset方法重置一个内置控件,恢复该控件原来对应的动作,并将各属性恢复成初始状态,语法如下:expression.Reset参数expression是必需的,返回一个命令栏或命令栏控件对象。第10行代码,使用Add方法在Excel工作表菜单栏中的“帮助”菜单中添加菜单项。Add方法应用于CommandBarControls对象时,新建一个CommandBarControl对象并添加到指定命令栏上的控件集合,语法如下:expression.Add(Type, Id, Parameter, Before, Temporary)参数expression是必需的,返回一个CommandBarControls对象,代表命令栏中的所有控件。参数Type是可选的,添加到指定命令栏的控件类型,可以为表格 791所列的MsoControlType常数之一。常数值控件类型msoControlButton1命令按钮msoControlEdit2文本框msoControlDropdown3下拉列表控制框msoControlComboBox4下拉组合控制框msoControlPopup10弹出式控件表格 791MsoControlType常数因为在本例中将添加的是带有子菜单的菜单项,所以将参数Type设置为弹出式控件。参数Id是可选的,标识整数。如果将该参数设置为 1或者忽略,将在命令栏中添加一个空的指定类型的自定义控件。参数Parameter是可选的,对于内置控件,该参数用于容器应用程序运行命令。对于自定义控件,可以使用该参数向Visual Basic过程传递信息,或用其存储控件信息。参数Before是可选的,表示新控件在命令栏上位置的数字。新控件将插入到该位置控件之前。如果忽略该参数,控件将添加到指定命令栏的末端。本例中将Before参数设置为1,菜单项添加到“帮助”菜单的顶端。参数Temporary是可选的。设置为True将使添加的菜单项为临时的,在关闭应用程序时删除。默认值为False。第12行代码,设定新添加菜单项的Caption属性为“Excel Home 技术论坛”。Caption属性返回或设置命令栏控件的标题。第13行代码,设置新添加菜单项的BeginGroup属性为True,分组显示。第14行到第19行代码,在“Excel Home 技术论坛”菜单项上添加五个子菜单并设置其Caption属性、FaceId属性和OnAction属性。FaceId属性设置出现在菜单标题左侧的图标,以数字表示,一个数字代表一个内置的图标。OnAction属性设置一个VBA的过程名,该过程在用户单击子菜单时运行,本例中设置为下面的过程。#001 Public Sub myC()#002 MsgBox 您选择了: & Application.CommandBars.ActionControl.Caption#003 End Sub代码解析:myC过程是单击新添加子菜单所运行过程,为了演示方便在这里只使用MsgBox函数显示所其Caption属性。删除新添加的菜单项及子菜单的代码如下所示。#001 Sub DelmyTools()#002 Application.CommandBars(Worksheet menu bar).Reset#003 End Sub代码解析:DelmyTools过程使用Reset方法重置菜单栏,删除添加的菜单项及子菜单。为了在打开工作簿时自动添加菜单项,需要在工作簿的Activate事件中调用myTools过程,如下面的代码所示。#001 Private Sub Workbook_Activate()#002 Call myTools#003 End Sub为了在关闭工作簿时删除新添加的菜单项,还需要在工作簿的Deactivate事件中调用DelmyTools过程,如下面的代码所示。#001 Private Sub Workbook_Deactivate()#002 Call DelmyTools#003 End Sub如果希望这个菜单为所有工作簿使用,那么就应该在工作簿的Open事件中调用myTools过程,在BeforeClose事件中调用DelmyTools过程。运行myTools过程,将在Excel工作表菜单栏中的“帮助”菜单中添加一个名为“Excel Home 技术论坛”的菜单项及五个子菜单,如图 791所示。图 791在“帮助”菜单中添加菜单项及子菜单技巧80 在菜单栏指定位置添加菜单除了可以在工作表菜单中添加菜单项外,还可以在工作表菜单栏的指定位置添加菜单,如下面的代码所示。#001 Sub AddNewMenu()#002 Dim HelpMenu As CommandBarControl#003 Dim NewMenu As CommandBarPopup#004 With Application.CommandBars(Worksheet menu bar)#005 .Reset#006 Set HelpMenu = .FindControl(ID:=.Controls(帮助(&H).ID)#007 If HelpMenu Is Nothing Then#008 Set NewMenu = .Controls.Add(Type:=msoControlPopup)#009 Else#010 Set NewMenu = .Controls.Add(Type:=msoControlPopup, _#011 Before:=HelpMenu.Index)#012 End If#013 With NewMenu#014 .Caption = 统计(&S)#015 With .Controls.Add(Type:=msoControlButton)#016 .Caption = 输入数据(&D)#017 .FaceId = 162#018 .OnAction = #019 End With#020 With .Controls.Add(Type:=msoControlButton)#021 .Caption = 汇总数据(&T)#022 .FaceId = 590#023 .OnAction = #024 End With#025 End With#026 End With#027 Set HelpMenu = Nothing#028 Set NewMenu = Nothing#029 End Sub代码解析:AddNewMenu过程使用Add方法在工作表“帮助”菜单前添加一个标题为“统计”的菜单和两个菜单项。第6行代码,使用FindControl方法在工作表菜单栏中查找“帮助”菜单。应用于CommandBars对象的FindControl方法返回一个符合指定条件的CommandBarControl对象。语法如下:expression.FindControl(Type, Id, Tag, Visible, Recursive)参数expression是必需的,返回一个CommandBars对象。参数Type是可选的,要查找控件的类型。参数Id是可选的,要查找控件的标识符。参数Tag是可选的,要查找控件的标记值。参数Visible是可选,如果该值为True,那么只查找屏幕上显示的命令栏控件。默认值为False。参数Recursive是可选的,如果该值为True,那么将在命令栏及其全部弹出式子工具栏中查找。此参数仅应用于CommandBar对象。默认值为False。如果没有控件符合搜索条件,那么FindControl方法返回Nothing。第7行到第12行代码,如果工作表菜单栏中存在“帮助”菜单,将“统计”菜单添加到“帮助”菜单之前,否则添加到工作表菜单栏末尾。第12行到第25行代码,在“统计”菜单中添加两个子菜单并设置其各种属性。运行AddNewMenu过程,将在工作表菜单栏的“帮助”菜单之前添加一个“统计”菜单,如图 801所示。图 801在工作表菜单栏中添加菜单技巧81 屏蔽和删除工作表菜单如果不希望用户使用工作表菜单栏的部分功能,可以把菜单或菜单项屏蔽或删除,如下面的代码所示。#001 Sub Shibar()#002 With Application.CommandBars(Worksheet menu bar)#003 .Reset#004 .Controls(工具(&T).Controls(宏(&M).Enabled = False#005 .Controls(数据(&D).Delete#006 End With#007 End Sub代码解析:Shibar过程屏蔽 “工具”菜单中的“宏”菜单项,删除菜单栏中的“数据”菜单。第3行代码,使用Reset方法重置工作表菜单栏。第4行代码,将“宏”菜单项的Enabled属性设置为False,使之无效。Enabled属性决定命令栏或命令栏控件是否激活,如果将该属性设置为 False,那么该菜单项将无效。第5行代码,使用Delete方法将“数据”菜单从工作表菜单栏中删除。Delete方法应用于命令栏或命令栏控件时,从集合中删除指定对象,语法如下:expression.Delete(Temporary)参数expression是必需的,返回命令栏或命令栏控件对象之一。参数Temporary是可选的,设置为True将从当前会话中删除控件,应用程序在下次会话时将再次显示控件。运行Shibar过程,将屏蔽工作表“工具”菜单中的“宏”菜单项和删除工作表菜单栏中的“数据”菜单,如图 811所示。图 811屏蔽和删除工作表菜单技巧82 改变系统菜单的操作利用VBA甚至可以改变系统菜单的默认操作,使之达到自定义菜单的效果,如下面的代码所示。#001 Dim WithEvents Saveas As CommandBarButton#002 Private Sub Workbook_Open()#003 Set Saveas = Application.CommandBars(File).Controls(另存为(&A).)#004 End Sub#005 Private Sub Saveas_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)#006 CancelDefault = True#007 MsgBox 本工作簿禁止另存!#008 End Sub代码解析:第1行代码,在模块级别中使用关键词WithEvents声明变量Saveas是用来响应由CommandBarButton对象触发事件的对象变量。第2行到第4代码工作簿的Open事件过程,在工作簿打开时将变量Saveas赋值为系统菜单的“另存为”菜单。因为在声明变量Saveas时使用了关键词WithEvents,不能同时使用New关键词隐式地创建对象,所以在使用变量Saveas之前,必须使用Set语句将变量赋值为一个已有对象。第5行到第8代码变量Saveas的单击事件过程,改变系统菜单“另存为”的默认操作。变量Saveas的Click事件在用户单击系统菜单“另存为”时发生,语法如下:Private Sub CommandBarButton_Click(ByVal Ctrl As CommandBarButton, ByVal CancelDefault As Boolean)参数Ctrl是必需的,指示初始化该事件的CommandBarButton控件。参数CancelDefault是必需的,Boolean类型,如果执行了与CommandBarButton控件关联的默认操作,该值为False。除非其他过程或加载项取消了此操作。第6、7行代码,将CancelDefault参数设置为True,使单击“另存为”菜单时并不执行默认操作而只显示一个消息框。将工作簿保存、关闭后,重新打开,单击“另存为”菜单并不执行默认操作,只显示一个消息框,如图 821所示。图 821改变系统菜单的默认操作技巧83 定制自己的系统菜单使用VBA开发的小型应用系统完成后,Excel原有的菜单栏完全可以舍弃不用,只使用自定义的菜单栏,更加方便快捷,如下面的代码所示。#001 Sub AddNowBar()#002 Dim NewBar As CommandBar#003 On Error Resume Next#004 With Application#005 .CommandBars(Standard).Visible = False #006 .CommandBars(Formatting).Visible = False #007 .CommandBars(Stop Recording).Visible = False#008 .CommandBars(toolbar list).Enabled = False#009 .CommandBars.DisableAskAQuestionDropdown = True#010 .DisplayFormulaBar = False #011 .CommandBars(NewBar).Delete#012 End With#013 Set NewBar = Application.CommandBars.Add(Name:=NewBar, Position:=msoBarTop, MenuBar:=True, Temporary:=True)#014 With NewBar#015 .Visible = True#016 With .Controls.Add(Type:=msoControlPopup)#017 .Caption = 系统设置(&X)#018 .BeginGroup = True#019 With .Controls.Add(Type:=msoControlButton)#020 .Caption = 保存(&S)#021 .BeginGroup = True#022 .FaceId = 1975#023 End With#024 With .Controls.Add(Type:=msoControlButton)#025 .Caption = 备份(&B)#026 .BeginGroup = True#027 .FaceId = 747#028 End With#029 End With#030 With .Controls.Add(Type:=msoControlPopup)#031 .Caption = 会计凭证(&P)#032 .BeginGroup = True#033 With .Controls.Add(Type:=msoControlButton)#034 .Caption = 录入(&L)#035 .BeginGroup = True#036 .FaceId = 197#037 End With#038 With .Controls.Add(Type:=msoControlButton)#039 .Caption = 审核(&S)#040 .BeginGroup = True#041 .FaceId = 714#042 End With#043 End With#044 With .Controls.Add(Type:=msoControlPopup)#045 .Caption = 会计账簿(&Z)#046 .BeginGroup = True#047 With .Controls.Add(Type:=msoControlButton)#048 .Caption = 记账(&L)#049 .BeginGroup = True#050 .FaceId = 65#051 End With#052 With .Controls.Add(Type:=msoControlButton)#053 .Caption = 结账(&S)#054 .BeginGroup = True#055 .FaceId = 47#056 End With#057 End With#058 With .Controls.Add(Type:=msoControlPopup)#059 .Caption = 会计报表(&B)#060 .BeginGroup = True#061 With .Controls.Add(Type:=msoControlPopup)#062 .Caption = 资产负债表(&Y)#063 .BeginGroup = True#064 With .Controls.Add(Type:=msoControlButton)#065 .Caption = 月报(&M)#066 .BeginGroup = True#067 .FaceId = 1180#068 End With#069 With .Controls.Add(Type:=msoControlButton)#070 .Caption = 年报(&Y)#071 .BeginGroup = True#072 .FaceId = 1188#073 End With#074 End With#075 With .Controls.Add(Type:=msoControlPopup)#076 .Caption = 损益表(&S)#077 .BeginGroup = True#078 With .Controls.Add(Type:=msoControlButton)#079 .Caption = 月报(&M)#080 .BeginGroup = True#081 .FaceId = 1180#082 End With#083 With .Controls.Add(Type:=msoControlButton)#084 .Caption = 年报(&Y)#085 .BeginGroup = True#086 .FaceId = 1188#087 End With#088 End With#089 End With#090 With .Controls.Add(Type:=msoControlButton)#091 .Caption = 退出系统(&C)#092 .BeginGroup = True#093 .Style = msoButtonCaption#094 End With#095 End With#096 Set NewBar = Nothing#097 End Sub代码解析:AddNowBar过程使用Add方法创建自定义菜单栏替换工作表菜单栏。第2行代码定义变量NwBar为命令栏。第3行代码忽略错误语句,以免第11行代码在删除可能不存在的“NewBar”菜单栏时发生错误。第5行代码隐藏“常用”工具栏。第6行代码隐藏“格式”工具栏。第7行代码隐藏“停止录制”工具栏。第8行代码屏蔽工具栏的右键快捷菜单。第9行代码屏蔽工具栏的“键入需要帮助的问题”下拉框。第10行代码屏蔽工具栏的编辑栏。第11行代码,在添加命令栏前先删除“NewBar”菜单栏,以免重复增加。第13行代码,使用Add方法创建命令栏。Add方法应用于CommandBars对象的语法如下:expression.Add(Name, Position, MenuBar, Temporary)参数expression是必需的,返回一个CommandBars对象,该对象代表应用程序中的命令栏,新建命令栏的控件均以该对象为载体。参数Name是可选的,设置新建命令栏的标题。如果忽略该参数,则为新建命令栏指定默认标题,本例中设置新建命令栏的标题为“NewBar”。参数Position是可选的,设置新建命令栏的位置或类型,可以为表格 831所列的 MsoBarPosition常数之一。常数说明msoBarLeft、msoBarTop、msoBarRight 和 msoBarBottom指定新命令栏的左侧、顶部、右侧和底部坐标msoBarFloating指定新命令栏不固定msoBarPopup指定新命令栏为快捷菜单msoBarMenuBar仅适用于 Macintosh 机表格 831MsoBarPosition 常数本例中设置“NewBar”命令栏的Position参数为msoBarTop,使“NewBar”命令栏位于Excel窗口的顶部。参数MenuBar是可选的,设置为True 将以新命令栏替换活动菜单栏,默认值为False。在本例中,设置“NewBar”命令栏的MenuBar属性为True,以“NewBar”命令栏替换活动菜单栏。参数Temporary是可选的,设置为True将使新建命令栏为临时命令栏,在关闭应用程序时删除,默认值为False。在本例中,设置“NewBar”命令栏的Temporary属性为True,使“NewBar”命令栏为临时命令栏,在关闭应用程序时删除。第15行代码,设置“NewBar”命令栏为可见的。第16行到95行代码,使用Add方法在“NewBar”命令栏中添加菜单、菜单项及子菜单并设置其各项属性,参阅技巧79 。恢复Excel原有的菜单栏的代码如下:#001 Sub DelNowBar()#002 On Error Resume Next#003 With Application#004 .CommandBars(Standard).Visible = True#005 .CommandBars(Formatting).Visible = True#006 .CommandBars(Stop Recording).Visible = True#007 .CommandBars(toolbar list).Enabled = True#008 .CommandBars.DisableAskAQuestionDropdown = False#009 .DisplayFormulaBar = True#010 .CommandBars(NewBar).Delete#011 End With#012 End Sub代码解析:DelNowBar过程取消 “常用”、“格式”和“停止录制”工具栏的的隐藏,恢复“键入需要帮助的问题”下拉框和编辑栏,删除“NewBar”命令栏。运行AddNowBar过程,工作表菜单栏如图 831所示。图 831定制自己的系统菜单技巧84 改变菜单按钮图标利用VBA可以改变系统菜单的默认图标,使之达到自定义按钮图标的效果,如下面的代码所示。#001 Sub myCbarCnt()#002 Dim myCbarCnt As CommandBarControl#003 With Sheet1.Shapes.AddShape(17, 1000, 1000, 30, 30)#004 .Fill.ForeColor.SchemeColor = 29#005 .CopyPicture#006 .Delete#007 End With#008 Set myCbarCnt = Application.CommandBars(Standard).Controls(1)#009 myCbarCnt.PasteFace#010 Set myCbarCnt = Nothing#011 End Sub#012 Sub DelmyCbarCnt()#013 Application.CommandBars(Standard).Controls(1).Reset#014 End Sub代码解析:myCbarCnt过程改变系统菜单的“新建”按钮的图标。第3行代码使用Shape对象的AddShape方法在工作表中新建一个自选图形。应用于Shape对象的AddShape方法请参阅Error! Reference source not found.。在本例中将新建图形的Left参数和Top参数设置为较大的数值使新建的自选图形不在当前窗口的可视区域内。第4行代码设置新建自选图形的颜色。第5行代码使用CopyPicture方法将新建自选图形作为图片复制到剪贴板。CopyPicture方法的语法如下:expression.CopyPicture(Appearance, Format)参数expression是必需的,一个有效的对象。参数Appearance是可选的,指定图片的复制方式。参数Format是可选的,图片的格式。第6行代码使用Delete方法删除新建的自选图形。第8行代码使用Set语句将系统菜单的“新建”按钮赋给变量myCbarCnt。第9行代码PasteFace方法将新建的自选图形粘贴到“新建”按钮中。PasteFace方法将“剪贴板”的内容粘贴到指定命令栏按钮控件上,语法如下:expression.PasteFace参数expression是必需的,返回一个CommandBarButton对象。DelmyCbarCnt过程使用Reset方法恢复“新建”按钮的默认图标。运行myCbarCnt过程结果如图 841所示。图 841改变“新建”按钮的图标技巧85 右键快捷菜单增加菜单项在Excel的右键快捷菜单中可以添加新的菜单项,如下面的代码所示。#001 Sub MyCmb()#002 Dim MyCmb As CommandBarButton#003 With Application.CommandBars(Cell)#004 .Reset#005 Set MyCmb = .Controls.Add(Type:=msoControlButton, _#006 ID:=2521, Before:=.Controls.Count, Temporary:=True)#007 MyCmb.BeginGroup = True#008 End With#009 Set MyCmb = Nothing#010 End Sub代码解析:MyCmb过程使用Add方法在Excel的右键快捷菜单中添加内置的“打印”菜单项。在使用Add方法添加菜单项时将Id参数设置为2521,添加的就是内置的“打印”菜单项。将Before属性设置成右键快捷菜单中最后一个控件的值,使“打印”菜单项添加到右键快捷菜单中最后一个控件之前。将Temporary参数设置成True,在关闭应用程序时从右键快捷菜单中删除“打印”菜单项。运行MyCmb过程,将在Excel右键快捷菜单中添加 “打印”菜单项,如图 851所示图 851在右键快捷菜单中添加菜单项技巧86 自定义右键快捷菜单在工作表中创建自定义的右键快捷菜单替换Excel默认的右键快捷菜单,如下面的代码所示。#001 Sub Mycell()#002 With Application.CommandBars.Add(Mycell, msoBarPopup)#003 With .Controls.Add(Type:=msoControlButton)#004 .Caption = 会计凭证#005 .FaceId = 9893#006 End With#007 With .Controls.Add(Type:=msoControlButton)#008 .Caption = 会计账簿#009 .FaceId = 284#010 End With#011 With .Controls.Add(Type:=msoControlPopup)#012 .Caption = 会计报表#013 With .Controls.Add(Type:=msoControlButton)#014 .Caption = 月报#015 .FaceId = 9590#016 End With#017 With .Controls.Add(Type:=msoControlButton)#018 .Caption = 季报#019 .FaceId = 9591#020 End With#021 With .Controls.Add(Type:=msoControlButton)#022 .Caption = 年报#023 .FaceId = 9592#024 End With#025 End With#026 With .Controls.Add(Type:=msoControlButton)#027 .Caption = 凭证打印#028 .FaceId = 9614#029 .BeginGroup = True#030 End With#031 With .Controls.Add(Type:=msoControlButton)#032 .Caption = 账簿打印#033 .FaceId = 707#034 End With#035 With .Controls.Add(Type:=msoControlButton)#036 .Caption = 报表打印#037 .FaceId = 986#038 End With#039 End With#040 End Sub代码解析:Mycell过程在Excel工作表中创建自定义的右键快捷菜单。第2行代码,使用Add方法添加名称为“Mycell”命令栏,设置“Mycell”命令栏的Position属性为msoBarPopup,使“Mycell”命令栏为快捷菜单。关于Position参数的MsoBarPosition常数请参阅技巧83 中的表格 831。第3行到第39行代码,使用Add方法在“Mycell”命令栏中添加菜单和菜单项,并设置其各项属性。为了让自定义右键快捷菜单替换Excel默认的右键快捷菜单,并且只在右键单击Sheet1工作表时显示,需要在Sheet1工作表的BeforeRightClick事件中写入下面的代码。#001 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)#002 Application.CommandBars(Mycell).ShowPopup#003 Cancel = True#004 End Sub代码解析:工作表的BeforeRightClick事件过程,在右键单击工作表时,将“Mycell”命令栏作为右键快捷菜单,在当前光标位置显示。工作表BeforeRightClick事件语法如下:Private Sub expression_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)参数expression是必需的,Worksheet类型对象。参数Target是可选的,右键单击发生时最靠近鼠标指针的单元格。参数Cancel是可选的,当事件发生时为False。如果在事件过程中将Cancel参数设为True,则该过程执行结束之后不进行默认的右键单击操作。第2行代码,使用ShowPopup方法将“Mycell”命令栏作为右键快捷菜单,在当前光标位置显示。ShowPopup方法的语法如下:expression.ShowPopup(x, y)参数expression是必需的,返回一个CommandBar对象。参数x是可选的,快捷菜单所在位置的 x 坐标。如果省略此参数,将使用当前光标位置的x坐标。参数y是可选的,快捷菜单所在位置的y坐标。如果省略此参数,将使用当前光标位置的y坐标。当用鼠标右键单击工作表中任意单元格时激活BeforeRightClick事件,此事件先于默认的右键单击操作。在使用ShowPopup方法显示“Mycell”命令栏后,将Cancel参数设置为True,过程执行结束之后不进行默认的右键单击操作,Excel右键快捷菜单就不会显示。运行Mycell过程后,右键单击Sheet1工作表,在工作表中显示自定义右键快捷菜单,如图 861所示。图 861自定义右键快捷菜单技巧87 使用右键菜单制作数据有效性在工作表中输入数据时可以使用自定义右键菜单制作数据有效性,如下面的代码所示。#001 Sub Mycell()#002 Dim arr As Variant#003 Dim i As Integer#004 Dim Mycell As CommandBar#005 On Error Resume Next#006 Application.CommandBars(Mycell).Delete#007 arr = Array(经理室, 办公室, 生技科, 财务科, 营业部)#008 Set Mycell = Application.CommandBars.Add(Mycell, 5)#009 For i = 0 To 4#010 With Mycell.Controls.Add(1)#011 .Caption = arr(i)#012 .OnAction = MyOnAction#013 End With#014 Next#015 End Sub#016 Sub MyOnAction()#017 ActiveCell = Application.CommandBars.ActionControl.Caption#018 End Sub代码解析:Mycell过程创建自定义的右键菜单,请参阅技巧86 。MyOnAction过程是点击自定义右键菜单所运行的过程,将所选右键菜单的名称写入活动单元格。为了使自定义的右键菜单在Sheet1工作表的特定区域中显示,需要在VBE中双击Sheet1表后写入下面的代码。#001 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)#002 If Target.Column = 2 Then#003
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!