使用XMLHTTP运输预编译的Excel VBA

我有一个Excelmacros使用Web服务来validation,如果Excel的用户是一个有效的用户或没有。

我宣布我所需的对象如下:

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

当我把这个文件发送给我的最终用户时,他们中的一些人得到一个错误,说XMLHTTP是未定义的。 使用XMLHTTP60和MSXML2.DOMDocument60适用于他们

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

谢谢

tldr:使用后期绑定。


您目前正在使用Early Binding ,这意味着您的引用中已加载了相应的库。 如果其他人没有这个库,那么代码就会失败,就像你看到的一样。

后期绑定失去了加载的引用的所有自动完成提示,但这意味着引用可以在另一台机器上dynamic加载。

你的代码将变成:

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

其余的代码将保持不变,dynamic加载库的开销太小,以至于不值得优化

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

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

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