VBA和Ribbon

现在最大的问题是:VBA程序员可以处理Ribbon吗?答案很简单:毫无问题。
下面列出了使用VBA可以处理Ribbon的一些方面:
- 确定是否启用某个特定的控件。
- 确定是否某个特定的控件是可见的。
- 确定是否按下了某个特定的控件(如切换按钮和复选框)。
- 获取控件的标签、屏幕提示或超级提示(该控件更详细的描述)。
- 显示与控件相关的图像。
- 执行某特定的控件。
下面列出了您可能想要处理Ribbon,但使用VBA不可能实现的一些方面:
- 确定当前选择的选项卡。
- 激活特定的选项卡。
- 添加一个新选项卡。
- 添加一个新组到选项卡中。
- 添加一个新控件。
- 删除一个控件。
- 禁用一个控件。
- 隐藏一个控件。
访问Ribbon控件
Excel有大约1700个Ribbon控件,每个Ribbon控件都有一个名称,当使用VBA处理该控件时,您使用控件的名称。
例如,下面的语句显示一个消息框,表示“自定义视图(ViewCustomViews)”控件的启用状态。该控件位于“视图”选项卡中“工作簿视图”组内。
要确定特定控件的名称,首先需要显示“Excel选项”对话框中的“自定义”选项卡,在左侧列表框中查找控件,然后将鼠标指针放在该控件上方,此时弹出的屏幕提示将显示控件的名称,如图1所示。
图1:使用“Excel选项”对话框的“自定义”选项卡来确定控件的名称
不巧的是,不可能使用VBA代码来遍历Ribbon中所有的控件,并显示它们的名称列表。
下面的示例工作簿中包含了所有Excel 2007控件的名称,同时也显示了每个控件的其它信息,包括控件类型、选项卡名以及组名。
示例工作簿Ribbon控件名称.xlsx下载地址:Ribbon控件名称
图2:显示每个Ribbon控件相关信息的工作簿
处理Ribbon
上面提到了使用CommandBars对象的GetEnabledMso方法的示例,下面是与通过CommandBars对象处理Ribbon相关的所有方法的列表,这些方法都接受一个参数:idMso,代表命令的名称。
- ExecuteMso:执行一个控件
- GetEnabledMso:如果启用了指定控件,则返回True
- GetImageMso:返回控件的图像
- GetLabelMso:返回控件的标签
- GetPressedMso:如果按下指定的控件,则返回True(应用到复选框和切换按钮控件)
- GetScreentipMso:返回控件的屏幕提示(显示在控件里的文本)
- GetSupertipMso:返回控件的超级提示(当鼠标指针在该控件上方时显示该控件的详细描述)
这些方法中的一些是相当无价值的,难道一个VBA程序员需要确定控件的屏幕提示吗?我想不出有什么理由。
下面的VBA语句切换到“选择和可见性”任务窗格(一个方便选择工作表中对象的新特性):
下面的语句显示“选择性粘贴”对话框:
下面的语句告诉用户公式编辑栏是否可见(与“视图”选项卡中“显示/隐藏”组中编辑栏的状态一致):
注意,在代码中不能通过访问该Ribbon控件来改变公式编辑栏的可见性。但可以使用Application对象的DisplayFormulaBar属性来显示/隐藏编辑栏:
如果“合并后居中”控件被启用,则下面的语句将显示为True。(如果工作表受保护或活动单元格在表内则该控件被禁用)
下面的VBA代码添加一个ActiveX图像控件到活动工作表中,使用GetImageMso方法显示从“开始”选项卡“编辑”组中“查找和选择”控件的图像。
Sub ImageOnSheet()
Dim MyImage As OLEObject
Set MyImage = ActiveSheet.OLEObjects.Add _
(ClassType:="Forms.Image.1", _
Left:=50, _
Top:=50)
With MyImage.Object
.AutoSize = True
.BorderStyle = 0
.Picture = Application.CommandBars. _
GetImageMso("FindDialog", 32, 32)
End With
End Sub
激活选项卡
Microsoft没有提供从VBA中直接激活Ribbon选项卡的方法,但是如果确实需要这样做,使用SendKeys方法是唯一的选择。SendKeys方法摸拟按键,激活“开始”选项卡的按键是Alt+H,同时按下这两个键后,将在Ribbon中显示按键提示。要隐藏按键提示,按F6键。因此,下面的语句发送所需要的按键来激活“开始”选项卡:
SendKeys方法中其它选项卡的参数分别为:
- 插入: "%n{F6}"
- 页面布局: "%p{F6}"
- 公式: "%m{F6}"
- 数据: "%a{F6}"
- 审阅: "%r{F6}"
- 视图: "%w{F6}"
- 开发工具: "%l{F6}"
- 加载项: "%x{F6}"
关于快速访问工具栏(QAT)
在Excel以前的版本中,终端用户相当容易改变用户界面。他们可以创建包含频繁使用命令的自定义工具栏,甚至可以删除从未使用过的菜单项。用户可以显示任意数量的工具栏,移动工具栏到他们喜欢的地方。但现在这些情况都不允许了。
快速访问工具栏(QAT)是Excel 2007中用户唯一可定制的UI元素,用户可以非常容易地添加命令到QAT中,因此无论Ribbon选项卡是否激活,命令都是可用的。QAT不能被移动,但Microsoft允许用户确定是否显示QAT在Ribbon的上方还是下方。
QAT不是对象模型的一部分,因此不能使用VBA来处理它。
QAT信息存储在名为Excel.qat的XML文件中,该文件存放在:
C:\Documents and Settings\\Local Settings\
Application Data\Microsoft\Office
可以通过文本编辑器或XML查看器查看该文件。如果制作了该文件的副本并使用带XML的扩展名重命名,则可以使用Excel来打开该文件。但是,不可以使用Excel修改这个Excel.qat文件。

my地图:
很专业的网站啊
3 10月 2007, 6:19 pmdodo:
好文章。
16 07月 2008, 7:22 pm想请教下,能否隐藏word选项卡?如何隐藏?office按钮、快速访问工具栏呢??谢谢!!!