Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
VBA und C# interoperability
BuffaloBill
myCSharp.de - Member



Dabei seit:
Beiträge: 10

Themenstarter:

VBA und C# interoperability

beantworten | zitieren | melden

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".
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von BuffaloBill am .
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3429
Herkunft: Trier -> München

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MarsStein am .
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 511
Herkunft: Münster

beantworten | zitieren | melden

Was genau geht denn nicht? Kennt VB dwip.Class1 nicht? Wird Deine Library im Objektkatalog (F2 in VB) angezeigt?
private Nachricht | Beiträge des Benutzers