11

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

Set xmlDocument = New MSXML2.DOMDocument

或像这样:

Set xmlDocument = CreateObject("MSXML2.DOMDocument")

?

4

3 回答 3

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 。

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

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

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

于 2008-10-04T10:22:50.880 回答
5

您应该始终使用

Set xmlDocument = CreateObject("MSXML2.DOMDocument")

这与绑定问题无关。只有声明决定了绑定。

使用CreateObject独占将更容易在早期绑定和后期绑定之间切换,因为您只需更改声明行。

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

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

然后,要切换到后期绑定,您只需要更改第一行 (to As Object)。

如果你这样写:

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

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

于 2012-06-21T00:52:23.243 回答
2

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

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

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

于 2008-10-04T10:12:46.920 回答