Quelles sont les différences entre l'utilisation du mot clé New et l'appel de CreateObject dans Excel VBA?

StackOverflow https://stackoverflow.com/questions/170070

Question

Quels critères dois-je utiliser pour décider si j'écris du code VBA comme ceci:

Set xmlDocument = New MSXML2.DOMDocument

ou comme ceci:

Set xmlDocument = CreateObject("MSXML2.DOMDocument")

?

Était-ce utile?

La solution

Tant que la variable n'est pas typée en tant qu'objet

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

est identique à

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

les deux utilisent la liaison anticipée. Considérant que

Dim xmlDocument as Object
Set xmlDocument = CreateObject("MSXML2.DOMDocument")

utilise la liaison tardive. Voir MSDN ici .

Lorsque vous créez des objets fournis de manière externe, il n'y a aucune différence entre l'opérateur New, déclarant une variable comme étant nouvelle et utilisant la fonction CreateObject.

Nouveau nécessite qu'une bibliothèque de types soit référencée. Considérant que CreateObject utilise le registre.

CreateObject peut être utilisé pour créer un objet sur une machine distante.

Autres conseils

Vous devriez toujours utiliser

Définissez xmlDocument = CreateObject ("MSXML2.DOMDocument")

Cela n’est pas pertinent pour le problème contraignant. Seule la déclaration détermine la liaison.

L’utilisation exclusive de CreateObject facilitera le basculement entre les liaisons précoces et les liaisons tardives, dans la mesure où il vous suffit de modifier la ligne de déclaration.

En d'autres termes, si vous écrivez ceci:

Dim xmlDocument en tant que MSXML2.DOMDocument
Définir xmlDocument = CreateObject ("MSXML2.DOMDocument")

Ensuite, pour passer à la liaison tardive, il vous suffit de modifier la première ligne (en en tant qu'objet ).

Si vous l'écrivez comme ceci:

Dim xmlDocument en tant que MSXML2.DOMDocument
Set xmlDocument = New MSXML2.DOMDocument

puis, lorsque vous passez en liaison tardive, vous devez changer les deux lignes.

Dans le premier cas, vous devez avoir une référence à la bibliothèque de types dans votre application. Il utilisera généralement une liaison anticipée (en supposant que vous déclariez votre variable sous la forme MSXML2.DOMDocument plutôt que sous la forme d'un objet, comme vous le ferez probablement), il sera donc généralement plus rapide et vous apportera un support intellisense.

Ce dernier peut être utilisé pour créer une instance d’un objet en utilisant son ProgId sans avoir besoin de la bibliothèque de types. En règle générale, vous utiliserez une liaison tardive.

Normalement, il vaut mieux utiliser " Comme nouveau " si vous avez une bibliothèque de types et bénéficiez d’une liaison anticipée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top