2009-06-18 21 views
1

Excel 2003スプレッドシートに添付されているVBAによっては、インスタンス化するのに時間がかかるオブジェクトを使用する必要があるため、一度「設定」したいのは一度だけです...オブジェクトが既に参照されているかどうかはどのように知りますか?

説明を書くよりもコード!

' 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 

myObjがすでに設定されているかどうかを確認するにはどうすればよいですか?

私はIsNull(myObj)とIsEmpty(myObj)を試しました。myObjの状態にかかわらず、両方とも 'set'をスキップしました。私は

if myObj = Nil then 

または

if myObj = Empty then 

または

if myObj = Nothing then 

任意のアイデアを行うことはできませんか?

SAL

+0

CreatObjectを試しましたか? – THEn

+0

このページには、VB、VBAの空白、ヌル、何もない点の違いに関する良い情報が掲載されています。http://beta.blogs.msdn.com/ericlippert/archive/2003/09/30/53120.aspx – Lunatik

答えて

6

これは動作するはずです:

If myObj IS Nothing Then 

問題が解決しない場合はCOMのinitの呼び出しは同期しているので、そのクラスによって、具体的に実装非同期使う初期がなければならない(「IS」に注意してください)デフォルトではだから、あなたが待っているいくつかのプロパティやシンクメソッドのために、ドキュメントについてBigクラスを調べたり、開発者と話したりする必要があります。

+0

RBarryYoungは天才です。愚かな私....私はこれを把握しようと最後の時間を過ごした。私はあなたの反応を読んですぐに、私は馬鹿のように感じました... SAL

+0

Heh、それについて心配しないでください。私は主に、同じことがSQLでNULLで常に発生するため、実際には "WHERE column = NULL"がおそらく最も一般的なエラーであることを思い出しました。 – RBarryYoung

関連する問題