Nie sądzę, że VSTO obsługuje Excel UDF, zalecenie ogólne to użycie dodatków do automatyzacji (jak sugeruje link Sid).
Inną opcją jest wywołanie zarządzanej funkcji VSTO z VBA. Ponownie nie jest to zalecane, ale możliwe.
(Podsumowanie samouczka z linku) Oto łatwy sposób na wywołanie funkcji zarządzanych z VBA.
Utwórz klasę ze swoich funkcji w VSTO
<System.Runtime.InteropServices.ComVisible(True)> _
Public Class MyManagedFunctions
Public Function GetNumber() As Integer
Return 42
End Function
End Class
drut swoją klasę do VBA w VSTO
Private Sub ThisWorkbook_Open() Handles Me.Open
Me.Application.Run("RegisterCallback", New MyManagedFunctions)
End Sub
Tworzenie Hook dla kodu zarządzanego i otoki dla funkcji w VBA
W module VBA w arkuszu kalkulacyjnym lub dokumencie
Dim managedObject As Object
Public Sub RegisterCallback(callback As Object)
Set managedObject = callback
End Sub
Public Function GetNumberFromVSTO() As Integer
GetNumberFromVSTO = managedObject.GetNumber()
End Function
Teraz można wprowadzić = GetNumberFromVSTO() w komórce, kiedy rozpoczyna Excel wartość komórki powinny być 42.
http://blogs.msdn.com/b/pstubbs/archive/2004/12/31/344964.aspx
Być może [to] (http: // blogs.msdn.com/b/eric_carter/archive/2004/12/01/writing-user-defined-functions-for-excel-in-net.aspx) może pomóc. –
*** Nieeee! *** Zastanów się dwa razy zanim zejdziesz tą ścieżką.Zachęcam do stosowania podejścia UDF, więc logika kodu jest a) Ochrona przed użytkownikami Excela zmieniającymi krytyczną logikę *, które będą trudne do wykrycia * b) w jednym dodatku i nie powielone w wielu skoroszytach c) nie wymaga Zaufania pozwolenie d) jednostka testowalna e) napisana w aktualnym języku i tak dalej. –