Задать вопрос
Krasnoarmeec
@Krasnoarmeec

Как получить доступ к находящемуся в памяти объекту, инстанцированному в VBA, из VBScript?

Дано: есть зарегистрированная при помощи RegAsm C# dll, которая содержит класс Namespace1.Class1, видимая в VBA References как Namespace1.
Класс Class1 из dll инстанциируется в VBA как Public XXX As New Class1. Функции класса успешно вызываются из VBA, но для исполнения некоторых из них требуется до 30 секунд.

Надо: запустить длительные функции в фоновом режиме через исполнение внешнего VBScript, как это сделано здесь и обновлять прогресс бар каждую секунду.

Проблема в VBScript при попытке получить доступ к находящемуся в памяти объекту:
Set YYY = GetObject(, "Namespace1.Class1") не находит dll/Namespace/Class в памяти (800A01AD: "ActiveX component can’t create object"). Безуспешно перепробовал различные комбинации ("Class1", "Namespace1", "Namespace1_Class1") – вылезает та же ошибка.

Дополнительные сведения: 32 bit dll успешно вызывалась из VBA (Excel 64 bit) при помощи COM Surrogate.
VBScript запускается из VBA посредством:
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run """" & filename """"
  • Вопрос задан
  • 100 просмотров
Подписаться 2 Сложный Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Основы Excel для работы
    1 неделя
    Далее
  • Школа Бизнеса Тинькофф
    Excel для малого бизнеса
    7 недель
    Далее
  • Onskills
    Excel для начинающих
    1 месяц
    Далее
Пригласить эксперта
Ответы на вопрос 1
honor8
@honor8
Принципы быстродействия VBA в описании
Изменить раннее связывание на позднее.* ** И не надо за памятью гоняться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы