2009-06-18 9 views
1

Dans certains VBA attachés à une feuille de calcul Excel 2003, je dois utiliser certains objets qui mettent du temps à instancier - donc je veux seulement faire la chose 'set' une fois ...Comment savoir si un objet est déjà référencé?

code que d'écrire une explication!

' Declare the expensive object as global to this sheet 
Dim myObj As SomeBigExpensiveObject 

Private Sub CommandButtonDoIt_Click() 

    ' Make sure we've got a ref to the object 
    If IsEmpty(myObj) Then ' this doesn't work! 
     Set myObj = New SomeBigExpensiveObject 
    End If 

    ' ... etc 

End Sub 

Comment puis-je vérifier si myObj a déjà été défini?

J'ai essayé IsNull (myObj) et IsEmpty (myObj) - les deux ignorent le 'set', quel que soit l'état de myObj. Je ne peux pas faire

if myObj = Nil then 

ou

if myObj = Empty then 

ou

if myObj = Nothing then 

Toutes les idées?

SAL

+0

Avez-vous essayé CreatObject? – THEn

+0

Cette page a de bonnes informations sur les différences entre vide, nul et rien dans VB/VBA http://beta.blogs.msdn.com/ericlippert/archive/2003/09/30/53120.aspx – Lunatik

Répondre

6

Cela devrait fonctionner:

If myObj IS Nothing Then 

(notez le « IS ») Si cela ne fonctionne pas, alors il doit y avoir initialisation asynchrone mis en œuvre spécifiquement par cette classe parce que les appels de COM sont synchrones par défaut. Donc, vous devez vérifier le document pour, ou parler au développeur à propos de, la classe Big pour une propriété ou une méthode de synchronisation pour vous permettre d'attendre.

+0

RBarryYoung est un génie. Stupide moi ... J'ai passé la dernière heure à essayer de comprendre cela. Dès que j'ai lu votre réponse je me suis senti comme un idiot ... SAL

+0

Heh, ne vous inquiétez pas à ce sujet. Je me suis souvenu principalement parce que la même chose arrive tout le temps en SQL avec NULL, en fait "WHERE column = NULL" est probablement l'erreur la plus commune. – RBarryYoung

Questions connexes