Archive for 09月 2007

Ribbon基础

Cover
对于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显示了极端情况,窗口非常窄,一些组中只显示单个图标,但单击该图标后,所有命令都是可用的。
FullRibbon
图1:完全显地所有控件的Ribbon
PartRibbon
图2:更小窗口下的Ribbon
SmallerRibbon
图3:极其小的窗口下的Ribbon
技巧:如果想要隐藏功能区而增加工作表空间,则只需在任意选项卡中双击鼠标即可。想使用某选项卡中的命令,只需单击该选项卡。要恢复功能区,则只需双击某选项卡。
也可以按Ctrl+F1组合键来切换功能区的显示与隐藏。

标签: 

使用Rand()函数生成随机数

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中的一个字母。

标签: 没有标签

在Excel中创建联合报表

可以使用Excel的“粘结图片链接”功能,完成由几个不同部分组成的复杂报表。
首先,创建表头,如图1所示,使用Excel绘图工具中的艺术字及线条绘制表头。
ReportHeader
图1:报表的表头
再创建报表的其它组成部分,如图2、图3、图4所示。
secondpart
图2
ThirdPart
图3
ForthPart
图4
现在,开始将这3部分以图片粘贴的形式汇总到第1部分的工作表中。
选择第2部分的数据,并复制。
SelectDataAndCopy
图5:选择数据并复制
在汇总工作表的相应单元格中,按住Shift键的同时单击“编辑”菜单,选择“粘贴图片链接”,如图6所示。
EditMenu
图6:按住Shift键,此时编辑菜单中的命令将不同
执行该命令,则在工作表中将出现第2部分的图片,将图片拖放到合适的位置,如图7所示。
Result
图7:粘贴后的效果
对第3部分和第4部分重复上述操作,并将工作表相应格式化后,进行预览的结果如图8所示。
ResultReport
图8:最终的报表
此时,不同部分的工作表中改变相应的数据,在汇总工作表中将会产生相应的变化。
小结:
1、按住Shift键的同时,“编辑”菜单中会出现“粘贴图片链接”命令。
2、使用“粘贴图片链接”命令,可以将所复制的数据当作图片粘贴到相应的工作表中。这样,可以按照图片的方式随意调整该部分的大小,所得的报表也会具有不同的列宽。
3、粘贴为图片的数据与原工作表中的数据相关联,即原工作表中的数据改变,相应图片中的数据也会改变。
4、使用“粘贴图片链接”命令将工作表数据转换为图片,并辅以相应的格式设置,可以得到非常棒的表格效果。

标签: 没有标签

创建Excel新菜单

使用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属性为该菜单项添加了一个快捷键,用户按此快捷键可以直接运行命令。
所添加的菜单如下图所示。
AddNewMenu
图:添加的新菜单
示例文档在下面的地址中下载:
创建新菜单.rar

标签: ,

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对象)。
下面的过程列出命令栏中的所有控件:

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