2011/11/15

GetObjectが決め打ちな件

VB  VBA  VBScript  Excel 



VB、VBAでExcel以外のインスタンスを生成するときは、CreateObject を使う。

遅延バインディングのときね。


ただ、いちいちNEWするのはいただけない…。


VBScript でExcelを扱おうものなら、いくつもExcelが起動されるし…。


また、最近はタブで子オブジェクト持ってるアプリケーションが多いので、やはり「アプリケーション:オブジェクト = 1:N」でインスタンス生成したい…。



そんなときは、GetObject を使って生成済みのインスタンスを取ってくるとよい。


ただし、このGetObject にはキツめな制約があって…。

指定したインスタンスがなかった場合、エラーとなってしまう。


なので、「あればそれを使う、なければ新しく作る」というありふれたやり方をするときに、わざわざエラートラップをしないといけない。


こんな感じ


GetObjectでエラーハンドリングする - サンプル -

Dim obj

On Error Resume Next

Set obj = GetObject(, "使いたいやつ")

If Err.Number Then
    Set obj = CreateObject("使いたいやつ")
End If

On Error GoTo 0

これ、Is Nothing で判定できたらいいのになぁ~


それかもしかして、インスタンスがあるかどうか判定する関数があったりするのだろうか…?



このエントリーをはてなブックマークに追加