2009-05-28 26 views

答えて

6

それが「On Error Resume Nextを」設定したに依存しているとしてそれを行うには少しハック方法ですが、あなたはこのような何か行うことができます:GetRefへの呼び出しがあれば、例外を生成します

On Error Resume Next 
Dim objRef1, objRef2 
Set objRef1 = GetRef("DoStuff1") 
If objRef1 Is Nothing Then 
    Call objRef1 
Else 
    MsgBox "DoStuff1 is not defined!" 
End If 

Set objRef2 = GetRef("DoStuff2") 
If objRef2 Is Nothing Then 
    MsgBox "DoStuff2 is not defined!" 
Else 
    Call objRef2 
End If 

Sub DoStuff1 
    MsgBox "DoStuff1!" 
End Sub 

をサブ関数、またはポインタを取得しようとしている関数が存在しません(DoStuff2の場合のように)。その後、参照が期待どおりに設定されているかどうかを確認できます。ここで

+0

そうしないと、関数を呼び出すしようとした後、Err.Numberにをチェックしに興味。しかし、あなたが呼んでいる関数が定義され、呼び出されるかもしれませんが、エラーの原因になるかもしれません。 – Xiaofu

+0

それは動作します。ありがとう! –

15

同じ原理で動作します私の解決策ですが、ハックネスはかなり自己完結型である:

Function FunctionExists(func_name) 
    FunctionExists = False 

    On Error Resume Next 

    Dim f : Set f = GetRef(func_name) 

    If Err.number = 0 Then 
     FunctionExists = True 
    End If 
    On Error GoTo 0 

End Function 
+2

ええ - それは私がそれでやったことです。 :-) –

+1

これを 'FunctionExists =(Err.Number = 0)'に単純化すると、 'Boolean'を設定できます。 – Lankymart

+0

@Lankymartは、同じ動作しません。どうしていいか分かりません。 –

関連する問題