Kan*_*esh 2 vb.net vba excel-vba visual-studio-2010 excel-addins
我正在使用Visual Studio 2010创建Excel加载项.我的目的是向单元格添加上下文菜单,并对选定的单元格执行某些操作.这是我现在的代码
Public Class CC
Private Sub ThisAddIn_Startup() Handles Me.Startup
AddMenu()
End Sub
Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
DeleteMenu()
End Sub
'AddMenu add context menu to excel
Sub AddMenu()
On Error Resume Next
Dim Bar As Microsoft.Office.Core.CommandBar
Dim NewControl As Microsoft.Office.Core.CommandBarControl
Application.CommandBars("Cell").Controls("A").Delete()
Bar = Application.CommandBars("Cell")
NewControl = Bar.Controls.Add(Microsoft.Office.Core.MsoControlType.msoControlPopup, Id:=1, Temporary:=True)
With NewControl
.Caption = "A"
.BeginGroup = True
.TooltipText = "Change case of selected cells."
End With
With NewControl.Controls.Add(Microsoft.Office.Core.MsoControlType.msoControlButton)
.Caption = "A1"
.FaceId = 1144
.OnAction = "A1"
End With
With NewControl.Controls.Add(Microsoft.Office.Core.MsoControlType.msoControlButton)
.Caption = "A2"
.FaceId = 1145
.OnAction = "A2"
End With
With NewControl.Controls.Add(Microsoft.Office.Core.MsoControlType.msoControlButton)
.Caption = "A3"
.FaceId = 1155
.OnAction = "A3"
End With
End Sub
'DeleteMenu deletes the context meny added to excel
Sub DeleteMenu()
On Error Resume Next
Application.CommandBars("Cell").Controls("A").Delete()
End Sub
Sub A1()
MsgBox "A1"
End Sub
Sub A2()
MsgBox "A2"
End Sub
Sub A3()
MsgBox "A3"
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
当我安装此加载项时,上下文菜单出现在excel中,但是当我单击菜单按钮时,我收到一条错误消息,指出该宏在工作簿中不可用.任何人都可以告诉我如何使它工作?
您的方法A1,A2和A3不会自动注册为Excel的宏.因此,将其名称设置为按钮的OnAction字符串无效 - Excel不知道名为"A1"的宏.因此,从这个意义上说,VSTO加载项的行为与VBA中的代码完全不同.
还有另一种方法:对于CommandBar按钮,您可以添加事件处理程序 - 您将使用WithEvents关键字,然后处理按钮的Click事件.可能会帮助您入门的一些示例如下:http://msdn.microsoft.com/en-us/library/aa189726(v = office.10).aspx
使用Excel-DNA(我开发的开源.NET/Excel集成库),.NET代码中的方法和用户定义函数通过C API在Excel中注册.因此,行为更接近于VBA的行为,并且使用OnAction ="..."字符串的代码也会起作用.
归档时间: |
|
查看次数: |
3796 次 |
最近记录: |