VBA controlla se l'oggetto è impostato


92

Ho una variabile globale che è un'istanza della mia classe personalizzata.

Come posso verificare se l'oggetto è impostato o se devo inizializzarlo?

Risposte:


139
If obj Is Nothing Then
    ' need to initialize obj: '
    Set obj = ...
Else
    ' obj already set / initialized. '
End If

Oppure, se preferisci il contrario:

If Not obj Is Nothing Then
    ' obj already set / initialized. '
Else
    ' need to initialize obj: '
    Set obj = ...
End If

2
Sapevo che doveva essere semplice quando l'ho cercato su Google e non ho trovato nulla! Grazie per l'aiuto!
Icode4food

3
Nota che controllare obj Is NothingNON è la stessa cosa che controllare IsNothing(obj)! Grazie per la sintassi corretta per controllare questo ... non so perché IsNothing()si comporta in modo diverso ...
Matt Browne

1
Trovo Not (obj Is Nothing)più facile da capire di Not obj Is Nothing. Il mio cervello non sa cosa sia un "Non oggetto"!
Martin F

Puoi anche scrivere: If obj IsNot Nothing che trovo molto più chiaro del resto. Sembra anche simile a C # (ojb! = Null)
Alexandre

4

Il modo (non) sicuro per farlo - se sei d'accordo con non usare l'opzione esplicita - è ...

Not TypeName(myObj) = "Empty"

Questo gestisce anche il caso se l'oggetto non è stato dichiarato. Questo è utile se vuoi semplicemente commentare una dichiarazione per disattivare un comportamento ...

Dim myObj as Object
Not TypeName(myObj) = "Empty"  '/ true, the object exists - TypeName is Object

'Dim myObj as Object
Not TypeName(myObj) = "Empty"  '/ false, the object has not been declared

Questo funziona perché VBA creerà automaticamente un'istanza di una variabile non dichiarata come un tipo di variante vuota. Elimina la necessità di un booleano ausiliario per gestire il comportamento.


4
Nessuno dovrebbe mai avere un codice VBA senza Option Explicit. Non guadagna nulla tranne i problemi. Per "cambiare" il comportamento, utilizzare la compilazione condizionale.
Andre

@andre, sì, giusto punto. Mi sento bene senza di essa perché uso la notazione ungherese per l'ambito, ma cerco di evitare vba in questi giorni se posso. La maggior parte di ciò che vedo riguarda dichiarazioni esplicite, sicurezza dei nomi ed evitare le varianti temute. Quali sono le tue ragioni principali?
Cool Blue

In effetti ottengo "Niente" come risultato del nome del tipo e non "Vuoto"
Patrick Lepelletier
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.