存档在 ‘Excel菜单与工具栏’ 分类中.

Excel菜单和工具栏概要(2)

4 命令栏对象(CommandBar对象)
CommandBar对象代表Excel中的一个命令栏,有一些常用的属性。
(1)BuiltIn属性。只读,代表该命令栏是否为内置命令栏,True为内置命令栏,False则不是。
(2)Enabled属性,设置是否隐藏命令栏。
(3)Left属性,以像素为单位返回命令栏控件相对于屏幕左边缘的距离。
(4)Name属性,返回命令栏的名称。
(5)Position属性,指定命令栏位置,可以为下列常量之一:
msoBarLeft—位于窗口左侧;
msoBarTop—位于窗口顶部;
msoBarRight—位于窗口右侧;
msoBarBottom—位于窗口底部;
msoBarFloating—浮动在屏幕中;
msoBarPopup—快捷菜单。
(6)Protection属性,指定保护命令栏的类型,可以为下列常量之一:
msoBarNoProtection—不受保护,可自定义(缺省值);
msoBarNoCustomize—不能自定义;
msoBarNoResize—不能调整大小;
msoBarNoMove—不能移动;
msoBarNoChangeVisible—不能更改可见状态;
msoBarNoChangeDock—不能改变停靠的位置;
msoBarNoVerticalDock—不能沿窗口左侧或右侧停放;
msoBarNoHorizontalDock—不能沿窗口顶部或底部停放。
(7)Top属性,以像素为单位返回命令栏控件顶边相对于屏幕顶边的距离。
(8)Type属性,返回代表命令栏类型的常数。可以为下列值之一:
msoBarTypeNormal—工具栏;
msoBarTypeMenuBar—菜单栏;
msoBarTypePopUp—快捷菜单。
(9)Visible属性,返回命令栏是否可见。
5 命令栏中的控件
CommandBar对象包含CommandBarControl对象,其Controls属性可以访问CommandBarControl对象。有3种类型的控件,即按钮控件(一个CommandBarButton对象)、组合框控件(一个CommandBarComboBox对象)和菜单(一个CommandBarPopup对象)。
下面的过程列出命令栏中的所有控件:

Visual Basic:
  1. Sub ShowAllControls()
  2. Dim row As Integer
  3. Dim cBar As CommandBar
  4. Dim ctl As CommandBarControl
  5. Dim Menu As CommandBarControl
  6. Dim MenuItem As CommandBarControl
  7. Dim SubMenuItem As CommandBarControl
  8.  
  9. Cells.Clear
  10.  
  11. '设置标题
  12. Cells(1, 1) = "索引值"
  13. Cells(1, 2) = "命令栏名称"
  14. Cells(1, 3) = "子项名称"
  15. Range(Cells(1, 1), Cells(1, 3)).Font.Bold = True
  16. Cells(2, 1) = "工具栏"
  17. Cells(2, 1).Font.Italic = True
  18. row = 3
  19.  
  20. '列出工具栏控件
  21. For Each cBar In CommandBars
  22. If cBar.Type = msoBarTypeNormal Then
  23. Cells(row, 1) = cBar.Index
  24. Cells(row, 2) = cBar.Name
  25. For Each ctl In cBar.Controls
  26. Cells(row, 3) = ctl.Caption
  27. row = row + 1
  28. Next ctl
  29. End If
  30. Next cBar
  31.  
  32. '列出菜单
  33. Cells(row, 1) = "菜单栏"
  34. Cells(row, 1).Font.Italic = True
  35. row = row + 1
  36. For Each cBar In CommandBars
  37. If cBar.Type = msoBarTypeMenuBar Then
  38. Cells(row, 1) = cBar.Index
  39. Cells(row, 2) = cBar.Name
  40. For Each ctl In cBar.Controls
  41. Cells(row, 3) = ctl.Caption
  42. row = row + 1
  43. Next ctl
  44. End If
  45. Next cBar
  46.  
  47. '列出快捷菜单
  48. Cells(row, 1) = "快捷菜单"
  49. Cells(row, 1).Font.Italic = True
  50. row = row + 1
  51. For Each cBar In CommandBars
  52. If cBar.Type = msoBarTypePopup Then
  53. Cells(row, 1) = cBar.Index
  54. Cells(row, 2) = cBar.Name
  55. For Each ctl In cBar.Controls
  56. Cells(row, 3) = ctl.Caption
  57. row = row + 1
  58. Next ctl
  59. End If
  60. Next cBar
  61.  
  62. '设置标题
  63. row = row + 1
  64. Cells(row, 1) = "菜单名称"
  65. Cells(row, 2) = "菜单命令"
  66. Cells(row, 3) = "子菜单"
  67. Range(Cells(row, 1), Cells(row, 3)).Font.Bold = True
  68. row = row + 1
  69. '列出菜单信息
  70. On Error Resume Next
  71. For Each Menu In CommandBars(1).Controls
  72. For Each MenuItem In Menu.Controls
  73. For Each SubMenuItem In MenuItem.Controls
  74. Cells(row, 1) = Menu.Caption
  75. Cells(row, 2) = MenuItem.Index & MenuItem.Caption
  76. Cells(row, 3) = SubMenuItem.Index & SubMenuItem.Caption
  77. row = row + 1
  78. Next SubMenuItem
  79. Next MenuItem
  80. Next Menu
  81.  
  82. '工作表设置
  83. Cells.Columns.AutoFit
  84. Rows("1:1").RowHeight = 29.25
  85. ActiveWindow.FreezePanes = True
  86. End Sub

示例工作簿下载地址:
下载命令栏控件清单
6 命令栏控件的属性
下面列出命令栏控件的一些常用属性及说明:
(1)BeginGroup属性,设置为True时会在控件前显示一个分隔条;
(2)BuiltIn属性,若控件为内置控件,则该属性的值为True;
(3)Caption属性,为控件上显示的文本;
(4)Enabled属性,设置为True时可以单击该控件;
(5)FaceID属性,代表图形图像的数字;
(6)Id属性,代表内置控件的代码编号;
(7)OnAction属性,指定单击控件时执行的VBA过程名称;
(8)State属性,确定控件是否呈现按下状态,仅用于CommandBarButton控件;
(9)Style属性,确定控件显示时是否包含标题或图像,只能用于CommandBarButton控件和CommandBarComboBox控件;
(10)ToolTipText属性,控件的提示文本,当鼠标移动到控件上方时呈现;
(11)Type属性,表示控件类型。

下面的示例文档列出了Excel中所有菜单和工具栏的名称及相应的ID编号,可以在编程时参考。
示例文档下载地址:
Excel菜单和工具栏名称及ID

Excel菜单和工具栏概要(1)

1 概述
在开始本文之前,先介绍几个常用的概念。
1.1 菜单栏。Excel有两种内置的菜单栏——工作表菜单栏和图表菜单栏。
WorksheetMenu
图1:工作表菜单栏
ChartMenu
图2:图表菜单栏
通常显示“工作表菜单栏”,在选中图表后显示“图表菜单栏”。
1.2 工具栏,它们通常包含一个或多个按钮或其它控件。
ToolBar
图3:Excel中的标准工具栏
1.3 快捷菜单,即在工作表中某个对象上单击鼠标右键时,会弹出与该对象相关的一组菜单,以方便对该对象进行操作。
ShortMenu
图4:在某单元格上单击鼠标右键后弹出的快捷菜单
在本文中,我们把上述菜单栏、工具栏和快捷菜单统称为“命令栏”。
2 Excel帮助中关于命令栏的对象模型,如下图。
ObjectMedel1
图5-1:命令栏对象集合
ObjectMedel2
图5-2:命令栏
ObjectMedel3
图5-3:命令栏控件
ObjectMedel7
图5-4:命令栏控件对象集合
ObjectMedel4
图5-5:弹出式菜单控件
ObjectMedel5
图5-6:命令栏按钮控件
ObjectMedel6
图5-7:命令栏组合框控件
3 命令栏对象集合(CommandBars集合)
CommandBars集合包含Excel中的所有命令栏,即是所有CommandBar对象的集合,而每个CommandBar对象都有一个Controls集合。CommandBars集合的父对象是Application对象。
通过CommandBars集合的Type属性,可以确定命令栏的类型:
(1)Type属性值为0代表工具栏,其常量为msoBarTypeNormal。
(2)Type属性值为1代表菜单栏,其常量为msoBarTypeMenuBar。
(3)Type属性值为2代表快捷菜单,其常量为msoBarTypePopup。
下面的过程代码将列出Excel中所有的命令栏:

Visual Basic:
  1. Sub ShowCommandBarNames()
  2. Dim Row As Integer
  3. Dim cBar As CommandBar
  4.  
  5. Cells(1, 1) = "索引值"
  6. Cells(1, 2) = "名称"
  7. Cells(1, 3) = "类型"
  8. Cells(1, 4) = "是否内置"
  9. Range(Cells(1, 1), Cells(1, 4)).Font.Bold = True
  10. Row = 2
  11. For Each cBar In CommandBars
  12. Cells(Row, 1) = cBar.Index
  13. Cells(Row, 2) = cBar.Name
  14. Select Case cBar.Type
  15. Case msoBarTypeNormal
  16. Cells(Row, 3) = "工具栏"
  17. Case msoBarTypeMenuBar
  18. Cells(Row, 3) = "菜单栏"
  19. Case msoBarTypePopup
  20. Cells(Row, 3) = "快捷菜单"
  21. End Select
  22. Cells(Row, 4) = cBar.BuiltIn
  23. Row = Row + 1
  24. Next cBar
  25. Cells.Columns.AutoFit
  26. End Sub

示例工作簿下载地址:
下载Excel命令栏清单
<未完待续>