
对于Excel 2003及以前版本的用户来说,看到Excel 2007的第一印象可能是它新的外观。沿用多年的菜单和工具栏用户界面已被放弃,取而代之的是新的称之为Ribbon的界面,与老界面有根本上的不同。
使用过Excel多年的用户可能会注意到,每个Excel新版本的菜单系统都会增加且日益复杂。此外,工具栏的数量也激增。毕竟,每个新功能都必须是可访问的。过去,这种访问意味着给菜单中添加新项并创建新的工具栏。因此,Microsoft的设计者着手解决这样过于拥挤的问题,这个新的Ribbon界面就是解决方案。
用户是否接受新的Ribbon界面,时间会告诉我们答案。事情往往是这样,当新事物出现时,一些人喜欢,而另一些人则厌烦。
我想,一些有经验的Excel用户会感到一些困惑,因为他们熟悉的命令顺序已不再存在。而对于新用户来说,新的用户界面使得他们更容易学习和掌握Excel。
Ribbon选项卡
下面是Excel的选项卡概览:
- 开始:在开始选项卡中有用户经常使用的命令,包括基本的剪贴命令、格式命令、样式命令、插入和删除行列,等等。
- 插入:在工作表中插入某对象时,选择该选项卡。例如,插入表、图示、图表、符号,等等。
- 页面布局:包含影响工作表全部外观的命令,包括处理打印的设置。
- 公式:使用该选项卡来插入公式、命名区域、访问公式审核工具或者控制Excel如何执行计算。
- 数据:该选项卡中是与Excel数据相关的命令。
- 审阅:该选项卡包含拼写检查、翻译单词、添加批注和保护工作表的工具。
- 视图:包含控制如何查看工作表的命令。该选项卡中的一些命令也可在状态栏中找到。
- 开发工具:缺省情况下,该选项卡不可见。该选项卡包含对开发者有用的命令。要显示开发工具选项卡,选中“Excel选项”对话框“常用”下的“在功能区显示开发工具选项卡”复选框。
- 加载项:该选项卡仅在装载工作簿或定制菜单和工具栏的加载项时可见。因为菜单和工具栏在Excel2007中不再可用,因此这些定制将显现在加载项选项卡中。
Excel 2007中的CommandBar对象
在Excel 97中引入了一种处理工具栏和菜单的全新的方式,这些用户界面元素是CommandBar对象。通常称作工具栏的实际上是三种命令栏之一:
- 工具栏:带有一个或多个可单击的控件。
- 菜单栏:两个内置的菜单栏是“工作表菜单栏”和“图表菜单栏”。
- 快捷菜单:当用户在某对象上单击右键时弹出这种菜单。
考虑到兼容性,Excel 2007仍支持CommandBar对象,但其功能已显著减少。终端用户不再可能创建自定义工具栏。然而,VBA程序员仍然能够创建和处理CommandBar对象。问题是,Excel 2007忽略了一些ComandBar对象的属性和方法。例如,每个工具栏或定制菜单出现在功能区的加载项选项卡中,控制工具栏大小和位置的属性不再工作。此外,不再可能有浮动的工具栏。
(开发者在Excel 2003中定制的菜单和工具栏,在Excel 2007中将出现在加载项选项卡中)
在Excel 2007中仍然支持定制快捷菜单。
Ribbon的外观
随着Excel窗口的宽度不同,在Ribbon中的命令外观也会不同。当窗口太窄而难以显示全部时,命令外观将自动调整,可能好像消失但仍是可用的。如下面的图片所示,图1中,完全显示了所有控件;图2中,Excel窗口更窄,注意到一些描述性的文本消失了,并且一些图标变得更小;图3显示了极端情况,窗口非常窄,一些组中只显示单个图标,但单击该图标后,所有命令都是可用的。

图1:完全显地所有控件的Ribbon

图2:更小窗口下的Ribbon

图3:极其小的窗口下的Ribbon
技巧:如果想要隐藏功能区而增加工作表空间,则只需在任意选项卡中双击鼠标即可。想使用某选项卡中的命令,只需单击该选项卡。要恢复功能区,则只需双击某选项卡。
也可以按Ctrl+F1组合键来切换功能区的显示与隐藏。
Rand()函数简介
Excel中的Rand()函数返回大于或等于0且小于1的均匀分布的随机数。在每次计算工作表或重新打开工作表时,该函数都将返回一个新的数值。
语法:RAND( )
基本用法
1、若要生成大于或等于数值a且小于数值b的随机实数,可使用公式:
RAND()*(b-a)+a
例如,下面的公式生成介于0到10之间的随机数:
=RAND()*10
下面的公式生成大于等于50且小于100的随机数:
=RAND()*(100-50)+50
2、如果要使用函数RAND()生成一个不随单元格计算而改变的随机数,则可以在编辑栏中输入“=RAND()”并保持编辑状态,然后按F9键,从而将公式永久性地改为随机数。
随机生成指定位数的整数值
有时,需要随机生成具有指定位数的整数值。例如,随机生成一个6位的帐号,则可使用下面的公式:
=INT(RAND()*(1000000-100000)+100000)
按F9键,该公式会随机生成大于等于100000而小于等于999999的整数值。
随机生成字母
如果要随机生成A-Z这26个字母中的一个字母,可以联合使用Rand()函数和Choose函数来完成。
公式:=INT(RAND()*26+1)
随机生成一个1至26之间的整数。
公式:
=CHOOSE(INT(RAND()*26+1),”A”,”B”,”C”,”D”,”E”,”F”,”G”,”H”,”I”,”J”,”K”,”L”,”M”,”N”,”O”,”P”,”Q”,”R”,”S”,”T”,”U”,”V”,”W”,”X”,”Y”,”Z”)
随机生成A-Z中的一个字母。
标签: 没有标签
使用VBA,可以很方便地向Excel菜单栏添加新菜单。
背景知识
1、菜单栏属于CommandBars集合,可以通过菜单栏名称或索引值对其进行引用:
CommandBars(“Worksheet Menu Bar”)或CommandBars(1)
2、新添加的菜单是一个弹出式控件,其类型为msoControlPopup。
3、通过Add方法向Controls集合中添加新的控件。Add方法可以指定控件的类型、内置控件的ID号、位置及是否是一个临时控件。如果是一个临时控件,则在关闭Excel时会自动删除该菜单。
4、可以指定新菜单的位置。如果不指定,则会在菜单工具栏末尾添加新菜单。
5、使用Caption属性指定新菜单的名称,使用OnAction属性指定单击菜单后的行为。
6、为了避免指定的菜单不存在,可以使用FindControl方法查找要指定的菜单。若指定的菜单不存在,则在工作表菜单栏末尾添加新菜单。
添加菜单
向Excel工作表菜单栏中添加菜单的过程清单如下:
Sub AddNewMenu()
Dim HelpMenu As CommandBarControl
Dim NewMenu As CommandBarPopup
'利用ID属性查找帮助菜单
Set HelpMenu = CommandBars(1).FindControl(ID:=30010)
If HelpMenu Is Nothing Then
'如果该菜单不存在,则将新菜单添加到末尾
'设置新菜单为临时的
Set NewMenu = CommandBars(1).Controls _
.Add(Type:=msoControlPopup, Temporary:=True)
Else
'将新菜单添加到帮助菜单之前
Set NewMenu = CommandBars(1).Controls _
.Add(Type:=msoControlPopup, Before:=HelpMenu.Index, _
Temporary:=True)
End If
'添加标题并指定快捷键
NewMenu.Caption = "统计(&S)"
End Sub
运行该过程后,将在工作表菜单的“帮助”菜单左侧添加一个名为“统计”的新菜单。
注:要删除新添加的菜单,使用Delete方法即可,例如代码:
CommandBars(1).Controls("统计(&S)").Delete
将删除刚创建的“统计”菜单。
添加菜单项
与添加新菜单一样,在添加菜单项及子菜单时,使用Add方法,且指定合适的控件类型,其代码清单如下:
Sub AddNewMenu()
Dim HelpMenu As CommandBarControl
Dim NewMenu As CommandBarPopup
Dim MenuItem As CommandBarControl
Dim SubMenuItem As CommandBarButton
On Error Resume Next
'如果菜单已存在,则删除该菜单
CommandBars(1).Controls("统计(&S)").Delete
'利用ID属性查找帮助菜单
Set HelpMenu = CommandBars(1).FindControl(ID:=30010)
If HelpMenu Is Nothing Then
'如果该菜单不存在,则将新菜单添加到末尾
'设置新菜单为临时的
Set NewMenu = CommandBars(1).Controls _
.Add(Type:=msoControlPopup, Temporary:=True)
Else
'将新菜单添加到帮助菜单之前
Set NewMenu = CommandBars(1).Controls _
.Add(Type:=msoControlPopup, Before:=HelpMenu.Index, _
Temporary:=True)
End If
'添加菜单标题并指定热键
NewMenu.Caption = "统计(&S)"
'添加第一个菜单项
Set MenuItem = NewMenu.Controls.Add _
(Type:=msoControlButton)
With MenuItem
.Caption = "输入数据(&D)..."
.FaceId = 162
.OnAction = "Macro1"
End With
'添加第二个菜单项
Set MenuItem = NewMenu.Controls.Add _
(Type:=msoControlButton)
With MenuItem
.Caption = "汇总数据(&T)..."
'添加快捷键
.ShortcutText = "Ctrl+Shift+T"
.FaceId = 590
.OnAction = "Macro2"
End With
'添加第三个菜单项
'本菜单有子菜单项,因此其类型为msoControlPopup
Set MenuItem = NewMenu.Controls.Add _
(Type:=msoControlPopup)
With MenuItem
.Caption = "数据报表(&R)..."
'添加分隔线
.BeginGroup = True
End With
'添加子菜单
'添加第一个子菜单
Set SubMenuItem = MenuItem.Controls.Add _
(Type:=msoControlButton)
With SubMenuItem
.Caption = "月汇总(&M)"
.FaceId = 110
.OnAction = "Macro3"
End With
'添加第二个子菜单
Set SubMenuItem = MenuItem.Controls.Add _
(Type:=msoControlButton)
With SubMenuItem
.Caption = "季度汇总(&Q)"
.FaceId = 222
.OnAction = "Macro4"
End With
End Sub
注意,菜单类型的不同,有二个菜单项(类型为msoControlButton)、有一个菜单项带有子菜单(其类型为msoControlPopup)
FaceID属性确定出现在菜单文本旁边的图像,以数字表示,一个数字代表一个内置的图像。
在Caption属性中使用&号表示该菜单项的热键。
在第二个菜单项中,利用ShortcutText属性为该菜单项添加了一个快捷键,用户按此快捷键可以直接运行命令。
所添加的菜单如下图所示。

图:添加的新菜单
示例文档在下面的地址中下载:
创建新菜单.rar
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对象)。
下面的过程列出命令栏中的所有控件:
Sub ShowAllControls
()
Dim row
As Integer
Dim cBar
As CommandBar
Dim ctl
As CommandBarControl
Dim Menu
As CommandBarControl
Dim MenuItem
As CommandBarControl
Dim SubMenuItem
As CommandBarControl
Cells.Clear
'设置标题
Cells(1, 1) = "索引值"
Cells(1, 2) = "命令栏名称"
Cells(1, 3) = "子项名称"
Range(Cells(1, 1), Cells(1, 3)).Font.Bold = True
Cells(2, 1) = "工具栏"
Cells(2, 1).Font.Italic = True
row = 3
'列出工具栏控件
For Each cBar In CommandBars
If cBar.Type = msoBarTypeNormal Then
Cells(row, 1) = cBar.Index
Cells(row, 2) = cBar.Name
For Each ctl In cBar.Controls
Cells(row, 3) = ctl.Caption
row = row + 1
Next ctl
End If
Next cBar
'列出菜单
Cells(row, 1) = "菜单栏"
Cells(row, 1).Font.Italic = True
row = row + 1
For Each cBar In CommandBars
If cBar.Type = msoBarTypeMenuBar Then
Cells(row, 1) = cBar.Index
Cells(row, 2) = cBar.Name
For Each ctl In cBar.Controls
Cells(row, 3) = ctl.Caption
row = row + 1
Next ctl
End If
Next cBar
'列出快捷菜单
Cells(row, 1) = "快捷菜单"
Cells(row, 1).Font.Italic = True
row = row + 1
For Each cBar In CommandBars
If cBar.Type = msoBarTypePopup Then
Cells(row, 1) = cBar.Index
Cells(row, 2) = cBar.Name
For Each ctl In cBar.Controls
Cells(row, 3) = ctl.Caption
row = row + 1
Next ctl
End If
Next cBar
'设置标题
row = row + 1
Cells(row, 1) = "菜单名称"
Cells(row, 2) = "菜单命令"
Cells(row, 3) = "子菜单"
Range(Cells(row, 1), Cells(row, 3)).Font.Bold = True
row = row + 1
'列出菜单信息
On Error Resume Next
For Each Menu In CommandBars(1).Controls
For Each MenuItem In Menu.Controls
For Each SubMenuItem In MenuItem.Controls
Cells(row, 1) = Menu.Caption
Cells(row, 2) = MenuItem.Index & MenuItem.Caption
Cells(row, 3) = SubMenuItem.Index & SubMenuItem.Caption
row = row + 1
Next SubMenuItem
Next MenuItem
Next Menu
'工作表设置
Cells.Columns.AutoFit
Rows("1:1").RowHeight = 29.25
ActiveWindow.FreezePanes = True
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