GetObjectが決め打ちな件
投稿日: 2011/11/15 更新日: 2017/10/02
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 で判定できたらいいのになぁ~
それかもしかして、インスタンスがあるかどうか判定する関数があったりするのだろうか…?