Startseite bisherige Projekte Tools/Snippets Bücherempfehlungen Publikationen Impressum Datenschutzerklärung

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:

und natürlich ein Assembly erstellen:


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:

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.
Impressum - Datenschutzerklärung