Vb.net 在另一个类中调用过程
我已经为outlook 2010创建了一个外接程序。我有一条缎带,上面有一个按钮。当您单击该按钮时,我希望它调用ThisAddIn.vb中的一个过程 有两个文件:ThisAddin.vb和Ribbon.vb 我试了好几件事都没用。我还把所有的程序都公开了 调用Testing123() 调用此addin.Testing123() 等 我如何正确地调用此过程Vb.net 在另一个类中调用过程,vb.net,outlook,add-in,Vb.net,Outlook,Add In,我已经为outlook 2010创建了一个外接程序。我有一条缎带,上面有一个按钮。当您单击该按钮时,我希望它调用ThisAddIn.vb中的一个过程 有两个文件:ThisAddin.vb和Ribbon.vb 我试了好几件事都没用。我还把所有的程序都公开了 调用Testing123() 调用此addin.Testing123() 等 我如何正确地调用此过程 ****Ribbon1.vb**** Imports Microsoft.Office.Tools.Ribbon Public Class
****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
问题是您试图引用类方法而不创建类 您有三个选项来实现此功能: 1) 将此插件转换为
模块
。这样,访问Testing123
方法时就不会出现任何问题,因为您目前使用的方法是这样的
2) 将此附加测试123转换为共享方法,即:
Public Shared Sub Testing123()
然后您将按如下方式访问:
Call ThisAddin.Testing123()
3) 在使用ThisAddIn类的方法之前创建该类的实例:
Dim oAddIn As New ThisAddIn
Call oAddIn.Testing123()
更新
似乎对待外接程序的方式与对待标准类的方式不同
包含从其他类型的解决方案访问加载项功能的具体实施指南
基于本文,您需要采取两个附加步骤:
1) 创建一个接口以从您的加载项中公开功能:
<ComVisible(True)> _
Public Interface IAddInUtilities
Sub Testing123()
End Interface
4) 我不太清楚最后一步所需的确切语法,因为我没有在office中安装自动化,但您需要按照以下思路进行操作:
' 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()
在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
感谢大家的评论,但我在这里的一个例子中找到了解决方案:他们讨论在会议请求中添加一个功能区(下降了2/3) 其实很简单。使用“全局”调用该过程
没有其他需要。好的,我尝试了选项2,并且能够识别MyOutlookTab类中的testing123,但是。。。当我将sub转换为共享时,它导致代码出现其他问题(无法识别我的.application.createItem…已使用,但为了简单起见,我没有包含该选项),然后我尝试了选项3,这似乎可以工作,因为它能够找到过程,但我得到了一个错误。“未为'Public sub New(工厂名称为Microsoft.blahblahblha')的参数'Factory'指定参数。以前从未见过此参数。感谢您的帮助,我想我已收到closer@user7801:根据这些附加信息,选项3可能是您的最佳选择。好的,对于选项3,它希望我创建一个“子新”“程序,因为我显然在尝试调用它。我必须在里面放什么?@user7801:你不需要在里面放任何东西,但为了安全起见,你可以放
MyBase.New()
。
' 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()
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
Globals.ThisAddIn.Testing123()