使用XMLHTTP运送预编译的Excel VBA

时间:2015-06-26 20:37:36

标签: excel vba excel-vba xmlhttprequest

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

我按如下方式声明我所需的对象:

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

当我将此文件发送给最终用户时,其中一些人会收到错误消息,说XMLHTTP未定义。使用XMLHTTP60和MSXML2.DOMDocument60适用于他们

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

由于

2 个答案:

答案 0 :(得分:2)

tldr:使用后期绑定。

您当前正在使用 Early Binding ,这意味着您已在参考中加载了相应的库。如果其他人没有该库,那么代码将会失败,如您所见。

后期绑定会丢失所有加载引用的自动完成提示,但这意味着可以在另一台计算机上动态加载引用。

您的代码将变为:

Dim ObjHTTP As Object
Dim xml As Object

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

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

答案 1 :(得分:1)

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

我相信当你在没有指定版本的情况下使用ProgID时,你会得到MSXML 3.0,现在已经很久了(大约2000年)。

编辑:根据维基百科MSXML 6.0附带XP SP3,所以真的没有充分的理由仍然使用3。