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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top