Страницы: 1
RSS
Функция Getobject не видит открытый экземпляр приложения
 
Добрый день.
Для связи между двумя открытыми приложениями использую VBA через функцию Getobject.
Для примера - хочу из открытого экземпляра Word получить доступ к уже открытому документу в Excel (в оригинале - нужно из открытого Autocad получить доступ в открытый же Excel, но поскольку проблема абсолютно аналогичная и с Word, легче порешать через него).

Для получения открытого экземпляра Excel использую стандартный код из Word (или из акада, не важно), который успешно работал всю жизнь примерно до перехода на 64 бит:
Код
Function din_get_excel() As Object
On Error Resume Next
    Set din_get_excel = GetObject(, "Excel.Application")
    If Err <> 0 Then
        Set din_get_excel = CreateObject("Excel.Application")
       
    
        End If
 
End Function

Соответственно, проверяю на таком:
Код
Sub tetst()
Dim fg
Set fg = din_get_excel
fg.Visible = True
fg.workbooks.Add
Set fg = Nothing
End Sub
Код у меня выполняется так: при первом запуске кода из Word код не видит открытый экземпляр Excel и создает свой собственный экземпляр Excel (если в этот новый экземпляр не добавить книгу, то он еще и сам закрывается после отработки кода). Повторный запуск кода успешно видит тот экземпляр Excel который был создан через код и не видит изначально открытый экземпляр. Если через Word создать экземпляр Excel, то после этого его видит не только код из Word, но и например код из Autocad.

Почитал, что описание "Excel.Application" прописано в реестре, нашел в реестре и такие значения, и с указанием версий "Excel.Application.16" - отрабатывает аналогично абсолютно. Галочку "игнорировать DDE- запросы" включал-отключал, не влияет никак.

Приведенная конструкция работала много лет с разными версиями офиса, вопрос - чем для кода отличается уже открытый экземпляр экселя от того, что он открывает сам. Порядок работы такой, что у меня открыт одновременно акад и эксель, и получить доступ нужно из открытому приложению, потом выбрать нужную книгу. Как вариант - пока запускаю эксель из акада, открываю из него нужный файл и работаю, но это слегка странные костыли.

Хотелось бы просто по Getobject получить уже открытый экземпляр экселя и не отвлекаться от работы, как оно было раньше.

Версия офиса - 2021 (в 2016 было аналогично), 64 бит, Автокад - 2019 и 2023, также 64 бит.

Если на форуме была такая тема - прошу ткнуть, т.к. я не нашел.

Спасибо.
Изменено: Dinoxromniy - 24.10.2023 10:24:47
Страницы: 1
Наверх