【问题标题】:Shipping pre-compiled Excel VBA with XMLHTTP使用 XMLHTTP 发送预编译的 Excel VBA
【发布时间】:2015-06-27 05:59:13
【问题描述】:

我有一个 Excel 宏,它使用 Web 服务来验证 Excel 的用户是否是有效用户。

我声明我需要的对象如下:

Dim ObjHTTP As New XMLHTTP
Dim xml As New MSXML2.DOMDocument

当我将此文件发送给我的最终用户时,他们中的一些人收到一条错误消息,指出 XMLHTTP 未定义。使用 XMLHTTP60 和 MSXML2.DOMDocument60 对他们有效

有没有办法自动检测最终用户机器上可用的正确方法?

谢谢

【问题讨论】:

  • Google:vba 检查参考存在

标签: vba excel xmlhttprequest


【解决方案1】:

tldr:使用后期绑定。


您当前正在使用早期绑定,这意味着您在参考文献中加载了适当的库。如果其他人没有该库,那么代码将失败,如您所见。

Late Binding 丢失了加载引用时获得的所有自动完成提示,但这意味着可以在另一台机器上动态加载引用。

您的代码将变为:

Dim ObjHTTP As Object
Dim xml As Object

Set ObjHTTP = CreateObject("XMLHTTP")
Set xml = CreateObject("MSXML2.DOMDocument")

其余代码保持不变,动态加载库的开销小到不值得优化

【讨论】:

    【解决方案2】:

    除非您必须支持 Windows XP,否则我建议您使用 XMLHTTP60DOMDocument60 等 ProgID。 MSXML 6.0 包含在 .NET 3.0 及更高版本中,而 Windows 7 包含 .NET 3.5,因此所有最近安装的 Windows 都将安装 MSXML6。

    我相信,当您使用 ProgID 而不指定版本时,您会得到 MSXML 3.0,它现在已经相当老了(大约 2000 年)。

    编辑:根据 Wikipedia MSXML 6.0 附带 XP SP3,因此确实没有充分的理由继续使用 3。

    【讨论】:

    猜你喜欢
    • 2018-02-25
    • 2018-11-05
    • 2014-07-19
    • 2013-05-28
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多