ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 13199|回复: 14

[原创] 用代码自定义快速工具栏

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-13 15:22 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:UI界面定制
本帖最后由 Moneky 于 2014-11-13 16:42 编辑

最近在word种写了很多代码,执行入口是在快速工具栏中新建按钮,但每次给别人创建按钮的时候比较费事,于是想到写代码自动创建需要的按钮,现在终于可以用了,分享如下。

代码中,创建了一个自定义类clsQuickToolBar,包含下列几个方法:
    .AddButton                添加新按钮
    .ReDraw                   重绘工具栏
    .RemoveButton          删除一个按钮(根据ID)
    .RemoveButtonEx      强力删除一个按钮(推荐,可以删除一些错误的重复按钮)
    .ReSetToolBar           重建整个快速工具栏,恢复为默认设置(注意,会删除所有自定义按钮)

上面方法的具体参数可以参看代码中的相关注释。
注意代码正常运行需要引用 Microsoft XML,v3.0

附件中是两个示例文件,另外一个文件是imageMso图标对照文件,来自于坛子里面(http://club.excelhome.net/thread-1137139-1-1.html),感谢作者的分享。当你想对自己的按钮设定合适的图像而不知道相应的图像代码的时候,这个文件就很有用了。

打开附件中的两个示例文件后,会在快速工具栏中的创建一个新按钮,查看按钮提示可以进行接下来的演示。

2014-11-13_152042.png



2014-11-13_140323.png


有了此技术就可以将自己的代码执行入口放入快速工具栏中了。我的Office是2013版,不知对其它版本是否兼容,欢迎反馈。


该贴已经同步到 Moneky的微博

用代码自定义快速工具栏.zip

104.65 KB, 下载次数: 870

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-11-13 16:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
试了一下,打开与关闭都报错(XP+EXCEL2010)

3.png

4.png

2.png


TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-13 16:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 Moneky 于 2014-11-13 16:41 编辑
opel-wong 发表于 2014-11-13 16:21
试了一下,打开与关闭都报错(XP+EXCEL2010)

搜索一下Word.OfficeUI  和Excel.OfficeUI,看看存不存在,如果存在,就改一下代码中的路径。
代码中修改类代码中的
    vFile = Environ("LOCALAPPDATA") & "\Microsoft\Office\Excel.officeUI" 'word 2013 配置文件路径
如果不存在的话,可以先手动在快速工具栏上添加一个按钮,系统会自动生成对应的.officeui文件。
可以调试一下,单步运行,看看类代码中的vFile = Environ("LOCALAPPDATA") & "\Microsoft\Office\Excel.officeUI" 这一句运行后vFile的值是什么

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-13 17:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
opel-wong 发表于 2014-11-13 16:21
试了一下,打开与关闭都报错(XP+EXCEL2010)

刚刚在装2010的同事电脑上试了一下,路径是正确的(不过她电脑是win7)。
当然也存在问题:代码可以正常的修改配置文件,但Excel界面上的按钮在工作簿打开后再添加按钮无法刷新,也就是明明配置文件中已经有相关按钮的信息了,但界面没有更新。在workbook_open事件中新添加的按钮可以显示出来且行为正常。

你的路径问题,请确认对应的文件夹是否存在,或者是否用的是精简版或绿色版。

现在下班了,回去再研究一下,考虑通过api发送消息给Excel实现界面刷新。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-13 22:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
在虚拟机中安装了xp和2007,已经解决了代码功能问题,但是目前还无法做到添加按钮后马上显示出来,而要重新打开excel后才会生效。也就是还没有办法强制excel重绘快速工具栏。

TA的精华主题

TA的得分主题

发表于 2014-11-14 09:45 | 显示全部楼层
这个值得推广,可以考虑2007、2010、2013三者的不同分开写代码或者分开写类模块

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-14 10:07 | 显示全部楼层
liucqa 发表于 2014-11-14 09:45
这个值得推广,可以考虑2007、2010、2013三者的不同分开写代码或者分开写类模块

现在是打算一个代码,在代码中判断系统版本和Excel版本号,采用不同的代码。
目前遇到的问题是:
office2007中无法强制重绘工具栏,必须要重启Excel后才会显示出来按钮,这对于加载宏来说问题不大,但对于寄生于某个单文件的Excel来说就不行了。帮忙想个办法啊。

TA的精华主题

TA的得分主题

发表于 2014-11-14 10:31 | 显示全部楼层
在文件——选项——自定义功能区里手动操作就会修改这个文件,本身就是对整个应用程序有效,应用程序加载时读取该文件,但是在界面操作就会立即生效,应该有办法。

代码还可以扩展,可以自定义选项卡

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-14 10:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 Moneky 于 2014-11-14 10:41 编辑
wpxxsyzx 发表于 2014-11-14 10:31
在文件——选项——自定义功能区里手动操作就会修改这个文件,本身就是对整个应用程序有效,应用程序加载时 ...

我尝试过用spy++监视,手动操作快速工具栏时的消息,但我是64位系统和64位excel,spy++无法正常监视。现在还在摸索中。
office2013,可以通过新建一个窗口再关闭来实现刷新,但office2007中没有用

TA的精华主题

TA的得分主题

发表于 2014-11-14 10:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
通常是在customUI元素里添加onload属性,获取ribbon对象,然后使用其Invalidate方法重绘整个功能区。或者使用InvalidateControl、InvalidateControlMso方法重绘指定控件,你可以在这方面试试
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-22 00:36 , Processed in 0.052721 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表