Gr.Om, это новый экземпляр приложения, по умолчанию этот экземпляр не создает книг, просто создает невидимое пустое приложение. Попробуйте добавить в эксель новую книгу, прописать visible=true после этого msgbox выведите - будет видно, что это новый экземпляр приложения, и новые файлы будут иметь свою нумерацию "Книга 1", "Книга 2" и т.д., при этом в изначальном экземпляре эксель также может быть открыта своя "Книга 1". В одном приложении это невозможно, это именно два разных экземпляра. Более того, второй экземпляр будет доступен из под акада в дальнейшем.
Компа под рукой нет, вопрос решился частично - в связке с 2024 акадом часть проблем ушла, часть проблем решилась предварительным запуском экселя через shell.
С офисом 2021 (оф дистрибутив, триал) вообще странности наблюдаются - если запустить офис из пуска - успешно понимает все формулы. Если запускать существующий файл двойным щелчком - ведет себя как офис 2016 в плане формул, те не понимает формулы типа ОБЪЕДИНИТЬ и иже с ними. Примечательно, что операционная система новая/ чистая, других версий в принципе не стояло, и кроме того - запускается именно один и тот же exe-шник.
Знающие люди отправили разбираться к таблице com, которых в ос может быть открыто несколько, но внятного результата поиски не дали.
я открываю эксель программно из акада и работаю в дальнейшем с ним. Костыль, но в целом неудобства условные.
Добрый день. Для связи между двумя открытыми приложениями использую 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 бит.
Если на форуме была такая тема - прошу ткнуть, т.к. я не нашел.