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

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

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

2 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам