ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 用VB6.0制作Excel2010功能区COM加载项及自定义图标

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-11-17 18:56 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:插件开发
本帖最后由 henrylam 于 2011-11-17 20:37 编辑

网上用VB6.0制作Excel2010功能区COM加载项的教程不少,而用VB6.0自定义图标的资料几乎没有,所以在这方面花了不少时间,以下将这两天的心得整理出来供大家一起学习讨论。Excel2007版的制作过程类似,Excel2003版的不适合。
由于本人水平有限,错漏之处难免,欢迎网友指教。

一、创建外接程序
打开VB6.0,在新建工程对话框中选择“外接程序”。然后在“项目资源管理器”窗口中,通过右键单击“Connect”打开设计器窗口,然后选择“查看对象”。按下图所示进行填写和选择。
Connect.jpg
在VB6.0菜单栏“工程”点击“引用”,按下图勾选
引用.jpg
二、编写代码
在“项目”窗口中,右键单击“Connect”项并选择“查看代码”,删除在设计器代码窗口中自动生成的代码,将以下代码复制进去后保存。

  1. Option Explicit
  2. Implements IRibbonExtensibility '添加对 IRibbonExtensibility 接口的引用
  3. Public xlApp As Excel.Application

  4. Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
  5.     Set xlApp = Application '加载时
  6. End Sub

  7. Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
  8.     Set xlApp = Nothing '卸载时
  9. End Sub

  10. '调用自定义 XML
  11. Public Function IRibbonExtensibility_GetCustomUI(ByVal RibbonID As String) As String
  12.     IRibbonExtensibility_GetCustomUI = GetRibbonXML()
  13. End Function

  14. '添加 XML 自定义代码
  15. Public Function GetRibbonXML() As String
  16.     Dim sRibbonXML As String
  17.     sRibbonXML = "<customUI xmlns=""http://schemas.microsoft.com/office/2006/01/customui"" >" & _
  18.                   "<ribbon startFromScratch=""false"">" & _
  19.                    "<tabs>" & _
  20.                     "<tab id=""henrylam"" label=""我的工具"">" & _
  21.                      "<group id=""test"" label=""测试"">" & _
  22.                       "<button id=""Button1"" label=""测试内置图标"" size=""large"" imageMso=""HappyFace"" onAction=""test1"" />" & _
  23.                       "<button id=""Button2"" label=""测试自定义图标"" size=""large"" getImage=""GetImage"" onAction=""test2"" />" & _
  24.                      "</group >" & _
  25.                      "<group id=""ExcelHome"" label=""ExcelHome"">" & _
  26.                       "<button id=""Button3"" label=""访问论坛"" size=""large"" getImage=""GetImage"" onAction=""test3"" />" & _
  27.                      "</group >" & _
  28.                     "</tab>" & _
  29.                    "</tabs>" & _
  30.                   "</ribbon>" & _
  31.                  "</customUI>"
  32.     GetRibbonXML = sRibbonXML
  33.    End Function
  34.    
  35. '下面是调用资源文件(.res)中资源的函数。
  36. 'Button1用的是系统内置图标,无需调用。Button2和Button3用的是自定义图标

  37. Function GetImage(control As IRibbonControl) As IPictureDisp
  38.     Select Case control.Id
  39.     Case "Button2"
  40.         Set GetImage = LoadResPicture(101, vbResBitmap) '调用资源文件中的位图作为功能区的图标
  41.     Case "Button3"
  42.         Set GetImage = LoadResPicture(102, vbResBitmap)
  43.     End Select
  44. End Function

  45. '下面是测试控件回调的3个过程,对应3个按钮

  46. Public Sub test1(ByVal control As IRibbonControl)
  47.     MsgBox "测试通过,按钮用的是内置图标", vbInformation
  48. End Sub

  49. Public Sub test2(ByVal control As IRibbonControl)
  50.     MsgBox "测试通过,按钮用的是自定义图标", vbInformation
  51. End Sub

  52. Public Sub test3(ByVal control As IRibbonControl)
  53.     If Not xlApp.ActiveWorkbook Is Nothing Then
  54.        xlApp.ActiveWorkbook.FollowHyperlink Address:="http://club.excelhome.net/forum.php", NewWindow:=True
  55.     Else
  56.        MsgBox "没有活动工作簿", vbExclamation
  57.     End If
  58. End Sub
复制代码

评分

6

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-17 18:59 | 显示全部楼层
本帖最后由 henrylam 于 2011-11-17 19:53 编辑

三、加载自定义图标到“资源文件”。本贴重点要说的。
用VBA编辑的加载宏,可以将.png格式的自定义图片加载到.xlam文件中,但VB6.0不支持.png格式的,只能用.bmp位图了。如果需要透明效果的图标,我们可以把做好的.png图片用画图工具打开,另存为24位位图即可。

做好图标后,在VB6.0菜单栏“外接程序”中,点击“外接程序管理器”,选择“VB 6 资源编辑器”,“加载行为”前两项勾上,然后点击“确定”。
外接程序管理器.jpg
到VB6.0菜单栏“工具”中,点击“资源编辑器”,点击“新建”按钮,再点击“位图”按钮,将自定义好的位图文件加载进来。

资源编辑器.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-17 19:01 | 显示全部楼层
本帖最后由 henrylam 于 2011-11-17 21:17 编辑

四、生成DLL文件
单击VB6.0菜单栏“文件”,再点击“生成Excel2010.dll ”,即可生成COM加载项文件。
新建记事本文件,填入RegSvr32.exe Excel2010.dll,保存为安装.BAT文件,关闭Excel程序,打开安装.BAT文件再打开Excel程序就可以了。效果如下:
效果.jpg

生成的DLL文件 Excel2010dll.rar (19.16 KB, 下载次数: 1390)
自义定图标 自定义图标.rar (12.18 KB, 下载次数: 1462)
VB工程文件 Excel2010.rar (48.56 KB, 下载次数: 1967)


本贴参考了三戒http://club.excelhome.net/thread-424834-1-1.html
佛山小老鼠http://club.excelhome.net/thread-729624-1-1.html
感谢!!






补充内容 (2016-3-15 17:19):
第10页91楼补充更新,解决在“Connect”项编写XML代码太多行时受“行继续标志”限制问题。
PS:因为VB6.0编写的插件支持不了64位Office,楼主已从VB6.0转VSTO,此贴也几年没留意,今天上论坛翻出来,手痒完善下。

TA的精华主题

TA的得分主题

发表于 2011-11-17 19:13 | 显示全部楼层
楼主VB能手。谢谢分享,收藏备用。

TA的精华主题

TA的得分主题

发表于 2011-11-17 19:18 | 显示全部楼层
谢谢分享,收藏备用

TA的精华主题

TA的得分主题

发表于 2011-11-18 17:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
很好,谢谢分享

TA的精华主题

TA的得分主题

发表于 2011-11-18 19:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
03的也是大同小异,不过不需要xml文件。
1.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-24 16:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
tonychris 发表于 2011-11-18 19:15
03的也是大同小异,不过不需要xml文件。

03菜单与10功能区不一样,但自定义图标也是类似

TA的精华主题

TA的得分主题

发表于 2011-11-26 09:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
总结的很好

TA的精华主题

TA的得分主题

发表于 2011-12-4 07:41 | 显示全部楼层
很好的学习资料,适合美化自己的小系统。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 00:21 , Processed in 0.045789 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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