Konvertieren Sie den Frühbindungscode in spätbindende
-
27-10-2019 - |
Frage
Ich habe oft frühbindende Code in VBA und VB6 geschrieben, um Office-Anwendungen (Word, Excel usw.) zu automatisieren, und schaltete ihn dann auf die verspätete Bindung, um mehrere Versionen dieser Anwendungen zu verarbeiten. Ich versuche das Gleiche zu tun, aber ich automatisiere eine Esri Arcmap GIS -Anwendung und die Konzepte, die ich in der Vergangenheit verwendet habe, scheinen nicht zu übersetzen.
Der folgende Code wird korrekt ausgeführt:
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
Aber dieser Code schlägt fehl Objekt unterstützt diese Eigenschaft oder Methode nicht auf der Debug.Print
Linie:
Sub LateBinding()
Dim ArcMap As Object
Set ArcMap = GetObject("C:\Users\Mike\Downloads\Assessment Mapping.mxd", _
"esriArcMapUI.MxDocument")
Debug.Print ArcMap.Title
End Sub
Gibt es etwas Besonderes an MS Office -Apps, die diesen Ansatz besser unterstützen als COM -Server im Allgemeinen? Oder etwas Besonderes an Esri -Apps, die sie unterlassen Sie diesen Ansatz unterstützen?
Lösung
Es ist höchstwahrscheinlich, dass das ESRI -Objekt IDispatch nicht ordnungsgemäß unterstützt. Sie könnten versuchen, CallByName zu machen, aber ich vermute, das funktioniert auch nicht, weil ich glaube, dass es auch durch Idispatch Vektoren ist.