前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA专题10-6:使用VBA操控Excel界面之执行命令以及激活功能区选项卡的两种方法

VBA专题10-6:使用VBA操控Excel界面之执行命令以及激活功能区选项卡的两种方法

作者头像
fanjy
发布2020-09-25 11:34:18
3.7K0
发布2020-09-25 11:34:18
举报
文章被收录于专栏:完美Excel

执行在功能区和不在功能区中的命令

在上篇文章中,通过下面的语句来执行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》,仅供学习研究。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档