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

时间:2008-10-04 09:59:57

标签: excel vba excel-vba binding com

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

Set xmlDocument = New MSXML2.DOMDocument

或者像这样:

Set xmlDocument = CreateObject("MSXML2.DOMDocument")

3 个答案:

答案 0 :(得分:11)

只要变量未输入为对象

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函数之间没有区别。

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

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

答案 1 :(得分:5)

你应该总是使用

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

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

答案 2 :(得分:2)

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

后者可用于使用其ProgId创建对象的实例,而无需类型库。通常,您将使用后期绑定。

如果你有一个类型库,通常最好使用“As New”,并从早期绑定中受益。