Вызов методов компонента .NET из VBA.
2740
7
Gebb
activist
Не могу заставить работать сабж. Причем на моём компьютере все работает, на других - нет.
Опишу, что я сделал.
Метод вызывается без проблем на моей машине.
Перенес файл dll на другую машину, выполнил все те же действия, начиная с четвертого пункта, но результата желаемого не получил.
VBA выдает таинственую ошибку Automation error. На обеих машинах установлен Net Framework 2.
Не знаю, что и думать. Сам-то я новичок в Net, буду признателен уважаемым гуру за любую помошь. Кстати, с удовольствием бы посмотрел на работающий пример COM-компонента, написанного на C#.
Опишу, что я сделал.
- Компонент написал на C#.
- Приделал к нужному классу специальные атрибуты, как описано в MSDN.
- Скомпилировал.
- Зарегистрировал dll с помощью regasm.
- С помощью нее же сделал tlb.
- Скопировал dll в папку с excel.exe
- Создал книгу Excel, в ее проект VBA добавил ссылку на tlb. При этом в Object Browser появился мой класс и его методы.
- Написал в модуле проекта VBA процедуру, создающую нужный объект и вызывающую метод.
Метод вызывается без проблем на моей машине.
Перенес файл dll на другую машину, выполнил все те же действия, начиная с четвертого пункта, но результата желаемого не получил.
VBA выдает таинственую ошибку Automation error. На обеих машинах установлен Net Framework 2.
Не знаю, что и думать. Сам-то я новичок в Net, буду признателен уважаемым гуру за любую помошь. Кстати, с удовольствием бы посмотрел на работающий пример COM-компонента, написанного на C#.
Так ведь я и сделал так, как в МСДН советуют.
Атрибут [ComVisible(true)] стоит, где надо. Все, что нужно (классы, методы), видно из-под VBA в Object Browser'е.
Под VB6 мой COM-объект нормально создаётся и работает, под VBScript (WSH) - тоже отлично, пробую под VBA - не создается. Automation error.
Атрибут [ComVisible(true)] стоит, где надо. Все, что нужно (классы, методы), видно из-под VBA в Object Browser'е.
Под VB6 мой COM-объект нормально создаётся и работает, под VBScript (WSH) - тоже отлично, пробую под VBA - не создается. Automation error.
так какова ситуация?
на любых машинах (в том числе на разработческой) в VBA не работает?
или на рабочей машине работает и в VBA?
или не работает в VB6 на другой машине?
что-то вы меня запутали уже.
на любых машинах (в том числе на разработческой) в VBA не работает?
или на рабочей машине работает и в VBA?
или не работает в VB6 на другой машине?
что-то вы меня запутали уже.
На машине разработчика работает во всех вариантах (под VBA даже). Переношу на другую машину - под всем, кроме VBA работает.
мистика какая-то.
попробуйте на другой машинке.
сравните последние цифирки в версии фреймворка.
может там какая-то кривая установка офиса?
должно работать.
посмотрите что генерит regasm с помощью regasm /regfile убедитесь что путь к .dll прописан полным - тогда будет находить из любого места и загружать правильно.
больше ничего повлияет вроде бы не может.
попробуйте на другой машинке.
сравните последние цифирки в версии фреймворка.
может там какая-то кривая установка офиса?
должно работать.
посмотрите что генерит regasm с помощью regasm /regfile убедитесь что путь к .dll прописан полным - тогда будет находить из любого места и загружать правильно.
больше ничего повлияет вроде бы не может.
Точно, мистика. Всё ставлю с одних и тех же дистрибутивов. Единственное отличие - не ставлю VS2005 на пользовательский компьютер. И особенно интересно, что под VBS и VB6 работает. Я даже хотел всех обмануть - написать на VB6 ActiveX DLL - обертку к своему компоненту. Не тут-то было. Тот же Automation error при использовании этой DLL под VBA. В чём я дурак?
Долго же я искал решение проблемы. Но таки нашел.
По ссылке, приведенной ниже, Микрософт описывает, что весь гешефт не работает из за косяков в .Net 2 и офисе. А также предлагает патч для студии 2005.
С этим патчем всё заработало. Патч лечит не только студию, а сразу и офис, и всё остальное. В нем же внедрены так называемые redistributables, которые надо поставлять конечным пользователям, чтоб и у них всё запатчить.
А вот и ссылка: тыц.
По ссылке, приведенной ниже, Микрософт описывает, что весь гешефт не работает из за косяков в .Net 2 и офисе. А также предлагает патч для студии 2005.
С этим патчем всё заработало. Патч лечит не только студию, а сразу и офис, и всё остальное. В нем же внедрены так называемые redistributables, которые надо поставлять конечным пользователям, чтоб и у них всё запатчить.
А вот и ссылка: тыц.