ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VSTO中Ribbon如何使用Excel内置的控件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-8-3 17:49 | 显示全部楼层 |阅读模式
有一个问题在编程中遇到好几天了,搜遍全网竟没一个合理的解决

问题描述:
在VBA编程中使用Ribbon时,我们很容易使用Excel内置的控件,只要你知道它的idMso就行了。根本不用编写一行代码就能实现控件的功能,如
<control idMso="FormatPainter" />            这个可以在Ribbon中放置一个格式刷按钮

<group idMso="GroupFont" />                   这个甚至可以把整个Excel内置的字体组放置到你自己定义的Ribbon中


问题困惑:
但在VSTO编程中,我们一般用功能区可视化设计器来设计Ribbon,在对它的编程中,方便性与VBA相比,可以避开烦琐的回调过程,
但我却无法再用idMso将Excel内置的控件放置到自定义的Ribbon中

现有的解决方案:
有文章提出在VOST中采用把Ribon导出为XML,然后就可以如VBA一般编辑XML,从而放置Excel的内置控件
这种方法我也尝试成功过,但它又回到了要用回调过程来控制Ribbon的方式,失去了VSTO编程的方便性,我一直想避免这么做!

最终问题:
到底是我没有找到正确的方法,还是我的想法VSTO根本就不支持这种实现?请高手们来分析下。


TA的精华主题

TA的得分主题

发表于 2019-8-4 21:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 tongkj 于 2019-8-4 21:06 编辑

显然你没搞对,vsto里面每个图版都可以修改ID 啊,就是OFFICE内置图标的名字,不用XML QQ截图20190804210529.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-5 10:33 | 显示全部楼层
tongkj 发表于 2019-8-4 21:03
显然你没搞对,vsto里面每个图版都可以修改ID 啊,就是OFFICE内置图标的名字,不用XML

你的那个设置,只是在图标上采用了Office的图标,但和直接使用Excel的内容控件(包含功能而不仅仅是图标)完全是两回事情

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-23 11:32 | 显示全部楼层
zhhong2146 发表于 2019-8-5 10:33
你的那个设置,只是在图标上采用了Office的图标,但和直接使用Excel的内容控件(包含功能而不仅仅是图标 ...

确实是,你说得正确。但问题还没解决

TA的精华主题

TA的得分主题

发表于 2022-5-31 09:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
期待答案,希望有高人出手

TA的精华主题

TA的得分主题

发表于 2022-6-9 18:06 | 显示全部楼层
如果功能区(可视化设计器)可以实现所有功能,VS提供功能区(XML)方式的意义何在

TA的精华主题

TA的得分主题

发表于 2022-6-9 18:27 | 显示全部楼层
但是万事都有例外,CommandBars对象有个ExecuteMso(idMso)方法,参数为内置控件的标识符,就是用来执行内置功能的,举个例子,添加功能区(可视化设计器),添加按钮,双击按钮,输入如下代码
Private Sub Button1_Click(sender As Object, e As RibbonControlEventArgs) Handles Copy.Click
        Globals.ThisAddIn.Application.CommandBars.ExecuteMso("Copy")
    End Sub
这样你就可以单击自定义功能区按钮时执行“复制”这个内置功能了

TA的精华主题

TA的得分主题

发表于 2023-6-20 16:38 | 显示全部楼层
给你一个新的思路,今天我写一个Outlook插件的时候用到了。
我们选项卡上的功能,都可以通过Alt +来去调用,如下图:
image.png
这样,就可以通过Sendkeys来发送按键调用工具:
SendKeys.SendWait("{Enter}");
            SendKeys.SendWait("%");
            SendKeys.SendWait("H");

可以试一下。如果不太复杂的功能,这一招就够用了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-30 21:35 , Processed in 0.034227 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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