Quali sono le differenze tra l'uso della nuova parola chiave e la chiamata a CreateObject in Excel VBA?

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

Domanda

Quali criteri devo usare per decidere se scrivo codice VBA in questo modo:

Set xmlDocument = New MSXML2.DOMDocument

o in questo modo:

Set xmlDocument = CreateObject("MSXML2.DOMDocument")

È stato utile?

Soluzione

Finché la variabile non è digitata come oggetto

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

è uguale a

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

entrambi usano l'associazione anticipata. Mentre

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

utilizza l'associazione tardiva. Vedi MSDN qui .

Quando stai creando oggetti forniti esternamente, non ci sono differenze tra l'operatore Nuovo, dichiarando una variabile come Nuovo e usando la funzione CreateObject.

Nuovo richiede che venga fatto riferimento a una libreria dei tipi. Considerando che CreateObject utilizza il registro.

CreateObject può essere utilizzato per creare un oggetto su una macchina remota.

Altri suggerimenti

Dovresti sempre usare

Imposta xmlDocument = CreateObject (" MSXML2.DOMDocument ")

Ciò è irrilevante per il problema di associazione. Solo la dichiarazione determina l'associazione.

L'uso esclusivo di CreateObject renderà più semplice il passaggio dalla rilegatura anticipata a quella tardiva, poiché è necessario modificare solo la riga della dichiarazione.

In altre parole, se scrivi questo:

Dim xmlDocument As MSXML2.DOMDocument
Imposta xmlDocument = CreateObject (" MSXML2.DOMDocument ")

Quindi, per passare all'associazione tardiva, devi solo cambiare la prima riga (in As Object ).

Se lo scrivi in ??questo modo:

Dim xmlDocument As MSXML2.DOMDocument
Imposta xmlDocument = Nuovo MSXML2.DOMDocument

quindi quando si passa all'associazione tardiva, è necessario modificare entrambe le righe.

Per il primo devi avere un riferimento alla libreria dei tipi nella tua applicazione. In genere utilizzerà l'associazione anticipata (supponendo che dichiari la tua variabile come MSXML2.DOMDocument piuttosto che come oggetto, cosa che probabilmente farai), quindi sarà generalmente più veloce e ti fornirà supporto intellisense.

Quest'ultimo può essere usato per creare un'istanza di un oggetto usando il suo ProgId senza la libreria dei tipi. In genere si utilizza l'associazione tardiva.

Normalmente è meglio usare " Come nuovo " se si dispone di una libreria dei tipi e si beneficia dell'associazione anticipata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top