Вызов методов компонента .NET из VBA.
2737
7
Не могу заставить работать сабж. Причем на моём компьютере все работает, на других - нет.

Опишу, что я сделал.
  • Компонент написал на C#.
  • Приделал к нужному классу специальные атрибуты, как описано в MSDN.
  • Скомпилировал.
  • Зарегистрировал dll с помощью regasm.
  • С помощью нее же сделал tlb.
  • Скопировал dll в папку с excel.exe
  • Создал книгу Excel, в ее проект VBA добавил ссылку на tlb. При этом в Object Browser появился мой класс и его методы.
  • Написал в модуле проекта VBA процедуру, создающую нужный объект и вызывающую метод.

Метод вызывается без проблем на моей машине.
Перенес файл dll на другую машину, выполнил все те же действия, начиная с четвертого пункта, но результата желаемого не получил.
VBA выдает таинственую ошибку Automation error. На обеих машинах установлен Net Framework 2.

Не знаю, что и думать. Сам-то я новичок в Net, буду признателен уважаемым гуру за любую помошь. Кстати, с удовольствием бы посмотрел на работающий пример COM-компонента, написанного на C#.
Gebb
ага.

значит проблема в регистрации длл-ки на клиенте.
avan
Так ведь я и сделал так, как в МСДН советуют.
Атрибут [ComVisible(true)] стоит, где надо. Все, что нужно (классы, методы), видно из-под VBA в Object Browser'е.
Под VB6 мой COM-объект нормально создаётся и работает, под VBScript (WSH) - тоже отлично, пробую под VBA - не создается. Automation error.
Gebb
так какова ситуация?

на любых машинах (в том числе на разработческой) в VBA не работает?

или на рабочей машине работает и в VBA?

или не работает в VB6 на другой машине?

что-то вы меня запутали уже.
avan
На машине разработчика работает во всех вариантах (под VBA даже). Переношу на другую машину - под всем, кроме VBA работает.
Gebb
мистика какая-то.
попробуйте на другой машинке.
сравните последние цифирки в версии фреймворка.
может там какая-то кривая установка офиса?

должно работать.

посмотрите что генерит regasm с помощью regasm /regfile убедитесь что путь к .dll прописан полным - тогда будет находить из любого места и загружать правильно.

больше ничего повлияет вроде бы не может.
avan
Точно, мистика. Всё ставлю с одних и тех же дистрибутивов. Единственное отличие - не ставлю VS2005 на пользовательский компьютер. И особенно интересно, что под VBS и VB6 работает. Я даже хотел всех обмануть - написать на VB6 ActiveX DLL - обертку к своему компоненту. Не тут-то было. Тот же Automation error при использовании этой DLL под VBA. В чём я дурак?
Gebb
Долго же я искал решение проблемы. Но таки нашел. :спок:

По ссылке, приведенной ниже, Микрософт описывает, что весь гешефт не работает из за косяков в .Net 2 и офисе. А также предлагает патч для студии 2005.

С этим патчем всё заработало. Патч лечит не только студию, а сразу и офис, и всё остальное. В нем же внедрены так называемые redistributables, которые надо поставлять конечным пользователям, чтоб и у них всё запатчить.

А вот и ссылка: тыц.