Как я могу использовать объекты .NET из Excel VBA?

Может ли код VBA создавать и использовать объекты .NET? Меня интересует конкретный класс System.IO.Compression.GZipStream.

Для информации GAC - это глобальный кэш сборок .NET.


person Matthew Murdoch    schedule 07.10.2008    source источник


Ответы (2)


Я думаю, что Энди получил этот ответ, но я не уверен, что аспект, касающийся правил загрузки CLR, совершенно правильный.

Сборка .NET, которая содержит класс, выступающий в качестве оболочки для GZipStream, будет доступна для COM и зарегистрирована так же, как любая другая библиотека и класс проекта COM. В этом отношении VBA найдет расположение сборки .NET, доступной для COM, через реестр. Было бы разумно поместить сборку в GAC, чтобы она не могла перемещаться (поскольку перемещение сборки приведет к недействительности информации реестра), но пока реестр указывает на нужное место, все должно быть в порядке.

Хорошее руководство для новичков по этой теме: здесь

Надеюсь это поможет...

person Mike Rosenblum    schedule 07.10.2008
comment
Я только что вспомнил, как где-то читал, что для использования объекта .NET из COM сборка должна быть либо в том же каталоге, что и exe, либо в GAC. Это было давно, поэтому я очень легко могу ошибаться. - person Andy; 07.10.2008
comment
Мне это тоже кажется правильным! (смеется) Но я думаю, что вы написали, как среда CLR ищет сборки .NET и, вероятно, применима и к COM без регистрации. В этом случае ищется сборка .NET, но что касается вызывающей стороны COM, они даже не знают о .NET. - person Mike Rosenblum; 07.10.2008

VBA может использовать любые объекты .NET, доступные для COM. Я не знаю, есть GZipStream или нет, но я предполагаю, что вам было бы проще создать отдельный объект .NET, который является оболочкой для функциональности GZipStream, которую вы хотите использовать. Затем вы можете предоставить свой объект COM, а затем VBA должен его использовать.

Обратите внимание, что сборка, содержащая ваш COM-объект (и его библиотеку типов, я думаю, хотя я не уверен в этом), должна находиться либо в том же каталоге, что и основной исполняемый файл (winword.exe или что-то еще), либо в GAC. Это связано с правилами загрузки сборок в среде CLR.

person Andy    schedule 07.10.2008