The Interop Forms Toolkit 2.1 provides what you need to write VB.NET code that is callable VB6 projects and would guess the same for use in Excel. The main thing to understand is when writing this code that anything that gets pushed back to the caller must be in understandable. Example you cannot return a List(Of String) from a LINQ statement but can write a LINQ statement that returns a String array as shown below taken from a demo I did using this library.
Code:
Public Function LINQ_Demo() As String()
Dim Names As String() = New String() {"Bob", "Mary", "Jane", "Bob", "Joe", "Bill"}
Return (From Name In Names Select Name Distinct Order By Name).ToArray
End Function
With that said there is a good deal to know when working with the ToolKit, both VB.NET and what is acceptable in an Excel module.
Below is the COM registration for a DLL built using the TookKit which is generated for you.
Code:
#Region "COM Registration"
' These GUIDs provide the COM identity for this class
' and its COM interfaces. If you change them, existing
' clients will no longer be able to access the class.
Public Const ClassId As String = "a19204e3-dd80-4c33-a035-f4764e25ab60"
Public Const InterfaceId As String = "f52d1e57-0cd0-4420-86bb-55492a50e8f1"
Public Const EventsId As String = "cf789067-f3f8-4165-b5f0-02dd2e849162"
'These routines perform the additional COM registration needed by ActiveX controls
<EditorBrowsable(EditorBrowsableState.Never)> _
<ComRegisterFunction()> _
Private Shared Sub Register(ByVal t As Type)
ComRegistration.RegisterControl(t)
End Sub
<EditorBrowsable(EditorBrowsableState.Never)> _
<ComUnregisterFunction()> _
Private Shared Sub Unregister(ByVal t As Type)
ComRegistration.UnregisterControl(t)
End Sub
#End Region
I don't have this installed currently so I cannot assist if you go down this path.
Also please note that much of the information in the link above discuss forms but as shown in my code blocks above they are in a project without forms. How this is done? Read the documentation and roll some code.