Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在另一个类中调用过程_Vb.net_Outlook_Add In - Fatal编程技术网

Vb.net 在另一个类中调用过程

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

我已经为outlook 2010创建了一个外接程序。我有一条缎带,上面有一个按钮。当您单击该按钮时,我希望它调用ThisAddIn.vb中的一个过程

有两个文件:ThisAddin.vb和Ribbon.vb

我试了好几件事都没用。我还把所有的程序都公开了

调用Testing123()

调用此addin.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

问题是您试图引用类方法而不创建类

您有三个选项来实现此功能:

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()