次のような VBA コードを作成するかどうかを判断するには、どの基準を使用する必要がありますか。
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 を参照してください。
外部から提供されたオブジェクトを作成する場合、変数を 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
次に、遅延バインディングに切り替えるときは、両方の行を変更する必要があります。
前者の場合、アプリケーションでタイプ ライブラリへの参照が必要です。通常は事前バインディングを使用するため (変数を Object としてではなく MSXML2.DOMDocument として宣言すると仮定すると、おそらくそうなるでしょう)、一般的に高速になり、IntelliSense サポートが提供されます。
後者は、タイプ ライブラリを必要とせずに、その ProgId を使用してオブジェクトのインスタンスを作成するために使用できます。通常、遅延バインディングを使用します。
通常、タイプ ライブラリがあり、事前バインディングのメリットがある場合は、"As New" を使用することをお勧めします。