Как я могу использовать объекты .NET из Excel VBA? - PullRequest
8 голосов
/ 07 октября 2008

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

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

Ответы [ 2 ]

10 голосов
/ 07 октября 2008

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

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

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

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

3 голосов
/ 07 октября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...