2012-04-04 10 views
3

Ich habe ein XLA-Add-In für Excel geschrieben. Dieses Add-In enthält ein Klassenmodul. Ich habe mich gefragt, wie ich dieses Klassenmodul für den Einsatz freilegen kann. Ich habe herumgesucht und einen Weg gefunden, es mit Visual Studio zu machen, aber leider habe ich kein Visual Studio. Gibt es eine Möglichkeit, dies nur von XLA zu tun?Expose-Klasse in Excel XLA-Add-In

Antwort

6

Sie können eine öffentliche Funktion in der XLA erstellen, die eine Instanz der Klasse zurückgibt. Dann kann jede Arbeitsmappe, die einen Verweis auf den XLA hat, diese Funktion aufrufen. Angenommen, Sie haben Book2, das Class1 und Book3 enthält, in denen Sie Class1 verwenden möchten. Ändern Sie die Instantiing-Eigenschaft Class1 in Public Not Creatable (F4 im Klassenmodul).

In Book2 in einem Standardmodul eine Funktion

Public Function InstantiateClass1() As Class1 

    Set InstantiateClass1 = New Class1 

End Function 

In Book3 erstellen, eine Eigenschaft

Public Sub DoStuff() 

    Dim clsClass1 As Book2Project.Class1 

    Set clsClass1 = instantiateclass1 

    clsClass1.prop = "something" 

    Debug.Print clsClass1.prop 

End Sub 

Class1 hat die Funktion aufrufen prop in diesem Beispiel genannt. Der VBProject-Name von Book2 wurde in Book2Project geändert.

+0

+1 Bang auf Ziel wie üblich :) –

+0

+1 auf die Lösung. Ich mag es, alle Instanz-Erstellungsfunktionen in einem Factory-Klassenmodul zu kapseln (das in dem Book2 XLA in dem Beispiel mit einer Einstellung von Public Not Creatable erstellt werden würde). Dann benötigen Sie nur eine einzige Erstellungsmethode im Standardmodul, um die Factory-Instanz zu erstellen, die vom Client verwendet wird. Dadurch kann der Client auch alle verfügbaren Instanziierungsmethoden im Factory-Objekt mit Intellisense anzeigen. –