Каковы различия между использованием ключевого слова New и вызовом CreateObject в Excel VBA? - PullRequest
10 голосов
/ 04 октября 2008

Какие критерии мне следует использовать, чтобы решить, писать ли я код VBA следующим образом:

Set xmlDocument = New MSXML2.DOMDocument

или как это:

Set xmlDocument = CreateObject("MSXML2.DOMDocument")

Ответы [ 3 ]

11 голосов
/ 04 октября 2008

Пока переменная не введена как объект

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.

Новое требует ссылки на библиотеку типов. Принимая во внимание, что CreateObject использует реестр.

CreateObject может использоваться для создания объекта на удаленном компьютере.

5 голосов
/ 21 июня 2012

Вы всегда должны использовать

Set xmlDocument = CreateObject("MSXML2.DOMDocument")

Это не относится к обязательной проблеме. Только объявление определяет привязку.

Использование CreateObject исключительно облегчит переключение между ранним и поздним связыванием, поскольку вам нужно всего лишь изменить строку объявления.

Другими словами, если вы напишите это:

Dim xmlDocument As MSXML2.DOMDocument<br> Set xmlDocument = CreateObject("MSXML2.DOMDocument")

Затем, чтобы переключиться на позднее связывание, вам нужно только изменить первую строку (на As Object).

Если вы напишите это так:

Dim xmlDocument As MSXML2.DOMDocument<br> Set xmlDocument = New MSXML2.DOMDocument

затем при переключении на позднюю привязку необходимо изменить обе строки.

2 голосов
/ 04 октября 2008

Для первого вам нужно иметь ссылку на библиотеку типов в вашем приложении. Как правило, он будет использовать раннее связывание (при условии, что вы объявите свою переменную как MSXML2.DOMDocument, а не как Object, что вы, вероятно, будете использовать), поэтому, как правило, будет быстрее и даст вам поддержку intellisense.

Последний может использоваться для создания экземпляра объекта с использованием его ProgId без необходимости использования библиотеки типов. Обычно вы будете использовать позднюю привязку.

Обычно лучше использовать «как новый», если у вас есть библиотека типов, и вы получаете преимущество раннего связывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...