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

What are the differences between using the New keyword and calling CreateObject in Excel VBA?

提问人:Matthew Murdoch 提问时间:10/4/2008 最后编辑:shruti1810Matthew Murdoch 更新时间:5/27/2015 访问量:11140

问:

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

Set xmlDocument = New MSXML2.DOMDocument

或者像这样:

Set xmlDocument = CreateObject("MSXML2.DOMDocument")

?

VBA Excel 绑定 COM

评论

0赞 Matthew Murdoch 10/4/2008
另请参阅对早期/晚期绑定问题的回答

答:

2赞 Joe 10/4/2008 #1

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

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

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

评论

0赞 spinjector 7/24/2017
Joe 提到了一个重要的 VB/VBA 功能,我想强调一下。对于经验不足的 VB/VBA 程序员来说,它的缺失可能会造成混淆:Intellisense。仅供参考 - 这是有助于在键入代码时自动完成代码的下拉列表。有一个相关功能,它根植于同一系统:对象资源管理器。仅供参考 - 在视图菜单上,在 VBA 中可通过 F2 击键访问。如果没有早期绑定(使用“New”关键字),Intellisense 和对象资源管理器都无法正常工作。
12赞 Mitch Wheat 10/4/2008 #2

只要变量没有类型化为对象

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 可用于在远程计算机上创建对象。

5赞 JimmyPena 6/21/2012 #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

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