4°C
завтра: 6°C
Погода в Перми
4°C
вечером7°C
ночью1°C
завтра6°C
Подробно
 63,98
+0.1892
Курс USD ЦБ РФна 25 апреля
63,9798
+0.1892
 71,72
−0.0303
Курс EUR ЦБ РФна 25 апреля
71,7150
−0.0303
PRM.Форум /Компьютеры Интернет Связь / Программирование /

Вызов методов компонента .NET из VBA.

  • activist

    Сообщений: 132

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

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

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

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

    You know what I really want in a girl? Me! (c)BHG

  • avan

    Анонимный пользователь

    ага.

    значит проблема в регистрации длл-ки на клиенте.

  • activist

    Сообщений: 132

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

    You know what I really want in a girl? Me! (c)BHG

  • avan

    Анонимный пользователь

    так какова ситуация?

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

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

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

    что-то вы меня запутали уже.

  • activist

    Сообщений: 132

    На машине разработчика работает во всех вариантах (под VBA даже). Переношу на другую машину - под всем, кроме VBA работает.

    You know what I really want in a girl? Me! (c)BHG

  • avan

    Анонимный пользователь

    мистика какая-то.
    попробуйте на другой машинке.
    сравните последние цифирки в версии фреймворка.
    может там какая-то кривая установка офиса?

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

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

    больше ничего повлияет вроде бы не может.

  • activist

    Сообщений: 132

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

    You know what I really want in a girl? Me! (c)BHG

  • activist

    Сообщений: 132

    Долго же я искал решение проблемы. Но таки нашел. :спок:

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

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

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

    You know what I really want in a girl? Me! (c)BHG

Записей на странице:

Перейти в форум

Модератор: