使用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议使用XMLHTTP60
, DOMDocument60
等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。