none
Excel 2003 Add-In verschwindet trotz Registrierung und Full-Trust RRS feed

  • Frage

  • Hallo werte VSTO-Entwickler,

    da das Thema VSTO-Entwicklung nicht so weitläufig dokumentiert ist, wie beispielsweise PHP-Programmierung, hoffe ich, dass ich hier zu meinem Problem eine Lösung oder wenigstens Hilfestellung beziehen kann. Google und englische Foren konnten mir bisher nicht weiterhelfen.

    Momentan arbeite ich an einem Excel 2003 Add-In, welches mit MS Visual Studio 2008 entwickelt wird.
    Das eigentliche Add-In besteht aus einem VSTO-Add-In und einem Automatisierungsserver (DLL), welcher eine Excel-Funktion implementiert.
    Diese Excel-Funktion dient als Container für die eigentlichen Funktionen, die wiederum von einem User erstellt werden. Der Zugriff auf die Rückgabewerte erfolgt im Hintergrund über eine Datenbankverbindung.
    Die Funktion hat zwei Sting-Parameter, die eigentliche Funktion und deren Parameter, und wird folgendermaßen in der Excel-Zelle aufgerufen (wie jede andere eigentlich auch):

    =Funktion("<Funktionsname>";"<Parameter1>;<Parameter2a>,<Parameter2b>;<Parameter3>")

    Da die Anwender dieses Add-In normalsterbliche Bürokauffrauen und Bürokaufmänner sind, habe ich u.a. für diese Funktionen eine GUI erstellt (Windows-Form), die über das eigentliche VSTO-Add-In aufgerufen wird, um die gespeicherten Funktionen und deren Parameter auswählen und eingeben zu können. Über die Windows-Form wird ein String erstellt, der wie die obige Funktion aussieht und in die Excel-Zelle geschrieben wird.
    Nun tritt allerdings folgendes Problem auf:

    Aufgrund des "=" in der Zeichenkette versucht Excel eine Funktion aufzurufen und die Prozedur abzuarbeiten.
    Allerdings tritt hier der Fehler auf. Excel findet die Funktion in der Funktionsliste nicht und schreib als Wert "Name? " in die Zelle. Dies bedeutet im Allgemeinen, dass die Funktion nicht gefunden wird bzw. existiert. Schaut man im Nachhinein in die Formel-/ Funktionsliste, so ist die Funktions-Funktion nicht mehr vorhanden, aber der Automatisierungsserver noch unter Add-Ins vorhanden und aktiv. Testet man jedoch dieses Szenario mit der Funktion "=SUMME(1;2)" als String funktioniert es.

    Im Gegenzug zur beschriebenen Situation, funktioniert die Excelfunktion ohne Probleme, wenn nachdem Excel gestartet wurde:
    • der Nutzer diese ohne GUI direkt in die Excelzelle schreibt
    • der Nutzer diese ohne GUI direkt in die Excelzelle schreibt und im Nachhinein die GUI der Funktionsabfrage nutzt
    • der Nutzer zuvor lediglich auf den Button "Funktion einfügen" klick (dadurch sieht man die Funktion in der Auswahl)
    • quasi jede andere Variante genutzt wird, ohne die GUI von Beginn an zu nutzen.

    Das VSTO-Add-In, als auch der Automatisierungsserver, werden über ein Setup installiert und registriert, und die Rechtevergabe ist ebenfalls korrekt.

    Also woran liegt es, dass die Funktion des Automatisierungsservers sich in bestimmten Fällen verflüchtigt?


    Vielen Dank im Vorraus


    Ps: Ich habe bewusst nicht noch mehr Vorinformationen und -Kenntnisse eingebracht, da ich sonst auch hätte ein Buch schreiben können. Falls noch Informationen nötig sind, werde ich diese gern nachreichen.
    Mittwoch, 25. November 2009 09:43

Antworten

  • Hallo zusammen,

    nach einer Woche erfolgloser multilingualer Google-Befragungen und diversen Forumposts ohne Antwort, konnte ich das Problem schliesslich selbst lösen.
    Warum Excel allerdings so eigenartig reagiert, bleibt mir jedoch weiterhin ein Rätsel. Prinzipiell lag es an der Art, wie ich die Zelle angesprochen habe und auch daran, wie der eigentliche String aufgebaut war. Da ich nicht genau weiß, ob es überhaupt jemanden interessiert oder jemand diese Information benötigt, aber es nicht ausschliessen kann, werd ich das Problem trotzdem niederschreiben.


    1. Excel-Zelle ansprechen:


    Ursprünglich habe ich die Excel-Zelle mit "Me.Application.ActiveCell.Value" angesprochen um den String zu übergeben, da es zu Beginn völlig egal war, ob ich "Value2", "Formula", "FormulaR1C1" etc. verwendete.
    Allerdings ist für das korrekte Ansprechen der Zelle in meinem Fall "Me.Application.ActiveCell.Formula" notwendig (und wahrscheinlich auch im Allgemeinen bei der Arbeit mit Excel-Funktionen).


    2. Die Excel-Funktion als String:

    Habe ich nun versucht die Excel-Zelle mit:

    Me.Application.ActiveCell.Formula = "=Funktion("""<Funktionsname>""";"""<Parameter1>;<Parameter2a>,<Parameter2b>;<Parameter3>""")"

    zu füllen, wurde ein COMException (HRESULT: 0x800A03EC) geworfen, welche allerdings eine allgemeine Fehlermeldung ist.
    Nach einiger Probiererei wurde klar, dass es an dem Semikolon der eigentlichen Excel-Funktion lag und Excel in diesem Zusammenhang nicht umgehen kann.
    Lange Rede kurze Lösung...Warum Excel das Semikolon nicht annimmt, kann ich nicht sagen.
    Jedoch muss man lediglich statt dem  < ; > ein < "," > in den String einfügen. Excel setzt dann dadurch automatisch ein Semikolon an diese Stelle und dann funktioniert auch alles so, wie es soll.

    Wie Dem auch sei. Vielleicht hilft ja jemandem diese Lösung, die ich sonst nirgends im Internet fand.


    Grüße snow
    • Als Antwort markiert snowmanXL Dienstag, 1. Dezember 2009 09:50
    Dienstag, 1. Dezember 2009 09:50