执行在功能区和不在功能区中的命令
在上篇文章中,通过下面的语句来执行MinimizeRibbon命令:
Application.CommandBars.ExecuteMso(idMso)
该方法仅接受1个参数:idMso,指定命令的名称(也被称作该控件的标识符)。MinimizeRibbon是不在功能区中的一个命令。
下面展示的是执行不在功能区中的命令的另一个示例:
'启动计算器程序
Application.CommandBars.ExecuteMso "Calculator"
接下来的示例执行功能区中的命令,它们通过功能区控件图形化呈现:
'拆分活动窗口成窗格,移除拆分窗格
'可通过选择视图|窗口|拆分实现
'也可执行下面的ExecuteMso方法
Application.CommandBars.ExecuteMso "WindowSplitToggle"
Excel有超过10000个idMso,那是在功能区和不在功能区中命令的名字。
idMso可以是命令的名字,内置选项卡的名字,或者其它内置元素的名字。可以在网上搜索下载关于Excel内置控件名字的文档。
激活功能区选项卡的两种方法
下面介绍激活特定功能区选项卡的两种不同方法。一种是使用SendKeys方法模拟按键,就好像是手工按活动窗口中的键一样;另一种是使用XML和VBA代码。
SendKeys方法
例如,下面的VBA代码模拟按下ALT、A和ALT键:
Application.SendKeys "%A%"
将上面的语句放在Workbook_Open事件中,在打开该工作簿时,将激活“数据”选项卡:
Private Sub Workbook_Open()
Application.SendKeys "%A%"
End Sub
注意,在Excel的有些版本中,在Excel窗口被装载之前,Workbook_Open事件中的SendKeys方法执行得过早。为了解决这个问题,可以使用OnTime事件在执行Workbook_Open事件一至两秒后,发送按键,如下面的代码:
Private Sub Workbook_Open()
'在1秒后执行SendKeystrokes过程
Application.OnTime Now TimeValue("0:0:1"), "SendKeystrokes"
End Sub
Sub SendKeystrokes()
Application.SendKeys "%A%"
End Sub
下面列出了代表键的代码:
为了避免不可预料的结果,总是使用SendKeys方法作为最后的手段,并且确保活动窗口是想要发送按键的正确的窗口。
XML和VBA代码(Excel 2010及以后的版本)
激活功能区选项卡的另一种方法是使用XML和VBA代码。执行下列步骤:
1. 下载CustomUI Editor并安装。
2. 创建新工作簿并将其保存为启用宏的工作簿。
3. 关闭该工作簿并在CustomUI Editor中打开。
4. 在CustomUI Editor中,单击插入并选择Office 2007 Custom UI Part。
选择这个选项使工作簿与Excel 2007及后续版本兼容。
5. 复制并粘贴下面的XML代码:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"onLoad="Initialize">
</customUI>
onLoad是一个回调属性,有一个VBA过程的名称赋给它,本例中的过程命名为Initialize,当打开工作簿时调用此过程。
6. 单击Validate按钮来检查是否有错误。
7. 单击Generate Callbacks按钮生成Initialize回调过程:
' customUI.onLoad的回调
Sub Initialize(ribbon as IRibbonUI)
End Sub
复制该回调过程,用于稍后粘贴到工作簿的标准VBA模块中。
8. 保存并关闭该文件。
9. 在Excel中打开该文件。
由于Initialize过程仍然没有准备执行,因此会出现错误消息,单击“确定”。
10. 按Alt F11打开VBE。
11. 插入一个标准模块,粘贴刚才复制的回调过程,并修改代码如下:
Public myRibbon As IRibbonUI
' customUI.onLoad的回调
Sub Initialize(ribbon As IRibbonUI)
Set myRibbon = ribbon
End Sub
当在Excel中打开该工作簿时,执行Initialize过程,获取功能区对象引用赋值给myRibbon对象变量。使用对功能区的引用,可以接着通过myRibbon对象激活功能区选项卡(以及使功能区中的选项卡和控件无效)。
12. 保存,关闭,然后重新打开该工作簿。
要激活特定的内置功能区选项卡,例如“数据”选项卡,使用下面的代码:
myRibbon.ActivateTabMso "TabData"
如果要在打开工作簿时激活“数据”选项卡,在Initialize过程中插入上面的语句:
Sub Initialize(ribbon As IRibbonUI)
Set myRibbon = ribbon
'激活功能区的数据选项卡
myRibbon.ActivateTabMso "TabData"
End Sub
如果要激活自定义的功能区选项卡,例如id为MyCustomTab的自定义选项卡,使用下面的代码:
'激活id为MyCustomTab的自定义选项卡
myRibbon.ActivateTab "MyCustomTab"
注意,ActivateTabMso方法和ActivateTab方法仅适用于Excel 2010及后续版本,不能用于Excel 2007。
上面程序中ActivateTabMso方法的参数值“TabData”是idMso,我们将在下面的文章中讨论什么是idMso以及如何识别它们。
说明:本专题系列大部分内容学习整理自《Dissectand Learn Excel VBA in 24 Hours:Changingworkbook appearance》,仅供学习研究。