Проблема в том, что вы пытаетесь ссылаться на методы класса, не создавая класс.
У вас есть три варианта сделать эту работу:
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()
Обновление
Похоже, что надстройки обрабатываются иначе, чем стандартные классы.
В этой статье MSDN содержатся конкретные рекомендации по реализации доступа к функциональности 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()