Convertir el código de unión temprana a la unión tardía
-
27-10-2019 - |
Pregunta
A menudo he escrito un código de unión temprana en VBA y VB6 para automatizar las aplicaciones de oficina (Word, Excel, etc.) y luego lo cambié a la unión tardía para manejar múltiples versiones de esas aplicaciones. Estoy tratando de hacer lo mismo, pero estoy automatizando una aplicación ESRI ArcMap GIS y los conceptos que he usado en el pasado no parecen estar traduciendo.
El siguiente código se ejecuta correctamente:
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
Pero este código falla con El objeto no admite esta propiedad o método sobre el Debug.Print
línea:
Sub LateBinding()
Dim ArcMap As Object
Set ArcMap = GetObject("C:\Users\Mike\Downloads\Assessment Mapping.mxd", _
"esriArcMapUI.MxDocument")
Debug.Print ArcMap.Title
End Sub
¿Hay algo especial en las aplicaciones de MS Office que apoyen este enfoque mejor que los servidores COM en general? O algo especial sobre las aplicaciones de ESRI que ellos no haga apoyar este enfoque?
Solución
Es muy probable que el objeto ESRI no sea compatible con Idispatch correctamente. Puede intentar CallByName, pero supongo que eso tampoco funcionará porque creo que los vectores a través de Idispatch también.