Преобразовать код раннего связывания в позднюю связующую среду
-
27-10-2019 - |
Вопрос
Я часто писал код раннего связывания в VBA и VB6 для автоматизации офисных приложений (Word, Excel и т. Д.) Затем переключил его на позднее связывание для обработки нескольких версий этих приложений. Я пытаюсь сделать то же самое, но я автоматизирую приложение Esri Arcmap GIS, и концепции, которые я использовал в прошлом, кажется, не переводится.
Следующий код работает правильно:
Sub EarlyBinding()
Dim ArcMap As esriArcMapUI.MxDocument
Set ArcMap = GetObject("C:\Users\Mike\Downloads\Assessment Mapping.mxd", _
"esriArcMapUI.MxDocument")
Debug.Print ArcMap.Title
End Sub
Но этот код не удается с Объект не поддерживает это свойство или метод на Debug.Print
линия:
Sub LateBinding()
Dim ArcMap As Object
Set ArcMap = GetObject("C:\Users\Mike\Downloads\Assessment Mapping.mxd", _
"esriArcMapUI.MxDocument")
Debug.Print ArcMap.Title
End Sub
Есть ли что -то особенное в приложениях MS Office, что они поддерживают этот подход лучше, чем COM -серверы в целом? Или что -то особенное в приложениях ESRI, что они не надо Поддержать этот подход?
Решение
Скорее всего, объект ESRI не поддерживает Idispatch должным образом. Вы можете попробовать CallbyName, но я предполагаю, что это тоже не сработает, потому что я верю, что это также через Idispatch.