Codice Convertire early-binding a late-binding
-
27-10-2019 - |
Domanda
Ho spesso scritto il codice in VBA e VB6 per automatizzare le applicazioni di Office (Word, Excel, ecc) early-binding poi passato a late-binding di gestire più versioni di tali applicazioni. Sto cercando di fare la stessa cosa, ma sto automatizzando un'applicazione GIS di ESRI ArcMap ed i concetti che ho usato in passato non sembrano essere la traduzione.
Il seguente codice viene eseguito correttamente:
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
Ma questo codice non riesce con L'oggetto non supporta questa proprietà o metodo sulla linea 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
C'è qualcosa di speciale in MS Office applicazioni che sostengono questo approccio migliore di server COM in generale? O qualcosa di speciale ESRI applicazioni che non supportano questo approccio?
Soluzione
E 'più probabile che l'oggetto Esri non sta sostenendo IDispatch correttamente. Si potrebbe provare CallByName, ma credo che non funziona o perché credo che vettori tramite IDispatch pure.