юзать с др.ПО

0 голосов
спросил 05 Авг, 10 от Dido_kz1 (11,020 баллов) в категории Программные продукты Esri
Всем привет
Сделал СОМ объект и работает без проблем,
Мне теперь необходимо с другой программы вызвать СОМ процелдуры или функций
В СОМ-е написал:
Implements ICommand
Public m_pApp As IApplication
Public pMap As IMap
Public pDoc As IMxDocument

Public Sub Dido()
msgbox "Тест"
Set pDoc = m_pApp.Document
Set pMap = pDoc.FocusMap
pMap.MapScale = "1000"
End Sub
пытаюсь из екселя(макрос) вызвать эту процедуру
Sub test()
Dim app As Variant
Set app = CreateObject("Project1.Class1", "")
app.dido
End Sub
Выдается сообщение Тест и далее ругается
Object variable not set (Error 91)
Что подскажете ?

4 Ответы

0 голосов
ответил 06 Авг, 10 от pooperec (10,820 баллов)
Приветствую!

Подскажу - высоковероятно что у Вас pMap и m_pApp не задан (равен nil, по крайней мере у Вас в коде присвоения/получения m_pApp я не увидел). Посему ошибка скорее всего вываливается на строчке "pMap.MapScale = "1000"" либо сразу на строчке "Set pMap = m_pApp.Document".
0 голосов
ответил 18 Авг, 10 от Dido_kz1 (11,020 баллов)
инициализация идет тут
Public Sub ICommand_OnCreate(ByVal Hook As Object)
If (TypeOf Hook Is IMxApplication) Then 
    Set m_pApp = Hook
End If
End Sub
но повесил на
Private Sub ICommand_OnClick()
Dido
End Sub
все работает, проблем нету,а когда взываю с внешки,
Public Sub test()
Dim app As Variant
Set app = CreateObject("Project1.Class1", "")
app.dido
Set app = Nothing
End Sub
то m_pApp пустой Dead
0 голосов
ответил 20 Авг, 10 от tntman (1,360 баллов)
ICommand работает только под управлением ArcMAP, если вы попытаетсь вызвать COM объект без ArcMAP, то m_pApp будет пустой    
0 голосов
ответил 20 Авг, 10 от pooperec (10,820 баллов)
Вы хотите, из Exel вызвать комманду АркМапа?
А предполагается что АркМап должен быть запущен при этом?
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...