Clever-Excel-Forum

Normale Version: Sub in Addin von extern aufrufen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich möchte aus Outlook per VBA eine Procedure in einem eigenen Excel-Addin (2003) aufrufen. Das funktioniert auch problemlos, wenn Excel (mit dem Addin) bereits geöffnet ist.

Wenn Excel aber noch nicht geöffnet ist, dann gelingt mir das nicht. Mein bisheriges Vorgehen:
- Prüfen, ob Excel geladen
- wenn ja, dann Procedur im Addin aufrufen (klappt)
- wenn nein, dann neue Instanz von Excel erstellen
- Procedur im Addin aufrufen (klappt nicht)

Merkwürdig finde ich, dass das Addin geladen wird, wenn ich Excel "manuell" starte (leere, neue Arbeitsmappe), das Addin aber nicht geladen wird, wenn ich es über ein VBA-Makro aufrufe, obwohl es offensichtlich als "Installed" erkannt wird:


Code:
Sub Test()
    Dim Xl As Object  ' Excel.Application
    Dim p  As Variant ' Programmausführung
    Dim i  As Byte
   
    On Error Resume Next
   
    Set Xl = GetObject(, "excel.application")
   
    On Error GoTo 0
    If Xl Is Nothing Then Set Xl = New Excel.Application
   
    For i = 1 To AddIns.Count
        ' Addin wird immer als "Installed = True" erkannt, auch bei neuer Instanz
        Debug.Print AddIns(i).Name & " " & AddIns(i).Installed
    Next
   
    ' funktioniert bei bereits vorher geöffnetem Excel,
    ' funktioniert nicht, bei neuer Excel-Instanz, wenn sie mit dieser Sub erzeugt wird:
    p = Xl.Run("MeinExcelTest")
End Sub

Hat jemand eine Idee, woran das liegt? Noch besser: hat jemand eine Lösung?

Danke im Voraus.
Hallo,

jetzt ungetestet, versuche es mal mit: p = Xl.Run("MeinAddInDateiname!MeinExcelTest")

Gruß
Danke für deinen Tipp – funktioniert aber leider auch nicht. Offensichtlich ist das Addin zu demZeitpunkt noch gar nicht geladen. Aber selbst wenn ich mit "Sleep" eine Wartezeit vorgebe, wird es nicht geladen.
Hallöchen,

Du knockst Dich mit Deinem OnError anscheinend selber aus Sad
Mit GetObject greifst Du auf ein geöffnetes Excel zu. Ist keins offen, wird ein Fehler erzeugt. Da hilft auch keine Wartezeit.
Du könntest den Fehlerwert benutzen, um bei nicht geöffnetem Excel mit CreateObject eins zu öffnen ...
Hallo,

danke für den Hinweis, aber nehme ich das
Code:
On Error Resume Next

raus, dann erzeugt 

Code:
Set Xl = GetObject(, "excel.application")

den Fehler


"Laufzeitfehler '429':
Objektdarstellung durch ActiveX-Komponente nicht möglich."

Scheint mir auch logisch, wenn zum Anfügen an eine laufende Instanz ein Fehler kommt, wenn noch gar keine Excel-Instanz vorhanden ist.

Danach ist es egal, ob ich mit 

Code:
Set Xl = CreateObject("Excel.Application")

oder mit 

Code:
Set Xl = New Excel.Application

eine Excel-Instanz öffne. Mein Makro in dem AddIn wird nie gefunden.

Erst wenn ich eine Excel-Datei vorher geöffnet habe, dann funktioniert der Aufruf (was ja auch logisch ist).

Ich habe mich für die letzte Variante entschieden, also vorher Excel zu öffnen.
Hallo Lucky Joe,

hier hat Max eine Lösung gepostet.

Gruß Uwe
Hallo Uwe,

... that's it! – Danke! Läuft, wie ich es wollte.