2009-05-28 7 views

Répondre

6

C'est une façon légèrement hacky de le faire car il repose sur avoir mis « On Error Resume Next », mais vous pouvez faire quelque chose comme ceci:

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 

L'appel à getRef va générer une exception si la Sous-fonction ou la fonction que vous essayez d'obtenir un pointeur n'existe pas (comme c'est le cas ici avec DoStuff2). Vous pouvez ensuite vérifier si la référence a été définie comme prévu.

+0

Sinon, vous êtes dans le contrôle Err.Number après avoir essayé d'appeler la fonction. Mais alors la fonction que vous appelez peut être définie, être appelée, mais être la source de l'erreur, ce qui, je suppose, n'est pas ce que vous voulez. – Xiaofu

+0

Cela fonctionne. Merci! –

15

Voici ma solution qui fonctionne sur le même principe, mais le aki-ness est assez autonome:

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

Ouais - c'est ce que j'ai fini par faire avec ça. :-) –

+1

Vous pouvez simplifier cela à 'FunctionExists = (Err.Number = 0)' pour définir le 'Boolean'. – Lankymart

+0

@Lankymart, ne fonctionne pas de la même manière. Je ne sais pas pourquoi pas. –

Questions connexes