Я пытаюсь создать пользовательскую функцию Excel 2007 vb.net (UDF) с использованием VS 2010 и перешел к этому этапу (заимствуя из примера Эрика Картера в http://blogs.msdn.com/b/eric_carter/archive/2004/12/01/273127.aspx):
Namespace AutomationAddin
<Guid("1aeeb1b5-e099-4f7f-aeb0-3e9f19b64f62")>
<ClassInterface(ClassInterfaceType.AutoDual)>
<ComVisible(True)>
Public Class MyFunctions
Public MyFunctions()
Public Function MultiplyNTimes(ByVal number1 As Double, ByVal number2 As Double, ByVal timesToMultiply As Double) As Double
Dim result As Double = number1
For i As Integer = 0 To timesToMultiply - 1
result = result * number2
Next
Return result
End Function
<ComRegisterFunctionAttribute()>
Public Shared Sub RegisterFunction(ByVal type As Type)
Registry.ClassesRoot.CreateSubKey(GetSubKeyName(type, "Programmable"))
Dim key As RegistryKey = Registry.ClassesRoot.OpenSubKey(GetSubKeyName(type, "InprocServer32"), True)
key.SetValue("", (System.Environment.SystemDirectory + "\mscoree.dll"), RegistryValueKind.String)
End Sub
<ComUnregisterFunctionAttribute()>
Public Shared Sub UnregisterFunction(ByVal type As Type)
Registry.ClassesRoot.DeleteSubKey(GetSubKeyName(type, "Programmable"), False)
End Sub
Private Shared Function GetSubKeyName(ByVal type As Type, ByVal subKeyName As String) As String
Dim s As System.Text.StringBuilder = New System.Text.StringBuilder
s.Append("CLSID\{")
s.Append(type.GUID.ToString.ToUpper)
s.Append("}\")
s.Append(subKeyName)
Return s.ToString
End Function
End Class
End Namespace
Однако, когда я собираю его с помощью VS 2010 и пытаюсь загрузить его в Excel 2007 с помощью Addin Manager> Automation, я нахожу его в списке AutomationAddin.AutomationAddin.MyFunctions и нажимаю кнопку «ОК только для того, чтобы получить ошибку» AutomationAddin.AutomationAddin.MyFunctions не является действительной надстройкой. " Я установил настройки сборки, чтобы зарегистрироваться для COM-взаимодействия.
Я посмотрел онлайн и попробовал следовать этой статье Как получить COM Server для Excel, написанный на VB.NET, установленный и зарегистрированный в списке серверов автоматизации? , но безрезультатно. Я проверил свой реестр (после того, как собрал свой проект) и в CLSID / {myGuid} / InprocServer32 / Default данные установлены в C: \ WINDOWS \ system32 \ mscoree.dll, а CLSID / {myGuid} / Programmable уже существует.
Я не совсем уверен, что я делаю неправильно, и буду признателен за любые указания или предложения по теме.
Приветствия
Ben