vba - 将早期绑定(bind)代码转换为后期绑定(bind)

标签 vba com vb6 esri late-binding

我经常在 VBA 和 VB6 中编写早期绑定(bind)代码来自动化办公应用程序(Word、Excel 等),然后将其切换到后期绑定(bind)以处理这些应用程序的多个版本。我正在尝试做同样的事情,但我正在自动化 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 行显示 Object 不支持此属性或方法:

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 进行引导。

关于vba - 将早期绑定(bind)代码转换为后期绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5341544/

相关文章:

winapi - 在 Visual Basic 6 中使用 GetTokenInformation 确定用户是否为管理员

c - 使用相同的代码为 2 种语言生成文档

xml - 为什么xpath通配符搜索中出现 'unknown method'错误

excel - 使用 64 位 Excel 连接到 32 位 Oracle 客户端

c++ - 如何调用 GetAltMonthNames 来填充外国语言环境月份字符串的安全数组?

visual-studio - 重新创建 COM DLL,我需要担心 GUID 吗?

excel - 使用 VBA 删除重复项不再起作用

vba - 获取瀑布图的类别名称

c# - 使用 COM 从注册表加载类适用于 ToolsVersion ="2.0"但因 ToolsVersion ="4.0"而失败

html - 如何使用VB6从HTML中获取内容