我应该用什么样的标准来决定是否我编写VBA代码:在Excel VBA中使用New关键字和调用CreateObject有什么区别?
Set xmlDocument = New MSXML2.DOMDocument
或像这样:
Set xmlDocument = CreateObject("MSXML2.DOMDocument")
?
我应该用什么样的标准来决定是否我编写VBA代码:在Excel VBA中使用New关键字和调用CreateObject有什么区别?
Set xmlDocument = New MSXML2.DOMDocument
或像这样:
Set xmlDocument = CreateObject("MSXML2.DOMDocument")
?
只要变量没有类型为对象
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函数没有区别。
新要求引用类型库。而CreateObject使用注册表。
CreateObject可用于在远程机器上创建对象。
对于前者,您需要在应用程序中引用类型库。它通常会使用早期绑定(假设你将变量声明为MSXML2.DOMDocument而不是Object,你可能会这么做),所以通常会更快,并且会给你提供intellisense支持。
后者可用于使用其ProgId创建对象的实例,而不需要类型库。通常你会使用后期绑定。
如果您有类型库,并且从早期绑定中受益,通常最好使用“新建”。
乔提到一个重要的VB/VBA功能的功能,我想强调。对于缺乏经验的VB/VBA程序员来说,这种缺席可能会造成混淆:Intellisense。仅供参考 - 这是帮助自动完成代码输入的下拉列表。有一个相关的功能,它的根源在同一个系统中:对象资源管理器。 FYI-在视图菜单上,在VBA中可通过F2按键进行访问。如果没有早期绑定(使用'New'关键字),则Intellisense和Object Explorer都不会起作用。 – spinjector 2017-07-24 13:26:39
你应该总是使用
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
然后当你切换到后期绑定,你必须改变都行。
另请参见[答案早/晚绑定问题(http://stackoverflow.com/questions/10580/what-are-early-and-late-binding#10581)。 – 2008-10-04 10:13:06