В чем разница между использованием ключевого слова New и вызовом CreateObject в Excel VBA?

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

Вопрос

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

Set xmlDocument = New MSXML2.DOMDocument

или вот так:

Set xmlDocument = CreateObject("MSXML2.DOMDocument")

?

Это было полезно?

Решение

До тех пор, пока переменная не будет введена как object

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

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

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

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

Обычно лучше использовать "Как новый", если у вас есть библиотека типов и вы получаете выгоду от ранней привязки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top