提问人:Matthew Murdoch 提问时间:10/4/2008 最后编辑:shruti1810Matthew Murdoch 更新时间:5/27/2015 访问量:11140
在 Excel VBA 中使用 New 关键字和调用 CreateObject 有什么区别?
What are the differences between using the New keyword and calling CreateObject in Excel VBA?
问:
我应该使用什么标准来决定我是否像这样编写VBA代码:
Set xmlDocument = New MSXML2.DOMDocument
或者像这样:
Set xmlDocument = CreateObject("MSXML2.DOMDocument")
?
答:
对于前者,您需要对应用程序中的类型库进行引用。它通常使用早期绑定(假设将变量声明为 MSXML2。DOMDocument 而不是作为 Object,你可能会这样做),因此通常会更快,并且会为您提供智能感知支持。
后者可用于使用对象的 ProgId 创建对象的实例,而无需类型库。通常,您将使用后期绑定。
通常,如果您有类型库,最好使用“As New”,并从早期绑定中受益。
评论
只要变量没有类型化为对象
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 可用于在远程计算机上创建对象。
您应该始终使用
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
然后,当您切换到后期绑定时,您必须更改两行。
评论