ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] COM加载宏封装自定义函数并全自动安装最简实例

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-5-29 19:04 | 显示全部楼层
本帖已被收录到知识树中,索引项:插件开发
经过多次优化,发现还是得保留getobject和creatobject,只要能提高代码效率的有何不可呢?另配合注册表操作可以完美解决DLL函数的安装和卸载。附件中的程序欢迎测试,卸载后加载宏列表框中相应项目也删除了。程序比以前的速度运行要快,更完善了。

经优化后的Dll函数注册程序.rar

17.57 KB, 下载次数: 168

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-5-29 20:07 | 显示全部楼层

回复 123楼 fecmen 的帖子

api配合getobject和creatobject的话就不用去做注册表操作了。
效率的问题不替换getobject和creatobject的话,很难提升,附件就不试了,希望你能查到替换getobject和creatobject的api。

[ 本帖最后由 baomaboy 于 2011-5-29 22:58 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-5-29 21:09 | 显示全部楼层
原帖由 baomaboy 于 2011-5-29 20:07 发表
api配合getobject和creatobject的话就不用去做注册表操作了。
因为如果“卸载”的话api一个就全包了,用api注销dll不但删除加载宏列表,自动化服务中的对应项目也一并删除。
安装的话,就是api和getobject和creato ...



楼主删除加载宏列表中的对应项目是怎么实现的呢?可以探讨一下。我是通过操作注册表完成的,而且适用于office2003或office2007、office2010

[ 本帖最后由 fecmen 于 2011-5-29 21:57 编辑 ]

经优化后的DLL函数注册程序.rar

17.67 KB, 下载次数: 78

稍作了修改

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-5-29 22:57 | 显示全部楼层
原帖由 fecmen 于 2011-5-29 21:09 发表
楼主删除加载宏列表中的对应项目是怎么实现的呢?可以探讨一下。我是通过操作注册表完成的,而且适用于office2003或office2007、office2010


获取加载宏列表集合+移除加载宏列表项(AddinList+RemoveItem),注册表我是能少用就少用可不用就不用,因要掺加太多诸如判断等等的人为因素,虽然当做学习的过程用什么方法都是一种收获,但是到最后成型时,有正统的方法就尽量使用正统的。

说道“适用于.....版本....”其实还不就是所谓的人为因素,为什么你能适应3个版本?还不是你查了注册表,你如果将来有了2012,你弄清楚了2012的注册表位置你就又能多适应于一个版本了,这是很自然的。AddinList的方法就少了人为判断的因素,只要微软不做大的变动,AddinList是不分版本的,所以不用考虑版本。话说回来excel.exe /regserver命令好像新版不被支持了。
如果你装了win7你还可以说你的适用于win7系统,因为你在win7下调试过了,而我没装过win7就不敢说我的一定能在win7运行成功。

[ 本帖最后由 baomaboy 于 2011-5-30 12:42 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-5-30 00:02 | 显示全部楼层
原帖由 baomaboy 于 2011-5-29 22:57 发表


用的是应用程序自身的方法和属性。获取加载宏列表集合+移除加载宏列表项(AddinList+RemoveItem),注册表我是能少用就少用可不用就不用,因要掺加太多诸如判断等等的人为因素,虽然当做学习的过程用什么方法都是一 ...


我没用过win7,但是高手提到win7的兼容问题,我试验过,才发现还是兼容的,这是歪打正着了。另Excel加载宏自带的方法好像没有Removeitem的,是你自己编的方法吗?我用注册表的方法很是费点时间弄顺的。注册表其实还是蛮相对稳定的,历次的office版本的路径基本相同。getobject等还是需要用到的,可以获取当前Excel的版本号,那么在注册表能可获取或写入相应的options了。

你说我无奈3年了,经过你的帖子,我现在此类问题均结束无奈了。能按自己的要求删除指定的加载宏列表的项目了(此问题真的困扰我很久),前面的帖子中上传的能删加载宏列表项目的程序算是明白其怎么编的了,楼主写的Removeitem没有操作注册表吗?目前的技术中比较流行的是采取先调用加载宏窗口,然后用sendkeys来实现的。

[ 本帖最后由 fecmen 于 2011-5-30 00:16 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-5-30 00:21 | 显示全部楼层

回复 127楼 fecmen 的帖子

获取当前Excel的版本号不用getobject在注册表同样可以取得,而且已测试在双版本共存 (2003+2010)的模式下也能取得,为什么你双击一个工作薄时默认2003打开而不是用2010呢(反之亦然),总会有一个地方是存储这个信息的,关键是找到它。
其实3版本混装不用测试也可以确定能取得当前默认版本号,这是由excle在注册表中储存和调用信息数据的方式确定的。
虽然你也说“我用注册表的方法很是费点时间弄顺的。注册表其实还是蛮相对稳定的,”,但是和Application.Version比较哪个的结果更具权威性?所以操作注册表仅仅是为了更了解应用程序的运作,最好还是用正统的方法。

[ 本帖最后由 baomaboy 于 2011-5-30 14:35 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-5-30 00:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
留个记号,慢慢消化

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-5-30 00:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

回复 127楼 fecmen 的帖子

我觉得用sendkeys来实现不太现实,这方法就像个受不得惊吓的小兔子,受不得一丝干扰。
焦点、延迟、最主要的如果你的菜单里如果存在自定义菜单并且使用了相同的调用字母那sendkeys就如火车出轨一样不知道跑哪就了,只能听到叮当一通响。
简单点儿的也罢了,复杂的真不行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-5-30 00:54 | 显示全部楼层
原帖由 fecmen 于 2011-5-30 00:02 发表
你说我无奈3年了,经过你的帖子,我现在此类问题均结束无奈了。能按自己的要求删除指定的加载宏列表的项目了(此问题真的困扰我很久),前面的帖子中上传的能删加载宏列表项目的程序算是明白其怎么编的了,

前面上传的附件确实如此,遍历注册表options建下的所有已open为前缀的键值,如果是“删除所有加载项”的话就“清空”,如果是卸载自己的程序就过滤关键字。

TA的精华主题

TA的得分主题

发表于 2011-5-30 09:56 | 显示全部楼层
原帖由 baomaboy 于 2011-5-30 00:54 发表

前面上传的附件确实如此,遍历注册表options建下的所有已open为前缀的键值,如果是“删除所有加载项”的话就“清空”,如果是卸载自己的程序就过滤关键字。


楼主说了半天,你删除加载宏列表项目是怎么实现的?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 21:30 , Processed in 0.037232 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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