使用XMLHTTP提供预编译的Excel VBA

使用XMLHTTP提供预编译的Excel VBA,vba,excel,xmlhttprequest,Vba,Excel,Xmlhttprequest,我有一个excel宏,它使用webservice来验证excel用户是否为有效用户 本人声明所需物品如下: Dim ObjHTTP As New XMLHTTP Dim xml As New MSXML2.DOMDocument 当我将此文件发送给最终用户时,其中一些用户会收到一个错误,说XMLHTTP未定义。使用XMLHTTP60和MSXML2.DOMDocument60对它们有效 是否有一种方法可以自动检测终端用户机器上可用的正确设备 谢谢tldr:使用后期绑定 您当前正在使用早期绑定,

我有一个excel宏,它使用webservice来验证excel用户是否为有效用户

本人声明所需物品如下:

Dim ObjHTTP As New XMLHTTP
Dim xml As New MSXML2.DOMDocument
当我将此文件发送给最终用户时,其中一些用户会收到一个错误,说XMLHTTP未定义。使用XMLHTTP60和MSXML2.DOMDocument60对它们有效

是否有一种方法可以自动检测终端用户机器上可用的正确设备


谢谢

tldr:使用后期绑定


您当前正在使用早期绑定,这意味着您在引用中加载了相应的库。如果其他人没有该库,那么代码将失败,正如您所看到的

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

您的代码将变成:

Dim ObjHTTP As Object
Dim xml As Object

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

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

tldr:Use late binding


您当前正在使用早期绑定,这意味着您在引用中加载了相应的库。如果其他人没有该库,那么代码将失败,正如您所看到的

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

您的代码将变成:

Dim ObjHTTP As Object
Dim xml As Object

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

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

tldr:Use late binding


您当前正在使用早期绑定,这意味着您在引用中加载了相应的库。如果其他人没有该库,那么代码将失败,正如您所看到的

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

您的代码将变成:

Dim ObjHTTP As Object
Dim xml As Object

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

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

tldr:Use late binding


您当前正在使用早期绑定,这意味着您在引用中加载了相应的库。如果其他人没有该库,那么代码将失败,正如您所看到的

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

您的代码将变成:

Dim ObjHTTP As Object
Dim xml As Object

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

其余的代码将保持不变,动态加载库的开销很小,不值得优化,我建议使用
XMLHTTP60
DOMDocument60
等ProgIDs,除非您必须支持Windows XP。MSXML 6.0包含在.NET 3.0及更高版本中,而Windows 7包含.NET 3.5,因此所有半新的Windows安装都将安装MSXML6

我相信当您使用ProgIDs而不指定版本时,您会得到msxml3.0,它到现在已经很旧了(大约2000年)


编辑:根据维基百科的说法,MSXML 6.0附带XP SP3,因此没有很好的理由继续使用3。

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

我相信当您使用ProgIDs而不指定版本时,您会得到msxml3.0,它到现在已经很旧了(大约2000年)


编辑:根据维基百科的说法,MSXML 6.0附带XP SP3,因此没有很好的理由继续使用3。

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

我相信当您使用ProgIDs而不指定版本时,您会得到msxml3.0,它到现在已经很旧了(大约2000年)


编辑:根据维基百科的说法,MSXML 6.0附带XP SP3,因此没有很好的理由继续使用3。

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

我相信当您使用ProgIDs而不指定版本时,您会得到msxml3.0,它到现在已经很旧了(大约2000年)


编辑:根据Wikipedia,MSXML 6.0随XP SP3一起提供,因此没有很好的理由继续使用3。

Google:vba检查引用存在Google:vba检查引用存在Google:vba检查引用存在Google:vba检查引用存在Google:vba检查引用存在Google:vba检查引用存在Google:vba检查引用存在被视为操作系统的一部分(带内)从Windows Vista开始,后端口为Windows XP SP3()。因为它是操作系统的一部分,所以它与.NET没有任何关系。此外,您不应假定Windows自动安装了.NET()。我知道你指的是维基百科的文章,但你的回答有点误导。MSXML6被认为是从Windows Vista开始的操作系统(带内)的一部分,并被后移植到Windows XP SP3()。因为它是操作系统的一部分,所以它与.NET没有任何关系。此外,您不应假定Windows自动安装了.NET()。我知道你指的是维基百科的文章,但你的回答有点误导。MSXML6被认为是从Windows Vista开始的操作系统(带内)的一部分,并被后移植到Windows XP SP3()。因为这是o部分