我有一个excel宏,它使用Web服务来验证Excel的用户是否是有效用户。
我按如下方式声明我所需的对象:
Dim ObjHTTP As New XMLHTTP
Dim xml As New MSXML2.DOMDocument
当我将此文件发送给最终用户时,其中一些人会收到错误消息,说XMLHTTP未定义。使用XMLHTTP60和MSXML2.DOMDocument60适用于他们
有没有办法自动检测最终用户机器上可用的正确文件?
由于
答案 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,否则我建议您使用XMLHTTP60
,DOMDocument60
等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。