我为outlook 2010创建了一个加载项。我有一个带有按钮的功能区。单击该按钮时,我希望它调用ThisAddIn.vb中的过程。
有两个文件:ThisAddin.vb和Ribbon.vb。
我尝试了几件事无济于事。我还将所有程序都设置为公开。
致电测试123()
调用ThisAddIn.Testing123()
等
如何正确调用此程序?
****Ribbon1.vb****
Imports Microsoft.Office.Tools.Ribbon
Public Class MyOutlookTab
Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Handles Button1.Click
Call Testing123()
End Sub
End Class
***ThisAddIn.vb***
Public Class ThisAddIn
Public Sub Testing123()
System.Windows.Forms.MessageBox.Show("It Works!")
End Sub
End Class
答案 0 :(得分:3)
问题在于您尝试在不创建类的情况下引用类方法。
您可以使用以下三种方法:
1)将ThisAddIn
转换为Module
。然后,在您访问Testing123
方法时不会出现任何问题。
2)将ThisAddin.Testing123
转换为Shared
方法,即:
Public Shared Sub Testing123()
然后您将按如下方式访问:
Call ThisAddin.Testing123()
3)在使用其方法之前创建ThisAddIn类的实例:
Dim oAddIn As New ThisAddIn
Call oAddIn.Testing123()
<强>更新强>
看来,addins的处理方式与标准类不同。
This MSDN article包含从其他类型的解决方案访问AddIn功能的具体实施指南。
根据这篇文章,您需要采取一些额外的步骤:
1)创建一个界面以公开AddIn的功能:
<ComVisible(True)> _
Public Interface IAddInUtilities
Sub Testing123()
End Interface
2)在你的插件项目中添加一个实用程序类:
<ComVisible(True)> _
<ClassInterface(ClassInterfaceType.None)> _
Public Class AddInUtilities
Implements IAddInUtilities
Public Sub Testing123() Implements IAddInUtilities.Testing123
System.Windows.Forms.MessageBox.Show("It Works!")
End Sub
End Class
3)将以下内容添加到ThisAddIn以将实用程序公开给外部调用者:
Private utilities As AddInUtilities
Protected Overrides Function RequestComAddInAutomationService() As Object
If utilities Is Nothing Then
utilities = New AddInUtilities()
End If
Return utilities
End Function
4)由于我没有在办公室安装自动化系统,我对最后一步所需的确切语法有点不清楚,但你需要按照以下几点做一些事情:
' OutlookTest should be changed to the name of the project ThisAddIn is in
Dim addIn As Office.COMAddIn = Globals.ThisAddIn.Application.COMAddIns.Item("OutlookTest")
Dim utilities As OutlookTest.IAddInUtilities = TryCast( _
addIn.Object, OutlookTest.IAddInUtilities)
utilities.Testing123()
答案 1 :(得分:2)
感谢大家的评论,但我在这里找到了一个示例中的解决方案:http://msdn.microsoft.com/en-us/library/ee620548.aspx,他们谈到在会议请求中添加功能区(2/3)。
实际上非常简单。您使用“全局”
调用该过程Globals.ThisAddIn.Testing123()
不需要其他任何东西。
答案 2 :(得分:1)
您必须先创建该类的新实例,然后才能在vb.net中调用它。
所以应该允许你调用它..
Public Class MyOutlookTab
Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Handles Button1.Click
Dim testing As New ThisAddIn()
Call testing.Testing123()
End Sub
End Class