Laden...

VBA und C# interoperability

Erstellt von BuffaloBill vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.728 Views
B
BuffaloBill Themenstarter:in
10 Beiträge seit 2015
vor 7 Jahren
VBA und C# interoperability

Hi Folkes
Also ich versuche VBA und C# zur zusammenarbeit zu bewegen. Da beide aus dem Haus Microsoft sind (und dank .net) könnte man meinen das sei kein problem, aber so einfach scheint es nicht zu sein.

Erster Versuch
Wenn ein WordMakro gestartet wird, soll über eine c# Libary der Name des derzeit in Word geöffneten Dokuments angezeigt werden.

Daher in C#


using Microsoft.Office.Interop.Word;
using System.Windows.Forms;


namespace dwip
{
    public class Class1
    {
        public void displayName (Document doc)
        {
            var Name = doc.FullName;
            MessageBox.Show(Name, "This is your Name", MessageBoxButtons.OK);
        }
    }
}

Daraus bauen wir eine COM libary die wir flux in VBA als referenz hinzufüegen.

Sub Test()
    Dim Test As dwip.Class1
    Set Test = New dwip.Class1
    Dim mydoc As Document
    Set mydoc = ActiveDocument
    Test.DisplayName (mydoc)
End Sub

und das geht... nicht!

Wozu das?
berechtigt Frage. VBA könnte auch direkt den namen des Dokumentes ausgeben, oder ich könnte den Namen des Dokuments als String übertragen. Beides will ich aber nicht. Das hier ist nur ein kleines beispiel (man fängt immer klein an). Später möchte ich "grössere" Dinge in c# bewältigen und da ist es "nett" wenn ich das Dokument habe.

Nun gut, man kann jetzt einwenden, dass man ja VBA weglassen könnte und das ganze in reinem C# machen - aber dann kann ich keine "knöpfe" in Word mehr bauen (welche meines Wissens nur auf Makros veweisen), sondern müsste ein eigenen Frontend für meine Applikation bauen. Daher bastle ich hier an so einer art "Brücke".

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

ist Eure COM-DLL denn richtig im System registriert (Option "Register for COM interop" in den Projektoptionen unter "Build", bzw. regasm)?

Ansonsten schau mal hier: Extend your VBA code with C#, VB.NET, or C++/CLI

Gruß, MarsStein

Edit: oder hier: Walkthrough: Calling Code from VBA in a Visual C# Project

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

H
523 Beiträge seit 2008
vor 7 Jahren

Was genau geht denn nicht? Kennt VB dwip.Class1 nicht? Wird Deine Library im Objektkatalog (F2 in VB) angezeigt?