2008-10-04 99 views

回答

10

只要变量没有类型为对象

Dim xmlDocument as MSXML2.DOMDocument 
Set xmlDocument = CreateObject("MSXML2.DOMDocument") 

相同

Dim xmlDocument as MSXML2.DOMDocument 
Set xmlDocument = New MSXML2.DOMDocument 

都使用早期绑定。而

Dim xmlDocument as Object 
Set xmlDocument = CreateObject("MSXML2.DOMDocument") 

使用后期绑定。请参阅MSDN here

在创建外部提供的对象时,New运算符,声明变量As New和使用CreateObject函数没有区别。

新要求引用类型库。而CreateObject使用注册表。

CreateObject可用于在远程机器上创建对象。

2

对于前者,您需要在应用程序中引用类型库。它通常会使用早期绑定(假设你将变量声明为MSXML2.DOMDocument而不是Object,你可能会这么做),所以通常会更快,并且会给你提供intellisense支持。

后者可用于使用其ProgId创建对象的实例,而不需要类型库。通常你会使用后期绑定。

如果您有类型库,并且从早期绑定中受益,通常最好使用“新建”。

+0

乔提到一个重要的VB/VBA功能的功能,我想强调。对于缺乏经验的VB/VBA程序员来说,这种缺席可能会造成混淆:Intellisense。仅供参考 - 这是帮助自动完成代码输入的下拉列表。有一个相关的功能,它的根源在同一个系统中:对象资源管理器。 FYI-在视图菜单上,在VBA中可通过F2按键进行访问。如果没有早期绑定(使用'New'关键字),则Intellisense和Object Explorer都不会起作用。 – spinjector 2017-07-24 13:26:39

3

你应该总是使用

Set xmlDocument = CreateObject("MSXML2.DOMDocument")

这是风马牛不相及的结合问题。只有声明确定绑定。

仅使用CreateObject可以更容易地在早期和晚期绑定之间切换,因为您只需更改声明行。

换句话说,如果你这样写:

Dim xmlDocument As MSXML2.DOMDocument
Set xmlDocument = CreateObject("MSXML2.DOMDocument")

然后切换到后期绑定,你只需要改变第一线(至As Object)。

如果你写这样的:

Dim xmlDocument As MSXML2.DOMDocument
Set xmlDocument = New MSXML2.DOMDocument

然后当你切换到后期绑定,你必须改变都行。