Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Aus VBA auf eigene DLL aus VB.NET zugreifen

Aus VBA auf eigene DLL aus VB.NET zugreifen
17.02.2009 16:00:00
Carsten
Hallo,
solange man innerhalb von VB.NET bleibt ist ja alles ganz einfach und schön, aber wie komme ich aus VBA heraus an die Methoden einer DLL ran die ich in VB.NET 2005 programmiert habe?
Da ich in einer öffentlichen Verwaltung arbeite und wir hier hunderte von Excel- und Word-Vorlagen haben die im Laufe der Jahre/Jahrzehnte unübersichtlich gewachsen sind und wir nun Systempfade ändern müssen etc. stehen wir vor dem Problem viele der Vorlagen mit Makros von Hand anpassen zu müssen. Wir haben uns überlegt in diesem Zuge vieles zu ändern und wollen nun einen Großteil des Programmcodes auslagern um zum einen nicht alles doppelt und dreifach programmieren zu müssen und um den späteren Wartungsaufwand so gering wie möglich zu halten. Leider liefert meines Wissens nach VBA keine gescheite und für uns brauchbare Möglichkeit Klassen o.ä. in separate Dateien auszulagern. Wir haben schon mit der Auslagerung in externe Vorlagen und einem Verweis auf diese experimentiert. Das funktioniert aber leider nur bei einem einzelnen Zugriff auf diese Datei. Öffnen mehrere User Vorlagen die auf diese .dot verweisen gibts Fehlermeldungen.
Nun haben wir zum Test einige Dinge in vb.net programmiert und daraus eine normale Klassenbibliothek und zum Test auch eine COM-Klassenbibliothek gebaut. Leider habe ich bisher zu wenig Erfahrungen im Einbinden von DLLs in meinen VBA-Code und scheitere leider daran.
Ich hoffe das Ihr mir da weiterhelfen könnt.
Grüße,
Carsten
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aus VBA auf eigene DLL aus VB.NET zugreifen
17.02.2009 16:07:00
mumpel
Hallo!
Erstelle eine dll/ocx mit Einsprungspunkt. Anschließend die dll/ocx im System registrieren. Dann kannst Du die Steuerdatei über Extras->Verweise einbinden. Im VBA-Code kannst Du dann die Funktionen der Steuerdatei nutzen.
Gruß, René
AW: Aus VBA auf eigene DLL aus VB.NET zugreifen
17.02.2009 16:22:00
Carsten
Hi!
Danke für Deine Antwort, aber vielleicht habe ich meine DLL ja falsch erstellt. Ich habe in VB.NET 2005 als Projekt eine COM-Klassenbibliothek ausgewählt und diese sieht so aus:

ComClass(testVBA.ClassId, testVBA.InterfaceId, testVBA.EventsId) _
Public Class testVBA
#Region "COM-GUIDs"
' Diese GUIDs stellen die COM-Identität für diese Klasse
' und ihre COM-Schnittstellen bereit. Wenn Sie sie ändern, können vorhandene
' Clients nicht mehr auf die Klasse zugreifen.
Public Const ClassId As String = "4b20da3f-86d5-40ad-8236-39c2697c4daf"
Public Const InterfaceId As String = "937ab9cf-a445-4549-a380-e2e29889676c"
Public Const EventsId As String = "8c7dcd8a-c226-4a36-ae02-1ca25a0368a0"
#End Region
' Eine erstellbare COM-Klasse muss eine Public Sub New()
' ohne Parameter aufweisen. Andernfalls wird die Klasse
' nicht in der COM-Registrierung registriert und kann nicht
' über CreateObject erstellt werden.
Public Sub New()
MyBase.New()
End Sub
Public Sub testMsg()
MsgBox("Ein Hallo aus .NET")
End Sub
End Class


Anm.: Die erste Zeile (ComClass...) steht eigentlich in spitzen Klammern, welche das Forum hier nur leider nicht wollte...
.NET registriert sie ja nach dem kompilieren automatisch im System und ich kann sie danach auch in den Verweisen von Excel/Word auswählen. Nur irgendwie komme ich nicht an die Funktionen ran. Wie sollte denn für mein Beispiel der VBA-Code aussehen? Wie gesagt, DLL-bezogen habe ich mit VBA leider noch keine Erfahrungen.
Grüße,
Carsten

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Aus VBA auf eigene DLL aus VB.NET zugreifen


Schritt-für-Schritt-Anleitung

  1. Erstelle eine DLL in VB.NET: Wähle bei der Erstellung deines Projekts in Visual Studio eine COM-Klassenbibliothek aus. Stelle sicher, dass du die notwendigen COM-Attribute hinzufügst. Dein Code könnte wie folgt aussehen:

    <ComClass(testVBA.ClassId, testVBA.InterfaceId, testVBA.EventsId)>
    Public Class testVBA
       ' GUIDs für die COM-Identität
       Public Const ClassId As String = "4b20da3f-86d5-40ad-8236-39c2697c4daf"
       Public Const InterfaceId As String = "937ab9cf-a445-4549-a380-e2e29889676c"
       Public Const EventsId As String = "8c7dcd8a-c226-4a36-ae02-1ca25a0368a0"
    
       Public Sub New()
           MyBase.New()
       End Sub
    
       Public Sub testMsg()
           MsgBox("Ein Hallo aus .NET")
       End Sub
    End Class
  2. Registriere die DLL: Nach dem Kompilieren wird die DLL automatisch im System registriert. Dies ist notwendig, damit Excel auf die Funktionen deiner DLL zugreifen kann.

  3. VBA-Projekt öffnen: Öffne Excel und gehe zu „Entwicklertools“ > „Visual Basic“, um den VBA-Editor zu starten.

  4. DLL einbinden: Gehe zu „Extras“ > „Verweise“ und suche nach deiner DLL. Setze ein Häkchen, um die excel vba dll in dein VBA-Projekt einzubinden.

  5. VBA-Code schreiben: Der folgende Beispielcode zeigt, wie du die Funktionen deiner DLL verwenden kannst:

    Dim obj As testVBA
    Set obj = New testVBA
    obj.testMsg

Häufige Fehler und Lösungen

  • VBA Klasse nicht registriert: Wenn du beim Zugriff auf die DLL die Fehlermeldung „Klasse nicht registriert“ erhältst, stelle sicher, dass die DLL korrekt registriert ist. Verwende gegebenenfalls regasm.exe zum Registrieren der DLL.

  • DLL-Funktionen anzeigen: Wenn die Funktionen deiner DLL nicht angezeigt werden, überprüfe, ob die DLL richtig in den Verweisen eingebunden ist und ob die benötigten Attribute in deinem VB.NET-Code gesetzt sind.

  • Excel VBA DLL nicht gefunden: Vergewissere dich, dass die DLL im Systemverzeichnis oder in einem Verzeichnis ist, das von Excel gefunden werden kann.


Alternative Methoden

  • Externe Vorlagen verwenden: Du kannst auch externe Vorlagen in VBA verwenden, um den Code zu organisieren. Dies kann jedoch zu Problemen führen, wenn mehrere Nutzer gleichzeitig auf die Vorlagen zugreifen.

  • VBA Kernel32.dll integrieren: In einigen Fällen kann es nützlich sein, die kernel32.dll in VBA zu integrieren, um systemnahe Funktionen zu nutzen. Dies ist jedoch in der Regel nicht notwendig, wenn du eine VB.NET DLL verwendest.


Praktische Beispiele

Ein einfaches Beispiel, um eine Funktion aus deiner DLL aufzurufen:

Sub TestDLL()
    Dim test As testVBA
    Set test = New testVBA
    test.testMsg ' Zeigt eine MessageBox mit einer Nachricht an
End Sub

Die obige Prozedur erstellt ein neues Objekt deiner vb net dll in vba und ruft die testMsg-Methode auf, die eine Nachricht anzeigt.


Tipps für Profis

  • Debugging in VB.NET: Nutze die Debugging-Tools von Visual Studio, um sicherzustellen, dass deine DLL wie gewünscht funktioniert, bevor du sie in VBA verwendest.

  • Versionierung: Achte darauf, die Versionierung deiner DLL zu verwalten, um Komplikationen bei der Registrierung und Nutzung in VBA zu vermeiden.

  • Documentation: Halte deine Funktionen gut dokumentiert, um späteren Wartungsaufwand zu minimieren.


FAQ: Häufige Fragen

1. Wie kann ich eine VB.NET DLL erstellen?
Du kannst eine COM-Klassenbibliothek in Visual Studio erstellen und die entsprechenden Attribute hinzufügen, um die DLL für VBA nutzbar zu machen.

2. Wie kann ich eine DLL in VBA einbinden?
Nutze den VBA-Editor in Excel, gehe zu „Extras“ > „Verweise“ und wähle deine DLL aus, um sie in dein Projekt einzubinden.

3. Was tun, wenn die DLL nicht gefunden wird?
Überprüfe die Registrierung der DLL und stelle sicher, dass sie sich im richtigen Verzeichnis befindet.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige