.NET Assemblys in Excel verwenden

.NET Assemblies in VBA, sprich Excel oder Access zu verwenden hat einen gewissen Charme. Komplexe Businesslogik lässt sich dann an einer Stelle pflegen und verwenden.

Unter http://dsmyth.blogspot.com/2006/03/calling-managed-code-from-vba-using.html gibt es gute Hintergrundinfos, wie ein 'Hello World' zustande kommt. Allerdings bin ich dabei auf Probleme gestossen. Denn wenn man mit Visual Studio 2005 unter .NET 2.0 entwickelt und versucht das mit Excel XP aka Excel 2002 aka Excel 10.0 zum Laufen zu bekommen, erscheint lediglich ein Automatisierungsfehler beim Aufruf der Assembly unter Excel. Dieser Fehler rührt daher, dass Excel 10.0 als Standard die .NET 1.1 Runtime verwendet. Abhilfe ist eine Excel.EXE.config Datei im Installationsverzeichnis von Excel mit folgendem Inhalt:
<!-- code formatted by http://manoli.net/csharpformat/ -->
<style type="text/css">
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: Consolas, "Courier New", Courier, Monospace;
background-color: #ffffff;
/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}

.csharpcode .lnum { color: #606060; }
</style>
<pre class="csharpcode">
<span class="kwrd">&lt;</span><span class="html">configuration</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">startup</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">supportedRuntime</span> <span class="attr">version</span><span class="kwrd">="v2.0.50727"</span> <span class="kwrd">/&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">startup</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">configuration</span><span class="kwrd">&gt;</span>
</pre>


Allerdings hat man dann Excel 10.0 komplett auf .NET 2.0 umgestellt. Das kann also noch andere Auswirkungen nach sich ziehen.

Was weiterhin im oben erwähnten Artikel nicht erwähnt wurde, ist das setzen von [assembly: ComVisible(true)]in der AssemblyInfo.cs.

Updated: