|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
在VS中制作一个Excel外接程序 我们希望有一个独特的图标显示在菜单栏
比如个人的头像之类的
这在EXCEL2007及以上版本 因为有RibbonX可以很方便的完成
但是EXCEL2003是没有RibbonX的
那是否EXCEL2003就无法自定义了呢?
这里不才提供一个实现的方法^^(VB.NET)
首先在VS中新建一个EXCEL2003外接程序,代码如下
- Imports Microsoft.Office.Core
- Public Class ThisAddIn
- Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
- ' VSTO 生成代码的开始
- Me.Application = CType(Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Wrap(GetType(Excel.Application), Me.Application), Excel.Application)
- Dim bar As CommandBarControl
- Dim flag As Boolean
- Dim temp As New convertipic("{4C599241-6926-101B-9992-00000B65C6F9}") '这个是Microsoft Forms 2.0 Image控件对应的CLSID
- Dim ipic As stdole.IPictureDisp
- ipic = temp.transp(My.Resources.icon)
- For Each bar In Me.Application.CommandBars("Worksheet Menu Bar").Controls
- If bar.Parameter = "ExportComp" Then bar.Delete()
- Next
- If Not flag Then
- cusbtn.btn = Me.Application.CommandBars("Worksheet Menu Bar").Controls.Add(Office.MsoControlType.msoControlButton, , "ExportComp", Temporary:=True)
- With cusbtn
- .btn.Picture = ipic
- End With
- End If
- ipic = Nothing
- End Sub
- Private Sub ThisAddIn_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown
- End Sub
- End Class
复制代码 在菜单栏中选择 项目 - <项目名>属性
选择资源选项卡,点击添加资源,添加现有文件,然后选择你需要制作成图标的文件(这也是VS中嵌入资源文件的通用方法),本例中请将其命名为 icon
新建一个名为 clsbtn 的类模块 代码如下:
- Public Class clsbtn
- Public WithEvents btn As Microsoft.Office.Core.CommandBarButton
- Private Sub btn_Click(ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, ByRef CancelDefault As Boolean) Handles btn.Click
- MsgBox("Hello World")
- End Sub
- End Class
复制代码
新建一个名为convertipic的类模块 代码如下
- Public Class convertipic : Inherits System.Windows.Forms.AxHost
- Sub New(ByVal a As String)
- MyBase.New(a)
- End Sub
- Function transp(ByVal image As System.Drawing.Image) As stdole.IPictureDisp
- transp = AxHost.GetIPictureDispFromPicture(image)
- End Function
- End Class
复制代码
新建一个名为 globalvar 的模块 代码如下
- Module globalvar
- Public cusbtn As New clsbtn
- End Module
复制代码
然后大功告成^^
主要原理 使用了 CommandBarButton.picture 属性 可接收一个stdole.IPictureDisp接口成员
再利用System.Windows.Forms.AxHost的GetIPictureDispFromPicture方法转换image对象为stdole.IPictureDisp
System.Windows.Forms.AxHost类的作用是 包装 ActiveX 控件,并将其作为功能完全的 Windows 窗体控件进行公开。
附上源文件:
ExportComp.rar
(63.51 KB, 下载次数: 128)
|
|