Использование API 7 в VBA компас 17.1

Автор Denis74, 27.12.19, 11:19:15

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Denis74

Добрый день!
Подскажите пожалуйста, как правильно использовать API 7 в VBA.
Например при использовании API 5 Компас запускается:
Sub u1()

Set kompas = New Kompas6API5.Application 'открываем компас
  kompas.Visible = True

End Sub
Если этот пример написать с использованием API7 выдается ошибка:
Sub u1()

Set kompas = New KompasAPI7.Application 'открываем компас
  kompas.Visible = True

End Sub
Все библиотеки которые смог найти вроде подключил:
Библиотеки.jpg

Vi2

Всё зависит от того, как ты описал переменную kompas: она для каждого случая - для 5 и 7 - должна быть разная. Т.е.

1) открываем как 5
Dim kompas As Kompas6API5.Application
Set kompas = New Kompas6API5.Application

2) открываем как 7
Dim kompas As KompasAPI7.IApplication
Set kompas = New KompasAPI7.Application

3) открываем как 5 или 7, но этот способ неудобен из-за отсутствия подсказок
Dim kompas As Object
Set kompas = New Kompas6API5.Application
Set kompas = New KompasAPI7.Application

Denis74

Спасибо за ответ.
В моем случае описанный пример 2 запустить не удалось.
Sub u1()

Dim kompas As KompasAPI7.IApplication
Set kompas = New KompasAPI7.Application
kompas.Visible = True

End Sub
Выдает ошибку: compile error user-defined type not defined
Ошибка.jpg
Подскажите где искать?

DesignЯR

ЦитироватьПодскажите где искать?
Стоит попробовать искать в предоставленных Асконом примерах, например "step3d2" из папки Basic. Там четко видно откуда получается "Kompas As Object" и дальнейшая работа с ним как с API7 объектом.

Vi2

Цитата: Denis74 от 30.12.19, 07:26:04Sub u1()

Dim kompas As KompasAPI7.IApplication
Set kompas = New KompasAPI7.Application
kompas.Visible = True

End Sub
Выдает ошибку: compile error user-defined type not defined
Подскажите где искать?
Прошу прощения, не проверил запощенный мною текст. Обычно я использую CreateObject и понадеялся на тобой указанный код. А дело в том, что в KompasAPI7 нет типа Application, а есть _Application. Вот равновероятные способы:

Dim kompas As KompasAPI7.IApplication
Set kompas = CreateObject("Kompas.Application.7")
Set kompas = New KompasAPI7.[_Application]

' а это подсоединение к запущенному Компасу
Set kompas = GetObject(, "Kompas.Application.7")

' а это переход от 5 к 7
Set kompas5 = CreateObject("Kompas.Application.5")
Set kompas5 = New Kompas6API5.Application
Set kompas7 = kompas5.ksGetApplication7

Denis74

Все заработало.

Большое спасибо за развернутый ответ!!!