在Excel VBA中使用New关键字和调用CreateObject有什么区别?

我应该使用什么标准来决定我是否像这样编写VBA代码:

Set xmlDocument = New MSXML2.DOMDocument 

或者像这样:

 Set xmlDocument = CreateObject("MSXML2.DOMDocument") 

只要variables不是作为对象input的

 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。

在创build外部提供的对象时,New运算符,声明variablesAs New和使用CreateObject函数之间没有区别。

新build要求引用types库。 而CreateObject使用registry。

CreateObject可以用来在远程机器上创build一个对象。

你应该总是使用

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

那么当你切换到后期绑定,你必须改变这两条线。

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

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

通常情况下,如果你有一个types库,可以使用“As New”,并从早期的绑定中受益。

Interesting Posts