Auto-Open Sub für Excel-Mappe in AddIn-Dll

Hallo,

ich habe mir mit VisualStudio 2008 eine Art Addin erstellt, welche sowohl für Excel, Word oder auch Access verwendet werden kann.

Das AddIn wird mit RegAsm.exe registriert und man erhalt dann auch die entsprechende tlb-Datei. Danach noch schnell einen Eintrag in der Registrie und schon startet das Addin Beispielsweise mit dem Öffnen von Excel.

Im unten stehendem Code der Klassenbibliothek kann man den Verlauf beim Öffnen von Excel nachvollziehen und es werden die einzelnen Subs in der reihenfolge wie im Code angegeben durchgegangen.

Mein Problem ist, dass ich an der Stelle wo im Code ##### markiert ist, eine Sub benötige, welche automatisch auslösst sobald die Arbeitsmappe im Excel vollständig geöffnet ist.
Mein gesamter Code arbeitet immer nur bis zum öffnen der Mappe und dann nur wieder beim schliessen von Excel.
Um gescheit meine Idee umsetzen zu können benötige ich eine automatische sub-Behandlung nach dem Öffnen und beim Schliessen der Mappe im Excel.

P.S. Bitte kommt mir jetzt nicht mit der Vorlage die im VB2008 möglich ist. Diese Variante ist für meine Zwecke nicht praktikabel, da sich diese ADDIns auf 2003 und 2007 beziehen und am Client-Computer immer nach jeder Änderung des AddIns deinstalliert und neuinstalliert werden muss.

Hier der Code der Classe:
Implements Extensibility.IDTExtensibility2

Public Sub New()
MsgBox(„New“ & " | " & mod_Excel.isSGMFile())
End Sub

#Region „IDTExtensibility2 - AddInStarter-Funktionen“

_
Protected Sub OnConnection(ByVal application As Object, ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnConnection
MsgBox(„OnConnection“ & " | " & mod_Excel.isSGMFile())
End Sub

_
Protected Sub OnAddInsUpdate(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
MsgBox(„OnAddInsUpdate“ & " | " & mod_Excel.isSGMFile())
End Sub

_
Protected Sub OnStartupComplete(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnStartupComplete
MsgBox(„OnStartupComplete“ & " | " & mod_Excel.isSGMFile())
End Sub

################
'erst jetzt öffnet sich die Excelmappe und man hätte auf die Bestandteile wie Workbookname zugriff?!
'was müsste hier für eine sub/function hin, welche automatisch beim öffnen der Mappe ausgeführt wird
'das selbe trifft für das schliessen der Mappe zu

'schliesst man nicht die Mappe, sondern Excel mit der geöffneten Mappe, so hat man jetzt Zugriff auf die Bestandteile von zum Beispiel Excel.Application.ActiveWorkbook.Name, da diese ja nun geöffnet ist.
################

_
Protected Sub OnBeginShutdown(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnBeginShutdown
MsgBox(„OnBeginShutdown“ & " | " & mod_Excel.isSGMFile())
End Sub

_
Protected Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnDisconnection
MsgBox(„OnDisconnection“ & " | " & mod_Excel.isSGMFile())
End Sub

_
Protected Overrides Sub Finalize()
MsgBox(„Finalize“ & " | " & mod_Excel.isSGMFile())
End Sub

#End Region

Für Leute die Alternativen anbieten können, bin ich auch sehr dankbar.
Mein Ziel soll sein, dass der Anwender im Besten Fall eine Excel-Datei öffnet und ich anhand von einem Addin den Namen der Excel-Datei (Mappe) erkenne und bei erkennen einer bestimmten Datei eine Dialogbox öffne.

Natürlich könnte ich auch ein Addin erstellen, was mir ein Menü im Excel zaubert und dann per Mausdruck den Namen der Excel-Datei ermittlet, aber leider kann ich nur VB.net bze. VB und kein C, da ich mehr ein Hobbyprogrammierer bin und bisher suche mich vergebens wie ich im Excel ein Rubbins-Menü mit Makro-Code auf meine dll erstellen kann.

Beispiel-Code meiner funktionierenden AddIn-Dll kann ich bei Bedarf zur Verfügung stellen.

Vorab schon mal vielen Dank an die Freaks die wie ich gerne Scripten und auch Spaß daran haben anderen Helfen zu können.

Hallo!

Ich hab’ zwar gerade kein Excel da, aber vielleicht hilft Dir ja folgende grundsätzliche Überlegung:
Das Addin wird in die Excel Application geladen.
Die Application verwaltet wiederum verschiedene Mappen.
Wenn Du in Deinem Addin benachrichtigt wirst, dass Excel selbst geladen ist, könntest Du an dieser Stelle schauen, ob z.B. das Application Objekt (was an dieser Stelle schon existiert) Ereignisse zum Öffnen/Schließen von Mappen anbietet und dafür Eventhandler eintragen.

Hier: http://msdn.microsoft.com/en-us/library/microsoft.of…
sind die Events der Application beschrieben und es gibt eine ganze Menge Workbook*-Events, da müsste der richtige dabei sein.

Gruß,
Martin

Hallo Martin,

ich kann Dir gerade nicht folgen. Kannst du mir kurz anhand eines Bespieles die Verwendung der EventHandler aufzeigen?
Im besten Fall nach dem Laden der Mappe

Hallo!

Da ich - wie geschrieben - kein Excel da habe, gibt es kein Beispiel.

Lies’ Dir doch einfach die Dokumentation hier http://msdn.microsoft.com/en-us/library/microsoft.of… durch, dort gibt es auch für VB.NET den Code, mit dem man einen Event Handler für (in diesem Fall) das WorkbookOpen-Ereignis registriert.

Gruß,
Martin