应用COM加载项技术的愿望久矣,两年来,断断续续的学习探索,一直没有什么突破(参考http://office.9zp.com/dispbbs.asp?boardID=15&ID=220&page=1),主要的瓶颈在于无法将当前的命令应用于所有打开/新建的文档,即便是大头版主的代码,感觉也很些问题(烦琐),而且也无法应用于Word自带菜单(命令)下的自定义按钮中。 近日,夜不成寐。幸得MVP陈希章的帮助,给我MSDN中的一个链接(如何使用 Visual Basic .NET 生成 Office COM 加载项,http://support.microsoft.com/default.aspx?scid=kb;zh-cn;302896),所有问题几乎迎刃而解。 不敢私藏,与版友们一起分享之。 COM加载项的代码如下: Option Explicit Implements IDTExtensibility2 '声明一个对实现 IDTExtensibility2(COM加载项) 的类型库的引用 Dim WithEvents MyButton As Office.CommandBarButton '声明myButton为Office.CommandBarButton类 Dim applicationObject As Word.Application '声明applicationObject为Word.Application对象 Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant) '每当连接 COM 加载项时,都会激发 OnConnection 事件⑴ Set applicationObject = Application '指向Application对象 '如果连接的方式不是由宿主应用程序的启动行为(Word/宿主应用程序的Startup)引起的连接(指通过WORD/工具/COM加载项/ 'COM加载项对话框进行的加载时,先发生OnConnection事件,再调用OnStartupComplete事件,以便重新生成/取得对CommandBarButton的引用 If (ConnectMode <> AddInDesignerObjects.ext_ConnectMode.ext_cm_Startup) Then _ Call IDTExtensibility2_OnStartupComplete(custom) End Sub Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant) 'IDTExtensibility2_OnAddInsUpdate事件存根,无代码 '每当注册的 COM 加载项集发生变化时,将激发 OnAddInsUpdate 事件。 '即每当安装 COM 加载项或者从宿主应用程序中删除 COM 加载项时,都会激发此事件。 '该事件在COM加载项的OnConnection事件之后发生⑵ '当正确加载该COM加载项后,其ADDINS集合发生改变后,再次引发此事件⑶ End Sub Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant) '当Word程序完成与加载项的连接以后,加载该加载项后触发此事件.⑷ Dim oStandardBar As CommandBar On Error Resume Next Set oStandardBar = applicationObject.CommandBars("Standard") 'Word 〖常用〗工具栏 Set MyButton = oStandardBar.Controls("OK") '如果没有此对象 If MyButton Is Nothing Then Set MyButton = oStandardBar.Controls.Add(1) '新增 With MyButton .Caption = "OK" .Style = Office.MsoButtonStyle.msoButtonIconAndCaption .Tag = "OK" .Visible = True .FaceId = 609 End With End If Set oStandardBar = Nothing End Sub Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant) 'Word程序关闭解除与COM加载项连接前,触发此事件⑸ On Error Resume Next 'myButton对象丢失(?) applicationObject.CommandBars("Standard").Controls("OK").Delete applicationObject.NormalTemplate.Save '删除按钮之前Normal.dot已保存并关闭,所以必须再次保存 Set MyButton = Nothing End Sub Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant) '当 COM 加载项断开连接并且在它从内存中卸载之前,将激发 OnDisconnection 事件⑹ '主要应用于关闭宿主应用程序时发生此事件. '如在Word/工具/COM加载项/COM加载项对话框中,卸载/或者删除该加载项时发生此事件 '加载项应在此事件中执行所有资源清理操作,并还原对宿主应用程序所做的任何更改。 '如果由用户卸载(断开同COM加载项的连接时)COM加载项时,调用OnBeginShutdown事件 If RemoveMode <> AddInDesignerObjects.ext_DisconnectMode.ext_dm_HostShutdown Then Call IDTExtensibility2_OnBeginShutdown(custom) Set applicationObject = Nothing '释放对象变量 End Sub Private Sub MyButton_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) MsgBox MyButton.Caption, vbInformation, "ExcelHome_ShouRou" End Sub 成品如下,如需加载,请先注册该DLL文件
p46MwpBP.rar
(6.06 KB, 下载次数: 588)
|