C#-Code unter VBA aufrufenNovember 2011
Will man C#-Code in VBA-Anwendungen aufrufen, ist das gar nicht so schwer. Zu beachten ist aber, dass das C#-Assembly zur Verwendung mit
COM fit gemacht werden muss. Der Weg, den ich gefunden habe, führt leider nicht um einen Installer herum, falls die Lösung auf anderen
System zum Einsatz kommen soll.
Das C#-Beispiel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace Nomen {
[GuidAttribute("BA713700-522D-466e-8DD4-225884504634")]
public interface INomenclature
{
int addThree(int input);
}
[ClassInterface(ClassInterfaceType.None)]
[GuidAttribute("BA713700-522D-466e-8DD4-225884504678")]
public class Nomenclature:INomenclature
{
[ComVisibleAttribute(true)]
public void Init() { }
public Nomenclature() { }
public int addThree(int input)
{
return input + 3;
}
}
}
In der Datei AssemblyInfo.cs muss noch geändert werden:
[assembly: ComVisible(true)]
In den Einstellungen musste ich noch "Für COM-Interop registrieren" auswählen:
![](vba/interop.png)
und natürlich ein Assembly erstellen:
![](vba/asse.png)
Fertig. Die Visual C# Express Edition hat dann offenbar das erstellte Assembly mit einer .tlb-Datei versehen und im System registriert.
Danach kann es in VBA verwendet werden.
In VBA
Unter VBA muss zunächst der Verweis eingebunden werden:
![](vba/verw.png)
Danach tauchen die C#-Object im Objektkatalog auf.
Jetzt kann man den C#-Code dann z.B. verwenden mit
Private Sub CommandButton1_Click()
Dim m As New Nomenclature
MsgBox (m.addThree(2))
End Sub
Eigentlich einfach, hat aber trotzdem lange gedauert, bis es bei mir geklappt hat.