Excel-DNA имеет возможность выставлять ваши классы .NET непосредственно COM, поэтому вы можете использовать их непосредственно из VBA как обычные COM-классы.
Для этого ваш класс должен быть ComVisible (или вся сборка должна быть ComVisible), и вы должны пометить ExternalLibrary как ComServer = 'true' в файле .dna, что-то вроде:
<DnaLibrary RuntimeVersion='v4.0' />
<ExternalLibrary Path='MyAddIn.dll' ComServer='true' />
</DnaLibrary>
Тогда у вас есть несколько вариантов регистрации:
либо вызвать «Regsvr32.exe MyAddInDna.xll»
или в AutoOpen вашей надстройки вызовите ExcelDna.Integration.ComServer.RegisterServer ()
Оба этих параметра устанавливают записи реестра таким образом, что файл .xll становится COM-сервером для ваших классов. Затем вы можете обращаться к ним с поздним связыванием из VBA с помощью CreateObject («MyNameSpace.MyClass»).
Вам нужен еще один шаг для настройки библиотеки типов (чтобы дать вам intellisense в VBA). Для этого вы генерируете библиотеку типов с помощью tlbexp.exe. Вызов regsvr32 / ComServer.RegisterServer найдет библиотеку типов и зарегистрирует ее.
Вы также можете упаковать .dll в ваш файл .xll (добавив атрибут pack = 'true' к тегу ExternalLibrary), и библиотека типов также будет упакована, если она есть, и зарегистрирована на ресурсе в файле .xll. когда вы звоните Regsvr32.exe
Таким образом, конечным результатом может быть надстройка для одного файла .xll, которая является одновременно надстройкой Excel с пользовательскими функциями, лентами, RTD-серверами, а также COM-сервером, к которому можно получить доступ из VBA.
Больше информации в обсуждениях здесь: http://exceldna.codeplex.com/discussions/252721 и здесь: http://groups.google.com/group/exceldna/browse_frm/thread/4c5a71efbe96d885.