最后介绍的右键菜单其实也是属于一种菜单命令栏。我们可以在常用的右键菜单栏中添加自定义菜单,也可以创建新的自定义右键菜单代替默认的设置。
例如,下面的例子中工作表区域的右键菜单添加自定义菜单命令栏。
Sub AddRightClickMenu() ' 单元格区域右键菜单 With Application.CommandBars("cell") .Reset ' 添加控件 With .Controls.Add(Type:=msoControlButton) .Caption = "Test Right Click" ' 标题 .BeginGroup = True ' 分类,添加分隔线 .OnAction = "MenuProc" ' 指定处理过程 End With End With End Sub
执行上面的过程之前,在工作表区域中右键点击任意单元格,显示的弹出菜单如下图:
执行AddRightClickMenu过程后,将在弹出的右键菜单中添加“Test Right Clock”命令栏,显示如下:
使用下面的语句可以删除这个自定义右键菜单命令栏。
CommandBars("cell").Controls("Test Right Click").Delete
同样,也可以创建自己的CommandBar来代替默认的右键菜单。
Sub CreateRightClickMenu() Dim newTool As CommandBar Dim i As Integer ' 如果已经存在相同名称的CommandBar,删除它 On Error Resume Next CommandBars("RightClick Popup").Delete On Error GoTo 0 ' 创建名称为“RightClick Popup”的自定义菜单栏 Set newTool = CommandBars.Add(Name:="RightClick Popup", Position:=msoBarPopup) With newTool With .Controls.Add(ID:=19) .Caption = "复制" End With With .Controls.Add(ID:=22) .Caption = "粘帖" End With With .Controls.Add(ID:=1733) .Caption = "缩放" End With End With End Sub
运行CreateRightClickMenu过程,将创建名称为“RightClick Popup”的自定义菜单栏,并在其上添加三个内置命令栏。
自定义菜单栏添加完成后,还需要替换默认的设置。需要在工作表的BeforeRightClick事件或Workbook的SheetBeforeRightClick事件中添加下面的代码。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim cbRightClick As CommandBar ' 确保只有在自定义右键菜单存在时才显示 On Error Resume Next Set cbRightClick = Nothing ' 如果自定义右键菜单不存在,那么cbrRightClick设置为Nothing Set cbRightClick = Application.CommandBars("RightClick Popup") On Error GoTo 0 If Not cbRightClick Is Nothing Then ' 显示自定义右键菜单 cbRightClick.ShowPopup ' 取消默认右键菜单 Cancel = True End If End Sub
这样在放置这个代码的工作表或整个工作簿中的单元格区域中点击右键,将显示自定义的右键菜单,如下图:
另外,在示例文件中还包括了一个小工具,这个工具列出所有CommandBar的命令栏。其中包括这些命令栏的一些基本属性。这些基本属性的数值所代表的意思可以在代码的注释中了解。界面如下图,点击“获取CommandBar列表”按钮即可。
Related posts:
以上关联文章由 Yet Another Related Posts Plugin 提供支持。